private new void OnSelection(UIBinInfo info)
 {
     if (((mFrom != null) && (mFrom != info)) && (info.HouseholdId != ulong.MaxValue))
     {
         mModel.CenterCamera(info.LotId);
         GameEntryMovingModelEx.MergeHouseholds(EditTownController.Instance, mFrom, info);
     }
     else
     {
         Simulator.AddObject(new OneShotFunctionWithParams(new FunctionWithParam(WarnCantMergeHouseholds), info));
     }
 }
Exemple #2
0
        public static bool PayForLot(EditTownModel ths, UIBinInfo info, ulong lotId)
        {
            Lot lot = LotManager.GetLot(lotId);
            if (lot != null)
            {
                ExportBinContents contents = ths.FindExportBinContents(info.ContentId);
                if (contents != null)
                {
                    bool flag = contents.IsLoaded();
                    if (!flag)
                    {
                        ExportBinContentsEx.Import(contents, true);
                    }

                    Household household = contents.Household;
                    if (household != null)
                    {
                        return BinCommonEx.PayForLot(household, lot, true, Mover.GetLotCost);
                    }

                    if (!flag)
                    {
                        ExportBinContentsEx.Flush(contents);
                    }
                }
                else if (info.LotId != ulong.MaxValue)
                {
                    LotContents contents2 = Bin.Singleton.FindLot(info.LotId);
                    if ((contents2 != null) && (contents2.Household != null))
                    {
                        Household household2 = contents2.Household.Household;
                        if (household2 != null)
                        {
                            return BinCommonEx.PayForLot(household2, lot, true, Mover.GetLotCost);
                        }
                    }
                }
                else if (info.HouseholdId != ulong.MaxValue)
                {
                    Household household3 = Household.Find(info.HouseholdId);
                    if (household3 != null)
                    {
                        return BinCommonEx.PayForLot(household3, lot, true, Mover.GetLotCost);
                    }
                }
            }
            return false;
        }
Exemple #3
0
        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;
        }
        private void PlaceHouseholdEx(UIBinInfo householdInfo, ulong lotId)
        {
            try
            {
                if (householdInfo != null)
                {
                    if ((!Mover.Settings.mFreeRealEstate) && (!EditTownModelEx.PayForLot(mModel as EditTownModel, householdInfo, lotId)))
                    {
                        WarnInsufficientFunds(householdInfo);
                        return;
                    }

                    if (mFrom == InfoSource.Clipboard)
                    {
                        EditTownModelEx.PlaceFromGameBin(mModel as EditTownModel, householdInfo, lotId, PlaceAction.MoveIn);
                    }
                    else
                    {
                        EditTownModelEx.PlaceFromExportBin(mModel as EditTownModel, householdInfo, lotId, PlaceAction.MoveIn);
                    }
                    mModel.SetCurrentSelection(null, InfoSource.Unknown);
                }

                EditTownTool.CurrentTool = EditTownDefaultTool.Instance;
            }
            catch (Exception e)
            {
                Common.Exception("PlaceHouseholdEx", e);
            }
        }
        private new void OnSelection(UIBinInfo lotInfo)
        {
            if (lotInfo.HouseholdId == ulong.MaxValue)
            {
                if ((mInfo != null) && (mFrom != InfoSource.Unknown))
                {
                    LotValidity lotValidity = mModel.GetLotValidity(lotInfo.LotId);

                    // EA Standard does not distinguish between vacation and private lots, messing up [StoryProgression] rental systems
                    foreach (PropertyData data in RealEstateManager.AllPropertiesFromAllHouseholds())
                    {
                        if (data.PropertyType == RealEstatePropertyType.VacationHome) continue;

                        if (data.LotId == lotInfo.LotId)
                        {
                            Simulator.AddObject(new OneShotFunctionWithParams(WarnLotGeneric, lotInfo));
                            return;
                        }
                    }

                    mModel.CenterCamera(lotInfo.LotId);
                    if (mInfo.LotId != ulong.MaxValue)
                    {
                        bool allow = false;
                        if (lotValidity == LotValidity.Valid)
                        {
                            allow = true;
                        }
                        else if ((Mover.Settings.mAllowGreaterThanEight) && (!mModel.LotContentsWillFit(mInfo, lotInfo.LotId)))
                        {
                            allow = true;
                        }

                        if (allow)
                        {
                            mPlacing = true;
                            EditTownController.Instance.ShowUI(false);
                            UIManager.DarkenBackground(true);
                            Sims3.UI.Responder.Instance.DisableQuit();
                            Simulator.AddObject(new OneShotFunctionWithParams(PlaceLotTask, lotInfo));
                        }
                        else if (!mModel.LotContentsWillFit(mInfo, lotInfo.LotId))
                        {
                            Simulator.AddObject(new OneShotFunctionWithParams(WarnTooBig, lotInfo));
                        }
                        else
                        {
                            Simulator.AddObject(new OneShotFunctionWithParams(WarnLotGeneric, lotInfo));
                        }
                    }
                    else if (mInfo.HouseholdId != ulong.MaxValue)
                    {
                        if (lotValidity == LotValidity.Unavailable) 
                        {
                            if ((!Mover.Settings.mFreeRealEstate) && (mInfo.HouseholdFunds < lotInfo.LotWorth))
                            {
                                Simulator.AddObject(new OneShotFunctionWithParams(WarnInsufficientFunds, lotInfo));
                                return;
                            }
                        }

                        if (lotValidity != LotValidity.Invalid)
                        {
                            mPlacing = true;
                            Simulator.AddObject(new OneShotFunctionWithParams(ConfirmPurchaseTaskEx, lotInfo));
                            return;
                        }
                    }
                }
            }
            else if (mInfo.LotId == ulong.MaxValue)
            {
                if (mFrom == InfoSource.Clipboard)
                {
                    mModel.CenterCamera(lotInfo.LotId);
                    GameEntryMovingModelEx.MergeHouseholds(EditTownController.Instance, mInfo, lotInfo);
                }
                else
                {
                    mModel.CenterCamera(lotInfo.LotId);
                    Simulator.AddObject(new OneShotFunctionWithParams(PlaceHouseholdTaskEx, lotInfo));
                }
            }
        }
        public static void SplitHousehold(EditTownController ths, UIBinInfo from)
        {
            try
            {
                if (ths == null) return;

                Household household = Household.Find(from.HouseholdId);
                if (household != null)
                {
                    IMovingModel model = new GameEntryMovingModelEx(household);
                    if (model != null)
                    {
                        EditTownSplitDialog.Show(model);
                        Simulator.AddObject(new OneShotFunctionWithParams(ths.SplitHouseholdsTask, from));
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception("SplitHousehold", e);
            }
        }
        public static void MergeHouseholds(EditTownController ths, UIBinInfo from, UIBinInfo to)
        {
            try
            {
               Household household = Household.Find(from.HouseholdId);
                if (household != null)
                {
                    IMovingModel model = new GameEntryMovingModelEx(household);
                    if (model != null)
                    {
                        model.SetTargetLot(to.LotId);
                        EditTownMergeDialog.Show(model);

                        Common.FunctionTask.Perform(ths.MergeHouseholdsTask);
                    }
                }
            }
            catch (Exception e)
            {
                Common.Exception("MergeHouseholds", e);
            }
        }
Exemple #8
0
        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;
            }
        }
Exemple #9
0
 public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action)
 {
     return PlaceFromExportBin(ths, info, lotId, action, true);
 }
 public static void ChangeLotType(UIBinInfo info)
 {
     Simulator.AddObject(new OneShotFunctionWithParams(new FunctionWithParam(ChangeLotTypeTask), info));
 }