public static T FailOnNonMedicalBedNotOwned <T>(this T f, TargetIndex bedIndex, TargetIndex claimantIndex = TargetIndex.None) where T : IJobEndable { f.AddEndCondition(delegate { Pawn actor = f.GetActor(); Pawn pawn = (claimantIndex != TargetIndex.None) ? ((Pawn)actor.CurJob.GetTarget(claimantIndex).Thing) : actor; if (pawn.ownership != null) { Building_Bed building_Bed = (Building_Bed)actor.CurJob.GetTarget(bedIndex).Thing; if (building_Bed.Medical) { if ((!pawn.InBed() || pawn.CurrentBed() != building_Bed) && !building_Bed.AnyUnoccupiedSleepingSlot) { return(JobCondition.Incompletable); } } else { if (!building_Bed.owners.Contains(pawn)) { return(JobCondition.Incompletable); } if (pawn.InBed() && pawn.CurrentBed() == building_Bed) { int curOccupantSlotIndex = building_Bed.GetCurOccupantSlotIndex(pawn); if (curOccupantSlotIndex >= building_Bed.owners.Count || building_Bed.owners[curOccupantSlotIndex] != pawn) { return(JobCondition.Incompletable); } } } } return(JobCondition.Ongoing); }); return(f); }