/// <summary>
        /// handle Psyfocus
        /// </summary>
        public void ChangePsyfocus(Pawn pawn, Thing target)
        {
            if (pawn.jobs?.curDriver is JobDriver_ViolateCorpse)
            {
                if (xxx.is_necrophiliac(pawn) && MeditationFocusTypeAvailabilityCache.PawnCanUse(pawn, DefDatabase <MeditationFocusDef> .GetNamedSilentFail("Morbid")))
                {
                    SexUtility.OffsetPsyfocus(pawn, 0.01f);
                }
            }

            if (target != null)
            {
                var partner = target as Pawn;
                if (partner != null)
                {
                    if (xxx.is_nympho(pawn))
                    {
                        SexUtility.OffsetPsyfocus(pawn, 0.01f);
                    }
                    else if (xxx.is_zoophile(pawn) && xxx.is_animal(partner) && MeditationFocusTypeAvailabilityCache.PawnCanUse(pawn, MeditationFocusDefOf.Natural))
                    {
                        SexUtility.OffsetPsyfocus(pawn, 0.01f);
                    }

                    if (xxx.is_nympho(partner))
                    {
                        SexUtility.OffsetPsyfocus(partner, 0.01f);
                    }
                    else if (xxx.is_zoophile(partner) && xxx.is_animal(pawn) && MeditationFocusTypeAvailabilityCache.PawnCanUse(partner, MeditationFocusDefOf.Natural))
                    {
                        SexUtility.OffsetPsyfocus(partner, 0.01f);
                    }

                    if (xxx.RoMIsActive)
                    {
                        if (pawn.story.traits.HasTrait(TraitDef.Named("Succubus")))
                        {
                            SexUtility.OffsetPsyfocus(pawn, 0.01f);
                        }

                        if (partner.story.traits.HasTrait(TraitDef.Named("Succubus")))
                        {
                            SexUtility.OffsetPsyfocus(partner, 0.01f);
                        }
                    }
                }
            }
        }
Exemple #2
0
        // god dammit HAR
        private static void ForciblyGivePawnTrait([NotNull] Pawn pawn, [NotNull] Trait trait)
        {
            if (pawn.story.traits.HasTrait(trait.def))
            {
                return;
            }

            pawn.story.traits.allTraits.Add(trait);
            pawn.Notify_DisabledWorkTypesChanged();
            pawn.skills?.Notify_SkillDisablesChanged();

            if (!pawn.Dead && pawn.RaceProps.Humanlike)
            {
                pawn.needs.mood?.thoughts.situational.Notify_SituationalThoughtsDirty();
            }

            MeditationFocusTypeAvailabilityCache.ClearFor(pawn);
        }