Fix IDE messages

This commit is contained in:
amevarashi 2023-04-23 17:15:07 +05:00
parent 032b031123
commit 670584500b
7 changed files with 262 additions and 288 deletions

View File

@ -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)

View File

@ -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;
} }
} }

View File

@ -1,13 +1,9 @@
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
{ {
@ -15,24 +11,22 @@ namespace RJWSexperience.Ideology
{ {
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;
if (pawn.mindState != null)
{ {
duty = pawn.mindState.duty; return null;
dutyDef = duty.def;
} }
else return null;
if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) PawnDuty duty = pawn.mindState.duty;
if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
{ {
return null; return null;
} }
Pawn target = FindPartner(pawn, duty); Pawn target = FindPartner(pawn, duty);
if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate); if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None, 1))
return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate);
return JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target); return JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target);
} }
@ -42,14 +36,11 @@ namespace RJWSexperience.Ideology
if (duty != null) if (duty != null)
{ {
List<Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.FindAll(x => x.mindState?.duty?.def == duty.def); 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 pawns.RandomElementByWeightWithDefault(x => SexAppraiser.would_fuck(pawn, x), 0.1f);
} }
return null; return null;
} }
} }
/// <summary> /// <summary>
@ -73,41 +64,46 @@ 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 defaultCompleteMode = ToilCompleteMode.Delay,
initAction = delegate
{ {
ticksLeftThisToil = 5000; ticksLeftThisToil = 5000;
}; },
WaitForPartner.tickAction = delegate tickAction = delegate
{ {
pawn.GainComfortFromCellIfPossible(); pawn.GainComfortFromCellIfPossible();
if (pawn.Position.DistanceTo(Partner.Position) <= 1f) if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
{ {
ReadyForNextToil(); 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
{
if (!(Partner.jobs.curDriver is JobDriver_DrugSexReceiver))
{ {
Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner); Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner);
Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced); 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
{ {
@ -148,7 +144,6 @@ namespace RJWSexperience.Ideology
/// </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();
@ -175,16 +170,18 @@ namespace RJWSexperience.Ideology
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;
} }
@ -205,7 +202,6 @@ namespace RJWSexperience.Ideology
/// </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
}; };
} }
} }
} }

View File

@ -1,13 +1,9 @@
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
{ {
@ -15,30 +11,27 @@ namespace RJWSexperience.Ideology
{ {
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;
if (pawn.mindState != null)
{ {
duty = pawn.mindState.duty; return null;
dutyDef = duty.def;
} }
else return null;
if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) PawnDuty duty = pawn.mindState.duty;
if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
{ {
return null; 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.Gangbang, target); return JobMaker.MakeJob(RsiDefOf.Job.Gangbang, target);
} }
} }
public class JobDriver_Gangbang : JobDriver_SexBaseInitiator public class JobDriver_Gangbang : JobDriver_SexBaseInitiator
{ {
public override bool TryMakePreToilReservations(bool errorOnFailed) public override bool TryMakePreToilReservations(bool errorOnFailed)
@ -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
{
if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
{ {
Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed); Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed);
Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced); 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
{ {
@ -114,22 +109,24 @@ namespace RJWSexperience.Ideology
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; defaultCompleteMode = ToilCompleteMode.Never,
get_banged.initAction = delegate handlingFacing = true,
initAction = delegate
{ {
pawn.pather.StopDead(); pawn.pather.StopDead();
pawn.jobs.curDriver.asleep = false; pawn.jobs.curDriver.asleep = false;
}; },
get_banged.tickAction = delegate tickAction = delegate
{ {
if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts)) if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart); 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;
} }
} }
} }

View File

@ -1,14 +1,8 @@
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
{ {
@ -16,17 +10,14 @@ namespace RJWSexperience.Ideology
{ {
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;
if (pawn.mindState != null)
{ {
duty = pawn.mindState.duty; return null;
dutyDef = duty.def;
} }
else return null;
if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) PawnDuty duty = pawn.mindState.duty;
if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
{ {
return null; return null;
} }
@ -39,7 +30,6 @@ namespace RJWSexperience.Ideology
} }
} }
/// <summary> /// <summary>
/// copied from rjw /// copied from rjw
/// </summary> /// </summary>
@ -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
{
if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
{ {
Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn); 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
{ {

View File

@ -1,12 +1,6 @@
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
{ {
@ -14,7 +8,7 @@ namespace RJWSexperience.Ideology
{ {
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)
{ {
@ -25,6 +19,5 @@ namespace RJWSexperience.Ideology
} }
} }
} }
} }
} }

View File

@ -1,6 +1,6 @@
using RimWorld; using RimWorld;
using Verse;
using rjw; using rjw;
using Verse;
namespace RJWSexperience.Ideology namespace RJWSexperience.Ideology
{ {
@ -42,7 +42,6 @@ namespace RJWSexperience.Ideology
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 AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
{ {
reason = null; reason = null;
if (!xxx.is_human(p)) if (!xxx.is_human(p))
{ {
@ -57,11 +56,7 @@ namespace RJWSexperience.Ideology
return false; return false;
} }
public static bool CanBeBreedee(Pawn pawn) public static bool CanBeBreedee(Pawn pawn) => xxx.can_be_fucked(pawn);
{
if (xxx.can_be_fucked(pawn)) return true;
return false;
}
} }
public class RitualRole_AnimalBreeder : RitualRole public class RitualRole_AnimalBreeder : RitualRole
@ -96,11 +91,11 @@ namespace RJWSexperience.Ideology
{ {
return false; return false;
} }
if (!xxx.can_rape(animal)) return false; if (!xxx.can_rape(animal))
{
return false;
}
return true; return true;
} }
} }
} }