protected override OptionResult Run(GameHitParameters <GameObject> parameters) { Lot lot = Porter.GetLot(parameters.mTarget); if (lot == null) { return(OptionResult.Failure); } List <SimDescription> selection = null; List <HouseholdItem> allHouses = new List <HouseholdItem>(); foreach (Household house in Household.sHouseholdList) { allHouses.Add(new HouseholdItem(house, house == lot.Household)); } string houseName = null; while (selection == null) { List <Household> houses = HouseholdSelection.Perform(lot.Household.Name, allHouses); if ((houses == null) || (houses.Count == 0)) { return(OptionResult.Failure); } houseName = houses[0].Name; selection = GetSimSelection(houses); } if ((selection == null) || (selection.Count == 0)) { return(OptionResult.Failure); } Dictionary <Household, int> finalHouses = new Dictionary <Household, int>(); int nextID = 1; foreach (SimDescription sim in selection) { if (sim.Household == null) { continue; } if (sim.Household.IsServiceNpcHousehold) { continue; } if (!finalHouses.ContainsKey(sim.Household)) { finalHouses.Add(sim.Household, nextID); nextID++; } } string name = StringInputDialog.Show(Common.Localize("Title"), Common.Localize("Pack:NamePrompt", false, new object[] { finalHouses.Count, selection.Count }), houseName); if (string.IsNullOrEmpty(name)) { return(OptionResult.Failure); } Household export = Household.Create(); SpeedTrap.Sleep(); foreach (Household house in finalHouses.Keys) { if (house.LotHome != null) { export.SetFamilyFunds(export.FamilyFunds + house.FamilyFunds + house.LotHome.Cost); } else { export.SetFamilyFunds(export.FamilyFunds + house.NetWorth()); } } Dictionary <SimDescription, Household> saveHouses = new Dictionary <SimDescription, Household>(); Dictionary <Sim, bool> resetDNP = new Dictionary <Sim, bool>(); Dictionary <Household, bool> inventoried = new Dictionary <Household, bool>(); foreach (SimDescription sim in selection) { if (sim.CreatedSim != null) { sim.CreatedSim.SetReservedVehicle(null); if (sim.CreatedSim.DreamsAndPromisesManager != null) { sim.CreatedSim.NullDnPManager(); if (!resetDNP.ContainsKey(sim.CreatedSim)) { resetDNP.Add(sim.CreatedSim, true); } } if ((sim.Household != null) && (!inventoried.ContainsKey(sim.Household))) { inventoried.Add(sim.Household, true); if ((sim.Household.SharedFamilyInventory != null) && (sim.Household.SharedFamilyInventory.Inventory != null)) { foreach (GameObject obj in Inventories.QuickFind <GameObject>(sim.Household.SharedFamilyInventory.Inventory)) { if (Inventories.TryToMove(obj, sim.CreatedSim.Inventory, false)) { continue; } Inventories.TryToMove(obj.Clone(), export.SharedFamilyInventory.Inventory); } } if ((sim.Household.SharedFridgeInventory != null) && (sim.Household.SharedFridgeInventory.Inventory != null)) { foreach (GameObject obj in Inventories.QuickFind <GameObject>(sim.Household.SharedFridgeInventory.Inventory)) { if (Inventories.TryToMove(obj, sim.CreatedSim.Inventory, false)) { continue; } Inventories.TryToMove(obj.Clone(), export.SharedFridgeInventory.Inventory); } } } } int id = 0; if ((sim.Household != null) && (finalHouses.ContainsKey(sim.Household))) { id = finalHouses[sim.Household]; } else { Urnstone grave = Urnstones.CreateGrave(sim, false); if (grave == null) { continue; } SpeedTrap.Sleep(); bool success = false; try { success = Urnstones.GhostToPlayableGhost(grave, Household.NpcHousehold, lot.EntryPoint()); } catch (Exception exception) { Common.DebugException(grave.DeadSimsDescription, exception); } if (!success) { Porter.Notify(Common.Localize("Pack:SimFailure", sim.IsFemale, new object[] { sim })); Porter.PlaceGraveTask.Perform(sim); //export.SharedFamilyInventory.Inventory.TryToMove(grave); continue; } } HouseData data = new HouseData(id, sim); sim.mBio = data.ToString(); saveHouses.Add(sim, sim.Household); sim.OnHouseholdChanged(export, false); export.mMembers.Add(sim, null); Porter.AddExport(sim); } string packageName = null; try { try { ProgressDialog.Show(Responder.Instance.LocalizationModel.LocalizeString("Ui/Caption/Global:Processing", new object[0x0]), false); if (export.mMembers.Count > 0) { export.Name = "NRaas.Porter:" + name; ThumbnailHelper.CacheSimAtlasesForHousehold(export); ThumbnailManager.GenerateHouseholdThumbnail(export.HouseholdId, export.HouseholdId, ThumbnailSizeMask.Large); packageName = BinEx.ExportHousehold(Bin.Singleton, export, false); if (packageName != null) { BinModel.Singleton.AddToExportBin(packageName); } } foreach (Sim sim in resetDNP.Keys) { try { sim.ResetDnP(); } catch (Exception e) { Common.DebugException(sim, e); } } List <Urnstone> graves = Inventories.QuickFind <Urnstone>(export.SharedFamilyInventory.Inventory); foreach (Urnstone grave in graves) { Porter.PlaceGraveTask.Perform(grave.DeadSimsDescription); } while (export.mMembers.Count > 0) { SimDescription sim = export.mMembers.SimDescriptionList[0]; if (sim != null) { sim.OnHouseholdChanged(saveHouses[sim], false); if ((sim.Household == null) || (sim.Household.IsServiceNpcHousehold)) { Porter.PlaceGraveTask.Perform(sim); } } export.mMembers.RemoveAt(0); } export.Destroy(); export.Dispose(); } finally { ProgressDialog.Close(); } } catch (ExecutionEngineException) { // Ignored } catch (Exception e) { Common.Exception(name, e); packageName = null; } if (packageName != null) { SimpleMessageDialog.Show(Common.Localize("Title"), Common.Localize("Pack:Success", false, new object[] { export.Name })); } else { SimpleMessageDialog.Show(Common.Localize("Title"), Common.Localize("Pack:Failure")); } return(OptionResult.SuccessClose); }