예제 #1
0
        private static void RunPostWhoohooInternal(Sim actor, Sim target, IGameObject obj, bool fireDisgraceEvents)
        {
            SimDescription actorSim = actor.SimDescription;

            if (!actorSim.HadFirstWooHoo)
            {
                actorSim.SetFirstWooHoo();
                EventTracker.SendEvent(EventTypeId.kHadFirstWoohoo, actor, target);
            }

            Woohooer.Settings.mLastWoohoo[actorSim.SimDescriptionId] = SimClock.CurrentTime();

            SimDescription targetSim = target.SimDescription;

            if (!targetSim.HadFirstWooHoo)
            {
                targetSim.SetFirstWooHoo();
                EventTracker.SendEvent(EventTypeId.kHadFirstWoohoo, target, actor);
            }

            Woohooer.Settings.mLastWoohoo[targetSim.SimDescriptionId] = SimClock.CurrentTime();

            Relationship relationship = Relationship.Get(actor, target, true);

            if (relationship != null)
            {
                relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Kissed);
                relationship.LTR.AddInteractionBit(LongTermRelationship.InteractionBits.WooHoo);
            }

            if ((obj != null) && (obj.LotCurrent.LotType == LotType.Commercial))
            {
                actor.BuffManager.AddElement(BuffNames.PublicWooHoo, Origin.FromWooHooInPublic);
                target.BuffManager.AddElement(BuffNames.PublicWooHoo, Origin.FromWooHooInPublic);
            }

            if (actor.IsHuman)
            {
                if (fireDisgraceEvents)
                {
                    CommonWoohoo.CheckForWitnessedCheating(actor, target, true);
                }

                actor.SimDescription.SetFirstKiss(target.SimDescription);
                target.SimDescription.SetFirstKiss(actor.SimDescription);

                if (fireDisgraceEvents)
                {
                    CommonWoohoo.WoohooDisgraceChecks(actor, target);
                }

                if ((actor.Household != target.Household) && !Relationship.AreFianceeOrSpouse(actor, target))
                {
                    if (Woohooer.Settings.mAllowStrideOfPride)
                    {
                        actor.BuffManager.AddElement(BuffNames.StrideOfPride, Origin.FromWooHooOffHome);
                        target.BuffManager.AddElement(BuffNames.StrideOfPride, Origin.FromWooHooOffHome);
                    }
                }

                SocialCallback.AddIncredibleTimeBuffIfNecessary(actor, target);
                SocialCallback.AddIncredibleTimeBuffIfNecessary(target, actor);
            }
            else
            {
                EventTracker.SendEvent(EventTypeId.kPetWooHooed, actor, target);
                EventTracker.SendEvent(EventTypeId.kPetWooHooed, target, actor);

                if (((actor.Partner == null) && (target.Partner == null)) || (Woohooer.Settings.mForcePetMate[PersistedSettings.GetSpeciesIndex(actor)]))
                {
                    Relationship.RemoveAllPetMateFlags(actor);
                    Relationship.RemoveAllPetMateFlags(target);
                    Relationship.Get(actor, target, false).LTR.AddInteractionBit(LongTermRelationship.InteractionBits.Marry);
                }
            }
        }