예제 #1
0
        public override bool Test(InteractionInstance inst, out StringDelegate reason)
        {
            if (!base.Test(inst, out reason)) return false;

            OmniCareer career = Career as OmniCareer;
            return (career != null);
        }
예제 #2
0
        public override bool Test(InteractionInstance ii, out StringDelegate reason)
        {
            try
            {
                LoopingAnimationBase interaction = ii as LoopingAnimationBase;

                if (interaction.Paused)
                {
                    reason = delegate
                    {
                        return Common.Localize("Pause:Disabled");
                    };

                    return false;
                }

                return base.Test(ii, out reason);
            }
            catch (Exception e)
            {
                reason = null;

                Common.Exception(ii.InstanceActor, e);
                return false;
            }
        }
예제 #3
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                // Reset the attraction so it is recalculated now
                RelationshipEx.CalculateAttractionScore(Relationship.Get(target.SimDescription, actor.SimDescription, false), true);

                int score = (int)RelationshipEx.GetAttractionScore(target.SimDescription, actor.SimDescription, true);

                int index = score / 10;
                if (index >= 10)
                {
                    index = 9;
                }
                else if (index < 0)
                {
                    index = 0;
                }

                Common.Notify(Common.Localize("CheckAttraction:Result" + index, actor.IsFemale, target.IsFemale, new object[] { actor, target }), actor.ObjectId, target.ObjectId, StyledNotification.NotificationStyle.kSimTalking);
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #4
0
        public static void BeforeDiagnose(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                FreeClinicSessionSituation freeClinicSessionSituation = FreeClinicSessionSituation.GetFreeClinicSessionSituation(actor);
                if (freeClinicSessionSituation != null)
                {
                    freeClinicSessionSituation.NumVaccinations++;
                    freeClinicSessionSituation.AddToIgnoreList(target);
                    freeClinicSessionSituation.BringRandomSimsToSession(0x1);

                    /*
                    HealthManager healthManager = target.SimDescription.HealthManager;
                    if (healthManager != null)
                    {
                        healthManager.Vaccinate();
                    }
                    */
                }
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #5
0
        public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime)
        {
            base.OnTimePassed(interactionInstance, totalTime, deltaTime);

            Science career = base.Career as Science;
            if (career.mTimeSpentInIndependentExptSinceLastBenefit > Science.DoIndependentExperiment.kTimeSpentInDoExptToGainBenefit)
            {
                string str;
                float value = RandomUtil.GetFloat(0f, 1f);
                if (value < Science.DoIndependentExperiment.kChanceOfGettingPerformanceBonusFromDoIndependentExpt)
                {
                    str = "IncreasedPerformance";
                    career.AddPerformance(Science.DoIndependentExperiment.kAmountOfBonusPerformance);
                }
                else if (value < Science.DoIndependentExperiment.kChanceOfGettingPromotionFromDoIndependentExpt)
                {
                    str = "Promotion";
                    career.AddPerformance(100f);
                }
                else
                {
                    str = "Failure";
                }
                string titleText = LocalizeString(career.OwnerDescription, str, new object[] { career.OwnerDescription });
                StyledNotification.Format format = new StyledNotification.Format(titleText, StyledNotification.NotificationStyle.kGameMessagePositive);
                StyledNotification.Show(format);
                career.mTimeSpentInIndependentExptSinceLastBenefit = 0f;
            }
            else
            {
                career.mTimeSpentInIndependentExptSinceLastBenefit += deltaTime / 60f;
            }
        }
예제 #6
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                actor.Motives.SetDecay(CommodityKind.Fun, true);
                target.Motives.SetDecay(CommodityKind.Fun, true);
                actor.Motives.ChangeValue(CommodityKind.Fun, Jetpack.kFunGainJetPackWoohoo);
                target.Motives.ChangeValue(CommodityKind.Fun, Jetpack.kFunGainJetPackWoohoo);

                if (CommonPregnancy.IsSuccess(actor, target, i.Autonomous, CommonWoohoo.WoohooStyle.TryForBaby))
                {
                    CommonPregnancy.Impregnate(actor, target, i.Autonomous, CommonWoohoo.WoohooStyle.TryForBaby);
                }

                CommonWoohoo.RunPostWoohoo(actor, target, actor.GetActiveJetpack(), CommonWoohoo.WoohooStyle.TryForBaby, CommonWoohoo.WoohooLocation.Jetpack, true);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #7
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                int actorAge = (int)Aging.GetCurrentAgeInDays(actor.SimDescription);
                int targetAge = (int)Aging.GetCurrentAgeInDays(target.SimDescription);

                int difference = 0;
                string suffix = "SameResult";
                if (targetAge > actorAge)
                {
                    suffix = "OlderResult";
                    difference = targetAge - actorAge;
                }
                else if (targetAge < actorAge)
                {
                    suffix = "YoungerResult";
                    difference = actorAge - targetAge;
                }

                if (SimTypes.IsSelectable(actor))
                {
                    Common.Notify(Common.Localize("AskAboutAge:" + suffix, target.IsFemale, new object[] { difference }), target.ObjectId, ObjectGuid.InvalidObjectGuid, StyledNotification.NotificationStyle.kSimTalking);
                }
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #8
0
        public static bool PreTimeTravel1(InteractionInstance ths)
        {
            if (!UIUtils.IsOkayToStartModalDialog())
            {
                return false;
            }

            Sim actor = ths.InstanceActor as Sim;

            TravelUtil.PlayerMadeTravelRequest = true;
            OpportunityNames guid = CheckOpportunities(actor);

            string prompt;
            if (GameUtils.IsFutureWorld())
            {
                prompt = TimePortal.LocalizeString("ConfirmReturn", new object[0x0]);
            }
            else if (guid != OpportunityNames.Undefined)
            {
                prompt = TimePortal.LocalizeString("ConfirmWarningTravel", new object[0x0]);
            }
            else
            {
                prompt = TimePortal.LocalizeString("ConfirmTravel", new object[0x0]);
            }
            if (!TwoButtonDialog.Show(prompt, Localization.LocalizeString("Ui/Caption/Global:Accept", new object[0x0]), Localization.LocalizeString("Ui/Caption/Global:Cancel", new object[0x0])))
            {
                TravelUtil.PlayerMadeTravelRequest = false;
                return false;
            }

            //Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Ui/Caption/HUD/DisasterSaveError:Traveling");
            ths.CancellableByPlayer = false;
            if ((guid != OpportunityNames.Undefined) && (actor.OpportunityManager != null))
            {
                actor.OpportunityManager.CancelOpportunity(guid);
            }

            if (actor.OpportunityManager != null)
            {
                if (actor.OpportunityManager.HasOpportunity(OpportunityNames.EP11_HelpingTheTimeTraveler01))
                {
                    actor.OpportunityManager.CancelOpportunity(OpportunityNames.EP11_HelpingTheTimeTraveler01);
                }

                if (actor.OpportunityManager.HasOpportunity(OpportunityNames.EP11_HelpingTheTimeTraveler02))
                {
                    actor.OpportunityManager.CancelOpportunity(OpportunityNames.EP11_HelpingTheTimeTraveler02);
                }

                if (GameUtils.IsFutureWorld() && actor.OpportunityManager.HasOpportunity(OpportunityNames.EP11_RecalibrateDefenseGrid))
                {
                    actor.OpportunityManager.CancelOpportunity(OpportunityNames.EP11_RecalibrateDefenseGrid);
                }
            }

            return true;
        }
예제 #9
0
        public static void OnFinishMakeoverFreestyle(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                bool tookSemaphore = false;
                Styling.MakeoverOutcome makeoverOutcome = Styling.GetMakeoverOutcome(target, actor, true);
                bool forceFailureOutfit = makeoverOutcome == Styling.MakeoverOutcome.EpicFailure;
                bool flag3 = false;
                try
                {
                    if (forceFailureOutfit)
                    {
                        Styling.LoadMakeoverEpicFailureOutfitForCasOverride(target);
                    }
                    flag3 = GetMakeoverEx.DisplayCAS(target, actor, ref tookSemaphore, forceFailureOutfit);
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (tookSemaphore)
                    {
                        GameStates.ReleaseInteractionStateChangeSemaphore();
                    }
                }

                if (CASChangeReporter.Instance.GetPropertyChanged(CASChangeReporter.ChangeFlags.Any))
                {
                    SkillLevel customerReactionType = Styling.GetCustomerReactionType(target, actor, makeoverOutcome, false);
                    SkillLevel stylerReactionType = Styling.GetStylerReactionType(customerReactionType);
                    StateMachineClient client = StateMachineClient.Acquire(actor, "StylistActiveCareer");
                    client.SetActor("x", target);
                    client.SetActor("y", actor);
                    client.SetParameter("doClothesSpin", !flag3);
                    client.SetParameter("customerReactionType", customerReactionType);
                    client.SetParameter("stylistReactionType", stylerReactionType);
                    client.EnterState("x", "Enter");
                    client.EnterState("y", "Enter");
                    actor.LoopIdle();
                    client.RequestState("x", "Customer Reaction");
                    Styling.PostMakeover(target, actor, makeoverOutcome, false, customerReactionType, true, true, new Styling.OnMakeoverCompletedCallback(SocialCallback.OnMakeoverFreestyleCompleted));
                    client.RequestState(false, "x", "Exit");
                    client.RequestState("y", "Stylist Reaction");
                    client.RequestState("y", "Exit");
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #10
0
        // Methods
        public override void BeginCareerTone(InteractionInstance interactionInstance)
        {
            base.BeginCareerTone(interactionInstance);

            mTimeForStartOfTone = SimClock.ElapsedTime(TimeUnit.Hours);
            Education career = OmniCareer.Career<Education>(Career);
            if (career != null)
            {
                mLecturesHeldBeforeStartOfTone = career.LecturesGivenToday;
            }
        }
예제 #11
0
 public override bool ShouldReplace(InteractionInstance interaction)
 {
     if (GoHere.Settings.mAllowGoHereStack)
     {
         return false;
     }
     else
     {
         return base.ShouldReplace(interaction);
     }
 }
예제 #12
0
        // Methods
        public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime)
        {
            base.OnTimePassed(interactionInstance, totalTime, deltaTime);

            ProSports career = OmniCareer.Career<ProSports>(base.Career);
            if ((career != null) && (career.CurLevel != null))
            {
                career.mPreparationForGame = Math.Min((float)100f, (float)(career.mPreparationForGame + ((deltaTime * ProSports.PrepareForGame.kPrepareForGamePerSimHour) / 60f)));
                this.OnProgressChanged(this);
            }
        }
예제 #13
0
파일: Burn.cs 프로젝트: Robobeurre/NRaas
 public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         Kill.OnAccepted(actor, target, SimDescription.DeathType.Burn);
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #14
0
        public override bool Test(InteractionInstance ii, out StringDelegate reason)
        {
            if (!base.Test(ii, out reason)) return false;

            Business career = OmniCareer.Career<Business>(Career);
            if ((career != null) && (career.CurLevel != null))
            {
                return OmniCareer.HasMetric<MetricMeetingsHeld>(Career);
            }
            return false;
        }
예제 #15
0
        public override bool Test(InteractionInstance ii, out StringDelegate reason)
        {
            if (!base.Test(ii, out reason)) return false;

            Education career = OmniCareer.Career<Education>(Career);
            if ((career != null) && (career.CurLevel != null))
            {
                return OmniCareer.HasMetric<MetricLecturesGiven>(Career);
            }
            return false;
        }
예제 #16
0
        // Methods
        public override void BeginCareerTone(InteractionInstance interactionInstance)
        {
            base.BeginCareerTone(interactionInstance);

            mTimeForStartOfTone = SimClock.ElapsedTime(TimeUnit.Hours);
            Business career = OmniCareer.Career<Business> (Career);
            if (career != null)
            {
                mMeetingsHeldBeforeStartOfTone = career.MeetingsHeldToday;
            }
        }
예제 #17
0
 public static void OnGiveGiftReject(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         Sim.GiveGift inst = i as Sim.GiveGift;
         DoAcceptReject(actor, target, inst);
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, interaction, e);
     }
 }
예제 #18
0
        // Methods
        public override void BeginCareerTone(InteractionInstance interactionInstance)
        {
            base.BeginCareerTone(interactionInstance);

            Criminal career = OmniCareer.Career<Criminal>(Career);
            if (career == null) return;

            if (career.TotalTimeToCompleteCurrentSideJob < 0.5f)
            {
                career.TotalTimeToCompleteCurrentSideJob = Criminal.DoASideJob.kNumHoursDoingSideJobsToGetBonus * (1f + RandomUtil.GetFloat(-Criminal.DoASideJob.kSideJobDurationVariance, Criminal.DoASideJob.kSideJobDurationVariance));
            }
        }
예제 #19
0
        public override void OnSelectionBegin(InteractionInstance interactionInstance)
        {
            try
            {
                new Task(this, interactionInstance).AddToSimulator();

                base.OnSelectionBegin(interactionInstance);
            }
            catch (Exception e)
            {
                Common.Exception(interactionInstance.InstanceActor, e);
            }
        }
예제 #20
0
        public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime)
        {
            base.OnTimePassed(interactionInstance, totalTime, deltaTime);

            Business career = OmniCareer.Career<Business>(Career);
            if (career != null)
            {
                float num = SimClock.ElapsedTime(TimeUnit.Hours) - mTimeForStartOfTone;
                if (((int)Math.Floor((double)(num / Business.kSimHoursToCallMeetingWothwhile))) > (career.MeetingsHeldToday - mMeetingsHeldBeforeStartOfTone))
                {
                    career.MeetingsHeldToday++;
                }
            }
        }
예제 #21
0
 public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         if ((actor.Household == Household.ActiveHousehold) || (target.Household == Household.ActiveHousehold))
         {
             Common.Notify(Common.Localize("AskAboutFunds:Result", target.IsFemale, new object[] { target, target.FamilyFunds }), target.ObjectId);
         }
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #22
0
 public static void AfterMoochSmallMoney(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         AfterMoochMoney(actor, target, TraitTuning.MoochTraitSmallMoneyMoochSkill, Math.Max(0x0, actor.SkillManager.GetSkillLevel(SkillNames.Mooch)));
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #23
0
 public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         PetSale.DisplayDialog(actor.SimDescription, target.Household, true);
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #24
0
        public override void OnSelectionBegin(InteractionInstance interactionInstance)
        {
            try
            {
                LoopingAnimationBase interaction = interactionInstance as LoopingAnimationBase;

                interaction.Paused = true;

                base.OnSelectionBegin(interactionInstance);
            }
            catch (Exception e)
            {
                Common.Exception(interactionInstance.InstanceActor, e);
            }
        }
예제 #25
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                string suffix = null;

                if ((target.SimDescription.mGenderPreferenceMale > 0) && (target.SimDescription.mGenderPreferenceFemale > 0))
                {
                    suffix = "Bi";
                }
                else if ((target.SimDescription.mGenderPreferenceMale == 0) && (target.SimDescription.mGenderPreferenceFemale == 0))
                {
                    suffix = "Undefined";
                }
                else if ((target.SimDescription.mGenderPreferenceMale <= 0) && (target.SimDescription.mGenderPreferenceFemale <= 0))
                {
                    suffix = "Celibate";
                }
                else if (target.IsFemale)
                {
                    if (target.SimDescription.mGenderPreferenceMale > 0)
                    {
                        suffix = "Hetro";
                    }
                    else
                    {
                        suffix = "Same";
                    }
                }
                else
                {
                    if (target.SimDescription.mGenderPreferenceMale > 0)
                    {
                        suffix = "Same";
                    }
                    else
                    {
                        suffix = "Hetro";
                    }
                }

                Common.Notify(Common.Localize("GenderPreference:" + suffix, target.IsFemale, new object[] { target }), target.ObjectId, ObjectGuid.InvalidObjectGuid, StyledNotification.NotificationStyle.kSimTalking);
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #26
0
        public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime)
        {
            base.OnTimePassed(interactionInstance, totalTime, deltaTime);

            Music career = base.Career as Music;
            if ((career != null) && (career.CurLevel != null))
            {
                career.mPreparationForConcert += (deltaTime * Music.PerformTone.kPrepareForConcertPerSimHour) / 60f;
            }
            if (career.mPreparationForConcert >= 100f)
            {
                career.mPreparationForConcert = 0f;
                career.ConcertsPerformed++;
                career.ShowOccupationTNS(LocalizeString(interactionInstance.InstanceActor.SimDescription, "ConcertPerformed", new object[] { career.OwnerDescription }));
            }
            this.OnProgressChanged(this);
        }
예제 #27
0
        private static InteractionInstance CreateGoHereWithInteractionInstance(SimRoutingComponent ths, Route r, List<Sim> followers, InteractionPriority priority, bool cancellableByPlayer, out InteractionInstance ownerInteraction, GoHereWithSituation.OnFailBehavior failureBehavior, Vector3 teleportLocation)
        {
            Sim properLeader = ths.GetProperLeader(ths.OwnerSim, followers);
            InteractionInstanceParameters parameters = new InteractionInstanceParameters(new InteractionObjectPair(LeaderGoHereWith.Singleton, Terrain.Singleton), properLeader, priority, false, cancellableByPlayer);
            LeaderGoHereWith with = LeaderGoHereWith.Singleton.CreateInstanceFromParameters(ref parameters) as LeaderGoHereWith;
            with.SetOwner(ths.OwnerSim);

            with.OnFailBehavior = failureBehavior;
            if (teleportLocation != Vector3.Invalid)
            {
                with.TeleportDestination = teleportLocation;
            }
            else if (failureBehavior == GoHereWithSituation.OnFailBehavior.Teleport)
            {
                with.TeleportDestination = r.GetDestPoint();
            }

            if (properLeader != ths.OwnerSim)
            {
                followers = new List<Sim>(followers);
                followers.Remove(properLeader);
                Route route = r.ShallowCopy();
                route.ExitReasonsInterrupt = r.ExitReasonsInterrupt;
                ths.UpdateRoutingOptionsFromLeader(properLeader, route);
                route.Follower = properLeader.Proxy;
                route.Replan();
                with.SetRouteToFollow(route);
            }
            else
            {
                with.SetRouteToFollow(r);
            }

            with.SetFollowers(followers);
            GoHereWithSituationEx.CreateSituation(with);
            if (properLeader != ths.OwnerSim)
            {
                ownerInteraction = new SlaveLeaderGoHereWith.Definition(with.Situation).CreateInstance(Terrain.Singleton, ths.OwnerSim, priority, false, cancellableByPlayer);
            }
            else
            {
                ownerInteraction = null;
            }

            return with;
        }
예제 #28
0
        public override bool Test(InteractionInstance ii, out StringDelegate reason)
        {
            try
            {
                LoopingAnimationBase interaction = ii as LoopingAnimationBase;

                mIterations = interaction.Iterations;

                return base.Test(ii, out reason);
            }
            catch (Exception e)
            {
                reason = null;

                Common.Exception(ii.InstanceActor, e);
                return false;
            }
        }
예제 #29
0
        public override void OnTimePassed(InteractionInstance interactionInstance, float totalTime, float deltaTime)
        {
            base.OnTimePassed(interactionInstance, totalTime, deltaTime);

            Education career = OmniCareer.Career<Education>(Career);
            if (career != null)
            {
                float num = SimClock.ElapsedTime(TimeUnit.Hours) - mTimeForStartOfTone;
                if (((int)Math.Floor((double)(num / Education.kSimHoursGiveLecturesWorthwhile))) > (career.LecturesGivenToday - mLecturesHeldBeforeStartOfTone))
                {
                    career.LecturesGivenToday++;
                    if ((Career.OwnerDescription != null) && (Career.OwnerDescription.CreatedSim != null))
                    {
                        EventTracker.SendEvent(EventTypeId.kGaveEducationLecture, Career.OwnerDescription.CreatedSim);
                    }
                }
            }
        }
예제 #30
0
        public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                int funds = RandomUtil.GetInt(NRaas.Careers.Settings.mMaxShakedown / 2, NRaas.Careers.Settings.mMaxShakedown);

                if (funds > target.FamilyFunds)
                {
                    funds = target.FamilyFunds;
                }

                if (funds <= 0) return;

                target.ModifyFunds(-funds);

                actor.ModifyFunds(funds);

                if (actor.IsSelectable)
                {
                    Common.Notify(actor, Common.Localize("Shakedown:Notice", actor.IsFemale, target.IsFemale, new object[] { actor, target, funds }));
                }

                Relationship relation = Relationship.Get(actor, target, true);
                if (relation != null)
                {
                    relation.LTR.UpdateLiking(NRaas.Careers.Settings.mShakedownRelationChange);
                }

                OmniCareer actorCareer = actor.Occupation as OmniCareer;
                if (actorCareer != null)
                {
                    actorCareer.AddShakedownFunds(funds);
                }
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #31
0
        public void PushRoleStartingInteraction(Actors.Sim sim)
        {
            try
            {
                //Message.Sender.Show("PushRoleStartingInteraction to " + (sim != null ? sim.FullName : "null"));
                if (sim != null)
                {
                    if (sim.LotCurrent == null || sim.LotCurrent != this.LotCurrent)
                    {
                        HomeBartender.forceSimToLot(sim);
                    }
                    else
                    {
                        LetSimIn(sim);
                        List <BarProfessional> bars   = this.LotCurrent.GetObjectsInRoom <BarProfessional>(this.RoomId);
                        BarProfessional        theBar = null;

                        foreach (BarProfessional bar in bars)
                        {
                            if (!isBarManned(bar))
                            {
                                theBar = bar;
                                break;
                            }
                        }

                        if (theBar != null)
                        {
                            InteractionInstance instance = TendHomeBar.Singleton.CreateInstance(theBar, sim,
                                                                                                new InteractionPriority(InteractionPriorityLevel.CriticalNPCBehavior), false, false);
                            sim.InteractionQueue.AddAfterCheckingForDuplicates(instance);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
예제 #32
0
        public void RevertCommodityGains()
        {
            foreach (KeyValuePair <Sim, PriorCommodities> sim in mCommodities)
            {
                try
                {
                    if (sim.Key.InteractionQueue == null)
                    {
                        continue;
                    }

                    InteractionInstance head = sim.Key.InteractionQueue.GetHeadInteraction();
                    if (head == null)
                    {
                        continue;
                    }

                    if (sim.Value.mInteraction != head)
                    {
                        continue;
                    }

                    head.mMotiveDeltas = sim.Value.mMotives;

                    sim.Value.EndSkillCommodityUpdates(head);

                    head.mSkillMultipliers = sim.Value.mSkillMultipliers;

                    sim.Value.BeginSkillCommodityUpdates(head, sim.Value.mSkillMultipliers, false, false);
                }
                catch (Exception e)
                {
                    Common.Exception(sim.Key, e);
                }
            }

            mCommodities.Clear();
        }
예제 #33
0
                public override bool Test(Sim a, BonehildaCoffin target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
                {
                    if (a == null || target == null)
                    {
                        return(false);
                    }


                    if (isAutonomous)
                    {
                        return(false);
                    }
                    SimDescription simd = a.SimDescription;

                    if (simd == null || simd.IsPet)
                    {
                        return(false);
                    }

                    if (simd.ToddlerOrBelow)
                    {
                        return(false);
                    }

                    if (a.Posture is SwimmingInPool)
                    {
                        return(false);
                    }
                    if (!target.BonehildaActive && target.mBonehildaSim != null)
                    {
                        if (target.BonehildaSim != null && target.BonehildaSim.InteractionQueue != null && target.BonehildaSim.InteractionQueue.HasInteractionOfType(Sims3.Gameplay.Objects.Environment.BonehildaCoffin.BonehildaReturnToCoffin.Singleton))
                        {
                            greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(BonehildaCoffin.LocalizeString("BonehildaReturningToCoffin", a));
                        }
                        return(false);
                    }
                    return(!target.BonehildaActive);
                }
예제 #34
0
파일: Busker.cs 프로젝트: yakoder/NRaas
        public static void OnPerformedConcert(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            if (actor.InteractionQueue == null)
            {
                return;
            }

            InteractionInstance interaction = actor.InteractionQueue.GetCurrentInteraction();

            if (interaction == null)
            {
                return;
            }

            ShowVenue venue = interaction.Target as ShowVenue;

            if (venue == null)
            {
                return;
            }

            foreach (SkillNames skill in MetricMusicSkill.Skills)
            {
                SkillBasedCareerBooter.UpdateExperience(actor, skill, (int)venue.ConcertPayAmount);
            }
        }
예제 #35
0
            public void OnCompleted(Sim a, float value)
            {
                try
                {
                    List <Sim> sims = new List <Sim>();
                    sims.Add(mObject.GetLeftSim());
                    sims.Add(mObject.GetRightSim());

                    if ((sims.Contains(mActor)) && (sims.Contains(mTarget)))
                    {
                        Common.DebugNotify("OnCompleted C");

                        Sim actor  = mActor;
                        Sim target = mTarget;

                        HotairBalloon.InBalloonPosture posture = mActor.Posture as HotairBalloon.InBalloonPosture;
                        if ((posture == null) || (!posture.IsXActor))
                        {
                            actor  = mTarget;
                            target = mActor;
                        }

                        InteractionInstance instance = HotairBalloon.Raise.Singleton.CreateInstanceWithCallbacks(mObject, actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, null, OnFailed2);
                        actor.InteractionQueue.Add(instance);

                        instance = mDefinition.CreateInstanceWithCallbacks(target, actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, null, OnFailed2);
                        actor.InteractionQueue.Add(instance);
                    }
                    else
                    {
                        Common.DebugNotify("OnCompleted A");
                    }
                }
                catch (Exception e)
                {
                    Common.Exception(mActor, mTarget, e);
                }
            }
예제 #36
0
        public static void PopulateFishingPoints()
        {
            if (sFishingPoints == null)
            {
                sFishingPoints = new List <Pair <Lot, GameObjectHit> >();

                foreach (Lot lot in LotManager.AllLots)
                {
                    Vector3[] vectorArray;
                    if (((lot != null) && !lot.IsWorldLot) && (World.FindPondRepresentativePositions(lot.LotId, out vectorArray) && (vectorArray.Length != 0x0)))
                    {
                        foreach (Vector3 vector in vectorArray)
                        {
                            GameObjectHit b = InteractionInstance.CreateFakeGameObjectHit(vector);
                            if ((b.mType == GameObjectHitType.WaterSea) || (b.mType == GameObjectHitType.WaterPond))
                            {
                                sFishingPoints.Add(new Pair <Lot, GameObjectHit>(lot, b));
                            }
                        }
                    }
                }
            }
        }
예제 #37
0
            public override bool Run()
            {
                List <Sim>    selectedSims    = new List <Sim>();
                List <object> selectedObjects = base.SelectedObjects;

                if (selectedObjects != null)
                {
                    foreach (object obj2 in selectedObjects)
                    {
                        selectedSims.Add(obj2 as Sim);
                    }
                }

                //Loop through the sims and add them the eating interaction
                foreach (Sim sim in selectedSims)
                {
                    InteractionInstance ii = BuyCoffee.BuyCoffeeSingleton.CreateInstance(base.Target.CurrentRole.SimInRole, sim, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);
                    sim.InteractionQueue.AddNext(ii);
                    //  sim.InteractionQueue.Add(ii);
                }

                return(true);
            }
예제 #38
0
 public override bool Test(Sim a, WashingMachine target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
 {
     if (!target.CanDoLaundry())
     {
         return(false);
     }
     if (target.mWashState == WashingMachine.WashState.HasDirtyLaundry)
     {
         return(true);
     }
     if (a.IsSelectable && target.LotCurrent.IsCommunityLot && a.FamilyFunds < target.Tuning.kCostToOperate)
     {
         greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(WashingMachine.LocalizeString("InsufficientFunds"));
         return(false);
     }
     if (!target.LotCurrent.IsResidentialLot)
     {
         return(true);
     }
     if (Sims3.Gameplay.Queries.CountObjects <ClothingPileDry>(target.LotCurrent) > 0U)
     {
         return(true);
     }
     foreach (Hamper hamper in target.LotCurrent.GetObjects <Hamper>())
     {
         if (hamper.HasClothingPiles())
         {
             return(true);
         }
     }
     if (a.Inventory.ContainsType(typeof(ClothingPileDry), 1))
     {
         return(true);
     }
     greyedOutTooltipCallback = new GreyedOutTooltipCallback(WashingMachine.DoLaundry.Definition.NoLaundryTooltip);
     return(false);
 }
예제 #39
0
            public override bool Test(Sim a, ScienceResearchStation target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (target.Repairable.Broken)
                {
                    greyedOutTooltipCallback = new GreyedOutTooltipCallback(target.StationIsBroken);
                    return(false);
                }
                ScienceSkill element = (ScienceSkill)a.SkillManager.GetElement(SkillNames.Science);

                if ((element == null) || (element.SkillLevel < ScientificSample.CloneFromSample.MinScienceSkillLevel))
                {
                    greyedOutTooltipCallback = new GreyedOutTooltipCallback(ScienceResearchStation.DisplayLevelTooLowTooltip);
                    return(false);
                }
                new List <InventoryStack>();
                bool flag = false;

                foreach (InventoryStack stack in a.Inventory.InventoryItems.Values)
                {
                    ScientificSample sample = null;
                    if (stack != null)
                    {
                        sample = stack.List[0].Object as ScientificSample;
                    }
                    if ((sample != null) && ((sample.ScientificSampleType != ScientificSample.SampleType.Dna) /*|| (!GameUtils.IsUniversityWorld() && a.Household.CanAddSpeciesToHousehold(CASAgeGenderFlags.None | CASAgeGenderFlags.Human))*/))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(ScienceResearchStation.LocalizeString("SampleNotPresent", new object[0]));
                    return(false);
                }
                return(flag);
            }
예제 #40
0
            public override bool Test(Sim a, PingPongTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (target.InUse)
                {
                    if (!target.IsHaunted)
                    {
                        if (target.IsActorUsingMe(a))
                        {
                            return(true);
                        }

                        greyedOutTooltipCallback = delegate
                        {
                            return(PingPongTable.LocalizeString("PingPongTableInUse", new object[0]));
                        };
                    }

                    return(false);
                }

                if (!Woohooer.Settings.mUnlockTeenActions)
                {
                    if (a.SimDescription.TeenOrBelow)
                    {
                        return(false);
                    }
                }

                if (PingPongTable.GetPotentialPlayers(a, target.LotCurrent, !Woohooer.Settings.mUnlockTeenActions, true).Count == 0)
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Localization.LocalizeString(a.IsFemale, "Gameplay/Objects/Toys/PlayCatchObject:NoOneToPlayWith", new object[0]));
                    return(false);
                }

                return(true);
            }
예제 #41
0
            protected override void OnPerform()
            {
                WoohooLocationControl location = null;

                if (mObject == null)
                {
                    mObject = GetRandomObject(mActor.SimDescription, out location);
                }

                if ((mObject == null) || (location == null))
                {
                    return;
                }

                InteractionDefinition interaction = location.GetInteraction(mActor, mTarget, mStyle);

                if (interaction != null)
                {
                    IWooHooDefinition woohooDefinition = interaction as IWooHooDefinition;
                    if (woohooDefinition != null)
                    {
                        woohooDefinition.Attempts = mAttempts;
                    }

                    InteractionInstance instance = interaction.CreateInstance(mObject, mActor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);

                    if ((mActor.InteractionQueue != null) && (mActor.InteractionQueue.Add(instance)))
                    {
                        ScoringLookup.IncStat("Push Success " + location + " " + mStyle);
                    }
                    else
                    {
                        ScoringLookup.IncStat("Push Fail " + location + " " + mStyle);
                    }
                }
            }
예제 #42
0
        public static bool PreTimeTravel2(InteractionInstance ths)
        {
            Sim actor = ths.InstanceActor as Sim;

            if (GameUtils.IsFutureWorld())
            {
                EventTracker.SendEvent(EventTypeId.kTravelToPresent, actor);
            }
            else
            {
                EventTracker.SendEvent(EventTypeId.kTravelToFuture, actor);
            }

            ths.StandardEntry();
            ths.BeginCommodityUpdates();
            BuffTransformation transformBuff = actor.BuffManager.TransformBuff;

            if (transformBuff != null)
            {
                actor.BuffManager.RemoveElement(transformBuff.Guid);
            }

            return(true);
        }
예제 #43
0
            public override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                /*
                 * if (a.SimDescription.IsVisuallyPregnant)
                 * {
                 *  return false;
                 * }
                 * if (target.SimDescription.IsVisuallyPregnant)
                 * {
                 *  return false;
                 * }
                 */

                InteractionInstance currentInteraction = a.CurrentInteraction;

                if (((currentInteraction != null) && (currentInteraction.Target == target)) && ((currentInteraction is CuddleSeated) || (currentInteraction is NestedCuddleInteraction)))
                {
                    return(false);
                }

                string reason;

                return(CommonSocials.CanGetRomantic(a, target, isAutonomous, false, true, ref greyedOutTooltipCallback, out reason) && CanCuddle(a, target, ref greyedOutTooltipCallback, true));
            }
예제 #44
0
 public override CommonWoohoo.WoohooStyle GetStyle(InteractionInstance paramInteraction)
 {
     return(CommonWoohoo.WoohooStyle.TryForBaby);
 }
예제 #45
0
            public override bool Run()
            {
                bool           flag           = this.Actor.LotCurrent == this.Target;
                SimDescription simDescription = this.Actor.SimDescription;
                Lot            virtualLotHome = simDescription.VirtualLotHome;

                if (this.SimWalkStyle != Sim.WalkStyle.AutoSelect)
                {
                    this.Actor.RequestWalkStyle(this.SimWalkStyle);
                }
                if (!flag)
                {
                    if (virtualLotHome != null)
                    {
                        BuildableShell[] buildableShells = this.Target.BuildableShells;
                        if (buildableShells.Length > 0)
                        {
                            if (!buildableShells[0].RouteInsideShell(this.Actor))
                            {
                                if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                                {
                                    return(true);
                                }
                                this.Actor.FadeOut(true, true);
                                Simulator.Sleep(uint.MaxValue);
                                return(true);
                            }
                        }
                        else if (!this.Actor.RouteToLot(virtualLotHome.LotId))
                        {
                            if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                            {
                                return(true);
                            }
                            this.Actor.FadeOut(true, true);
                            Simulator.Sleep(uint.MaxValue);
                            return(true);
                        }
                    }
                    else
                    {
                        Route route = this.Actor.CreateRoute();
                        this.Target.PlanToLotEx(route);
                        if (route.PlanResult.Succeeded())
                        {
                            this.Actor.DoRoute(route);
                        }
                    }
                }
                if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                {
                    return(true);
                }
                if (simDescription.Household != null && simDescription.Household.IsTouristHousehold)
                {
                    Sim.GoToVirtualHome.SendTouristHome(simDescription);
                }
                else if (simDescription.Household != null && simDescription.Household.IsAlienHousehold)
                {
                    (Sims3.UI.Responder.Instance.HudModel as HudModel).OnSimCurrentWorldChanged(false, simDescription);
                    if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                    {
                        return(true);
                    }
                    this.Actor.FadeOut(true, true);
                }
                else if (virtualLotHome != null)
                {
                    if (!flag && RandomUtil.RandomChance01(this.kAutonomuousReactionChanceOnGoingToVirtualHome))
                    {
                        simDescription.ShowSocialsOnSim = true;
                        simDescription.MotivesDontDecay = false;
                        InteractionInstance interactionInstance = this.Actor.Autonomy.FindBestActionForCommodityOnLot(CommodityKind.None, virtualLotHome, AutonomySearchType.Generic);
                        if (interactionInstance == null)
                        {
                            this.Actor.Motives.SetMotivesToTimedDefaultsAndRemoveBuffs(false);
                            interactionInstance = this.Actor.Autonomy.FindBestActionForCommodityOnLot(CommodityKind.None, virtualLotHome, AutonomySearchType.Generic);
                        }
                        if (interactionInstance != null)
                        {
                            interactionInstance = interactionInstance.InteractionDefinition.CreateInstanceWithCallbacks(interactionInstance.Target, this.Actor, interactionInstance.GetPriority(), interactionInstance.Autonomous, interactionInstance.CancellableByPlayer, null, new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone), new Callback(DGSGoToVirtualHome.DGSGoToVirtualHomeInternal.OnAutonomousDone));
                            this.Actor.InteractionQueue.AddNext(interactionInstance);
                            return(true);
                        }
                    }
                    Door associatedNPCDoor = virtualLotHome.GetAssociatedNPCDoor(this.Actor.SimDescription);
                    Slot slot;
                    if (associatedNPCDoor != null && this.Actor.RouteToSlotListAndCheckInUse(associatedNPCDoor, new Slot[]
                    {
                        Door.RoutingSlots.Upgrade_Front,
                        Door.RoutingSlots.Upgrade_Rear
                    }, out slot))
                    {
                        Audio.StartObjectSound(associatedNPCDoor.ObjectId, "shell_door_apt_open", false);
                        if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                        {
                            return(true);
                        }
                        this.Actor.FadeOut(true, true);
                        Simulator.Sleep(uint.MaxValue);
                        return(true);
                    }
                    int   num    = int.MaxValue;
                    Route route2 = null;
                    foreach (ElevatorDoors elevatorDoors in virtualLotHome.GetObjects <ElevatorDoors>())
                    {
                        int num2 = Math.Abs(this.Actor.Level - elevatorDoors.Level);
                        if (num2 < num)
                        {
                            Route route3 = this.Actor.CreateRoute();
                            if (route3.PlanToSlot(elevatorDoors, Slot.RoutingSlot_0).Succeeded())
                            {
                                route2 = route3;
                                num    = num2;
                            }
                        }
                    }
                    if (route2 != null)
                    {
                        route2.DoRouteFail = false;
                        this.Actor.DoRoute(route2);
                    }
                    if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                    {
                        return(true);
                    }
                    this.Actor.FadeOut(true, true);
                }
                else
                {
                    if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                    {
                        return(true);
                    }
                    this.Actor.FadeOut(true, true);
                }
                Simulator.Sleep(uint.MaxValue);
                return(true);
            }
예제 #46
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                string suffix = null;

                if ((target.SimDescription.mGenderPreferenceMale > 0) && (target.SimDescription.mGenderPreferenceFemale > 0))
                {
                    suffix = "Bi";
                }
                else if ((target.SimDescription.mGenderPreferenceMale == 0) && (target.SimDescription.mGenderPreferenceFemale == 0))
                {
                    suffix = "Undefined";
                }
                else if ((target.SimDescription.mGenderPreferenceMale <= 0) && (target.SimDescription.mGenderPreferenceFemale <= 0))
                {
                    suffix = "Celibate";
                }
                else if (target.IsFemale)
                {
                    if (target.SimDescription.mGenderPreferenceMale > 0)
                    {
                        suffix = "Hetro";
                    }
                    else
                    {
                        suffix = "Same";
                    }
                }
                else
                {
                    if (target.SimDescription.mGenderPreferenceMale > 0)
                    {
                        suffix = "Same";
                    }
                    else
                    {
                        suffix = "Hetro";
                    }
                }

                Common.Notify(Common.Localize("GenderPreference:" + suffix, target.IsFemale, new object[] { target }), target.ObjectId, ObjectGuid.InvalidObjectGuid, StyledNotification.NotificationStyle.kSimTalking);
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #47
0
 public override bool JoinInProgress(Sim actor, Sim target, ActorTrailer obj, InteractionInstance interaction)
 {
     if ((obj.ActorsUsingMe.Contains(actor)) || (obj.ActorsUsingMe.Contains(target)))
     {
         PushWooHoo(actor, target, obj);
         return(true);
     }
     else
     {
         return(base.JoinInProgress(actor, target, obj, interaction));
     }
 }
예제 #48
0
        public static bool PreTimeTravel1(InteractionInstance ths, ITravelWith travelWith, List <Sim> travelers)
        {
            Sim actor = ths.InstanceActor as Sim;

            if (!UIUtils.IsOkayToStartModalDialog())
            {
                return(false);
            }

            if (GameUtils.IsFutureWorld())
            {
                foreach (Sim sim in actor.Household.Sims)
                {
                    if (sim != actor)
                    {
                        GreyedOutTooltipCallback callback = null;
                        if (TravelerSpace.Helpers.TravelUtilEx.CanSimTriggerTravelToFutureWorld(sim, true, ref callback))
                        {
                            Lazy.Add <List <Sim>, Sim>(ref travelers, sim);
                        }
                    }
                }
            }
            else
            {
                travelers.AddRange(ths.GetSelectedObjectsAsSims());
            }

            if (travelers.Count == 0)
            {
                return(false);
            }

            if ((actor.OpportunityManager != null) && actor.OpportunityManager.HasOpportunity(OpportunityNames.EP11_HelpingTheTimeTraveler01))
            {
                return(false);
            }

            string portal;

            TravelUtil.PlayerMadeTravelRequest = true;
            Dictionary <Sim, OpportunityNames> dictionary = CheckOpportunities(actor, travelers);

            if (GameUtils.IsFutureWorld())
            {
                portal = TimePortal.LocalizeString("ConfirmReturnWith", new object[0x0]);
            }
            else if (dictionary.Count > 0x0)
            {
                portal = TimePortal.LocalizeString("ConfirmTravelWith", new object[0x0]) + TimePortal.LocalizeString("ConfirmWarningTravelWith", new object[0x0]);
            }
            else
            {
                portal = TimePortal.LocalizeString("ConfirmTravelWith", new object[0x0]);
            }

            if (!TwoButtonDialog.Show(portal, Localization.LocalizeString("Ui/Caption/Global:Accept", new object[0x0]), Localization.LocalizeString("Ui/Caption/Global:Cancel", new object[0x0])))
            {
                return(false);
            }

            ths.CancellableByPlayer = false;
            //Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Ui/Caption/HUD/DisasterSaveError:Traveling");
            if (dictionary.Count > 0x0)
            {
                foreach (Sim sim2 in dictionary.Keys)
                {
                    if (sim2.OpportunityManager != null)
                    {
                        sim2.OpportunityManager.CancelOpportunity(dictionary[sim2]);
                    }
                }
            }

            if ((GameUtils.IsFutureWorld() && (actor.OpportunityManager != null)) && actor.OpportunityManager.HasOpportunity(OpportunityNames.EP11_RecalibrateDefenseGrid))
            {
                actor.OpportunityManager.CancelOpportunity(OpportunityNames.EP11_RecalibrateDefenseGrid);
            }

            foreach (Sim sim3 in travelers)
            {
                travelWith.AddFollower(sim3);
            }

            return(true);
        }
예제 #49
0
        public override bool Run()
        {
            try
            {
                if (Actor.LotCurrent != Target)
                {
                    Vector3 point = World.LotGetPtInside(Target.LotId);
                    if (point == Vector3.Invalid)
                    {
                        return(false);
                    }
                    if (!Actor.RouteToPointRadius(point, 3f) && (!GlobalFunctions.PlaceAtGoodLocation(Actor, new World.FindGoodLocationParams(point), false) || !SimEx.IsPointInLotSafelyRoutable(Actor, Target, Actor.Position)))
                    {
                        Actor.AttemptToPutInSafeLocation(true);
                    }
                }

                Sim   destObj          = null;
                float negativeInfinity = float.NegativeInfinity;
                foreach (Sim sim2 in Actor.Household.Sims)
                {
                    if ((sim2.IsHuman && sim2.IsAtHome) && !sim2.IsSleeping)
                    {
                        Relationship relationship = Relationship.Get(Actor, sim2, false);
                        if ((relationship != null) && (relationship.LTR.Liking > negativeInfinity))
                        {
                            destObj          = sim2;
                            negativeInfinity = relationship.LTR.Liking;
                        }
                    }
                }

                if (destObj != null)
                {
                    Actor.RouteToDynamicObjectRadius(destObj, kRouteToHighRelSimRange[0x0], kRouteToHighRelSimRange[0x1], null, new Route.RouteOption[] { Route.RouteOption.DoLineOfSightCheckUserOverride });
                }

                string instanceName = null;
                switch (Actor.SimDescription.Species)
                {
                case CASAgeGenderFlags.Dog:
                    instanceName = "dogPregnantJig";
                    break;

                case CASAgeGenderFlags.LittleDog:
                    instanceName = "smallDogPregnantJig";
                    break;

                case CASAgeGenderFlags.Horse:
                    instanceName = "horsePregnantJig";
                    break;

                case CASAgeGenderFlags.Cat:
                    instanceName = "catPregnantJig";
                    break;
                }

                if (instanceName != null)
                {
                    mPetPregnancyJig = GlobalFunctions.CreateObjectOutOfWorld(instanceName, ProductVersion.EP5) as SocialJigOnePerson;
                    if (mPetPregnancyJig != null)
                    {
                        mPetPregnancyJig.RegisterParticipants(Actor, null);
                        Vector3 position      = Actor.Position;
                        Vector3 forwardVector = Actor.ForwardVector;
                        if (GlobalFunctions.FindGoodLocationNearby(mPetPregnancyJig, ref position, ref forwardVector))
                        {
                            mPetPregnancyJig.SetPosition(position);
                            mPetPregnancyJig.SetForward(forwardVector);
                            mPetPregnancyJig.AddToWorld();
                            Route r = mPetPregnancyJig.RouteToJigA(Actor);
                            if (!Actor.DoRoute(r))
                            {
                                mPetPregnancyJig.Destroy();
                                mPetPregnancyJig = null;
                            }
                        }
                        else
                        {
                            mPetPregnancyJig.Destroy();
                            mPetPregnancyJig = null;
                        }
                    }
                }

                StandardEntry();
                BeginCommodityUpdates();
                EnterStateMachine("GiveBirth", "Enter", "x");
                AnimateSim("LieDown");
                if (Actor.IsSelectable)
                {
                    try
                    {
                        Sims3.Gameplay.Gameflow.Singleton.DisableSave(this, "Gameplay/ActorSystems/PetPregnancy:DisableSave");

                        // Custom
                        HaveBabyHomeEx.EnsureForeignFather(Actor.SimDescription.Pregnancy);

                        mOffspring = new Proxies.PetPregnancyProxy(Actor.SimDescription.Pregnancy).CreateNewborns(0f, true, true);
                        int num2 = 0x0;
                        foreach (Sim sim3 in mOffspring)
                        {
                            sim3.SimDescription.IsNeverSelectable = true;
                            if (mPetPregnancyJig != null)
                            {
                                Slot slotName = kPregnancyJigContainmentSlots[num2++];
                                sim3.SetPosition(mPetPregnancyJig.GetPositionOfSlot(slotName));
                                sim3.SetForward(mPetPregnancyJig.GetForwardOfSlot(slotName));
                                InteractionInstance entry = Pregnancy.BabyPetLieDown.Singleton.CreateInstance(sim3, sim3, new InteractionPriority(InteractionPriorityLevel.Autonomous), true, true);
                                entry.Hidden = true;
                                sim3.InteractionQueue.AddNext(entry);
                            }
                            else
                            {
                                World.FindGoodLocationParams fglParams = new World.FindGoodLocationParams(Actor.Position);
                                fglParams.RequiredRoomID = Actor.RoomId;
                                if ((!GlobalFunctions.PlaceAtGoodLocation(sim3, fglParams, false) || !sim3.IsPointInLotSafelyRoutable(sim3.LotCurrent, sim3.Position)) && !sim3.AttemptToPutInSafeLocation(true))
                                {
                                    sim3.SetPosition(Actor.Position);
                                }
                            }
                        }
                    }
                    finally
                    {
                        Sims3.Gameplay.Gameflow.Singleton.EnableSave(this);
                    }
                }

                // Custom call
                bool flag = DoLoop(ExitReason.Finished, GiveBirthLoopFunc, mCurrentStateMachine);
                AnimateSim("Exit");
                StandardExit();
                return(flag);
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
예제 #50
0
파일: SimWoohoo.cs 프로젝트: yakoder/NRaas
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                ScoringLookup.IncStat("OnAccept Woohoo");

                if (Common.kDebugging)
                {
                    Woohooer.DebugNotify("Woohoo" + Common.NewLine + actor.FullName + Common.NewLine + target.FullName, actor, target);
                }

                WooHooSocialInteraction woohooSocial = i as WooHooSocialInteraction;
                if (woohooSocial != null)
                {
                    woohooSocial.PushWooHoo(actor, target);
                }
                else
                {
                    new CommonWoohoo.PushWoohoo(actor, target, i.Autonomous, CommonWoohoo.WoohooStyle.Safe);
                }
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #51
0
        public static void OnAccept(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
        {
            try
            {
                foreach (DiseaseVector vector in Vector.Settings.GetVectors(target))
                {
                    if (vector.ShowingSigns)
                    {
                        if (vector.IsContagious)
                        {
                            Common.Notify(target, Common.Localize("AskContagious:Success", target.IsFemale, new object[] { target }));
                            return;
                        }
                    }
                }

                Common.Notify(target, Common.Localize("AskContagious:Failure", target.IsFemale, new object[] { target }));
            }
            catch (Exception e)
            {
                Common.Exception(actor, target, e);
            }
        }
예제 #52
0
        public override void Perform(Sim sim, DiseaseVector vector)
        {
            if (SimTypes.IsDead(sim.SimDescription))
            {
                return;
            }

            if (!mAllowActive)
            {
                if (SimTypes.IsSelectable(sim.SimDescription))
                {
                    return;
                }
            }

            bool found = false;

            foreach (Sim other in sim.LotCurrent.GetSims())
            {
                if (other == sim)
                {
                    continue;
                }

                if (ScoringLookup.GetScore(mScoring, other.SimDescription) >= mMinimum)
                {
                    found = true;
                    break;
                }
            }

            if (found)
            {
                return;
            }

            List <Lot> lots = new List <Lot>(LotManager.sLots.Values);

            while (lots.Count > 0)
            {
                Lot lot = RandomUtil.GetRandomObjectFromList(lots);
                lots.Remove(lot);

                if (lot.IsWorldLot)
                {
                    continue;
                }

                if (lot == sim.LotCurrent)
                {
                    continue;
                }

                foreach (Sim other in lot.GetSims())
                {
                    if (ScoringLookup.GetScore(mScoring, other.SimDescription) >= mMinimum)
                    {
                        InteractionDefinition definition = null;

                        if (lot.IsCommunityLot)
                        {
                            definition = VisitCommunityLot.Singleton;
                        }
                        else
                        {
                            if (sim.IsGreetedOnLot(lot))
                            {
                                definition = GoToLot.Singleton;
                            }
                            else
                            {
                                definition = VisitLot.Singleton;
                            }
                        }

                        InteractionInstance instance = definition.CreateInstance(lot, sim, new InteractionPriority(InteractionPriorityLevel.Autonomous), true, true);
                        sim.InteractionQueue.Add(instance);

                        return;
                    }
                }
            }
        }
예제 #53
0
 public override bool ShouldReplace(InteractionInstance interaction)
 {
     // Allows stacking
     return(false);
 }
예제 #54
0
        public static void OnChessWon(Event e)
        {
            Sim actor = e.Actor as Sim;

            if (actor == null)
            {
                return;
            }

            if ((actor.Household == null) || (actor.Household.IsSpecialHousehold))
            {
                return;
            }

            Sim target = e.TargetObject as Sim;

            if (target == null)
            {
                return;
            }

            if (target.SimDescription.ChildOrBelow)
            {
                return;
            }

            if (actor.Household == target.Household)
            {
                return;
            }

            if (actor.InteractionQueue == null)
            {
                return;
            }

            InteractionInstance instance = actor.InteractionQueue.GetCurrentInteraction();

            if (instance == null)
            {
                return;
            }

            ChessTable.PracticeChess practice = instance as ChessTable.PracticeChess;
            if (practice == null)
            {
                return;
            }

            if (practice.Target == null)
            {
                return;
            }

            if (practice.Target.mbPlayingForChessRank)
            {
                return;
            }

            int actorCash  = SkillBasedCareerBooter.GetCareerPay(actor, SkillNames.Chess);
            int targetCash = SkillBasedCareerBooter.GetCareerPay(target, SkillNames.Chess);

            if (actorCash < targetCash)
            {
                actorCash = targetCash;
            }

            if (actorCash == 0)
            {
                return;
            }

            if (actor.SkillManager == null)
            {
                return;
            }

            int diff = actor.SkillManager.GetSkillLevel(SkillNames.Chess);

            if (target.SkillManager != null)
            {
                diff -= target.SkillManager.GetSkillLevel(SkillNames.Chess);
            }

            if (diff < 0)
            {
                diff = -diff;
            }

            if (diff != 0)
            {
                actorCash /= diff;
            }

            if (actorCash > target.FamilyFunds)
            {
                actorCash = target.FamilyFunds;
                if (actorCash == 0)
                {
                    Common.Notify(Common.Localize("ChessPlayer:UnableToPay"), target.ObjectId);

                    if (actor.InteractionQueue != null)
                    {
                        actor.InteractionQueue.CancelAllInteractions();
                    }
                    return;
                }
            }

            actor.ModifyFunds(actorCash);

            target.ModifyFunds(-actorCash);

            SkillBasedCareerBooter.UpdateExperience(actor, SkillNames.Chess, actorCash);
        }
예제 #55
0
파일: AnnexEx.cs 프로젝트: yakoder/NRaas
            protected override void OnPerform()
            {
                Common.DebugNotify("StartGraduationCeremonyTask:OnPerform");

                if (mThs.IsAGraduationCeremonyInProgressAndIfNecessaryStartOne())
                {
                    foreach (SimDescription sim in new List <SimDescription>(mThs.mGraduatingSims.Keys))
                    {
                        try
                        {
                            Instantiation.PerformOffLot(sim, mThs.RabbitHoleProxy.LotCurrent, null);

                            if ((sim.CreatedSim != null) && (sim.CreatedSim.InteractionQueue != null))
                            {
                                sim.CreatedSim.ShowTNSIfSelectable(TNSNames.CollegeGraduationStarting, null, sim.CreatedSim, new object[] { sim.CreatedSim });
                                Annex.UniversityGraduationCeremony entry = Annex.UniversityGraduationCeremony.Singleton.CreateInstance(mThs, sim.CreatedSim, new InteractionPriority(InteractionPriorityLevel.High), false, true) as Annex.UniversityGraduationCeremony;
                                sim.CreatedSim.InteractionQueue.AddNext(entry);
                                ActiveTopic.RemoveTopicFromSim(sim.CreatedSim, "University Graduation");
                            }
                        }
                        catch (Exception e)
                        {
                            Common.Exception(sim, e);
                        }
                    }

                    Dictionary <ulong, SimDescription> loadedSims = SimListing.GetResidents(false);

                    foreach (MiniSimDescription sim in new List <MiniSimDescription>(mThs.mForeignVisitors))
                    {
                        try
                        {
                            // Custom
                            //   EA Standard attempts to reimport existing sims without checking
                            SimDescription local;
                            if (loadedSims.TryGetValue(sim.SimDescriptionId, out local))
                            {
                                if (!mThs.mLocalVisitors.Contains(local))
                                {
                                    mThs.mLocalVisitors.Add(local);
                                }
                            }
                            else
                            {
                                SimDescription simDescription = MiniSims.UnpackSimAndUpdateRel(sim);
                                if (simDescription != null)
                                {
                                    Household.CreateTouristHousehold();
                                    Household.TouristHousehold.AddTemporary(simDescription);
                                    sim.Instantiated = true;
                                    (Responder.Instance.HudModel as Sims3.Gameplay.UI.HudModel).OnSimCurrentWorldChanged(true, sim);

                                    if (simDescription.AgingState != null)
                                    {
                                        simDescription.AgingState.MergeTravelInformation(sim);
                                    }

                                    mThs.mLocalVisitors.Add(simDescription);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Common.Exception(sim, e);
                        }
                    }

                    Dictionary <SimDescription, bool> performed = new Dictionary <SimDescription, bool>();

                    foreach (SimDescription sim in new List <SimDescription>(mThs.mLocalVisitors))
                    {
                        try
                        {
                            if (mThs.mGraduatingSims.ContainsKey(sim))
                            {
                                continue;
                            }

                            if (performed.ContainsKey(sim))
                            {
                                continue;
                            }
                            performed[sim] = true;

                            Instantiation.PerformOffLot(sim, mThs.RabbitHoleProxy.LotCurrent, null);

                            if ((sim.CreatedSim != null) && (sim.CreatedSim.InteractionQueue != null))
                            {
                                InteractionInstance instance = Annex.AttendGraduationCeremony.Singleton.CreateInstance(mThs, sim.CreatedSim, new InteractionPriority(InteractionPriorityLevel.High), true, true);
                                sim.CreatedSim.InteractionQueue.AddNext(instance);
                            }
                        }
                        catch (Exception e)
                        {
                            Common.Exception(sim, e);
                        }
                    }
                }
            }
예제 #56
0
파일: Thirst.cs 프로젝트: yakoder/NRaas
 public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         Kill.OnAccepted(actor, target, SimDescription.DeathType.Thirst);
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #57
0
        public override bool Run()
        {
            VisitSituation.OnSimLeavingLot(this.Actor);
            Lot lot = this.Actor.SimDescription.VirtualLotHome;

            if (lot == null)
            {
                List <Lot> list = new List <Lot>();
                foreach (object obj in LotManager.AllLotsWithoutCommonExceptions)
                {
                    Lot lot2 = (Lot)obj;
                    if (lot2 != this.Actor.LotCurrent && lot2.LotId != 18446744073709551615UL)
                    {
                        list.Add(lot2);
                    }
                }
                if (list.Count > 0)
                {
                    lot = RandomUtil.GetRandomObjectFromList <Lot>(list);
                }
            }
            GroupingSituation.RemoveSimFromGroupSituation(this.Actor);
            if (this.Actor.LotCurrent.CommercialLotSubType == CommercialLotSubType.kEP10_Resort && this.Actor.IsHuman && this.Actor.SimDescription.ChildOrAbove && (this.Actor.SimDescription.AssignedRole == null || this.Actor.SimDescription.AssignedRole.Type != Role.RoleType.Paparazzi))
            {
                IResortTower[] objects = this.Actor.LotCurrent.GetObjects <IResortTower>();
                if (objects.Length > 0)
                {
                    IResortTower        randomObjectFromList = RandomUtil.GetRandomObjectFromList <IResortTower>(objects);
                    InteractionInstance instance             = randomObjectFromList.GetEnterTowerDefinition().CreateInstance(randomObjectFromList, this.Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), base.Autonomous, false);
                    if (this.Actor.InteractionQueue.PushAsContinuation(instance, false))
                    {
                        return(true);
                    }
                }
            }
            InteractionInstance interactionInstance = null;

            if (lot != null)
            {
                DGSGoToVirtualHomeInternal goToVirtualHomeInternal;
                if (this.SuccessCallbackForSequence != null || this.FailureCallbackForSequence != null)
                {
                    goToVirtualHomeInternal = (DGSGoToVirtualHomeInternal.Singleton.CreateInstanceWithCallbacks(lot, this.Actor, this.Actor.InheritedPriority(), base.Autonomous, base.CancellableByPlayer, null, this.SuccessCallbackForSequence, this.FailureCallbackForSequence) as DGSGoToVirtualHomeInternal);
                }
                else
                {
                    goToVirtualHomeInternal = (DGSGoToVirtualHomeInternal.Singleton.CreateInstance(lot, this.Actor, this.Actor.InheritedPriority(), base.Autonomous, base.CancellableByPlayer) as DGSGoToVirtualHomeInternal);
                }
                goToVirtualHomeInternal.SimWalkStyle = this.SimWalkStyle;
                if (base.TryPushAsContinuation(goToVirtualHomeInternal))
                {
                    interactionInstance = goToVirtualHomeInternal;
                }
            }
            if (lot == null || interactionInstance == null || !this.Actor.InteractionQueue.HasInteraction(interactionInstance))
            {
                SimDescription simDescription = this.Actor.SimDescription;
                if (simDescription.Household != null && simDescription.Household.IsTouristHousehold)
                {
                    Sim.GoToVirtualHome.SendTouristHome(simDescription);
                }
                else
                {
                    if (DGSCommon.IsExtKillSimNiecAndYLevel(Actor))
                    {
                        return(true);
                    }
                    this.Actor.FadeOut(true, true);
                }
                Simulator.Sleep(uint.MaxValue);
            }
            return(true);
        }
예제 #58
0
            public static bool PublicTest(Sim actor, GameObject target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if ((target.Repairable != null) && target.Repairable.Broken)
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("Broken");
                    return(false);
                }

                if (TravelUtil.PlayerMadeTravelRequest)
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("PlayerMadeTravelRequest");
                    return(false);
                }

                if (target.InUse && !target.IsActorUsingMe(actor))
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("InUse");
                    return(false);
                }

                CauseEffectService instance = CauseEffectService.GetInstance();

                if ((instance != null) && !instance.ShouldShowTimeAlmanacButton())
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("ShouldShowTimeAlmanacButton");
                    return(false);
                }

                if (actor.BuffManager.HasElement(BuffNames.Ensorcelled))
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("Ensorcelled");
                    return(false);
                }

                if (actor.Household.Sims.Count <= 0x1)
                {
                    greyedOutTooltipCallback = Common.DebugTooltip("Single");
                    return(false);
                }

                // Custom
                if (!TravelerSpace.Helpers.TravelUtilEx.CanSimTriggerTravelToFutureWorld(actor, true, ref greyedOutTooltipCallback))
                {
                    return(false);
                }

                if (GameUtils.IsFutureWorld())
                {
                    foreach (Sim sim in Households.AllSims(actor.Household))
                    {
                        // Custom
                        if ((sim != actor) && !TravelerSpace.Helpers.TravelUtilEx.CanSimTriggerTravelToFutureWorld(sim, true, ref greyedOutTooltipCallback))
                        {
                            //greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Localization.LocalizeString(actor.IsFemale, TimePortal.sLocalizationKey + ":UnfitForTravel", new object[] { actor }));
                            return(false);
                        }
                    }
                }
                else
                {
                    Common.StringBuilder result = new Common.StringBuilder();

                    List <Sim> list = new List <Sim>();
                    foreach (Sim sim2 in Households.AllSims(actor.Household))
                    {
                        // Custom
                        if ((sim2 != actor) && TravelerSpace.Helpers.TravelUtilEx.CanSimTriggerTravelToFutureWorld(sim2, true, ref greyedOutTooltipCallback))
                        {
                            if (greyedOutTooltipCallback != null)
                            {
                                result += Common.NewLine + greyedOutTooltipCallback();
                            }

                            list.Add(sim2);
                        }
                    }

                    if (list.Count == 0x0)
                    {
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Localization.LocalizeString(actor.IsFemale, TimePortal.sLocalizationKey + ":UnfitForTravel", new object[] { actor }) + Common.NewLine + result);
                        return(false);
                    }
                }
                return(true);
            }
예제 #59
0
 public static void OnAccepted(Sim actor, Sim target, string interaction, ActiveTopic topic, InteractionInstance i)
 {
     try
     {
         PetSale.DisplayDialog(actor.SimDescription, target.Household, true);
     }
     catch (ResetException)
     {
         throw;
     }
     catch (Exception e)
     {
         Common.Exception(actor, target, e);
     }
 }
예제 #60
0
 public RunTask(InteractionInstance instance)
 {
     mInstance = instance;
 }