mirror of
				https://gitgud.io/amevarashi/rjw-sexperience-ideology.git
				synced 2024-08-15 00:43:19 +00:00 
			
		
		
		
	Fix IDE messages
This commit is contained in:
		
							parent
							
								
									032b031123
								
							
						
					
					
						commit
						670584500b
					
				
					 7 changed files with 262 additions and 288 deletions
				
			
		| 
						 | 
					@ -7,10 +7,10 @@ using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	internal class DebugAction
 | 
						internal static class DebugAction
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		[DebugAction("RJW Sexperience Ideology", "Test marriage event", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)]
 | 
							[DebugAction("RJW Sexperience Ideology", "Test marriage event", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)]
 | 
				
			||||||
		private static void GenerateMarriageEvent(Pawn p)
 | 
							public static void GenerateMarriageEvent(Pawn p)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Pawn hero = p.Map.PlayerPawnsForStoryteller.First(x => x.IsDesignatedHero());
 | 
								Pawn hero = p.Map.PlayerPawnsForStoryteller.First(x => x.IsDesignatedHero());
 | 
				
			||||||
			if (hero == null)
 | 
								if (hero == null)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,11 +113,13 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static float PreceptSextype(Pawn pawn, Pawn partner, float score, List<HistoryEventDef> historyEventDefs)
 | 
							public static float PreceptSextype(Pawn pawn, Pawn partner, float score, List<HistoryEventDef> historyEventDefs)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			foreach(HistoryEventDef eventDef in historyEventDefs)
 | 
								for (int i = 0; i < historyEventDefs.Count; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									HistoryEventDef eventDef = historyEventDefs[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (eventDef.CreateEventWithPartner(pawn, partner).DoerWillingToDo())
 | 
									if (eventDef.CreateEventWithPartner(pawn, partner).DoerWillingToDo())
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat)));
 | 
										float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat, cacheStaleAfterTicks: 60)));
 | 
				
			||||||
					return score * mult;
 | 
										return score * mult;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,56 +1,47 @@
 | 
				
			||||||
using System;
 | 
					using RimWorld;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using rjw;
 | 
					using rjw;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using Verse;
 | 
					using Verse;
 | 
				
			||||||
using Verse.AI;
 | 
					using Verse.AI;
 | 
				
			||||||
using RimWorld;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class JobGiver_DrugOrgy : ThinkNode_JobGiver
 | 
						public class JobGiver_DrugOrgy : ThinkNode_JobGiver
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
        protected override Job TryGiveJob(Pawn pawn)
 | 
							protected override Job TryGiveJob(Pawn pawn)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            if (pawn.Drafted) return null;
 | 
								if (pawn.Drafted || pawn.mindState == null)
 | 
				
			||||||
            DutyDef dutyDef = null;
 | 
								{
 | 
				
			||||||
            PawnDuty duty = null;
 | 
									return null;
 | 
				
			||||||
            if (pawn.mindState != null)
 | 
								}
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                duty = pawn.mindState.duty;
 | 
					 | 
				
			||||||
                dutyDef = duty.def;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else return null;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
								PawnDuty duty = pawn.mindState.duty;
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            Pawn target = FindPartner(pawn, duty);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate);
 | 
								if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target);
 | 
								Pawn target = FindPartner(pawn, duty);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected Pawn FindPartner(Pawn pawn, PawnDuty duty)
 | 
								if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None, 1))
 | 
				
			||||||
        {
 | 
									return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate);
 | 
				
			||||||
            if (duty != null)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                List<Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.FindAll(x => x.mindState?.duty?.def == duty.def);
 | 
					 | 
				
			||||||
                return pawns.RandomElementByWeightWithDefault(x => SexAppraiser.would_fuck(pawn,x), 0.1f);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return null;
 | 
								return JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target);
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
							protected Pawn FindPartner(Pawn pawn, PawnDuty duty)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (duty != null)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									List<Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.FindAll(x => x.mindState?.duty?.def == duty.def);
 | 
				
			||||||
 | 
									return pawns.RandomElementByWeightWithDefault(x => SexAppraiser.would_fuck(pawn, x), 0.1f);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/// <summary>
 | 
						/// <summary>
 | 
				
			||||||
	/// copied from rjw
 | 
						/// copied from rjw
 | 
				
			||||||
| 
						 | 
					@ -73,47 +64,52 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
			this.FailOn(() => Partner == null);
 | 
								this.FailOn(() => Partner == null);
 | 
				
			||||||
			yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
								yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil WaitForPartner = new Toil();
 | 
								Toil WaitForPartner = new Toil
 | 
				
			||||||
			WaitForPartner.defaultCompleteMode = ToilCompleteMode.Delay;
 | 
					 | 
				
			||||||
			WaitForPartner.initAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ticksLeftThisToil = 5000;
 | 
									defaultCompleteMode = ToilCompleteMode.Delay,
 | 
				
			||||||
			};
 | 
									initAction = delegate
 | 
				
			||||||
			WaitForPartner.tickAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				pawn.GainComfortFromCellIfPossible();
 | 
					 | 
				
			||||||
				if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					ReadyForNextToil();
 | 
										ticksLeftThisToil = 5000;
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									tickAction = delegate
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										pawn.GainComfortFromCellIfPossible();
 | 
				
			||||||
 | 
										if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											ReadyForNextToil();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			yield return WaitForPartner;
 | 
								yield return WaitForPartner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil StartPartnerJob = new Toil();
 | 
								Toil StartPartnerJob = new Toil
 | 
				
			||||||
			StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
 | 
					 | 
				
			||||||
			StartPartnerJob.socialMode = RandomSocialMode.Off;
 | 
					 | 
				
			||||||
			StartPartnerJob.initAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				var dri = Partner.jobs.curDriver as JobDriver_DrugSexReceiver;
 | 
									defaultCompleteMode = ToilCompleteMode.Instant,
 | 
				
			||||||
				if (dri == null)
 | 
									socialMode = RandomSocialMode.Off,
 | 
				
			||||||
                {
 | 
									initAction = delegate
 | 
				
			||||||
					Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner);
 | 
									{
 | 
				
			||||||
					Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced);
 | 
										if (!(Partner.jobs.curDriver is JobDriver_DrugSexReceiver))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner);
 | 
				
			||||||
 | 
											Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			yield return StartPartnerJob;
 | 
								yield return StartPartnerJob;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil SexToil = new Toil();
 | 
								Toil SexToil = new Toil
 | 
				
			||||||
			SexToil.defaultCompleteMode = ToilCompleteMode.Never;
 | 
								{
 | 
				
			||||||
			SexToil.socialMode = RandomSocialMode.Off;
 | 
									defaultCompleteMode = ToilCompleteMode.Never,
 | 
				
			||||||
			SexToil.defaultDuration = duration;
 | 
									socialMode = RandomSocialMode.Off,
 | 
				
			||||||
			SexToil.handlingFacing = true;
 | 
									defaultDuration = duration,
 | 
				
			||||||
 | 
									handlingFacing = true
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
			SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
								SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
				
			||||||
			SexToil.initAction = delegate
 | 
								SexToil.initAction = delegate
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Partner.pather.StopDead();
 | 
									Partner.pather.StopDead();
 | 
				
			||||||
				Partner.jobs.curDriver.asleep = false;
 | 
									Partner.jobs.curDriver.asleep = false;
 | 
				
			||||||
				
 | 
					
 | 
				
			||||||
				Start();
 | 
									Start();
 | 
				
			||||||
				Sexprops.usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner);
 | 
									Sexprops.usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner);
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
| 
						 | 
					@ -147,8 +143,7 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
	/// copied from rjw
 | 
						/// copied from rjw
 | 
				
			||||||
	/// </summary>
 | 
						/// </summary>
 | 
				
			||||||
	public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved
 | 
						public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
 | 
					 | 
				
			||||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
							protected override IEnumerable<Toil> MakeNewToils()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			setup_ticks();
 | 
								setup_ticks();
 | 
				
			||||||
| 
						 | 
					@ -168,23 +163,25 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			yield return Toils_Reserve.Reserve(iTarget, 1, 0);
 | 
								yield return Toils_Reserve.Reserve(iTarget, 1, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				var get_loved = MakeSexToil();
 | 
								var get_loved = MakeSexToil();
 | 
				
			||||||
				get_loved.handlingFacing = false;
 | 
								get_loved.handlingFacing = false;
 | 
				
			||||||
				yield return get_loved;
 | 
								yield return get_loved;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		protected Toil MakeSexToil()
 | 
							protected Toil MakeSexToil()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Toil get_loved = new Toil();
 | 
								Toil get_loved = new Toil
 | 
				
			||||||
			get_loved.defaultCompleteMode = ToilCompleteMode.Never;
 | 
					 | 
				
			||||||
			get_loved.socialMode = RandomSocialMode.Off;
 | 
					 | 
				
			||||||
			get_loved.handlingFacing = true;
 | 
					 | 
				
			||||||
			get_loved.tickAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									defaultCompleteMode = ToilCompleteMode.Never,
 | 
				
			||||||
 | 
									socialMode = RandomSocialMode.Off,
 | 
				
			||||||
 | 
									handlingFacing = true,
 | 
				
			||||||
 | 
									tickAction = delegate
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			get_loved.AddEndCondition(new Func<JobCondition>(() =>
 | 
								get_loved.AddEndCondition(new Func<JobCondition>(() =>
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (parteners.Count <= 0)
 | 
									if (parteners.Count == 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					return JobCondition.Succeeded;
 | 
										return JobCondition.Succeeded;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -204,8 +201,7 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
	/// copied from rjw
 | 
						/// copied from rjw
 | 
				
			||||||
	/// </summary>
 | 
						/// </summary>
 | 
				
			||||||
	public class JobDriver_DrugMasturabate : JobDriver_Masturbate
 | 
						public class JobDriver_DrugMasturabate : JobDriver_Masturbate
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
 | 
					 | 
				
			||||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
							protected override IEnumerable<Toil> MakeNewToils()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			setup_ticks();
 | 
								setup_ticks();
 | 
				
			||||||
| 
						 | 
					@ -252,6 +248,4 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,43 +1,36 @@
 | 
				
			||||||
using System;
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using Verse;
 | 
					using Verse;
 | 
				
			||||||
using Verse.AI;
 | 
					using Verse.AI;
 | 
				
			||||||
using Verse.AI.Group;
 | 
					 | 
				
			||||||
using RimWorld;
 | 
					 | 
				
			||||||
using rjw;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class JobGiver_GangbangConsensual : ThinkNode_JobGiver
 | 
						public class JobGiver_GangbangConsensual : ThinkNode_JobGiver
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
        protected override Job TryGiveJob(Pawn pawn)
 | 
							protected override Job TryGiveJob(Pawn pawn)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            if (pawn.Drafted) return null;
 | 
								if (pawn.Drafted || pawn.mindState == null)
 | 
				
			||||||
            DutyDef dutyDef = null;
 | 
								{
 | 
				
			||||||
            PawnDuty duty = null;
 | 
									return null;
 | 
				
			||||||
            if (pawn.mindState != null)
 | 
								}
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                duty = pawn.mindState.duty;
 | 
					 | 
				
			||||||
                dutyDef = duty.def;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else return null;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
								PawnDuty duty = pawn.mindState.duty;
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Pawn target = duty.focusSecond.Pawn;
 | 
								if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
 | 
								Pawn target = duty.focusSecond.Pawn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return JobMaker.MakeJob(RsiDefOf.Job.Gangbang, target);
 | 
								if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None))
 | 
				
			||||||
        }
 | 
									return null;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return JobMaker.MakeJob(RsiDefOf.Job.Gangbang, target);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class JobDriver_Gangbang : JobDriver_SexBaseInitiator
 | 
						public class JobDriver_Gangbang : JobDriver_SexBaseInitiator
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -56,25 +49,27 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
			this.FailOn(() => Partner.Drafted);
 | 
								this.FailOn(() => Partner.Drafted);
 | 
				
			||||||
			yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
								yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil StartPartnerJob = new Toil();
 | 
								Toil StartPartnerJob = new Toil
 | 
				
			||||||
			StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
 | 
					 | 
				
			||||||
			StartPartnerJob.socialMode = RandomSocialMode.Off;
 | 
					 | 
				
			||||||
			StartPartnerJob.initAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									defaultCompleteMode = ToilCompleteMode.Instant,
 | 
				
			||||||
				var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped;
 | 
									socialMode = RandomSocialMode.Off,
 | 
				
			||||||
				if (dri == null)
 | 
									initAction = delegate
 | 
				
			||||||
                {
 | 
									{
 | 
				
			||||||
					Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed);
 | 
										if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
 | 
				
			||||||
					Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced);
 | 
										{
 | 
				
			||||||
 | 
											Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed);
 | 
				
			||||||
 | 
											Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			yield return StartPartnerJob;
 | 
								yield return StartPartnerJob;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil SexToil = new Toil();
 | 
								Toil SexToil = new Toil
 | 
				
			||||||
			SexToil.defaultCompleteMode = ToilCompleteMode.Never;
 | 
								{
 | 
				
			||||||
			SexToil.defaultDuration = duration;
 | 
									defaultCompleteMode = ToilCompleteMode.Never,
 | 
				
			||||||
			SexToil.handlingFacing = true;
 | 
									defaultDuration = duration,
 | 
				
			||||||
 | 
									handlingFacing = true
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
			SexToil.FailOn(() => Partner.CurJob.def != RsiDefOf.Job.GettinGangbang);
 | 
								SexToil.FailOn(() => Partner.CurJob.def != RsiDefOf.Job.GettinGangbang);
 | 
				
			||||||
			SexToil.initAction = delegate
 | 
								SexToil.initAction = delegate
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					@ -108,28 +103,30 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class JobDriver_GangbangReceiver : JobDriver_SexBaseRecieverLoved
 | 
						public class JobDriver_GangbangReceiver : JobDriver_SexBaseRecieverLoved
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
							protected override IEnumerable<Toil> MakeNewToils()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			setup_ticks();
 | 
								setup_ticks();
 | 
				
			||||||
			parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
 | 
								parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil get_banged = new Toil();
 | 
								Toil get_banged = new Toil
 | 
				
			||||||
			get_banged.defaultCompleteMode = ToilCompleteMode.Never;
 | 
					 | 
				
			||||||
			get_banged.handlingFacing = true;
 | 
					 | 
				
			||||||
			get_banged.initAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				pawn.pather.StopDead();
 | 
									defaultCompleteMode = ToilCompleteMode.Never,
 | 
				
			||||||
				pawn.jobs.curDriver.asleep = false;
 | 
									handlingFacing = true,
 | 
				
			||||||
			};
 | 
									initAction = delegate
 | 
				
			||||||
			get_banged.tickAction = delegate
 | 
									{
 | 
				
			||||||
			{
 | 
										pawn.pather.StopDead();
 | 
				
			||||||
				if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts))
 | 
										pawn.jobs.curDriver.asleep = false;
 | 
				
			||||||
					ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart);
 | 
									},
 | 
				
			||||||
 | 
									tickAction = delegate
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts))
 | 
				
			||||||
 | 
											ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			get_banged.AddEndCondition(new Func<JobCondition>(() =>
 | 
								get_banged.AddEndCondition(new Func<JobCondition>(() =>
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (parteners.Count <= 0)
 | 
									if (parteners.Count == 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					return JobCondition.Succeeded;
 | 
										return JobCondition.Succeeded;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -148,12 +145,12 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
					Partner.jobs.jobQueue.EnqueueFirst(tobed);
 | 
										Partner.jobs.jobQueue.EnqueueFirst(tobed);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if (pawn.HostileTo(Partner))
 | 
									else if (pawn.HostileTo(Partner))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
					pawn.health.AddHediff(xxx.submitting);
 | 
										pawn.health.AddHediff(xxx.submitting);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
			get_banged.socialMode = RandomSocialMode.Off;
 | 
								get_banged.socialMode = RandomSocialMode.Off;
 | 
				
			||||||
			yield return get_banged;
 | 
								yield return get_banged;
 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,56 +1,46 @@
 | 
				
			||||||
using System;
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using Verse;
 | 
					using Verse;
 | 
				
			||||||
using Verse.AI;
 | 
					using Verse.AI;
 | 
				
			||||||
using Verse.AI.Group;
 | 
					 | 
				
			||||||
using RimWorld;
 | 
					 | 
				
			||||||
using rjw;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class JobGiver_GangbangVictim : ThinkNode_JobGiver
 | 
						public class JobGiver_GangbangVictim : ThinkNode_JobGiver
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
        protected override Job TryGiveJob(Pawn pawn)
 | 
							protected override Job TryGiveJob(Pawn pawn)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            if (pawn.Drafted) return null;
 | 
								if (pawn.Drafted || pawn.mindState == null)
 | 
				
			||||||
			DutyDef dutyDef = null;
 | 
								{
 | 
				
			||||||
            PawnDuty duty = null;
 | 
									return null;
 | 
				
			||||||
            if (pawn.mindState != null)
 | 
								}
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                duty = pawn.mindState.duty;
 | 
					 | 
				
			||||||
                dutyDef = duty.def;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else return null;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
								PawnDuty duty = pawn.mindState.duty;
 | 
				
			||||||
            {
 | 
					
 | 
				
			||||||
                return null;
 | 
								if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return null;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Pawn target = duty.focusSecond.Pawn;
 | 
								Pawn target = duty.focusSecond.Pawn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
 | 
								if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            return JobMaker.MakeJob(RsiDefOf.Job.RapeVictim, target);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return JobMaker.MakeJob(RsiDefOf.Job.RapeVictim, target);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/// <summary>
 | 
						/// <summary>
 | 
				
			||||||
	/// copied from rjw
 | 
						/// copied from rjw
 | 
				
			||||||
	/// </summary>
 | 
						/// </summary>
 | 
				
			||||||
	public class JobDriver_RapeVictim : JobDriver_Rape
 | 
						public class JobDriver_RapeVictim : JobDriver_Rape
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
        public override bool TryMakePreToilReservations(bool errorOnFailed)
 | 
							public override bool TryMakePreToilReservations(bool errorOnFailed)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override IEnumerable<Toil> MakeNewToils()
 | 
							protected override IEnumerable<Toil> MakeNewToils()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (RJWSettings.DebugRape) ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called");
 | 
								if (RJWSettings.DebugRape) ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called");
 | 
				
			||||||
			setup_ticks();
 | 
								setup_ticks();
 | 
				
			||||||
| 
						 | 
					@ -64,25 +54,28 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			SexUtility.RapeTargetAlert(pawn, Partner);
 | 
								SexUtility.RapeTargetAlert(pawn, Partner);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil StartPartnerJob = new Toil();
 | 
								Toil StartPartnerJob = new Toil
 | 
				
			||||||
			StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
 | 
					 | 
				
			||||||
			StartPartnerJob.socialMode = RandomSocialMode.Off;
 | 
					 | 
				
			||||||
			StartPartnerJob.initAction = delegate
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped;
 | 
									defaultCompleteMode = ToilCompleteMode.Instant,
 | 
				
			||||||
				if (dri == null)
 | 
									socialMode = RandomSocialMode.Off,
 | 
				
			||||||
 | 
									initAction = delegate
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn);
 | 
										if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					Partner.jobs.StartJob(gettin_raped, JobCondition.InterruptForced, null, false, true, null);
 | 
											Partner.jobs.StartJob(gettin_raped, JobCondition.InterruptForced, null, false, true, null);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			yield return StartPartnerJob;
 | 
								yield return StartPartnerJob;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Toil SexToil = new Toil();
 | 
								Toil SexToil = new Toil
 | 
				
			||||||
			SexToil.defaultCompleteMode = ToilCompleteMode.Never;
 | 
								{
 | 
				
			||||||
			SexToil.defaultDuration = duration;
 | 
									defaultCompleteMode = ToilCompleteMode.Never,
 | 
				
			||||||
			SexToil.handlingFacing = true;
 | 
									defaultDuration = duration,
 | 
				
			||||||
 | 
									handlingFacing = true
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
			SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
								SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
				
			||||||
			SexToil.initAction = delegate
 | 
								SexToil.initAction = delegate
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,21 +1,15 @@
 | 
				
			||||||
using System;
 | 
					using RimWorld;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using Verse;
 | 
					using Verse;
 | 
				
			||||||
using Verse.AI;
 | 
					 | 
				
			||||||
using RimWorld;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class LordJob_Ritual_Gangbang : LordJob_Ritual
 | 
						public class LordJob_Ritual_Gangbang : LordJob_Ritual
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
		public LordJob_Ritual_Gangbang() { }
 | 
							public LordJob_Ritual_Gangbang() { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public LordJob_Ritual_Gangbang(string targetID ,TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List<RitualStage> allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer)
 | 
							public LordJob_Ritual_Gangbang(string targetID, TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List<RitualStage> allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer)
 | 
				
			||||||
		{ 
 | 
							{
 | 
				
			||||||
			foreach (RitualRole ritualRole in assignments.AllRolesForReading)
 | 
								foreach (RitualRole ritualRole in assignments.AllRolesForReading)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (ritualRole != null && ritualRole.id.Contains(targetID))
 | 
									if (ritualRole != null && ritualRole.id.Contains(targetID))
 | 
				
			||||||
| 
						 | 
					@ -25,6 +19,5 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,106 +1,101 @@
 | 
				
			||||||
using RimWorld;
 | 
					using RimWorld;
 | 
				
			||||||
using Verse;
 | 
					 | 
				
			||||||
using rjw;
 | 
					using rjw;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace RJWSexperience.Ideology
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class RitualRole_RapeVictim : RitualRole
 | 
						public class RitualRole_RapeVictim : RitualRole
 | 
				
			||||||
    {
 | 
						{
 | 
				
			||||||
        public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
							public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            reason = null;
 | 
								reason = null;
 | 
				
			||||||
            return false;
 | 
								return false;
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            reason = null;
 | 
					 | 
				
			||||||
            if (CanBeVictim(p)) return true;
 | 
					 | 
				
			||||||
            if (!skipReason)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                reason = Keyed.RSVictimCondition;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static bool CanBeVictim(Pawn pawn)
 | 
							public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
 | 
								reason = null;
 | 
				
			||||||
            if (pawn.IsSubmissive()) return true;
 | 
								if (CanBeVictim(p)) return true;
 | 
				
			||||||
            if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
 | 
								if (!skipReason)
 | 
				
			||||||
            return false;
 | 
								{
 | 
				
			||||||
        }
 | 
									reason = Keyed.RSVictimCondition;
 | 
				
			||||||
    }
 | 
								}
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class RitualRole_HumanBreedee : RitualRole
 | 
							public static bool CanBeVictim(Pawn pawn)
 | 
				
			||||||
    {
 | 
							{
 | 
				
			||||||
        public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
								if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
 | 
				
			||||||
        {
 | 
								if (pawn.IsSubmissive()) return true;
 | 
				
			||||||
            reason = null;
 | 
								if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
 | 
				
			||||||
            return false;
 | 
								return false;
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
						public class RitualRole_HumanBreedee : RitualRole
 | 
				
			||||||
        {
 | 
						{
 | 
				
			||||||
            
 | 
							public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
				
			||||||
            reason = null;
 | 
							{
 | 
				
			||||||
            if (!xxx.is_human(p))
 | 
								reason = null;
 | 
				
			||||||
            {
 | 
								return false;
 | 
				
			||||||
                reason = Keyed.RSNotHuman;
 | 
							}
 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (CanBeBreedee(p)) return true;
 | 
					 | 
				
			||||||
            if (!skipReason)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                reason = Keyed.RSShouldCanFuck;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static bool CanBeBreedee(Pawn pawn)
 | 
							public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            if (xxx.can_be_fucked(pawn)) return true;
 | 
								reason = null;
 | 
				
			||||||
            return false;
 | 
								if (!xxx.is_human(p))
 | 
				
			||||||
        }
 | 
								{
 | 
				
			||||||
    }
 | 
									reason = Keyed.RSNotHuman;
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (CanBeBreedee(p)) return true;
 | 
				
			||||||
 | 
								if (!skipReason)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									reason = Keyed.RSShouldCanFuck;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class RitualRole_AnimalBreeder : RitualRole
 | 
							public static bool CanBeBreedee(Pawn pawn) => xxx.can_be_fucked(pawn);
 | 
				
			||||||
    {
 | 
						}
 | 
				
			||||||
        public override bool Animal => true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
						public class RitualRole_AnimalBreeder : RitualRole
 | 
				
			||||||
        {
 | 
						{
 | 
				
			||||||
            reason = null;
 | 
							public override bool Animal => true;
 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
							public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
            reason = null;
 | 
								reason = null;
 | 
				
			||||||
            if (!p.IsAnimal())
 | 
								return false;
 | 
				
			||||||
            {
 | 
							}
 | 
				
			||||||
                reason = Keyed.RSNotAnimal;
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (CanBeBreeder(p, assignments?.Ritual)) return true;
 | 
					 | 
				
			||||||
            if (!skipReason)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                reason = Keyed.RSBreederCondition;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
 | 
							public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
 | 
				
			||||||
        {
 | 
							{
 | 
				
			||||||
 | 
								reason = null;
 | 
				
			||||||
 | 
								if (!p.IsAnimal())
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									reason = Keyed.RSNotAnimal;
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (CanBeBreeder(p, assignments?.Ritual)) return true;
 | 
				
			||||||
 | 
								if (!skipReason)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									reason = Keyed.RSBreederCondition;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
			if (precept != null && precept.ideo.HasPrecept(RsiDefOf.Precept.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
 | 
								if (precept != null && precept.ideo.HasPrecept(RsiDefOf.Precept.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				return false;
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (!xxx.can_rape(animal)) return false;
 | 
								if (!xxx.can_rape(animal))
 | 
				
			||||||
            return true;
 | 
								{
 | 
				
			||||||
        }
 | 
									return false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
    }
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue