public static void RegenerateDescendants() { if (!GameUtils.IsFutureWorld() || Traveler.Settings.mDisableDescendants) { return; } try { OccultProcessed.Clear(); foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo) { if (info.HasAncestorFromHousehold(Household.ActiveHousehold) && info.DescendantHousehold != null) { Annihilation.Cleanse(info.DescendantHousehold); } } PostFutureWorldLoadProcess(GetInstance()); } catch (Exception e) { Common.Exception("RegenerateDescendants", e); } }
protected override bool Run(MiniSimDescription me, bool singleSelection) { if (!Prompt(me)) { return(false); } Annihilation.Cleanse(me); return(true); }
public static void WipeDescendants() { if (FutureDescendantService.sPersistableData == null) { return; } if (Household.ActiveHousehold == null) { return; } foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo) { if (info.HasAncestorFromHousehold(Household.ActiveHousehold)) { FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo.Add(info); if (info.DescendantHousehold != null && !GameUtils.IsFutureWorld()) { foreach (ulong id in info.mHouseholdMembers) { MiniSimDescription mini = MiniSims.Find(id); if (mini != null) { foreach (SimDescription desc in Household.ActiveHousehold.AllSimDescriptions) { mini.RemoveMiniRelatioship(desc.SimDescriptionId); } } } } if (info.DescendantHousehold != null && GameUtils.IsFutureWorld()) { Annihilation.Cleanse(info.DescendantHousehold); } } } foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo) { FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo.Remove(info); } if (GameUtils.IsFutureWorld()) { // will axe map tags GetInstance().RemoveInactiveDescendantHouseholds(); } }
public override void OnDelayedWorldLoadFinished() { Overwatch.Log("CleanupFakeMetaAutonomy"); if (FakeMetaAutonomy.mToDestroy != null) { foreach (SimDescription sim in new List <SimDescription>(FakeMetaAutonomy.mToDestroy)) { if (Annihilation.Cleanse(sim)) { Overwatch.Log("Destroyed: " + sim.FullName); FakeMetaAutonomy.mToDestroy.Remove(sim); } } } if ((FakeMetaAutonomy.Instance != null) && (FakeMetaAutonomy.Instance.mPool != null)) { int index = 0; while (index < FakeMetaAutonomy.Instance.mPool.Count) { SimDescription sim = FakeMetaAutonomy.Instance.mPool[index]; bool keep = true; if (sim == null) { keep = false; } else if (sim.Genealogy == null) { keep = false; } if (keep) { index++; } else { Overwatch.Log("Removed: " + sim.FullName); FakeMetaAutonomy.Instance.mPool.RemoveAt(index); } } } }
protected override void PrivatePerformAction(bool prompt) { try { Overwatch.Log("Kill All Homeless"); if ((!prompt) || (AcceptCancelDialog.Show(Common.Localize("KillAllHomeless:Prompt")))) { List <Household> list = new List <Household>(); int iSimCount = 0; foreach (Household household in Household.sHouseholdList) { if (household.IsSpecialHousehold) { continue; } if (household.InWorld) { continue; } if (Households.IsPassport(household)) { continue; } if (Households.IsRole(household)) { continue; } if (Households.IsLunarCycleZombie(household)) { continue; } if (Households.IsActiveDaycare(household)) { continue; } iSimCount += Households.NumSims(household); list.Add(household); } foreach (Household household in list) { Annihilation.Cleanse(household); } if (iSimCount > 0) { Overwatch.AlarmNotify(Common.Localize("KillAllHomeless:Success", false, new object[] { iSimCount })); } } } catch (Exception exception) { Common.Exception(Name, exception); } }
protected override void OnPerform() { int roomId = 0; Lot lot = null; if (mTarget.CreatedSim != null) { Vector3 location = mTarget.CreatedSim.PositionOnFloor; lot = mTarget.CreatedSim.LotCurrent; roomId = mTarget.CreatedSim.RoomId; List <GnomeData> gnomes = new List <GnomeData>(); if (mTarget.TraitManager.HasElement(TraitNames.CultureChina)) { gnomes.Add(new GnomeData(0x000000000098977D, ProductVersion.EP1)); } else if ((mTarget.TraitManager.HasElement(TraitNames.CultureEgypt)) || (mTarget.IsMummy)) { gnomes.Add(new GnomeData(0x000000000098977C, ProductVersion.EP1)); } else if (mTarget.TraitManager.HasElement(TraitNames.CultureFrance)) { gnomes.Add(new GnomeData(0x000000000098977E, ProductVersion.EP1)); } else if (mTarget.IsVampire) { gnomes.Add(new GnomeData(0x000000000098A1C2, ProductVersion.EP3)); } else if (mTarget.IsFrankenstein) { gnomes.Add(new GnomeData(0x0000000000989CD9, ProductVersion.EP2)); } else if ((mTarget.IsCelebrity) || (mTarget.AssignedRole is RolePaparazzi)) { gnomes.Add(new GnomeData(0x000000000098A1C4, ProductVersion.EP3)); } else if (mTarget.Occupation is MagicianCareer) { gnomes.Add(new GnomeData(0x000000000098D215, ProductVersion.EP6)); // Magician } else if (mTarget.Occupation is SingerCareer) { gnomes.Add(new GnomeData(0x000000000098D214, ProductVersion.EP6)); // Singer } else if (mTarget.IsCat) { gnomes.Add(new GnomeData(0x000000000098AAD6, ProductVersion.EP5)); // Pet Cat } else if (mTarget.IsADogSpecies) { gnomes.Add(new GnomeData(0x000000000098AAD5, ProductVersion.EP5)); // Pet Dog } else if (mTarget.IsHorse) { gnomes.Add(new GnomeData(0x000000000098AAD4, ProductVersion.EP5)); // Pet Horse } else { gnomes.Add(new GnomeData(0x000000000000058B, ProductVersion.BaseGame)); // Normal if (GameUtils.IsInstalled(ProductVersion.EP1)) { gnomes.Add(new GnomeData(0x000000000098977D, ProductVersion.EP1)); // China gnomes.Add(new GnomeData(0x000000000098977C, ProductVersion.EP1)); // Egypt gnomes.Add(new GnomeData(0x000000000098977E, ProductVersion.EP1)); // France } if (GameUtils.IsInstalled(ProductVersion.EP2)) { gnomes.Add(new GnomeData(0x0000000000989EEC, ProductVersion.EP2)); // Caveman gnomes.Add(new GnomeData(0x0000000000989CD9, ProductVersion.EP2)); // Inventor gnomes.Add(new GnomeData(0x0000000000989EDF, ProductVersion.EP2)); // Laundry gnomes.Add(new GnomeData(0x0000000000989CF2, ProductVersion.EP2)); // Sculptor } if (GameUtils.IsInstalled(ProductVersion.EP3)) { gnomes.Add(new GnomeData(0x000000000098A1C4, ProductVersion.EP3)); // Celebrity gnomes.Add(new GnomeData(0x000000000098A1C2, ProductVersion.EP3)); // Vampire } if (GameUtils.IsInstalled(ProductVersion.EP5)) { gnomes.Add(new GnomeData(0x000000000098AEB1, ProductVersion.EP5)); // Freezer Bunny gnomes.Add(new GnomeData(0x000000000098AAD6, ProductVersion.EP5)); // Pet Cat gnomes.Add(new GnomeData(0x000000000098AAD5, ProductVersion.EP5)); // Pet Dog gnomes.Add(new GnomeData(0x000000000098AAD4, ProductVersion.EP5)); // Pet Horse } if (GameUtils.IsInstalled(ProductVersion.EP6)) { gnomes.Add(new GnomeData(0x000000000098D215, ProductVersion.EP6)); // Magician gnomes.Add(new GnomeData(0x000000000098D214, ProductVersion.EP6)); // Singer } } if (gnomes.Count > 0) { GnomeData preferred = RandomUtil.GetRandomObjectFromList(gnomes); MagicGnomeBase gnome = ObjectCreation.CreateObject(preferred.mInstance, preferred.mVersion, null) as MagicGnomeBase; if (gnome != null) { NameComponent name = gnome.GetComponent <NameComponent>(); if (name != null) { name.mName = mTarget.FullName; } gnome.SetPosition(location); gnome.AddToWorld(); } } } Genealogy genealogy = mTarget.CASGenealogy as Genealogy; if (genealogy != null) { genealogy.ClearAllGenealogyInformation(); } foreach (SimDescription other in SimDescription.GetSimDescriptionsInWorld()) { MiniSimDescription miniOther = MiniSimDescription.Find(other.SimDescriptionId); if (miniOther == null) { continue; } miniOther.RemoveMiniRelatioship(mTarget.SimDescriptionId); } Annihilation.RemoveMSD(mTarget.SimDescriptionId); Relationship.RemoveSimDescriptionRelationships(mTarget); Urnstone urnstone = Urnstone.FindGhostsGrave(mTarget); if (urnstone != null) { if ((urnstone.InInventory) && (urnstone.Parent != null) && (urnstone.Parent.Inventory != null)) { urnstone.Parent.Inventory.RemoveByForce(urnstone); } urnstone.DestroyGrave(); try { urnstone.Dispose(); } catch { } } try { mTarget.Dispose(); Assassination skill = Assassination.EnsureSkill(mActor); if (skill != null) { skill.AddPotentialKill(mTarget, true); bool witnessed = false; if (lot != null) { witnessed = Assassination.WasWitnessed(lot, roomId, mActor.SimDescription, mTarget, new List <Sim>()); } skill.AddActualKill(mTarget, false, witnessed); } } catch { } }
public static bool AttemptServiceDisposal(SimDescription sim, bool oldAge, string reason) { if (sim == null) { return(false); } bool hasChildren = (Relationships.GetChildren(sim).Count > 0); if (!oldAge) { if (hasChildren) { return(false); } if ((sim.IsHuman) && (sim.TeenOrAbove)) { bool found = false; foreach (SimDescription other in Households.Humans(sim.Household)) { if (other == sim) { continue; } if (other.TeenOrAbove) { found = true; break; } } if (!found) { return(false); } } foreach (Household house in Household.GetHouseholdsLivingInWorld()) { if (Notifications.HasSignificantRelationship(house, sim)) { return(false); } } } if (hasChildren) { if (!Annihilation.Perform(sim, false)) { return(false); } if (Common.kDebugging) { Common.DebugNotify("Disposed: " + sim.FullName + " (" + sim.Species + ")" + Common.NewLine + reason); } } else { if (!Annihilation.Cleanse(sim)) { return(false); } if (Common.kDebugging) { Common.DebugNotify("Cleansed: " + sim.FullName + " (" + sim.Species + ")" + Common.NewLine + reason); } } return(true); }
protected override bool Run(MiniSimDescription me, bool singleSelection) { return(Annihilation.Cleanse(me)); }
protected void CleanupMiniSims(Dictionary <ulong, IMiniSimDescription> existingSims) { if (MiniSimDescription.sMiniSims == null) { return; } List <MiniSimDescription> miniSims = new List <MiniSimDescription>(MiniSimDescription.sMiniSims.Values); foreach (MiniSimDescription miniSim in miniSims) { try { if (miniSim == null) { continue; } if (miniSim.mTraits == null) { // Correction for a reported script error miniSim.mTraits = new List <TraitNames>(); } IMiniSimDescription existingSim = null; string reason = null; if (!existingSims.TryGetValue(miniSim.SimDescriptionId, out existingSim)) { reason = "No Exist Mini Sim Removed: " + Relationships.GetFullName(miniSim); } else { miniSim.mFirstName = existingSim.FirstName; miniSim.mLastName = existingSim.LastName; string name = miniSim.FullName; if ((name == null) || (string.IsNullOrEmpty(name.Trim()))) { reason = "No Name Mini Sim Removed: " + Relationships.GetFullName(miniSim); } else if (existingSim is MiniSimDescription) { bool found = false; if (miniSim.mHomeLotId != 0) { //Overwatch.Log(" " + Relationships.GetFullName(miniSim) + " HomeLotId Save"); found = true; } else if (!string.IsNullOrEmpty(miniSim.JobOrServiceName)) { //Overwatch.Log(" " + Relationships.GetFullName(miniSim) + " JobOrServiceName Save"); found = true; } else if ((miniSim.MiniRelationships != null) && (miniSim.mMiniRelationships.Count > 0)) { //Overwatch.Log(" " + Relationships.GetFullName(miniSim) + " Relation Save"); found = true; } else if (miniSim.Genealogy != null) { if ((miniSim.Genealogy.Spouse != null) || (miniSim.Genealogy.Children.Count > 0) || (miniSim.Genealogy.Parents.Count > 0) || (miniSim.Genealogy.Siblings.Count > 0)) { //Overwatch.Log(" " + Relationships.GetFullName(miniSim) + " Genealogy Save"); found = true; } } if (!found) { reason = "No Relation Mini Sim Removed: " + Relationships.GetFullName(miniSim); } } if (!string.IsNullOrEmpty(reason)) { try { Annihilation.RemoveMSD(miniSim.SimDescriptionId); Overwatch.Log(reason); continue; } catch (Exception e) { Common.DebugException(miniSim.FullName, e); } } } } catch (Exception e) { Common.Exception(miniSim.FullName, e); } } if (!GameStates.IsOnVacation) { foreach (MiniSimDescription sim in MiniSimDescription.GetVacationWorldSimDescriptions()) { try { List <MiniRelationship> relations = new List <MiniRelationship>(sim.MiniRelationships); foreach (MiniRelationship relation in relations) { MiniSimDescription other = MiniSimDescription.Find(relation.SimDescriptionId); if (other == null) { continue; } MiniRelationship otherRelation = other.FindMiniRelationship(sim, false); if (otherRelation == null) { Overwatch.Log("Bad MiniRelationship Dropped " + Relationships.GetFullName(sim)); sim.mMiniRelationships.Remove(relation); } } } catch (Exception e) { Common.Exception(sim, e); } } } }
public static void CustomAnnihilation(SimDescription badSim, SimDescription goodSim) { if ((badSim == null) || (goodSim == null)) { return; } if (object.ReferenceEquals(badSim, goodSim)) { return; } Overwatch.Log("Annihilation: " + Relationships.GetFullName(badSim)); if (object.ReferenceEquals(goodSim.mMaternityOutfits, badSim.mMaternityOutfits)) { badSim.mMaternityOutfits = new OutfitCategoryMap(); Overwatch.Log("Doppleganger mMaternityOutfits copy " + Relationships.GetFullName(badSim)); } if (object.ReferenceEquals(goodSim.mOutfits, badSim.mOutfits)) { badSim.mOutfits = new OutfitCategoryMap(); Overwatch.Log("Doppleganger mOutfits copy " + Relationships.GetFullName(badSim)); } if (object.ReferenceEquals(goodSim.CelebrityManager, badSim.CelebrityManager)) { badSim.CelebrityManager = null; Overwatch.Log("Doppleganger CelebrityManager copy " + Relationships.GetFullName(badSim)); } if (object.ReferenceEquals(goodSim.CareerManager, badSim.CareerManager)) { badSim.CareerManager = null; Overwatch.Log("Doppleganger CareerManager copy " + Relationships.GetFullName(badSim)); } /* * if ((badSim.Household != null) && (object.ReferenceEquals(goodSim.mHousehold, badSim.mHousehold))) * { * badSim.mHousehold = null; * Overwatch.Log("Doppleganger mHousehold copy " + GetFullName(badSim)); * } */ if ((badSim.mPartner != null) && (object.ReferenceEquals(goodSim.mPartner, badSim.mPartner))) { badSim.mPartner = null; Overwatch.Log("Doppleganger mPartner copy " + Relationships.GetFullName(badSim)); } if (object.ReferenceEquals(goodSim.mGenealogy, badSim.mGenealogy)) { badSim.mGenealogy = new Genealogy(badSim); Overwatch.Log("Doppleganger mGenealogy copy " + Relationships.GetFullName(badSim)); } if ((badSim.AssignedRole != null) && (object.ReferenceEquals(goodSim.AssignedRole, badSim.AssignedRole))) { badSim.AssignedRole = null; Overwatch.Log("Doppleganger AssignedRole copy " + Relationships.GetFullName(badSim)); } Annihilation.Perform(badSim, true); }
public bool CleansingKill(SimDescription sim, SimDescription.DeathType deathType, bool cleanse) { AddTry("CleansingKill"); if (!GameStates.IsLiveState) { IncStat("CleansingKill Mode Save"); return(false); } string name = sim.FullName; if (cleanse) { Annihilation.CleanseGenealogy(sim); SetCleansed(sim); } bool bSuccess = false; Sim createdSim = sim.CreatedSim; if (createdSim != null) { try { if (createdSim.InteractionQueue != null) { createdSim.InteractionQueue.CancelAllInteractions(); SpeedTrap.Sleep(); } if ((deathType != SimDescription.DeathType.None) || (cleanse)) { if (createdSim.Kill(deathType)) { bSuccess = true; } } } catch (Exception e) { Common.DebugException(createdSim, e); } } if (!bSuccess) { if (createdSim == PlumbBob.SelectedActor) { IntroTutorial.ForceExitTutorial(); } if (Sims == null) { AddSuccess("CleansingKill: Destruct Fail"); return(false); } if (!Annihilation.Perform(sim, cleanse)) { Main.RemoveSim(sim.SimDescriptionId); } else { if (!cleanse) { sim.Dispose(true, false, true); } // Special case to stop HangWithCoworker bounces Careers.RemoveSim(sim.SimDescriptionId); } bSuccess = true; } if (bSuccess) { AddSuccess("CleansingKill: Success"); IncStat("Killed: " + name, Common.DebugLevel.High); return(true); } else { return(false); } }
public static void RunStatic() { if (!GameUtils.IsInstalled(ProductVersion.EP11)) { return; } Overwatch.Log("CleanupFutureDescendantService"); FutureDescendantService instance = FutureDescendantService.GetInstance(); if (instance != null) { List <ulong> removeFromMap = new List <ulong>(); List <ulong> simsToPossiblyVanish = new List <ulong>(); List <ulong> simsToKeep = new List <ulong>(); Dictionary <ulong, FutureDescendantService.FutureDescendantHouseholdInfo> houses = new Dictionary <ulong, FutureDescendantService.FutureDescendantHouseholdInfo>(); foreach (ulong num in FutureDescendantService.sPersistableData.DescendantHouseholdsMap.Keys) { bool flag = false; IMiniSimDescription ancestorSim = SimDescription.GetIMiniSimDescription(num); if (ancestorSim == null) { flag = true; removeFromMap.Add(num); } foreach (FutureDescendantService.FutureDescendantHouseholdInfo info in FutureDescendantService.sPersistableData.DescendantHouseholdsMap[num]) { Household descendantHousehold = info.DescendantHousehold; if (descendantHousehold != null) { if (!houses.ContainsKey(info.mHouseholdId)) { houses.Add(info.mHouseholdId, info); } foreach (SimDescription desc in descendantHousehold.SimDescriptions) { if (flag) { if (!simsToKeep.Contains(desc.SimDescriptionId)) { simsToPossiblyVanish.Add(desc.SimDescriptionId); } } else { if (simsToPossiblyVanish.Contains(desc.SimDescriptionId)) { simsToPossiblyVanish.Remove(desc.SimDescriptionId); } simsToKeep.Add(desc.SimDescriptionId); } } } } } foreach (ulong num in removeFromMap) { FutureDescendantService.sPersistableData.DescendantHouseholdsMap.Remove(num); Overwatch.Log(" Missing Removed: " + num); } if (!GameUtils.IsFutureWorld()) { // because sims can possibly be deleted beyond here and I don't believe you can delete sims who are minisims while in the homeworld? return; } else { // this causes a script error if it deletes Sims while cleanup of relationships is running so let that run and come back in a bit... if (!wasRescheduled) { new Common.AlarmTask(10, TimeUnit.Minutes, RunStatic); wasRescheduled = true; return; } } Dictionary <ulong, SimDescription> sims = SimListing.GetResidents(false); foreach (SimDescription sim in sims.Values) { if (sim.TraitManager == null) { continue; } foreach (KeyValuePair <ulong, Trait> trait in sim.TraitManager.mValues) { if ((trait.Value.Guid == TraitNames.DescendantHiddenTrait) && (!simsToKeep.Contains(sim.SimDescriptionId)) && (sim.Household != null && !sim.Household.IsActive)) { simsToPossiblyVanish.Add(sim.SimDescriptionId); break; } } } foreach (ulong desc in simsToPossiblyVanish) { IMiniSimDescription mini = SimDescription.GetIMiniSimDescription(desc); if (mini != null) { Annihilation.Cleanse(mini); if (houses.ContainsKey(mini.LotHomeId)) { houses[mini.LotHomeId].mHouseholdMembers.Remove(desc); } } Overwatch.Log(" Annihilated: " + mini.FullName); } FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo = new List <FutureDescendantService.FutureDescendantHouseholdInfo>(); foreach (KeyValuePair <ulong, FutureDescendantService.FutureDescendantHouseholdInfo> houseInfo in houses) { Household house = houseInfo.Value.DescendantHousehold; if ((house != null) && (houseInfo.Value.mHouseholdMembers.Count == 0)) { Annihilation.Cleanse(house); Overwatch.Log(" Annihilated household: " + house.Name); } else { FutureDescendantService.sPersistableData.ActiveDescendantHouseholdsInfo.Add(houseInfo.Value); } } FutureDescendantService.sPersistableData.InvalidDescendantHouseholdsInfo.Clear(); houses = null; simsToPossiblyVanish = null; simsToKeep = null; } }