// Token: 0x0600007E RID: 126 RVA: 0x00007018 File Offset: 0x00005218 public static Job DoPainReliefResponse(Pawn pawn) { if ((pawn?.CurJob) != null && pawn.CurJob.def == JobDefOf.Ingest) { return(null); } if (MSPainlessData.GetLastPainReliefTick(pawn) + 2500 * DRSettings.PainReliefWaitPeriod > Find.TickManager.TicksGame) { return(null); } ThingDef painDrugDef = MSPainUtility.NeedsPainReliefNow(pawn, out bool highpain); if (painDrugDef != null && MSDrugUtility.IsOKtoAdmin(pawn, null, painDrugDef) && !MSDrugUtility.IsViolation(pawn, painDrugDef)) { Thing drug = MSDrugUtility.FindDrugFor(pawn, painDrugDef); if (drug != null) { if (DRSettings.ShowReliefMsg) { Messages.Message(TranslatorFormattedStringExtensions.Translate("MSPainless.ReliefMsg", GenText.CapitalizeFirst(pawn.LabelShort), GenText.CapitalizeFirst(drug.def.label)), pawn, MessageTypeDefOf.NeutralEvent, false); } Job job = new Job(JobDefOf.Ingest, drug) { count = Mathf.Min(new int[] { drug.stackCount, drug.def.ingestible.maxNumToIngestAtOnce, 1 }) }; if (drug.Spawned && pawn.drugs != null && !pawn.inventory.innerContainer.Contains(drug.def)) { DrugPolicyEntry drugPolicyEntry = pawn.drugs.CurrentPolicy[drug.def]; if (drugPolicyEntry.takeToInventory > 0) { job.takeExtraIngestibles = drugPolicyEntry.takeToInventory; } } if (MSPainResponse.IsUsingPainJob(pawn, highpain) && !pawn.IsPrisoner) { MSPainlessData.MSPainlessDataTickSet(pawn); return(job); } if (MSAddDrugBill.GenDrugResponse(false, pawn, null, painDrugDef, null, null, 1)) { MSPainlessData.MSPainlessDataTickSet(pawn); return(null); } } } return(null); }
// Token: 0x0600007D RID: 125 RVA: 0x00006F64 File Offset: 0x00005164 public static void DoCaravanPainReliefResponse(Caravan car, Pawn pawn) { if (MSPainlessData.GetLastPainReliefTick(pawn) + 2500 * DRSettings.PainReliefWaitPeriod > Find.TickManager.TicksGame) { return; } ThingDef painDrugDef = MSPainUtility.NeedsPainReliefNow(pawn, out bool highpain); if (painDrugDef != null && MSDrugUtility.IsOKtoAdmin(pawn, null, painDrugDef) && !MSDrugUtility.IsViolation(pawn, painDrugDef) && MSCaravanUtility.CaravanHasDrug(car, painDrugDef, out Thing drug, out Pawn owner)) { MSPainlessData.MSPainlessDataTickSet(pawn); MSCaravanUtility.PawnOnCaravanTakeDrug(car, pawn, drug, owner); if (DRSettings.ShowReliefMsg) { Messages.Message(TranslatorFormattedStringExtensions.Translate("MSPainless.ReliefMsg", GenText.CapitalizeFirst(pawn.LabelShort), GenText.CapitalizeFirst(drug.def.label)), pawn, MessageTypeDefOf.NeutralEvent, false); } } }
// Token: 0x06000083 RID: 131 RVA: 0x00007294 File Offset: 0x00005494 public static int GetPainState(Pawn pawn) { float painTotal = MSPainUtility.GetPainAmount(pawn); if (painTotal < 0.01f) { return(0); } if (painTotal < 0.15f) { return(1); } if (painTotal < 0.4f) { return(2); } if (painTotal < 0.8f) { return(3); } return(4); }
// Token: 0x06000081 RID: 129 RVA: 0x0000720C File Offset: 0x0000540C public static ThingDef NeedsPainReliefNow(Pawn pawn, out bool highpain) { highpain = false; ThingDef drugdef = null; if (MSPainUtility.IsInPain(pawn)) { if (MSPainUtility.IsInExtremePain(pawn)) { if (DRSettings.MSDrugExtremeDef != null) { highpain = true; return(DRSettings.MSDrugExtremeDef); } } else if (MSPainUtility.IsInIntensePain(pawn)) { if (DRSettings.MSDrugIntenseDef != null) { highpain = true; return(DRSettings.MSDrugIntenseDef); } } else if (MSPainUtility.IsInSeriousPain(pawn)) { if (DRSettings.MSDrugSeriousDef != null) { return(DRSettings.MSDrugSeriousDef); } } else if (MSPainUtility.IsInMinorPain(pawn) && DRSettings.MSDrugMinorDef != null) { return(DRSettings.MSDrugMinorDef); } } return(drugdef); }
// Token: 0x06000087 RID: 135 RVA: 0x000072F9 File Offset: 0x000054F9 public static bool IsInIntensePain(Pawn pawn) { return(MSPainUtility.GetPainState(pawn) == 3); }
// Token: 0x06000086 RID: 134 RVA: 0x000072EE File Offset: 0x000054EE public static bool IsInSeriousPain(Pawn pawn) { return(MSPainUtility.GetPainState(pawn) == 2); }
// Token: 0x06000085 RID: 133 RVA: 0x000072E3 File Offset: 0x000054E3 public static bool IsInMinorPain(Pawn pawn) { return(MSPainUtility.GetPainState(pawn) == 1); }
// Token: 0x06000084 RID: 132 RVA: 0x000072D1 File Offset: 0x000054D1 public static bool IsInPain(Pawn pawn) { return(MSPainUtility.GetPainAmount(pawn) > 0.01f); }
// Token: 0x06000088 RID: 136 RVA: 0x00007304 File Offset: 0x00005504 public static bool IsInExtremePain(Pawn pawn) { return(MSPainUtility.GetPainState(pawn) >= 4); }
// Token: 0x0600007C RID: 124 RVA: 0x00006F04 File Offset: 0x00005104 public static void CheckCaravanPainResponse(Pawn pawn) { if (CaravanUtility.IsCaravanMember(pawn)) { Caravan car = CaravanUtility.GetCaravan(pawn); if (car != null && (pawn.IsColonist || (pawn.IsPrisoner && DRSettings.DoIfPrisoner)) && MSPainlessData.IsPainManager(pawn) && MSPainUtility.IsInPain(pawn) && !pawn.InMentalState && !car.NightResting) { MSPainResponse.DoCaravanPainReliefResponse(car, pawn); } } }
// Token: 0x0600007B RID: 123 RVA: 0x00006E50 File Offset: 0x00005050 public static void CheckPainResponse(Pawn pawn) { if ((pawn.IsColonist || (pawn.IsPrisoner && DRSettings.DoIfPrisoner)) && MSPainlessData.IsPainManager(pawn) && MSPainUtility.IsInPain(pawn) && !FireUtility.IsBurning(pawn) && !pawn.InMentalState && !pawn.Drafted && ((RestUtility.Awake(pawn) && !pawn.IsPrisoner) || pawn.IsPrisoner)) { Job painjob = MSPainResponse.DoPainReliefResponse(pawn); if (painjob != null) { if (pawn.jobs != null && pawn.jobs.curJob != null) { pawn.jobs.EndCurrentJob(JobCondition.InterruptForced, true, true); pawn.jobs.ClearQueuedJobs(true); } pawn.jobs.TryTakeOrderedJob(painjob, 0); } } }