public void Dispose() { if (mNewSims != null) { foreach (SimDescription member in mNewSims) { SafeStore element = mSafeStore[member]; element.Dispose(); } } if (mOldHouse != null) { foreach (Sim member in Households.AllSims(mOldHouse)) { if (!mDreamStore.ContainsKey(member)) { continue; } mDreamStore[member].Restore(member); } } }
protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { secureStore = null; disposed = true; } } }
void InternalInitialize(string store = "") { lock (this) { if (!isInitialised) { var storeName = String.IsNullOrWhiteSpace(store) ? DefaultStoreName : store; secureStore = new SafeStore(ApplicationCtx.Context, ApplicationCtx.StorePassword, storeName); isInitialised = true; } } }
public static void AdjustSelectable(SimDescription sim, bool active, bool dreamCatcher) { try { SafeStore.Flag flags = SafeStore.Flag.StoreOpportunities; if (active) { flags |= SafeStore.Flag.Selectable; } else { flags |= SafeStore.Flag.Unselectable; } using (SafeStore store = new SafeStore(sim, flags)) { if (active) { if (!Household.RoommateManager.IsNPCRoommate(sim)) { sim.CreatedSim.OnBecameSelectable(); } } else { DreamStore dreamStore = null; if (dreamCatcher) { dreamStore = new DreamStore(sim.CreatedSim, false, true); } try { sim.CreatedSim.OnBecameUnselectable(); } finally { if (dreamStore != null) { dreamStore.Restore(sim.CreatedSim); } } } } } catch (Exception e) { Common.Exception(sim, e); } }
protected override bool Run(SimDescription me, bool singleSelection) { if (!ApplyAll) { string msg = "Selectability:UnPrompt"; if (me.IsNeverSelectable) { msg = "Selectability:Prompt"; } if (!AcceptCancelDialog.Show(Common.Localize(msg, me.IsFemale, new object[] { me }))) { return(false); } mSelectable = !me.IsNeverSelectable; } me.IsNeverSelectable = mSelectable; if ((!me.IsNeverSelectable) && (me.CreatedSim != null) && (me.Household == Household.ActiveHousehold)) { using (SafeStore store = new SafeStore(me, SafeStore.Flag.None)) { if (Household.RoommateManager.IsNPCRoommate(me)) { Household.RoommateManager.MakeRoommateSelectable(me); } else { me.CreatedSim.OnBecameSelectable(); } } } return(true); }
public static bool PerformImmediate(Sim sim, bool allowHouseholdSwitch, bool catchDreams, bool forceFull) { bool success = false; Common.StringBuilder msg = new Common.StringBuilder("DreamCatcher: " + sim.FullName + Common.NewLine); try { msg += "A"; if ((!forceFull) && (PlumbBob.sCurrentNonNullHousehold != null) && (PlumbBob.sCurrentNonNullHousehold == sim.Household)) { msg += "B"; if (PlumbBob.SelectedActor == sim) { return(true); } msg += "C"; using (SafeStore store = new SafeStore(sim.SimDescription, SafeStore.Flag.Selectable | SafeStore.Flag.Unselectable | SafeStore.Flag.StoreOpportunities)) { if (PlumbBob.SelectActor(sim)) { return(true); } msg += "C2"; return(false); } } msg += "D"; if (!allowHouseholdSwitch) { return(false); } msg += "E"; if (GameUtils.IsInstalled(ProductVersion.EP5)) { PetAdoption.RemoveNeighborAdoptionOnHousehold(sim.Household.LotHome); } if (sim.Posture == null) { sim.Posture = null; // Resets to Standing } using (HouseholdStore store = new HouseholdStore(sim.Household, catchDreams)) { if (sim.Household.LotHome != null) { PrepareToBecomeActiveHousehold(sim.Household); } foreach (SimDescription member in sim.Household.AllSimDescriptions) { if (member.GetMiniSimForProtection() == null) { MiniSimDescription miniSim; if (MiniSimDescription.sMiniSims.TryGetValue(member.SimDescriptionId, out miniSim)) { miniSim.mHomeWorld = WorldName.UserCreated; } } } Sim previousSim = Sim.ActiveActor; try { success = PlumbBob.ForceSelectActor(sim); } catch (Exception exception) { Common.Exception(sim, exception); if (previousSim != null) { PlumbBob.ForceSelectActor(previousSim); } } } msg += "F " + success; if ((MapTagManager.ActiveMapTagManager != null) && (sim.LotHome != null)) { MapTagManager.ActiveMapTagManager.Reset(); } } catch (Exception e) { Common.Exception(sim, e); } finally { //Common.DebugNotify(msg); } return(success); }
public CreationProtection(SimDescription sim, Sim createdSim, bool performLoadFixup, bool performSelectable, bool performUnselectable) { try { mSim = sim; Corrections.RemoveFreeStuffAlarm(sim); // Stops an issue in "GrantFutureObjects" regarding the use of sIsChangingWorlds=true mWasFutureSim = sim.TraitManager.HasElement(TraitNames.FutureSim); sim.TraitManager.RemoveElement(TraitNames.FutureSim); if (SimTypes.IsSelectable(mSim)) { Corrections.CleanupBrokenSkills(mSim, null); } if (OpportunityTrackerModel.gSingleton != null) { mOpportunitiesChanged = OpportunityTrackerModel.gSingleton.OpportunitiesChanged; OpportunityTrackerModel.gSingleton.OpportunitiesChanged = null; } if (mSim.TraitChipManager != null) { mChips = mSim.TraitChipManager.GetAllTraitChips(); mSim.TraitChipManager.mTraitChipSlots = new TraitChip[7]; mSim.TraitChipManager.mValues.Clear(); } if (createdSim != null) { if (createdSim.BuffManager != null) { mBuffs = new List <BuffInstance>(); foreach (BuffInstance buff in createdSim.BuffManager.List) { mBuffs.Add(buff); } } if (createdSim.Motives != null) { Motive motive = createdSim.Motives.GetMotive(CommodityKind.AcademicPerformance); if (motive != null) { mAcademicPerformance = motive.Value; } motive = createdSim.Motives.GetMotive(CommodityKind.UniversityStudy); if (motive != null) { mUniversityStudy = motive.Value; } } if (createdSim.Inventory != null) { mInventory = createdSim.Inventory.DestroyInventoryAndStoreInList(); } mDreamStore = new DreamCatcher.DreamStore(createdSim, false, false); mReservedVehicle = createdSim.GetReservedVehicle(); createdSim.ReservedVehicle = null; } SafeStore.Flag flags = SafeStore.Flag.None; if (performSelectable) { flags |= SafeStore.Flag.Selectable; } if (performLoadFixup) { flags |= SafeStore.Flag.LoadFixup; } if (performUnselectable) { flags |= SafeStore.Flag.Unselectable; } mSafeStore = new SafeStore(mSim, flags); // Stops the startup errors when the imaginary friend is broken mDoll = GetDollForSim(sim); if (mDoll != null) { mDoll.mOwner = null; } mGenealogy = sim.mGenealogy; mRelations = Relationships.StoreRelations(sim, null); // Stops all event processing during the creation process EventTracker.sCurrentlyUpdatingDreamsAndPromisesManagers = true; // Stops the interface from updating during OnCreation if (sim.Household != null) { mChangedCallback = sim.Household.HouseholdSimsChanged; mChangedHousehold = sim.Household; sim.Household.HouseholdSimsChanged = null; } sChangingWorldsSuppression.Push(); // Stops SetGeneologyRelationshipBits() sim.mGenealogy = new Genealogy(sim); } catch (Exception e) { Common.Exception(sim, e); } }
// From SimDescription.Instantiate private static Sim Perform(SimDescription ths, Vector3 position, ResourceKey outfitKey, bool forceAlwaysAnimate, OnReset reset) { Household.HouseholdSimsChangedCallback changedCallback = null; Household changedHousehold = null; bool isChangingWorlds = GameStates.sIsChangingWorlds; bool isLifeEventManagerEnabled = LifeEventManager.sIsLifeEventManagerEnabled; Corrections.RemoveFreeStuffAlarm(ths); using (SafeStore store = new SafeStore(ths, SafeStore.Flag.LoadFixup | SafeStore.Flag.Selectable | SafeStore.Flag.Unselectable)) { try { // Stops the memories system from interfering LifeEventManager.sIsLifeEventManagerEnabled = false; // Stops UpdateInformationKnownAboutRelationships() GameStates.sIsChangingWorlds = true; if (ths.Household != null) { changedCallback = ths.Household.HouseholdSimsChanged; changedHousehold = ths.Household; ths.Household.HouseholdSimsChanged = null; } if (ths.CreatedSim != null) { AttemptToPutInSafeLocation(ths.CreatedSim, false); if (reset != null) { ths.CreatedSim.SetObjectToReset(); reset(ths.CreatedSim, false); } return(ths.CreatedSim); } if (ths.AgingState != null) { bool flag = outfitKey == ths.mDefaultOutfitKey; ths.AgingState.SimBuilderTaskDeferred = false; ths.AgingState.PreInstantiateSim(ref outfitKey); if (flag) { ths.mDefaultOutfitKey = outfitKey; } } int capacity = forceAlwaysAnimate ? 0x4 : 0x2; Hashtable overrides = new Hashtable(capacity); overrides["simOutfitKey"] = outfitKey; overrides["rigKey"] = CASUtils.GetRigKeyForAgeGenderSpecies((ths.Age | ths.Gender) | ths.Species); if (forceAlwaysAnimate) { overrides["enableSimPoseProcessing"] = 0x1; overrides["animationRunsInRealtime"] = 0x1; } string instanceName = "GameSim"; ProductVersion version = ProductVersion.BaseGame; if (ths.Species != CASAgeGenderFlags.Human) { instanceName = "Game" + ths.Species; version = ProductVersion.EP5; } SimInitParameters initData = new SimInitParameters(ths); Sim target = GlobalFunctions.CreateObjectWithOverrides(instanceName, version, position, 0x0, Vector3.UnitZ, overrides, initData) as Sim; if (target != null) { if (target.SimRoutingComponent == null) { // Performed to ensure that a useful error message is produced when the Sim construction fails target.OnCreation(); target.OnStartup(); } target.SimRoutingComponent.EnableDynamicFootprint(); target.SimRoutingComponent.ForceUpdateDynamicFootprint(); ths.PushAgingEnabledToAgingManager(); /* This code is idiotic * if ((ths.Teen) && (target.SkillManager != null)) * { * Skill skill = target.SkillManager.AddElement(SkillNames.Homework); * while (skill.SkillLevel < SimDescription.kTeenHomeworkSkillStartLevel) * { * skill.ForceGainPointsForLevelUp(); * } * } */ // Custom OccultTypeHelper.SetupForInstantiatedSim(ths.OccultManager); if (ths.IsAlien) { World.ObjectSetVisualOverride(target.ObjectId, eVisualOverrideTypes.Alien, null); } AttemptToPutInSafeLocation(target, false); EventTracker.SendEvent(EventTypeId.kSimInstantiated, null, target); /* * MiniSimDescription description = MiniSimDescription.Find(ths.SimDescriptionId); * if ((description == null) || (!GameStates.IsTravelling && (ths.mHomeWorld == GameUtils.GetCurrentWorld()))) * { * return target; * } * description.UpdateInWorldRelationships(ths); */ if (ths.HealthManager != null) { ths.HealthManager.Startup(); } if (((ths.SkinToneKey.InstanceId == 15475186560318337848L) && !ths.OccultManager.HasOccultType(OccultTypes.Vampire)) && (!ths.OccultManager.HasOccultType(OccultTypes.Werewolf) && !ths.IsGhost)) { World.ObjectSetVisualOverride(ths.CreatedSim.ObjectId, eVisualOverrideTypes.Genie, null); } if (ths.Household.IsAlienHousehold) { (Sims3.UI.Responder.Instance.HudModel as HudModel).OnSimCurrentWorldChanged(true, ths); } if (Household.RoommateManager.IsNPCRoommate(ths.SimDescriptionId)) { Household.RoommateManager.AddRoommateInteractions(target); } } return(target); } finally { LifeEventManager.sIsLifeEventManagerEnabled = isLifeEventManagerEnabled; GameStates.sIsChangingWorlds = isChangingWorlds; if ((changedHousehold != null) && (changedCallback != null)) { changedHousehold.HouseholdSimsChanged = changedCallback; if (changedHousehold.HouseholdSimsChanged != null) { changedHousehold.HouseholdSimsChanged(Sims3.Gameplay.CAS.HouseholdEvent.kSimAdded, ths.CreatedSim, null); } } } } }