Skip to content
Snippets Groups Projects
Commit 4e343d6a authored by Ed86's avatar Ed86
Browse files

merged quickie receiver into loved

parent ac6bf823
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@ namespace rjw
setup_ticks();
parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
//--Log.Message("[" + SaveStorage.ModId + "]JobDriver_GettinLoved::MakeNewToils is called");
//Log.Message("[" + SaveStorage.ModId + "]" + Partner.CurJob.def);
float partner_ability = xxx.get_sex_ability(Partner);
......@@ -30,124 +31,88 @@ namespace rjw
this.FailOnDespawnedOrNull(iTarget);
this.FailOn(() => !Partner.health.capacities.CanBeAwake);
this.FailOn(() => pawn.Drafted);
this.FailOn(() => Partner.Drafted);
if (Partner.CurJob.def == xxx.casual_sex)
if (Partner.CurJob.def == xxx.casual_sex) // sex in bed
{
this.FailOn(() => pawn.Drafted);
this.KeepLyingDown(iBed);
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
yield return Toils_Reserve.Reserve(iBed, Bed.SleepingSlotsCount, 0);
Toil get_loved = Toils_LayDown.LayDown(iBed, true, false, false, false);
var get_loved = MakeSexToil();
get_loved.FailOn(() => Partner.CurJob.def != xxx.casual_sex);
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.handlingFacing = true;
get_loved.tickAction = delegate
{
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
};
get_loved.AddFinishAction(delegate
{
if (xxx.is_human(pawn))
pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
});
yield return get_loved;
}
else if (Partner.CurJob.def == xxx.quick_sex)
{
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
var get_loved = MakeSexToil();
get_loved.handlingFacing = false;
yield return get_loved;
}
else if (Partner.CurJob.def == xxx.whore_is_serving_visitors)
{
this.FailOn(() => Partner.CurJob == null);
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
Toil get_loved = new Toil();
var get_loved = MakeSexToil();
get_loved.FailOn(() => (Partner.CurJob.def != xxx.whore_is_serving_visitors));
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.handlingFacing = true;
get_loved.tickAction = delegate
{
--ticks_remaining;
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
};
get_loved.AddEndCondition(new Func<JobCondition>(() =>
{
if ((ticks_remaining <= 0) || (parteners.Count <= 0))
{
return JobCondition.Succeeded;
}
return JobCondition.Ongoing;
}));
get_loved.AddFinishAction(delegate
{
if (xxx.is_human(pawn))
pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
});
yield return get_loved;
}
else if (Partner.CurJob.def == xxx.bestialityForFemale)
{
this.FailOn(() => Partner.CurJob == null);
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
Toil get_loved = new Toil();
var get_loved = MakeSexToil();
get_loved.FailOn(() => (Partner.CurJob.def != xxx.bestialityForFemale));
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.handlingFacing = true;
get_loved.tickAction = delegate
{
--ticks_remaining;
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
};
get_loved.AddEndCondition(new Func<JobCondition>(() =>
{
if ((ticks_remaining <= 0) || (parteners.Count <= 0))
{
return JobCondition.Succeeded;
}
return JobCondition.Ongoing;
}));
get_loved.AddFinishAction(delegate
{
if (xxx.is_human(pawn))
pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
});
get_loved.socialMode = RandomSocialMode.Off;
yield return get_loved;
}
else if (Partner.CurJob.def == xxx.animalMate)
{
this.FailOn(() => Partner.CurJob == null);
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
Toil get_loved = new Toil();
var get_loved = MakeSexToil();
get_loved.FailOn(() => (Partner.CurJob.def != xxx.animalMate));
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.handlingFacing = true;
get_loved.tickAction = delegate
{
--ticks_remaining;
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
};
get_loved.AddEndCondition(new Func<JobCondition>(() =>
{
if ((ticks_remaining <= 0) || (parteners.Count <= 0))
{
return JobCondition.Succeeded;
}
return JobCondition.Ongoing;
}));
get_loved.socialMode = RandomSocialMode.Off;
yield return get_loved;
}
}
private Toil MakeSexToil()
{
Toil get_loved = new Toil();
if (Partner.CurJob.def == xxx.casual_sex) // sex in bed
get_loved = Toils_LayDown.LayDown(iBed, true, false, false, false);
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.handlingFacing = true;
get_loved.tickAction = delegate
{
--ticks_remaining;
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
};
get_loved.AddEndCondition(new Func<JobCondition>(() =>
{
if ((ticks_remaining <= 0) || (parteners.Count <= 0))
{
return JobCondition.Succeeded;
}
return JobCondition.Ongoing;
}));
get_loved.AddFinishAction(delegate
{
if (xxx.is_human(pawn))
pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
});
get_loved.socialMode = RandomSocialMode.Off;
return get_loved;
}
}
public class JobDriver_SexBaseRecieverQuickie : JobDriver_SexBaseRecieverLoved
{
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using RimWorld;
using Verse;
using Verse.AI;
namespace rjw
{
public class JobDriver_SexBaseRecieverQuickie : JobDriver_SexBaseReciever
{
protected override IEnumerable<Toil> MakeNewToils()
{
setup_ticks();
parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
float partner_ability = xxx.get_sex_ability(Partner);
// More/less hearts based on partner ability.
if (partner_ability < 0.8f)
ticks_between_thrusts += 120;
else if (partner_ability > 2.0f)
ticks_between_thrusts -= 30;
// More/less hearts based on opinion.
if (pawn.relations.OpinionOf(Partner) < 0)
ticks_between_hearts += 50;
else if (pawn.relations.OpinionOf(Partner) > 60)
ticks_between_hearts -= 25;
this.FailOnDespawnedOrNull(iTarget);
this.FailOn(() => !Partner.health.capacities.CanBeAwake);
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
Toil get_loved = new Toil();
get_loved.defaultCompleteMode = ToilCompleteMode.Never;
get_loved.socialMode = RandomSocialMode.Off;
get_loved.initAction = delegate
{
pawn.pather.StopDead();
pawn.jobs.curDriver.asleep = false;
};
get_loved.AddPreTickAction(delegate
{
if (pawn.IsHashIntervalTick(ticks_between_hearts))
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
});
get_loved.AddEndCondition(new Func<JobCondition>(() =>
{
if ((ticks_remaining <= 0) || (parteners.Count <= 0))
{
return JobCondition.Succeeded;
}
return JobCondition.Ongoing;
}));
get_loved.AddFinishAction(delegate
{
if (xxx.is_human(pawn))
pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
});
yield return get_loved;
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment