mirror of
https://gitgud.io/amevarashi/rjw-sexperience-ideology.git
synced 2026-06-18 19:25:59 +00:00
63 lines
No EOL
2 KiB
C#
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;
|
|
|
|
}
|
|
}
|
|
} |