Beispiel #1
0
        public static bool EnsureInstantiate(SimDescription sim, Lot lot)
        {
            if (sim.CreatedSim == null)
            {
                if (sim.Household == null)
                {
                    if (!sim.IsValidDescription)
                    {
                        sim.Fixup();
                    }

                    Urnstone urnstone = Urnstones.CreateGrave(sim, SimDescription.DeathType.OldAge, false, true);
                    if (urnstone != null)
                    {
                        Common.Sleep();

                        if (!Urnstones.GhostSpawn(urnstone, lot))
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    Instantiation.Perform(sim, null);
                }
            }

            return(sim.CreatedSim != null);
        }
Beispiel #2
0
        public static bool GetSimToSimHome(SimDescription simDesc, Sim requester, Callback success)
        {
            Sim createdSim = simDesc.CreatedSim;

            if (createdSim == null)
            {
                createdSim = Instantiation.Perform(simDesc, null);
            }
            if (createdSim != null && createdSim.InteractionQueue != null)
            {
                createdSim.InteractionQueue.CancelAllInteractions();

                bool flag = false;
                if (createdSim.Household == requester.Household)
                {
                    GoToLot entry = GoToLot.Singleton.CreateInstanceWithCallbacks(requester.LotHome, createdSim, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, success, null) as GoToLot;
                    flag = createdSim.InteractionQueue.Add(entry);
                }
                else
                {
                    createdSim.SocialComponent.SetInvitedOver(requester.LotHome);
                    if (!requester.LotHome.IsBaseCampLotType)
                    {
                        Sims3.Gameplay.Core.VisitLot lot2 = Sims3.Gameplay.Core.VisitLot.Singleton.CreateInstanceWithCallbacks(requester.LotHome, createdSim, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, success, null) as Sims3.Gameplay.Core.VisitLot;
                        flag = createdSim.InteractionQueue.Add(lot2);
                    }
                    else
                    {
                        GoToLot lot3 = GoToLot.Singleton.CreateInstanceWithCallbacks(requester.LotHome, createdSim, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, success, null) as GoToLot;
                        flag = createdSim.InteractionQueue.Add(lot3);
                    }
                }
                if (flag)
                {
                    GroupingSituation situationOfType = createdSim.GetSituationOfType <GroupingSituation>();
                    if (situationOfType != null)
                    {
                        Sim leader = situationOfType.Leader;
                        if ((leader == null) || leader.IsNPC)
                        {
                            situationOfType.LeaveGroup(createdSim);
                        }
                    }
                    EventTracker.SendEvent(EventTypeId.kInvitedSimOver, requester, createdSim);

                    return(true);
                }
            }
            else
            {
                AcceptCancelDialog.Show(Common.LocalizeEAString("Gameplay/Objects/Electronics/Phone/Call/InviteOver:TestFailed"));
                //AcceptCancelDialog.Show(Woohooer.Localize("InviteOverForWoohooFail:Prompt"));
            }
            return(false);
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        public static bool GhostSpawn(Urnstone me, Lot lot)
        {
            if (me.DeadSimsDescription == null)
            {
                return(false);
            }

            if (!me.DeadSimsDescription.IsValidDescription)
            {
                me.DeadSimsDescription.Fixup();
            }

            Vector3 position;

            if (me.DeadSimsDescription.ToddlerOrBelow)
            {
                position = lot.EntryPoint();
            }
            else if (!me.InInventory)
            {
                position = me.Position;
            }
            else
            {
                position = Service.GetPositionInRandomLot(lot);
            }

            Household.NpcHousehold.Add(me.DeadSimsDescription);
            Sim sim = Instantiation.Perform(me.DeadSimsDescription, position, null, null);

            sim.SetOpacity(0f, 0f);

            ActiveTopic.AddToSim(sim, "Ghost");
            me.GhostSetup(sim, true);

            if (!me.InInventory)
            {
                sim.GreetSimOnLot(me.LotCurrent);
                Audio.StartObjectSound(me.ObjectId, "sting_ghost_appear", false);
            }

            sim.FadeIn();
            me.CreateAlarmReturnToGrave(false);
            return(true);
        }
Beispiel #5
0
        public static bool ImportSim(SimDescription desc, Vector3 simPos, ulong inventoryIndex)
        {
            if (desc.Weight < 0f)
            {
                desc.ChangeBodyShape(0f, desc.Fitness, -desc.Weight);
            }
            else
            {
                desc.ChangeBodyShape(desc.Weight, desc.Fitness, 0f);
            }

            desc.PushAgingEnabledToAgingManager();

            Sim createdSim = desc.CreatedSim;

            if (createdSim == null)
            {
                createdSim = Instantiation.Perform(desc, simPos, null, null);
                if (createdSim == null)
                {
                    FixInvisibleTask.Perform(desc, false);

                    createdSim = Instantiation.Perform(desc, simPos, null, null);
                    if (createdSim == null)
                    {
                        return(false);
                    }
                }
            }

            try
            {
                Bin.ImportInventory(inventoryIndex, createdSim.Inventory);

                createdSim.GrantSpecialObjects(false, false);
            }
            catch (Exception e)
            {
                Common.Exception(createdSim, e);
            }

            return(true);
        }
Beispiel #6
0
            public static void PrepareToBecomeActiveHousehold(Household ths)
            {
                foreach (Sim.Placeholder placeholder in Sims3.Gameplay.Queries.GetObjects <Sim.Placeholder>())
                {
                    if (((placeholder.SimDescription != null) && (placeholder.SimDescription.Household == ths)) && !(placeholder is CaregiverRoutingMonitor.ChildPlaceholder))
                    {
                        foreach (Situation situation in new List <Situation>(Situation.sAllSituations))
                        {
                            AgeUpNpcSituation situation2 = situation as AgeUpNpcSituation;
                            if ((situation2 != null) && (situation2.SimDescription == placeholder.SimDescription))
                            {
                                situation2.Exit();
                            }
                        }
                    }
                }

                if (ths.AllActors.Count != ths.AllSimDescriptions.Count)
                {
                    Vector3 position = ths.LotHome.EntryPoint();
                    foreach (SimDescription description in ths.AllSimDescriptions)
                    {
                        try
                        {
                            if ((description.CreatedSim == null) && description.IsEnrolledInBoardingSchool())
                            {
                                continue;
                            }

                            bool flag = true;
                            foreach (Sim sim in ths.AllActors)
                            {
                                if (sim.SimDescription == description)
                                {
                                    flag = false;
                                    break;
                                }
                            }

                            if (flag)
                            {
                                Sim sim = Instantiation.Perform(description, position, null, null);
                                if (sim != null)
                                {
                                    sim.SetObjectToReset();
                                }
                                Common.Sleep();
                            }
                        }
                        catch (Exception e)
                        {
                            Common.Exception(description, e);
                        }
                    }
                }

                if (ths.PrepareToBecomeActiveHouseholdNeedsSimsSentHome())
                {
                    // Custom
                    foreach (CaregiverRoutingMonitor.ChildPlaceholder placeholder in ths.LotHome.GetObjects <CaregiverRoutingMonitor.ChildPlaceholder>())
                    {
                        if ((placeholder.SimDescription != null) && (placeholder.SimDescription.Household == ths))
                        {
                            placeholder.Rematerialize();
                        }
                    }
                }

                /*
                 * if ((GameUtils.IsInstalled(ProductVersion.EP11)) && (!GameUtils.IsFutureWorld()))
                 * {
                 *  FutureDescendantService instance = FutureDescendantService.GetInstance();
                 *  if (instance != null)
                 *  {
                 *      instance.CleanUpFutureDescendantService(true);
                 *      instance.InitializeFutureDescendantService();
                 *  }
                 * }*/
            }
Beispiel #7
0
        // Lacks the "greater than eight" restriction
        public static bool GhostToPlayableGhost(Urnstone ths, Household newHousehold, Vector3 ghostPosition)
        {
            SimDescription simDescription = ths.DeadSimsDescription;

            if (!simDescription.IsValidDescription)
            {
                simDescription.Fixup();
            }

            if (simDescription.Household != null)
            {
                simDescription.Household.Remove(simDescription, !simDescription.Household.IsSpecialHousehold);
            }

            if (!newHousehold.Contains(simDescription))
            {
                newHousehold.Add(simDescription);
            }

            Sim ghost = Instantiation.Perform(simDescription, ghostPosition, null, null);

            if (ghost == null)
            {
                return(false);
            }

            ths.GhostSetup(ghost, true);

            ths.RemoveMourningRelatedBuffs(ghost);

            simDescription.ShowSocialsOnSim  = true;
            simDescription.IsNeverSelectable = false;
            simDescription.Marryable         = true;
            simDescription.Contactable       = true;

            if (!simDescription.IsEP11Bot)
            {
                simDescription.AgingEnabled = true;
                simDescription.AgingState.ResetAndExtendAgingStage(0f);
                simDescription.PushAgingEnabledToAgingManager();
            }

            string failureReason;

            if (!Inventories.TryToMove(ths, ghost.Inventory, true, out failureReason))
            {
                Common.DebugNotify(failureReason);
            }
            //Inventories.TryToMove(ths, ghost);

            if (simDescription.Child || simDescription.Teen)
            {
                simDescription.AssignSchool();
            }

            if (ghost.IsSelectable)
            {
                ghost.OnBecameSelectable();
            }

            return(true);
        }