Exemplo n.º 1
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            if (myPawn.RaceProps.Humanlike && !ForPrisoners && Medical && !myPawn.Drafted && Faction == Faction.OfPlayer && RestUtility.CanUseBedEver(myPawn, def))
            {
                if (!MedPodHealthAIUtility.IsValidRaceForMedPod(myPawn, DisallowedRaces))
                {
                    yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "MedPod_FloatMenu_RaceNotAllowed".Translate(myPawn.def.label.CapitalizeFirst()) + ")", null));

                    yield break;
                }
                if (!MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs))
                {
                    yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "NotInjured".Translate() + ")", null));

                    yield break;
                }
                if (MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs) && !powerComp.PowerOn)
                {
                    yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "MedPod_FloatMenu_Unpowered".Translate() + ")", null));

                    yield break;
                }
                if (MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs) && this.IsForbidden(myPawn))
                {
                    yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "ForbiddenLower".Translate() + ")", null));

                    yield break;
                }
                Action action = delegate
                {
                    if (!ForPrisoners && Medical && myPawn.CanReserveAndReach(this, PathEndMode.ClosestTouch, Danger.Deadly, SleepingSlotsCount, -1, null, ignoreOtherReservations: true))
                    {
                        if (myPawn.CurJobDef == JobDefOf.LayDown && myPawn.CurJob.GetTarget(TargetIndex.A).Thing == this)
                        {
                            myPawn.CurJob.restUntilHealed = true;
                        }
                        else
                        {
                            Job job = JobMaker.MakeJob(JobDefOf.LayDown, this);
                            job.restUntilHealed = true;
                            myPawn.jobs.TryTakeOrderedJob(job);
                        }
                        myPawn.mindState.ResetLastDisturbanceTick();
                    }
                };
                yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("UseMedicalBed".Translate(), action), myPawn, this, (AnyUnoccupiedSleepingSlot ? "ReservedBy" : "SomeoneElseSleeping").CapitalizeFirst()));
            }
        }
Exemplo n.º 2
0
 static void Postfix(ref bool __result, Thing bedThing, Pawn sleeper)
 {
     if (bedThing is Building_BedMedPod bedMedPod && (!bedMedPod.powerComp.PowerOn || !MedPodHealthAIUtility.ShouldPawnSeekMedPod(sleeper) || !MedPodHealthAIUtility.IsValidRaceForMedPod(sleeper, bedMedPod.DisallowedRaces)))
     {
         __result = false;
     }
 }
Exemplo n.º 3
0
 static void Postfix(ref bool __result, Thing bedThing, Pawn sleeper)
 {
     if (bedThing is Building_BedMedPod bedMedPod && (!bedMedPod.powerComp.PowerOn || bedMedPod.IsForbidden(sleeper) || !MedPodHealthAIUtility.ShouldPawnSeekMedPod(sleeper, bedMedPod.AlwaysTreatableHediffs, bedMedPod.NeverTreatableHediffs) || MedPodHealthAIUtility.HasUsageBlockingHediffs(sleeper, bedMedPod.UsageBlockingHediffs) || !MedPodHealthAIUtility.IsValidRaceForMedPod(sleeper, bedMedPod.DisallowedRaces) || bedMedPod.Aborted))
     {
         __result = false;
     }
 }