From 5a68c6ec58933cab3fbb59cbd9fe1da35e2a6f2a Mon Sep 17 00:00:00 2001 From: amevarashi Date: Tue, 24 May 2022 20:49:01 +0500 Subject: [PATCH] Do not use full buckets --- RJWSexperience/RJWSexperience/RJWUtility.cs | 355 ++++++++++---------- 1 file changed, 179 insertions(+), 176 deletions(-) diff --git a/RJWSexperience/RJWSexperience/RJWUtility.cs b/RJWSexperience/RJWSexperience/RJWUtility.cs index 549c80f..2bb00f9 100644 --- a/RJWSexperience/RJWSexperience/RJWUtility.cs +++ b/RJWSexperience/RJWSexperience/RJWUtility.cs @@ -1,198 +1,201 @@ -using System.Collections.Generic; +using RimWorld; using rjw; -using RimWorld; +using rjw.Modules.Interactions.Enums; +using rjw.Modules.Interactions.Helpers; +using rjw.Modules.Interactions.Objects; +using System.Collections.Generic; +using System.Linq; using Verse; using Verse.AI; -using rjw.Modules.Interactions.Objects; -using rjw.Modules.Interactions.Helpers; -using rjw.Modules.Interactions.Enums; namespace RJWSexperience { public static class RJWUtility - { - public static bool RemoveVirginTrait(Pawn pawn, Pawn partner, SexProps props) - { - int degree; - Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin); - if (virgin != null) - { - degree = virgin.Degree; - if (pawn.gender == Gender.Female && degree > 0) - { - FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.Filth_Blood, pawn.LabelShort, 1, FilthSourceFlags.Pawn); - } - ThrowVirginHIstoryEvent(pawn, partner, props, degree); - pawn.story.traits.RemoveTrait(virgin); - return true; - } - return false; - } + { + public static bool RemoveVirginTrait(Pawn pawn, Pawn partner, SexProps props) + { + int degree; + Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin); + if (virgin != null) + { + degree = virgin.Degree; + if (pawn.gender == Gender.Female && degree > 0) + { + FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.Filth_Blood, pawn.LabelShort, 1, FilthSourceFlags.Pawn); + } + ThrowVirginHIstoryEvent(pawn, partner, props, degree); + pawn.story.traits.RemoveTrait(virgin); + return true; + } + return false; + } - /// - /// For ideo patch - /// - public static void ThrowVirginHIstoryEvent(Pawn pawn, Pawn partner, SexProps props, int degree) - { - //for non-ideo - if (partner.Ideo == null) - { - partner.needs?.mood?.thoughts?.memories.TryGainMemory(xxx.took_virginity, pawn); - } - } + /// + /// For ideo patch + /// + public static void ThrowVirginHIstoryEvent(Pawn pawn, Pawn partner, SexProps props, int degree) + { + //for non-ideo + if (partner.Ideo == null) + { + partner.needs?.mood?.thoughts?.memories.TryGainMemory(xxx.took_virginity, pawn); + } + } - /* + /* * Uses RJW 4.9.0's new interactiondefs to determine giver and receiver based on reverse interactiontag */ - public static void DetermineGiversAndReceivers(SexProps props, out Pawn giver, out Pawn receiver) - { - InteractionWithExtension interaction = InteractionHelper.GetWithExtension(props.dictionaryKey); - if (interaction.HasInteractionTag(InteractionTag.Reverse)) - { - receiver = props.partner; - giver = props.pawn; - } - else - { - receiver = props.pawn; - giver = props.partner; - } - } + public static void DetermineGiversAndReceivers(SexProps props, out Pawn giver, out Pawn receiver) + { + InteractionWithExtension interaction = InteractionHelper.GetWithExtension(props.dictionaryKey); + if (interaction.HasInteractionTag(InteractionTag.Reverse)) + { + receiver = props.partner; + giver = props.pawn; + } + else + { + receiver = props.pawn; + giver = props.partner; + } + } - public static void UpdateSextypeRecords(SexProps props) - { - xxx.rjwSextype sextype = props.sexType; - Pawn pawn = props.pawn; - Pawn partner = props.partner; + public static void UpdateSextypeRecords(SexProps props) + { + xxx.rjwSextype sextype = props.sexType; + Pawn pawn = props.pawn; + Pawn partner = props.partner; - DetermineGiversAndReceivers(props, out Pawn giver, out Pawn receiver); + DetermineGiversAndReceivers(props, out Pawn giver, out Pawn receiver); - if (partner != null) - { - switch (sextype) - { - case xxx.rjwSextype.Vaginal: - case xxx.rjwSextype.Scissoring: - IncreaseSameRecords(pawn, partner, VariousDefOf.VaginalSexCount); - break; - case xxx.rjwSextype.Anal: - IncreaseSameRecords(pawn, partner, VariousDefOf.AnalSexCount); - break; - case xxx.rjwSextype.Oral: - case xxx.rjwSextype.Fellatio: - if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.BlowjobCount); - } - else if (Genital_Helper.has_penis_fertile(receiver) || Genital_Helper.has_penis_infertile(receiver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.BlowjobCount, VariousDefOf.OralSexCount); - } - break; - case xxx.rjwSextype.Sixtynine: - IncreaseSameRecords(pawn, partner, VariousDefOf.OralSexCount); - RecordDef recordpawn, recordpartner; - if (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn)) - { - recordpartner = VariousDefOf.BlowjobCount; - } - else - { - recordpartner = VariousDefOf.CunnilingusCount; - } + if (partner != null) + { + switch (sextype) + { + case xxx.rjwSextype.Vaginal: + case xxx.rjwSextype.Scissoring: + IncreaseSameRecords(pawn, partner, VariousDefOf.VaginalSexCount); + break; + case xxx.rjwSextype.Anal: + IncreaseSameRecords(pawn, partner, VariousDefOf.AnalSexCount); + break; + case xxx.rjwSextype.Oral: + case xxx.rjwSextype.Fellatio: + if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.BlowjobCount); + } + else if (Genital_Helper.has_penis_fertile(receiver) || Genital_Helper.has_penis_infertile(receiver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.BlowjobCount, VariousDefOf.OralSexCount); + } + break; + case xxx.rjwSextype.Sixtynine: + IncreaseSameRecords(pawn, partner, VariousDefOf.OralSexCount); + RecordDef recordpawn, recordpartner; + if (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn)) + { + recordpartner = VariousDefOf.BlowjobCount; + } + else + { + recordpartner = VariousDefOf.CunnilingusCount; + } - if (Genital_Helper.has_penis_fertile(partner) || Genital_Helper.has_penis_infertile(partner)) - { - recordpawn = VariousDefOf.BlowjobCount; - } - else - { - recordpawn = VariousDefOf.CunnilingusCount; - } - IncreaseRecords(pawn, partner, recordpawn, recordpartner); - break; - case xxx.rjwSextype.Cunnilingus: - if (Genital_Helper.has_vagina(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.CunnilingusCount); - } - else if (Genital_Helper.has_vagina(receiver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.CunnilingusCount, VariousDefOf.OralSexCount); - } - break; - case xxx.rjwSextype.Masturbation: - break; - case xxx.rjwSextype.Handjob: - if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.HandjobCount); - } - else - { - IncreaseRecords(giver, receiver, VariousDefOf.HandjobCount, VariousDefOf.GenitalCaressCount); - } - break; - case xxx.rjwSextype.Fingering: - case xxx.rjwSextype.Fisting: - if (Genital_Helper.has_vagina(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.FingeringCount); - } - else - { - IncreaseRecords(giver, receiver, VariousDefOf.FingeringCount, VariousDefOf.GenitalCaressCount); - } - break; - case xxx.rjwSextype.Footjob: - IncreaseSameRecords(pawn, partner, VariousDefOf.FootjobCount); - break; - default: - IncreaseSameRecords(pawn, partner, VariousDefOf.MiscSexualBehaviorCount); - break; - } - } - } + if (Genital_Helper.has_penis_fertile(partner) || Genital_Helper.has_penis_infertile(partner)) + { + recordpawn = VariousDefOf.BlowjobCount; + } + else + { + recordpawn = VariousDefOf.CunnilingusCount; + } + IncreaseRecords(pawn, partner, recordpawn, recordpartner); + break; + case xxx.rjwSextype.Cunnilingus: + if (Genital_Helper.has_vagina(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.CunnilingusCount); + } + else if (Genital_Helper.has_vagina(receiver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.CunnilingusCount, VariousDefOf.OralSexCount); + } + break; + case xxx.rjwSextype.Masturbation: + break; + case xxx.rjwSextype.Handjob: + if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.HandjobCount); + } + else + { + IncreaseRecords(giver, receiver, VariousDefOf.HandjobCount, VariousDefOf.GenitalCaressCount); + } + break; + case xxx.rjwSextype.Fingering: + case xxx.rjwSextype.Fisting: + if (Genital_Helper.has_vagina(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.FingeringCount); + } + else + { + IncreaseRecords(giver, receiver, VariousDefOf.FingeringCount, VariousDefOf.GenitalCaressCount); + } + break; + case xxx.rjwSextype.Footjob: + IncreaseSameRecords(pawn, partner, VariousDefOf.FootjobCount); + break; + default: + IncreaseSameRecords(pawn, partner, VariousDefOf.MiscSexualBehaviorCount); + break; + } + } + } - public static void UpdatePartnerHistory(Pawn pawn, Pawn partner, SexProps props) - { - if (partner != null) - { - pawn.TryGetComp()?.RecordSex(partner, props); - } - } + public static void UpdatePartnerHistory(Pawn pawn, Pawn partner, SexProps props) + { + if (partner != null) + { + pawn.TryGetComp()?.RecordSex(partner, props); + } + } - public static void IncreaseSameRecords(Pawn pawn, Pawn partner, RecordDef record) - { - pawn.records?.AddTo(record, 1); - partner.records?.AddTo(record, 1); - } + public static void IncreaseSameRecords(Pawn pawn, Pawn partner, RecordDef record) + { + pawn.records?.AddTo(record, 1); + partner.records?.AddTo(record, 1); + } - public static void IncreaseRecords(Pawn pawn, Pawn partner, RecordDef recordforpawn, RecordDef recordforpartner) - { - pawn.records?.AddTo(recordforpawn, 1); - partner.records?.AddTo(recordforpartner, 1); - } + public static void IncreaseRecords(Pawn pawn, Pawn partner, RecordDef recordforpawn, RecordDef recordforpartner) + { + pawn.records?.AddTo(recordforpawn, 1); + partner.records?.AddTo(recordforpartner, 1); + } - // Moved this method back because of Menstruation - public static Building_CumBucket FindClosestBucket(this Pawn pawn) - { - List buckets = pawn.Map.listerBuildings.allBuildingsColonist.FindAll(x => x is Building_CumBucket); - Dictionary targets = new Dictionary(); - if (!buckets.NullOrEmpty()) for (int i = 0; i < buckets.Count; i++) - { - if (pawn.CanReach(buckets[i], PathEndMode.ClosestTouch, Danger.None)) - { - targets.Add(buckets[i], pawn.Position.DistanceTo(buckets[i].Position)); - } - } - if (!targets.NullOrEmpty()) - { - return (Building_CumBucket)targets.MinBy(x => x.Value).Key; - } - return null; - } + // Moved this method back because of Menstruation + public static Building_CumBucket FindClosestBucket(this Pawn pawn) + { + List buckets = pawn.Map.listerBuildings.allBuildingsColonist.FindAll(x => x is Building_CumBucket bucket && bucket.StoredStackCount < VariousDefOf.GatheredCum.stackLimit); + if (buckets.NullOrEmpty()) + return null; - } + Dictionary targets = new Dictionary(); + for (int i = 0; i < buckets.Count; i++) + { + if (pawn.CanReach(buckets[i], PathEndMode.ClosestTouch, Danger.None)) + { + targets.Add(buckets[i], pawn.Position.DistanceTo(buckets[i].Position)); + } + } + if (!targets.NullOrEmpty()) + { + return (Building_CumBucket)targets.MinBy(x => x.Value).Key; + } + return null; + } + } }