public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            var prisoner = t as Pawn;
            var need     = prisoner?.needs.TryGetNeed <Need_Motivation>();

            if (need == null || prisoner == null)
            {
                return(null);
            }
            if (!ShouldTakeCareOfPrisoner(pawn, prisoner))
            {
                return(null);
            }
            if (prisoner.Downed || !pawn.CanReserve(t, 1, -1, null, false) || !prisoner.Awake())
            {
                return(null);
            }
            if (pawn.IsPrisoner)
            {
                return(null);
            }
            var prisonerComp = prisoner.TryGetComp <PrisonerComp>();;

            if (!PrisonLaborUtility.LaborEnabled(prisoner) && prisonerComp != null && !prisonerComp.escapeTracker.CanEscape)
            {
                return(null);
            }
            if (PrisonLaborUtility.RecruitInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerAttemptRecruit, t));
            }
            if (PrisonLaborUtility.ConvertInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerConvert, t));
            }
            if (PrisonLaborUtility.EnslaveInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerEnslave, t));
            }
            if ((!PrisonLaborUtility.WorkTime(prisoner) || !need.ShouldBeMotivated) && prisonerComp != null && !prisonerComp.escapeTracker.CanEscape)
            {
                return(null);
            }

            return(new Job(DefDatabase <JobDef> .GetNamed("PrisonLabor_PrisonerSupervise"), prisoner));
        }
Esempio n. 2
0
        public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            var prisoner = t as Pawn;

            if (prisoner == null)
            {
                return(null);
            }
            if (!ShouldTakeCareOfPrisoner(pawn, prisoner))
            {
                return(null);
            }
            if (prisoner.Downed || !pawn.CanReserve(t, 1, -1, null, false) || !prisoner.Awake())
            {
                return(null);
            }
            if (pawn.IsPrisoner)
            {
                return(null);
            }


            if (PrisonLaborUtility.RecruitInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerAttemptRecruit, t));
            }
            if (PrisonLaborUtility.ConvertInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerConvert, t));
            }
            if (PrisonLaborUtility.EnslaveInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerEnslave, t));
            }

            return(null);
        }