예제 #1
0
        // 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);
        }
예제 #2
0
        // 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);
                }
            }
        }
예제 #3
0
        // 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);
        }
예제 #4
0
        // 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);
        }
예제 #5
0
 // Token: 0x06000087 RID: 135 RVA: 0x000072F9 File Offset: 0x000054F9
 public static bool IsInIntensePain(Pawn pawn)
 {
     return(MSPainUtility.GetPainState(pawn) == 3);
 }
예제 #6
0
 // Token: 0x06000086 RID: 134 RVA: 0x000072EE File Offset: 0x000054EE
 public static bool IsInSeriousPain(Pawn pawn)
 {
     return(MSPainUtility.GetPainState(pawn) == 2);
 }
예제 #7
0
 // Token: 0x06000085 RID: 133 RVA: 0x000072E3 File Offset: 0x000054E3
 public static bool IsInMinorPain(Pawn pawn)
 {
     return(MSPainUtility.GetPainState(pawn) == 1);
 }
예제 #8
0
 // Token: 0x06000084 RID: 132 RVA: 0x000072D1 File Offset: 0x000054D1
 public static bool IsInPain(Pawn pawn)
 {
     return(MSPainUtility.GetPainAmount(pawn) > 0.01f);
 }
예제 #9
0
 // Token: 0x06000088 RID: 136 RVA: 0x00007304 File Offset: 0x00005504
 public static bool IsInExtremePain(Pawn pawn)
 {
     return(MSPainUtility.GetPainState(pawn) >= 4);
 }
예제 #10
0
 // 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);
         }
     }
 }
예제 #11
0
 // 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);
         }
     }
 }