protected static Household GetImportSelection(Lot lot) { BinModel.Singleton.PopulateExportBin(); ExportBinContents contents = new ImportSelection(BinModel.Singleton.ExportBinContents).SelectSingle() as ExportBinContents; if (contents == null) { return(null); } List <Household> houses = new List <Household>(); Household household = null; ProgressDialog.Show(Responder.Instance.LocalizationModel.LocalizeString("Ui/Caption/Global:Processing", new object[0x0]), false); Dictionary <string, List <News.NewsTuning.ArticleTuning> > namedArticles = News.sNewsTuning.mNamedArticles; try { // Doing so stops Marriage notices of imported sims from appearing in the newspaper News.sNewsTuning.mNamedArticles = new Dictionary <string, List <News.NewsTuning.ArticleTuning> >(); HouseholdContentsProxy houseContents = HouseholdContentsProxy.Import(contents.PackageName); household = houseContents.Household; if (household == null) { return(null); } List <ulong> indexMap = ExportBinContentsEx.CreateIndexMap(household); lot.MoveIn(household); CreateActors(lot); BinCommonEx.CreateInventories(household, houseContents.Contents, indexMap); BinCommon.UpdateImportedUrnstones(household, lot); household.FixupGenealogy(); } finally { News.sNewsTuning.mNamedArticles = namedArticles; try { ProgressDialog.Close(); } catch { } } SpeedTrap.Sleep(); return(household); }
public static PlaceResult PlaceHouseholdAndContentsFromGameBin(ulong contentId, Lot lot, PlaceAction action, GetLotCost onLotCost) { LotContents lotContents = Bin.Singleton.FindLot(contentId); if (lotContents != null) { Household household = lotContents.Household.Household; if (household != null) { if (((action & PlaceAction.PlaceAndPay) != PlaceAction.PlaceOnly) && !PayForLot(household, lot, true, onLotCost)) { return(PlaceResult.InsufficientFunds); } CreateActors(household, lot, false); CreateInventories(lotContents.Household); if ((action & PlaceAction.MoveIn) != PlaceAction.PlaceOnly) { BinCommon.MoveIn(household, lot); } Bin.Singleton.RemoveLotFromGameBin(lotContents); return(PlaceResult.Success); } } return(PlaceResult.ContentFailure); }
public static void CreateActors(List <SimDescription> SimDescs, Lot lot, bool bAddInitialObjects) { List <Sim> sims = new List <Sim>(); foreach (SimDescription description in SimDescs) { try { description.HomeWorld = GameUtils.GetCurrentWorld(); if (description.CreatedSim == null) { if (description.Weight < 0f) { description.ChangeBodyShape(0f, description.Fitness, -description.Weight); } else { description.ChangeBodyShape(description.Weight, description.Fitness, 0f); } SimOutfit outfit = description.GetOutfit(OutfitCategories.Everyday, 0x0); Vector3 position = new Vector3(); // Custom Sim sim = Instantiation.Perform(description, position, outfit, null /*bAddInitialObjects*/); if (sim.SimDescription.IsGhost) { Urnstone.SimToPlayableGhost(sim, true); } sims.Add(sim); } else { sims.Add(description.CreatedSim); } description.GetMiniSimForProtection().AddProtection(MiniSimDescription.ProtectionFlag.PartialFromPlayer); } catch (Exception e) { Common.Exception(description, e); } } if (lot != null) { BinCommon.PlaceSims(sims, lot); } }
public static PlaceResult PlaceFromGameBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action) { PlaceResult contentFailure = PlaceResult.ContentFailure; Lot lot = LotManager.GetLot(lotId); if (lot == null) { return(PlaceResult.InvalidLot); } else if (lot.Household != null) { return(PlaceResult.HouseholdPresent); } ths.GetInWorldHouseholdBinInfoList(); contentFailure = PlaceResult.ContentFailure; if (info.HouseholdId != ulong.MaxValue) { BinCommon.KickSimsOffLot(lot, true); if (info.LotId != ulong.MaxValue) { contentFailure = BinCommonEx.PlaceHouseholdAndContentsFromGameBin(info.ContentId, lot, action, Mover.GetLotCost); } else { contentFailure = BinCommonEx.PlaceHouseholdFromGameBin(info.ContentId, lot, action, Mover.GetLotCost); } if (contentFailure != PlaceResult.Success) { return(contentFailure); } ths.mGameBin.Remove(info); if (ths.GameBinChanged != null) { ths.GameBinChanged(ths, null); } info = BinCommon.CreateInWorldBinInfo(lot.Household, lot); if (info != null) { ths.mInWorldHouseholdBin.Add(info); } } return(contentFailure); }
public static void CreateInventories(Household household, HouseholdContents contents, List <ulong> indexMap) { if ((contents != null) && (household != null)) { // Custom Function CreateSimInventories(household.AllSimDescriptions, contents, indexMap); // Custom Try/Catch try { BinCommon.CreateFamilyInventories(household, contents); } catch (Exception e) { Common.Exception("CreateFamilyInventories", e); } } }
public static bool ActivateSimScreenMaskedFuncFromHousehold(PlayFlowModel ths, Household selectedHousehold, Lot selectedLot) { if ((selectedHousehold == null) || (selectedLot == null)) { return(false); } using (DreamCatcher.HouseholdStore store = new DreamCatcher.HouseholdStore(selectedHousehold, Mover.Settings.mDreamCatcher)) { Camera.SetMapViewActiveLotMode(true); LotManager.LockActiveLot(selectedLot); // Custom DreamCatcher.Task.PrepareToBecomeActiveHousehold(selectedHousehold); Sim sim = BinCommon.ActivateSim(selectedHousehold, selectedLot); if (sim == null) { sim = Households.AllSims(selectedHousehold)[0]; if (sim != null) { PlumbBob.ForceSelectActor(sim); } } LotManager.SetWallsViewMode(0x12e); selectedLot.SetDisplayLevel(selectedLot.DoesFoundationExistOnLot() ? 0x1 : 0x0); if (sim.LotCurrent == sim.LotHome) { Camera.FocusOnSelectedSim(); Camera.SetView(CameraView.SimView, false, false); } else { Camera.FocusOnLot(sim.LotHome.LotId, 0f); Camera.SetView(CameraView.HouseView, false, false); } } selectedLot.CheckIfLotNeedsBabysitter(); ths.Sleep(1.5); return(true); }
public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action, bool showConfirmDialog) { try { PlaceResult contentFailure = PlaceResult.ContentFailure; Lot lot = LotManager.GetLot(lotId); if (lot == null) { return(PlaceResult.InvalidLot); } ExportBinContents exportBinItem = ths.FindExportBinContents(info.ContentId); if (exportBinItem != null) { ths.GetInWorldHouseholdBinInfoList(); ths.GetInWorldLotBinInfoList(); Sim newActiveSim = null; if (lot.Household != null) { return(BinCommonEx.MergeHouseholdFromExportBin(exportBinItem, lot, showConfirmDialog, Mover.Settings.mAllowGreaterThanEight)); } BinCommon.KickSimsOffLot(lot, true); ProgressDialog.Show(Localization.LocalizeString("Ui/Caption/Global:Processing", new object[0x0])); try { try { contentFailure = BinCommonEx.PlaceFromExportBin(exportBinItem, lot, action, true, Mover.GetLotCost, ref newActiveSim); ExportBinContentsEx.Flush(exportBinItem); UIBinInfo item = BinCommon.CreateInWorldBinInfo(lot.Household, lot); if (item != null) { if (info.HouseholdId != ulong.MaxValue) { ths.mInWorldHouseholdBin.Add(item); } else { ths.mInWorldLotBin.Add(item); } } } finally { ProgressDialog.Close(); } } catch (ExecutionEngineException) { } } return(contentFailure); } catch (Exception e) { Common.Exception("PlaceFromExportBin", e); return(PlaceResult.ContentFailure); } }
private static bool ChangeLotTypeHelper(Lot lot, bool deleteInvalidObjects, LotType newType, CommercialLotSubType commercialSubType, ResidentialLotSubType residentialSubType) { List <GameObject> objects = null; if (newType == LotType.Commercial) { // Custom //objects = lot.GetObjects<GameObject>(new Predicate<GameObject>(EditTownModel.IsNotValidCommunityLotObject)); if (commercialSubType == CommercialLotSubType.kEP10_Resort) { foreach (RabbitHole hole in lot.GetObjects <RabbitHole>(new Predicate <RabbitHole>(EditTownModel.IsInvestable))) { objects.Add(hole); } if (lot.ResortManager == null) { lot.ResortManager = new ResortManager(lot); } } } else { // Custom //objects = lot.GetObjects<GameObject>(new Predicate<GameObject>(EditTownModel.IsNotValidResidentialLotObject)); } if ((objects != null) && (objects.Count > 0)) { if (!deleteInvalidObjects) { return(false); } foreach (GameObject obj2 in objects) { int num = 0; bool flag = false; while (obj2.ActorsUsingMe.Count > num) { Sim sim = obj2.ActorsUsingMe[num]; if (sim != null) { sim.SetObjectToReset(); sim.InteractionQueue.PurgeInteractions(obj2); flag = true; } num++; } if (flag) { SpeedTrap.Sleep(0); } lot.RemoveObjectFromLot(obj2.ObjectId, true); obj2.Destroy(); } ThumbnailKey key = new ThumbnailKey(new ResourceKey(lot.LotId, 0x436fee4c, 0), ThumbnailSize.Large); ThumbnailManager.InvalidateThumbnail(key); EditTownModel.UpdateDirtyLotThumbnailsTask(true); } if (lot.CommercialLotSubType == CommercialLotSubType.kEP10_Resort) { foreach (IResortBuffetTable table in lot.GetObjects <IResortBuffetTable>()) { table.ClearTable(); } } if (GameStates.IsEditTownState) { BinCommon.KickSimsOffLot(lot, true); } return(true); }
public static Household _ImportHousehold(string packageFile, Lot moveinLot, bool full, bool askToCreateSim, out HouseholdContents contents) { contents = null; if (packageFile == null || packageFile.Length == 0) { return(null); } try { HouseholdContentsProxy hoc = HouseholdContentsProxy.Import(packageFile); if (hoc != null) { Household mhouse = hoc.Household; if (mhouse != null && mhouse.mMembers != null && mhouse.AllSimDescriptions != null && mhouse.AllSimDescriptions.Count != 0) { foreach (SimDescription item in mhouse.AllSimDescriptions.ToArray()) { item.mHousehold = mhouse; } try { mhouse.FixupGenealogy(); } catch (Exception) { } foreach (SimDescription item in mhouse.AllSimDescriptions.ToArray()) { try { item.Fixup(); } catch (Exception) { } } bool donelotofmovein = false; if (moveinLot != null && moveinLot.mHousehold == null) { donelotofmovein = true; try { moveinLot.MoveIn(mhouse); } catch (Exception) { moveinLot.mHousehold = mhouse; mhouse.mLotId = moveinLot.mLotId; mhouse.mLotHome = moveinLot; } } if (!full) { full = askToCreateSim && Simulator.CheckYieldingContext(false) && NiecMod.Nra.NFinalizeDeath.CheckAccept("Create Sim?"); } if (full) { //Sim sim = null; if (donelotofmovein) { try { foreach (SimDescription item in mhouse.AllSimDescriptions.ToArray()) { try { if (NiecMod.Nra.NFinalizeDeath.SimDesc_OutfitsIsValid(item)) { item.Instantiate(Service.GetPositionInRandomLot(moveinLot), false); } } catch (Exception) { } } } catch (Exception) { } } try { BinCommon.CreateInventories(mhouse, hoc.Contents, NiecMod.Nra.NFinalizeDeath.CreateIndexMap_(mhouse)); } catch (Exception) { } } contents = hoc.Contents; return(mhouse); } else { if (mhouse != null) { mhouse.Destroy(); } NiecMod.Nra.NiecException.PrintMessagePro("Check mhouse is invalid.\nSorry :(", false, 100); } } else { NiecMod.Nra.NiecException.PrintMessagePro("Could not find Package File" + "\n" + packageFile, false, 1000); } } catch (Exception) { } return(null); }
public static PlaceResult PlaceFromExportBin(Household household, ExportBinContents exportBinItem, Lot lot, PlaceAction action, bool buyFurnished, GetLotCost onLotCost, ref Sim newActiveSim) { if (household == null) { return(PlaceResult.InvalidBinHousehold); } else if (lot == null) { return(PlaceResult.InvalidLot); } else if (exportBinItem == null) { return(PlaceResult.ContentFailure); } bool flag = exportBinItem.IsLoaded(); if (!flag) { ExportBinContentsEx.Import(exportBinItem, false); } PlaceResult contentFailure = PlaceResult.ContentFailure; if (household != null) { if (((action & PlaceAction.PlaceAndPay) != PlaceAction.PlaceOnly) && !PayForLot(household, lot, buyFurnished, onLotCost)) { if (!flag) { ExportBinContentsEx.Flush(exportBinItem); } Household.CleanupOldIdToNewSimDescriptionMap(); return(PlaceResult.InsufficientFunds); } if ((!buyFurnished) && (!lot.IsApartmentLot)) { lot.MakeLotUnfurnished(); Common.Sleep(); lot.UpdateCachedValues(); } CreateActors(household, lot, false); CreateInventories(household, exportBinItem.HouseholdContents, exportBinItem.IndexMap); Common.Sleep(); BinCommon.UpdateImportedUrnstones(household, lot); household.PostImport(); if ((action & PlaceAction.MoveIn) != PlaceAction.PlaceOnly) { BinCommon.MoveIn(household, lot); } if ((action & PlaceAction.Activate) != PlaceAction.PlaceOnly) { newActiveSim = BinCommon.ActivateSim(exportBinItem.Household, lot); } ThumbnailManager.GenerateHouseholdThumbnail(household.HouseholdId, household.HouseholdId, ThumbnailSizeMask.Large | ThumbnailSizeMask.Medium); contentFailure = PlaceResult.Success; } if (!flag) { ExportBinContentsEx.Flush(exportBinItem); } return(contentFailure); }
public static PlaceResult MergeHouseholdFromExportBin(ExportBinContents exportBinItem, Lot lot, bool showConfirmDialog, bool allowOverstuff) { try { if (exportBinItem == null) { return(PlaceResult.ContentFailure); } bool flag = exportBinItem.IsLoaded(); if (!flag) { ExportBinContentsEx.Import(exportBinItem, false); } PlaceResult householdPresent = PlaceResult.HouseholdPresent; Household household = exportBinItem.Household; Household otherHouse = lot.Household; if (household == null) { householdPresent = PlaceResult.InvalidBinHousehold; } if (lot == null) { householdPresent = PlaceResult.InvalidLot; } if (exportBinItem == null) { householdPresent = PlaceResult.ContentFailure; } try { try { if (((household != null) && (householdPresent == PlaceResult.HouseholdPresent)) && (otherHouse != null)) { // Custom if ((!allowOverstuff) && (!household.CanMergeWithHousehold(otherHouse, false))) { SimpleMessageDialog.Show(Common.LocalizeEAString("Ui/Caption/GameEntry/EditTown:MergeWarning"), Common.LocalizeEAString("Ui/Caption/MovingDialog:TooManySims")); } // Custom else if ((!allowOverstuff) && (!household.CanMergeWithHousehold(otherHouse, true))) { SimpleMessageDialog.Show(Common.LocalizeEAString("Ui/Caption/GameEntry/EditTown:MergeWarning"), Common.LocalizeEAString("Ui/Caption/MovingDialog:TooManySims_Pregnant")); } else if (!showConfirmDialog || PlayFlowConfirmMergePetHousehold.Show(BinCommon.CreateInWorldBinInfo(lot.LotId), exportBinItem.BinInfo)) { ProgressDialog.Show(Common.LocalizeEAString("Ui/Caption/Global:Processing")); otherHouse.ModifyFamilyFunds(household.FamilyFunds); List <SimDescription> simDescs = new List <SimDescription>(); foreach (SimDescription description in household.AllSimDescriptions) { simDescs.Add(description); } CreateActors(simDescs, null, false); BinCommon.CreateFamilyInventories(household, exportBinItem.HouseholdContents); BinCommon.MoveInventoryInto(household, otherHouse); household.PostImport(); List <Sim> sims = new List <Sim>(); foreach (SimDescription description2 in simDescs) { otherHouse.AddSim(description2.CreatedSim); sims.Add(description2.CreatedSim); } otherHouse.AddWardrobeToWardrobe(household.Wardrobe); otherHouse.AddServiceUniforms(household.ServiceUniforms); CreateSimInventories(simDescs, exportBinItem.HouseholdContents, exportBinItem.IndexMap); BinCommon.PlaceSims(sims, lot); ThumbnailManager.GenerateHouseholdThumbnail(otherHouse.HouseholdId, otherHouse.HouseholdId, ThumbnailSizeMask.Large | ThumbnailSizeMask.Medium); (Sims3.UI.Responder.Instance.EditTownModel as EditTownModel).DirtyWorldBins(); Bin.Singleton.FireContentsChanged(); } } Household.CleanupOldIdToNewSimDescriptionMap(); if (!flag) { ExportBinContentsEx.Flush(exportBinItem); } } finally { ProgressDialog.Close(); } } catch (ExecutionEngineException) { } return(householdPresent); } catch (Exception e) { Common.Exception("MergeHouseholdFromExportBin", e); return(PlaceResult.ContentFailure); } }