using RimWorld; using rjw; using rjw.Modules.Attraction; using System.Collections.Generic; using System.Security.Cryptography; using Verse; using Verse.AI; namespace RJWSexperience.Ideology { public class JobDriver_LewdTameSex : LewdTrainBase { private Pawn originalPartner; protected override IEnumerable MakeNewToils() { originalPartner = Partner; if (AttractionUtility.Evaluate(pawn, Partner, AttractionPurpose.ForFucking) > 0f) { foreach (var baseToil in base.MakeNewToils()) { yield return baseToil; } } if (originalPartner != Partner) { // Pawn got interrupted by another partner, then the original partner finished before them. yield break; } yield return Toils_Interpersonal.SetLastInteractTime(iTarget); Toil tryRecruit = Toils_Interpersonal.TryRecruit(iTarget); tryRecruit.FailOn(() => Map.designationManager.DesignationOn(Partner, DesignationDefOf.Tame) == null); yield return tryRecruit; Toil addTakeToPenWork = ToilMaker.MakeToil(); addTakeToPenWork.initAction = delegate { if (AnimalPenUtility.NeedsToBeManagedByRope(Partner) && Partner.Faction == Faction.OfPlayer && AnimalPenUtility.GetCurrentPenOf(Partner, allowUnenclosedPens: false) == null) { Job ropeJob = null; RopingPriority ropingPriority = RopingPriority.Closest; CompAnimalPenMarker penMarker = AnimalPenUtility.GetPenAnimalShouldBeTakenTo(pawn, Partner, out _, forced: false, canInteractWhileSleeping: true, allowUnenclosedPens: true, ignoreSkillRequirements: true, ropingPriority); if (penMarker != null) { ropeJob = WorkGiver_TakeToPen.MakeJob(pawn, Partner, penMarker, allowUnenclosedPens: true, ropingPriority, out _); } if (ropeJob != null) { pawn.jobs.StartJob(ropeJob, JobCondition.Succeeded); } else { Messages.Message("MessageTameNoSuitablePens".Translate(Partner.Named("ANIMAL")), Partner, MessageTypeDefOf.NeutralEvent); } } }; addTakeToPenWork.defaultCompleteMode = ToilCompleteMode.Instant; yield return addTakeToPenWork; } } }