diff --git a/Source/IdeologyAddon/DebugAction.cs b/Source/IdeologyAddon/DebugAction.cs index 55838d7..91f5b20 100644 --- a/Source/IdeologyAddon/DebugAction.cs +++ b/Source/IdeologyAddon/DebugAction.cs @@ -7,16 +7,16 @@ using Verse; namespace RJWSexperience.Ideology { - internal static class DebugAction + internal class DebugAction { [DebugAction("RJW Sexperience Ideology", "Test marriage event", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] - public static void GenerateMarriageEvent(Pawn p) + private static void GenerateMarriageEvent(Pawn p) { Pawn hero = p.Map.PlayerPawnsForStoryteller.First(x => x.IsDesignatedHero()); if (hero == null) return; - RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p); - RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero); + RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p); + RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero); } [DebugAction("RJW Sexperience Ideology", "Manual romance check", false, true, actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.PlayingOnMap)] diff --git a/Source/IdeologyAddon/IdeoUtility.cs b/Source/IdeologyAddon/IdeoUtility.cs index 05ffd75..206b8eb 100644 --- a/Source/IdeologyAddon/IdeoUtility.cs +++ b/Source/IdeologyAddon/IdeoUtility.cs @@ -12,9 +12,9 @@ namespace RJWSexperience.Ideology if (ideo == null) return false; - if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Female) && pawn.gender == Gender.Female) + if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Female) && pawn.gender == Gender.Female) return true; - else if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Male) && pawn.gender == Gender.Male) + else if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Male) && pawn.gender == Gender.Male) return true; return false; @@ -89,7 +89,7 @@ namespace RJWSexperience.Ideology Hediff pregnancy = PregnancyHelper.GetPregnancy(pawn); // Currently RJW does not check Biotech pregnancy - if (pregnancy == null && RsiDefOf.Hediff.PregnantHuman != null) + if (pregnancy == null && VariousDefOf.PregnantHuman != null) { pregnancy = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnantHuman); } diff --git a/Source/IdeologyAddon/IdeologyAddon.csproj b/Source/IdeologyAddon/IdeologyAddon.csproj index 9f06941..63f6689 100644 --- a/Source/IdeologyAddon/IdeologyAddon.csproj +++ b/Source/IdeologyAddon/IdeologyAddon.csproj @@ -63,6 +63,8 @@ + + @@ -93,7 +95,7 @@ - + diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs b/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs index 18d8550..2a22c2c 100644 --- a/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs +++ b/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs @@ -15,7 +15,7 @@ namespace RJWSexperience.Ideology.Patches if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc return; - if (!RsiDefOf.HistoryEvent.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo()) + if (!RsiHistoryEventDefOf.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo()) { __result = -2f; return; @@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology.Patches if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc return; - if (!RsiDefOf.HistoryEvent.RSI_Raped.CreateEvent(pawn).DoerWillingToDo()) + if (!RsiHistoryEventDefOf.RSI_Raped.CreateEvent(pawn).DoerWillingToDo()) { __result = -2f; return; @@ -48,7 +48,7 @@ namespace RJWSexperience.Ideology.Patches if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc return; - if (!RsiDefOf.HistoryEvent.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo()) + if (!RsiHistoryEventDefOf.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo()) { __result = -2f; return; @@ -65,7 +65,7 @@ namespace RJWSexperience.Ideology.Patches if (__result < 0f || p.Ideo == null) // ideo is null if don't have dlc return; - if (!RsiDefOf.HistoryEvent.RSI_Masturbated.CreateEvent(p).DoerWillingToDo()) + if (!RsiHistoryEventDefOf.RSI_Masturbated.CreateEvent(p).DoerWillingToDo()) { __result = -2f; return; diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs index 4a06922..e52b361 100644 --- a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs +++ b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs @@ -19,7 +19,7 @@ namespace RJWSexperience.Ideology.Patches Ideo ideo = pawn.Ideo; if (ideo != null && !pawn.IsSubmissive()) { - __result = __result || ideo.HasMeme(RsiDefOf.Meme.Rapist); + __result = __result || ideo.HasMeme(VariousDefOf.Rapist); } } } @@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology.Patches Ideo ideo = pawn.Ideo; if (ideo != null) { - __result = __result || ideo.HasMeme(RsiDefOf.Meme.Zoophile); + __result = __result || ideo.HasMeme(VariousDefOf.Zoophile); } } } @@ -45,7 +45,7 @@ namespace RJWSexperience.Ideology.Patches Ideo ideo = pawn.Ideo; if (ideo != null) { - __result = __result || ideo.HasMeme(RsiDefOf.Meme.Necrophile); + __result = __result || ideo.HasMeme(VariousDefOf.Necrophile); } } } @@ -85,10 +85,10 @@ namespace RJWSexperience.Ideology.Patches private static void AfterSexHuman(Pawn human, Pawn partner) { - RsiDefOf.HistoryEvent.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner); + RsiHistoryEventDefOf.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner); if (partner.IsAnimal()) - RsiDefOf.HistoryEvent.RSI_SexWithAnimal.RecordEventWithPartner(human, partner); + RsiHistoryEventDefOf.RSI_SexWithAnimal.RecordEventWithPartner(human, partner); } } @@ -113,13 +113,11 @@ namespace RJWSexperience.Ideology.Patches public static float PreceptSextype(Pawn pawn, Pawn partner, float score, List historyEventDefs) { - for (int i = 0; i < historyEventDefs.Count; i++) + foreach(HistoryEventDef eventDef in historyEventDefs) { - HistoryEventDef eventDef = historyEventDefs[i]; - 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, cacheStaleAfterTicks: 60))); + float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat))); return score * mult; } } @@ -150,7 +148,7 @@ namespace RJWSexperience.Ideology.Patches public static void Postfix(Pawn pawn, ref bool __result) { Ideo ideo = pawn.Ideo; - if (ideo?.HasMeme(RsiDefOf.Meme.Zoophile) == true) + if (ideo?.HasMeme(VariousDefOf.Zoophile) == true) { SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true; __result = true; @@ -215,14 +213,14 @@ namespace RJWSexperience.Ideology.Patches Ideo mainideo = playerfaction.ideos.PrimaryIdeo; if (mainideo != null) { - if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysFather)) + if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysFather)) { Pawn parent = baby.GetFather() ?? baby.GetMother(); ideo = parent.Ideo; return parent.Faction; } - else if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysColony)) + else if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysColony)) { ideo = mainideo; return playerfaction; @@ -243,7 +241,7 @@ namespace RJWSexperience.Ideology.Patches if (props.pawn?.Ideo == null || !props.hasPartner()) return; - if (props.partner.Ideo?.HasPrecept(RsiDefOf.Precept.ProselyzingByOrgasm) == true) + if (props.partner.Ideo?.HasPrecept(RsiPreceptDefOf.ProselyzingByOrgasm) == true) { // Pawn is the one having the orgasm // Partner is "giving" the orgasm, hence the pawn will be converted towards the partners ideology diff --git a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs index 5bd03b3..9a54dd4 100644 --- a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs +++ b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs @@ -16,8 +16,8 @@ namespace RJWSexperience.Ideology.Patches { public static void Postfix(Pawn firstPawn, Pawn secondPawn) { - RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn); - RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn); + RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn); + RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn); } } @@ -81,7 +81,7 @@ namespace RJWSexperience.Ideology.Patches /// Forbid romance option public static bool RsiIncestuous(Pawn one, Pawn two) { - PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == RsiDefOf.Issue.Incestuos); + PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos); var allowManualRomanceOnlyFor = incestuousPrecept?.GetModExtension()?.allowManualRomanceOnlyFor; BloodRelationDegree relationDegree = RelationHelpers.GetBloodRelationDegree(one, two); diff --git a/Source/IdeologyAddon/Patches/Sexperience_Patch.cs b/Source/IdeologyAddon/Patches/Sexperience_Patch.cs index 4f7471e..1be61cd 100644 --- a/Source/IdeologyAddon/Patches/Sexperience_Patch.cs +++ b/Source/IdeologyAddon/Patches/Sexperience_Patch.cs @@ -15,11 +15,11 @@ namespace RJWSexperience.Ideology.Patches const int femaleAfterSurgery = 1; if (props.isRape && exVirgin == props.partner) - RsiDefOf.HistoryEvent.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner); + RsiHistoryEventDefOf.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner); else if (degree != femaleAfterSurgery) - RsiDefOf.HistoryEvent.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner); + RsiHistoryEventDefOf.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner); - RsiDefOf.HistoryEvent.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin); + RsiHistoryEventDefOf.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin); } } } diff --git a/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs b/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs index 82a541e..a7eacb0 100644 --- a/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs +++ b/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs @@ -1,47 +1,56 @@ -using RimWorld; -using rjw; -using System; +using System; using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; using Verse; using Verse.AI; +using RimWorld; + namespace RJWSexperience.Ideology { - public class JobGiver_DrugOrgy : ThinkNode_JobGiver - { - protected override Job TryGiveJob(Pawn pawn) - { - if (pawn.Drafted || pawn.mindState == null) - { - return null; - } + public class JobGiver_DrugOrgy : ThinkNode_JobGiver + { + protected override Job TryGiveJob(Pawn pawn) + { + if (pawn.Drafted) return null; + DutyDef dutyDef = null; + PawnDuty duty = null; + if (pawn.mindState != null) + { + duty = pawn.mindState.duty; + dutyDef = duty.def; + } + else return null; - PawnDuty duty = pawn.mindState.duty; + if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) + { + return null; + } + + Pawn target = FindPartner(pawn, duty); - if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) - { - return null; - } + if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(VariousDefOf.DrugMasturbate); - Pawn target = FindPartner(pawn, duty); + return JobMaker.MakeJob(VariousDefOf.DrugSex, target); + } - if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None, 1)) - return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate); + protected Pawn FindPartner(Pawn pawn, PawnDuty duty) + { + if (duty != null) + { + List 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 JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target); - } + return null; + } - protected Pawn FindPartner(Pawn pawn, PawnDuty duty) - { - if (duty != null) - { - List 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; - } - } + } /// /// copied from rjw @@ -56,7 +65,7 @@ namespace RJWSexperience.Ideology protected override IEnumerable MakeNewToils() { setup_ticks(); - var PartnerJob = RsiDefOf.Job.GettinDrugSex; + var PartnerJob = VariousDefOf.GettinDrugSex; this.FailOnDespawnedNullOrForbidden(iTarget); this.FailOn(() => !Partner.health.capacities.CanBeAwake); @@ -64,52 +73,47 @@ namespace RJWSexperience.Ideology this.FailOn(() => Partner == null); 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; + }; + WaitForPartner.tickAction = delegate + { + pawn.GainComfortFromCellIfPossible(); + if (pawn.Position.DistanceTo(Partner.Position) <= 1f) { - ticksLeftThisToil = 5000; - }, - tickAction = delegate - { - pawn.GainComfortFromCellIfPossible(); - if (pawn.Position.DistanceTo(Partner.Position) <= 1f) - { - ReadyForNextToil(); - } + ReadyForNextToil(); } }; yield return WaitForPartner; - Toil StartPartnerJob = new Toil + Toil StartPartnerJob = new Toil(); + StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant; + StartPartnerJob.socialMode = RandomSocialMode.Off; + StartPartnerJob.initAction = delegate { - defaultCompleteMode = ToilCompleteMode.Instant, - socialMode = RandomSocialMode.Off, - initAction = delegate - { - if (!(Partner.jobs.curDriver is JobDriver_DrugSexReceiver)) - { - Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner); - Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced); - } + var dri = Partner.jobs.curDriver as JobDriver_DrugSexReceiver; + if (dri == null) + { + Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner); + Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced); } }; yield return StartPartnerJob; - Toil SexToil = new Toil - { - defaultCompleteMode = ToilCompleteMode.Never, - socialMode = RandomSocialMode.Off, - defaultDuration = duration, - handlingFacing = true - }; + Toil SexToil = new Toil(); + SexToil.defaultCompleteMode = ToilCompleteMode.Never; + SexToil.socialMode = RandomSocialMode.Off; + SexToil.defaultDuration = duration; + SexToil.handlingFacing = true; SexToil.FailOn(() => Partner.CurJob.def != PartnerJob); SexToil.initAction = delegate { Partner.pather.StopDead(); Partner.jobs.curDriver.asleep = false; - + Start(); Sexprops.usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner); }; @@ -143,7 +147,8 @@ namespace RJWSexperience.Ideology /// copied from rjw /// public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved - { + { + protected override IEnumerable MakeNewToils() { setup_ticks(); @@ -163,25 +168,23 @@ namespace RJWSexperience.Ideology yield return Toils_Reserve.Reserve(iTarget, 1, 0); - var get_loved = MakeSexToil(); - get_loved.handlingFacing = false; - yield return get_loved; + var get_loved = MakeSexToil(); + get_loved.handlingFacing = false; + yield return get_loved; } 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(() => { - if (parteners.Count == 0) + if (parteners.Count <= 0) { return JobCondition.Succeeded; } @@ -201,7 +204,8 @@ namespace RJWSexperience.Ideology /// copied from rjw /// public class JobDriver_DrugMasturabate : JobDriver_Masturbate - { + { + protected override IEnumerable MakeNewToils() { setup_ticks(); @@ -248,4 +252,6 @@ namespace RJWSexperience.Ideology }; } } + + } diff --git a/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs b/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs index eae27e5..dc6dc15 100644 --- a/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs +++ b/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs @@ -1,36 +1,43 @@ -using RimWorld; -using rjw; -using System; +using System; using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Verse; using Verse.AI; +using Verse.AI.Group; +using RimWorld; +using rjw; namespace RJWSexperience.Ideology { - public class JobGiver_GangbangConsensual : ThinkNode_JobGiver - { - protected override Job TryGiveJob(Pawn pawn) - { - if (pawn.Drafted || pawn.mindState == null) - { - return null; - } + public class JobGiver_GangbangConsensual : ThinkNode_JobGiver + { + protected override Job TryGiveJob(Pawn pawn) + { + if (pawn.Drafted) return null; + DutyDef dutyDef = null; + PawnDuty duty = null; + if (pawn.mindState != null) + { + duty = pawn.mindState.duty; + dutyDef = duty.def; + } + else return null; - PawnDuty duty = pawn.mindState.duty; + if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) + { + 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(VariousDefOf.Gangbang, target); + } + } - return JobMaker.MakeJob(RsiDefOf.Job.Gangbang, target); - } - } public class JobDriver_Gangbang : JobDriver_SexBaseInitiator { @@ -49,28 +56,26 @@ namespace RJWSexperience.Ideology this.FailOn(() => Partner.Drafted); 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, - socialMode = RandomSocialMode.Off, - initAction = delegate - { - if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped)) - { - Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed); - Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced); - } + + var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped; + if (dri == null) + { + Job gettin_loved = JobMaker.MakeJob(VariousDefOf.GettinGangbang, pawn, Bed); + Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced); } }; yield return StartPartnerJob; - Toil SexToil = new Toil - { - defaultCompleteMode = ToilCompleteMode.Never, - defaultDuration = duration, - handlingFacing = true - }; - SexToil.FailOn(() => Partner.CurJob.def != RsiDefOf.Job.GettinGangbang); + Toil SexToil = new Toil(); + SexToil.defaultCompleteMode = ToilCompleteMode.Never; + SexToil.defaultDuration = duration; + SexToil.handlingFacing = true; + SexToil.FailOn(() => Partner.CurJob.def != VariousDefOf.GettinGangbang); SexToil.initAction = delegate { Start(); @@ -103,30 +108,28 @@ namespace RJWSexperience.Ideology } public class JobDriver_GangbangReceiver : JobDriver_SexBaseRecieverLoved - { + { protected override IEnumerable MakeNewToils() { setup_ticks(); 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 { - defaultCompleteMode = ToilCompleteMode.Never, - handlingFacing = true, - initAction = delegate - { - pawn.pather.StopDead(); - pawn.jobs.curDriver.asleep = false; - }, - 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); - } + pawn.pather.StopDead(); + pawn.jobs.curDriver.asleep = false; + }; + get_banged.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(() => { - if (parteners.Count == 0) + if (parteners.Count <= 0) { return JobCondition.Succeeded; } @@ -145,12 +148,12 @@ namespace RJWSexperience.Ideology Partner.jobs.jobQueue.EnqueueFirst(tobed); } else if (pawn.HostileTo(Partner)) - { pawn.health.AddHediff(xxx.submitting); - } }); get_banged.socialMode = RandomSocialMode.Off; yield return get_banged; + } } + } diff --git a/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs b/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs index 092b00b..ce2ec72 100644 --- a/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs +++ b/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs @@ -1,46 +1,56 @@ -using RimWorld; -using rjw; +using System; using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Verse; using Verse.AI; +using Verse.AI.Group; +using RimWorld; +using rjw; + namespace RJWSexperience.Ideology { - public class JobGiver_GangbangVictim : ThinkNode_JobGiver - { - protected override Job TryGiveJob(Pawn pawn) - { - if (pawn.Drafted || pawn.mindState == null) - { - return null; - } + public class JobGiver_GangbangVictim : ThinkNode_JobGiver + { + protected override Job TryGiveJob(Pawn pawn) + { + if (pawn.Drafted) return null; + DutyDef dutyDef = null; + PawnDuty duty = null; + if (pawn.mindState != null) + { + duty = pawn.mindState.duty; + dutyDef = duty.def; + } + else return null; - PawnDuty duty = pawn.mindState.duty; - - if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) - { - return null; + if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) + { + return null; } 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(VariousDefOf.RapeVictim, target); + } + } - return JobMaker.MakeJob(RsiDefOf.Job.RapeVictim, target); - } - } /// /// copied from rjw /// public class JobDriver_RapeVictim : JobDriver_Rape { - public override bool TryMakePreToilReservations(bool errorOnFailed) - { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { return true; - } + } - protected override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { if (RJWSettings.DebugRape) ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called"); setup_ticks(); @@ -54,28 +64,25 @@ namespace RJWSexperience.Ideology SexUtility.RapeTargetAlert(pawn, Partner); - Toil StartPartnerJob = new Toil + Toil StartPartnerJob = new Toil(); + StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant; + StartPartnerJob.socialMode = RandomSocialMode.Off; + StartPartnerJob.initAction = delegate { - defaultCompleteMode = ToilCompleteMode.Instant, - socialMode = RandomSocialMode.Off, - initAction = delegate + var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped; + if (dri == null) { - 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; - Toil SexToil = new Toil - { - defaultCompleteMode = ToilCompleteMode.Never, - defaultDuration = duration, - handlingFacing = true - }; + Toil SexToil = new Toil(); + SexToil.defaultCompleteMode = ToilCompleteMode.Never; + SexToil.defaultDuration = duration; + SexToil.handlingFacing = true; SexToil.FailOn(() => Partner.CurJob.def != PartnerJob); SexToil.initAction = delegate { diff --git a/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs b/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs index b496689..e976d61 100644 --- a/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs +++ b/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs @@ -1,15 +1,21 @@ -using RimWorld; +using System; using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Verse; +using Verse.AI; +using RimWorld; + 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(string targetID, TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List 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 allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer) + { foreach (RitualRole ritualRole in assignments.AllRolesForReading) { if (ritualRole != null && ritualRole.id.Contains(targetID)) @@ -19,5 +25,6 @@ namespace RJWSexperience.Ideology } } } + } } diff --git a/Source/IdeologyAddon/Rituals/RitualRoles.cs b/Source/IdeologyAddon/Rituals/RitualRoles.cs index e7fb7fc..691bb28 100644 --- a/Source/IdeologyAddon/Rituals/RitualRoles.cs +++ b/Source/IdeologyAddon/Rituals/RitualRoles.cs @@ -1,101 +1,106 @@ using RimWorld; -using rjw; using Verse; +using rjw; namespace RJWSexperience.Ideology { - 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) - { - reason = null; - return false; - } + 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) + { + reason = null; + 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 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) + { + if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true; + if (pawn.IsSubmissive()) return true; + if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true; + return false; + } + } - public static bool CanBeVictim(Pawn pawn) - { - if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true; - if (pawn.IsSubmissive()) return true; - if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true; - return 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; + return 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; - 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 (!xxx.is_human(p)) + { + reason = Keyed.RSNotHuman; + return false; + } + if (CanBeBreedee(p)) return true; + if (!skipReason) + { + reason = Keyed.RSShouldCanFuck; + } + 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 (!xxx.is_human(p)) - { - reason = Keyed.RSNotHuman; - return false; - } - if (CanBeBreedee(p)) return true; - if (!skipReason) - { - reason = Keyed.RSShouldCanFuck; - } - return false; - } + public static bool CanBeBreedee(Pawn pawn) + { + if (xxx.can_be_fucked(pawn)) return true; + return false; + } + } - public static bool CanBeBreedee(Pawn pawn) => xxx.can_be_fucked(pawn); - } + public class RitualRole_AnimalBreeder : RitualRole + { + public override bool Animal => true; - public class RitualRole_AnimalBreeder : RitualRole - { - 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) + { + reason = null; + return false; + } - public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false) - { - reason = null; - 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 (!p.IsAnimal()) + { + reason = Keyed.RSNotAnimal; + return false; + } + if (CanBeBreeder(p, assignments?.Ritual)) return true; + if (!skipReason) + { + reason = Keyed.RSBreederCondition; + } + 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 (!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)) + public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept) + { + if (precept != null && precept.ideo.HasPrecept(RsiPreceptDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) { return false; } - if (!xxx.can_rape(animal)) - { - return false; - } - return true; - } - } + if (!xxx.can_rape(animal)) return false; + return true; + } + + } + + } diff --git a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs b/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs index 6d970f3..bae549e 100644 --- a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs +++ b/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs @@ -22,7 +22,7 @@ namespace RJWSexperience.Ideology if (!pawn.relations.FamilyByBlood.Contains(partner)) { - if (pawn.Ideo?.HasPrecept(RsiDefOf.Precept.Incestuos_IncestOnly) == true) + if (pawn.Ideo?.HasPrecept(RsiPreceptDefOf.Incestuos_IncestOnly) == true) { return parentRomanceChanceFactor; } @@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology } } - PreceptDef incestuousPrecept = pawn.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == RsiDefOf.Issue.Incestuos); + PreceptDef incestuousPrecept = pawn.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos); IEnumerable relations = pawn.GetRelations(partner).Where(def => def.familyByBloodRelation); foreach (PawnRelationDef relationDef in relations) { @@ -74,7 +74,7 @@ namespace RJWSexperience.Ideology { IEnumerable incestuousPrecepts = DefDatabase .AllDefsListForReading - .Where(def => def.issue == RsiDefOf.Issue.Incestuos); + .Where(def => def.issue == VariousDefOf.Incestuos); IEnumerable> preceptGetters = incestuousPrecepts .Select(precept => new TableDataGetter(precept.defName,(PawnRelationDef rel) => GetRomanceChanceFactor(rel, precept))); diff --git a/Source/IdeologyAddon/RsiDefOf.cs b/Source/IdeologyAddon/RsiDefOf.cs deleted file mode 100644 index d5b0cfa..0000000 --- a/Source/IdeologyAddon/RsiDefOf.cs +++ /dev/null @@ -1,65 +0,0 @@ -using RimWorld; -using Verse; - -namespace RJWSexperience.Ideology -{ - public static class RsiDefOf - { - [DefOf] - public static class Job - { - public static readonly JobDef RapeVictim; - public static readonly JobDef Gangbang; - public static readonly JobDef GettinGangbang; - public static readonly JobDef DrugSex; - public static readonly JobDef GettinDrugSex; - public static readonly JobDef DrugMasturbate; - } - - [DefOf] - public static class Meme - { - public static readonly MemeDef Zoophile; - public static readonly MemeDef Rapist; - public static readonly MemeDef Necrophile; - } - - [DefOf] - public static class Issue - { - public static readonly IssueDef Incestuos; - } - - [DefOf] - public static class Precept - { - public static readonly PreceptDef Incestuos_IncestOnly; - public static readonly PreceptDef Bestiality_OnlyVenerated; - public static readonly PreceptDef BabyFaction_AlwaysFather; - public static readonly PreceptDef BabyFaction_AlwaysColony; - public static readonly PreceptDef Submissive_Male; - public static readonly PreceptDef Submissive_Female; - public static readonly PreceptDef ProselyzingByOrgasm; - } - - [DefOf] - public static class HistoryEvent - { - public static readonly HistoryEventDef RSI_SexWithAnimal; - public static readonly HistoryEventDef RSI_Raped; - public static readonly HistoryEventDef RSI_NonIncestuosMarriage; - public static readonly HistoryEventDef RSI_NonIncestuosSex; - public static readonly HistoryEventDef RSI_SexWithCorpse; - public static readonly HistoryEventDef RSI_VirginTaken; - public static readonly HistoryEventDef RSI_VirginStolen; - public static readonly HistoryEventDef RSI_TookVirgin; - public static readonly HistoryEventDef RSI_Masturbated; - } - - [DefOf] - public static class Hediff - { - [MayRequireBiotech] public static readonly HediffDef PregnantHuman; - } - } -} diff --git a/Source/IdeologyAddon/RsiHistoryEventDefOf.cs b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs new file mode 100644 index 0000000..4cb9bc7 --- /dev/null +++ b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs @@ -0,0 +1,18 @@ +using RimWorld; + +namespace RJWSexperience.Ideology +{ + [DefOf] + public static class RsiHistoryEventDefOf + { + public static readonly HistoryEventDef RSI_SexWithAnimal; + public static readonly HistoryEventDef RSI_Raped; + public static readonly HistoryEventDef RSI_NonIncestuosMarriage; + public static readonly HistoryEventDef RSI_NonIncestuosSex; + public static readonly HistoryEventDef RSI_SexWithCorpse; + public static readonly HistoryEventDef RSI_VirginTaken; + public static readonly HistoryEventDef RSI_VirginStolen; + public static readonly HistoryEventDef RSI_TookVirgin; + public static readonly HistoryEventDef RSI_Masturbated; + } +} diff --git a/Source/IdeologyAddon/RsiPreceptDefOf.cs b/Source/IdeologyAddon/RsiPreceptDefOf.cs new file mode 100644 index 0000000..1638e76 --- /dev/null +++ b/Source/IdeologyAddon/RsiPreceptDefOf.cs @@ -0,0 +1,16 @@ +using RimWorld; + +namespace RJWSexperience.Ideology +{ + [DefOf] + public static class RsiPreceptDefOf + { + public static readonly PreceptDef Incestuos_IncestOnly; + public static readonly PreceptDef Bestiality_OnlyVenerated; + public static readonly PreceptDef BabyFaction_AlwaysFather; + public static readonly PreceptDef BabyFaction_AlwaysColony; + public static readonly PreceptDef Submissive_Male; + public static readonly PreceptDef Submissive_Female; + public static readonly PreceptDef ProselyzingByOrgasm; + } +} \ No newline at end of file diff --git a/Source/IdeologyAddon/VariousDefOf.cs b/Source/IdeologyAddon/VariousDefOf.cs new file mode 100644 index 0000000..19a104d --- /dev/null +++ b/Source/IdeologyAddon/VariousDefOf.cs @@ -0,0 +1,22 @@ +using RimWorld; +using Verse; + +namespace RJWSexperience.Ideology +{ + [DefOf] + public static class VariousDefOf + { + public static readonly JobDef RapeVictim; + public static readonly JobDef Gangbang; + public static readonly JobDef GettinGangbang; + public static readonly JobDef DrugSex; + public static readonly JobDef GettinDrugSex; + public static readonly JobDef DrugMasturbate; + + public static readonly MemeDef Zoophile; + public static readonly MemeDef Rapist; + public static readonly MemeDef Necrophile; + public static readonly IssueDef Incestuos; + [MayRequireBiotech] public static readonly HediffDef PregnantHuman; + } +}