protected override Job TryGiveJob(Pawn pawn) { if (pawn.AnimalOrWildMan()) { return(null); } if (!pawn.IsColonist) { return(null); } if (pawn.Drafted) { return(null); } if (pawn.Downed) { return(null); } if (HealthAIUtility.ShouldSeekMedicalRest(pawn)) { return(null); } CompMilkableHumanoid compMilk = pawn.TryGetComp <CompMilkableHumanoid>(); if (compMilk == null) { return(null); } if (!compMilk.ActiveAndCanBeMilked) { return(null); } if (!compMilk.MilkProps.canMilkThemselves) { return(null); } Pawn lover = LovePartnerRelationUtility.ExistingLovePartner(pawn); if (lover != null) { if (pawn.Faction == lover.Faction) { if (!lover.Drafted && !lover.Downed && !HealthAIUtility.ShouldSeekMedicalRest(lover)) { return(null); } } } return(new Job(MilkyDefOf.MilkySelf)); }
public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) { Pawn targetPawn = t as Pawn; if (targetPawn == null) { return(false); } Pawn lover = LovePartnerRelationUtility.ExistingLovePartner(pawn); if (lover == null) { return(false); } if (pawn.Faction != targetPawn.Faction) { return(false); } if (lover != targetPawn) { return(false); } if (lover.Drafted) { return(false); } //Do not try to milk sleeping lovers. Its rude. if (lover.CurJob != null && lover.jobs.curDriver.asleep) { return(false); } //Do not intervene in player forced jobs. if (lover.CurJob != null && lover.CurJob.playerForced) { return(false); } CompMilkableHumanoid spouseMilkComp = lover.TryGetComp <CompMilkableHumanoid>(); if (spouseMilkComp == null) { return(false); } if (!spouseMilkComp.ActiveAndCanBeMilked) { return(false); } //Do not interrupt forbidden jobs. if (lover.CurJob != null && spouseMilkComp.MilkProps.forbiddenJobsToInterrupt.Count > 0 && spouseMilkComp.MilkProps.forbiddenJobsToInterrupt.Contains(lover.CurJob.def)) { return(false); } if (lover.Position.IsForbidden(pawn)) { return(false); } if (!pawn.CanReserve(new LocalTargetInfo(lover))) { return(false); } if (!pawn.CanReach(new LocalTargetInfo(lover), PathEndMode.ClosestTouch, Danger.Deadly)) { return(false); } return(true); }