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 { } }
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); } } } }