rjw-sexperience-ideology/Source/IdeologyAddon/SexTame/JobDriver_LewdTameSex.cs
2025-01-27 21:36:30 +05:00

63 lines
No EOL
2 KiB
C#

using System.Collections.Generic;
using Verse;
using RimWorld;
using rjw;
using Verse.AI;
namespace RJWSexperience.Ideology
{
public class JobDriver_LewdTameSex : LewdTrainBase
{
private Pawn originalPartner;
protected override IEnumerable<Toil> MakeNewToils()
{
originalPartner = Partner;
if (SexAppraiser.would_fuck_animal(pawn, Partner) > 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;
}
}
}