public static void _Postfix(this MedicalCareCategory cat, ThingDef meds, ref bool __result, bool __state)
 {
     if (!__state)
     {
         __result = ModMedicinePatch.GetDynamicAllowsMedicine(cat, meds);
     }
 }
 public static void _Postfix(this MedicalCareCategory cat, ref string __result, bool __state)
 {
     if (!__state)
     {
         __result = ModMedicinePatch.GetDynamicLabel(cat);
     }
 }
        static PharmacistPatch()
        {
            try
            {
                ((Action)(() =>
                {
                    Log.Message("Patching Pharmacist medcare list");

                    //get ordered medicine list
                    List <MedicalCareCategory> careList = ModMedicinePatch.GetOrderedCareList();

                    //setup replacement Pharmacist medical care list
                    MedicalCareCategory[] medCareReplacement = careList.ToArray();

                    //add language labels
                    foreach (MedicalCareCategory care in careList)
                    {
                        if (!LanguageDatabase.activeLanguage.HaveTextForKey($"MedicalCareCategory_{(int)care}"))
                        {
                            LoadedLanguage.KeyedReplacement kr = new LoadedLanguage.KeyedReplacement();
                            kr.key = $"MedicalCareCategory_{(int)care}";
                            kr.value = MedicalCareUtility.GetLabel(care);
                            LanguageDatabase.activeLanguage.keyedReplacements.Add(kr.key, kr);
                        }
                    }

                    //set Pharmacist's medcares array
                    Traverse.Create <Pharmacist.MainTabWindow_Pharmacist>().Field("medcares").SetValue(medCareReplacement);

                    //add modded meds to Pharmacists texture library
                    Texture2D[] tex = new Texture2D[ModMedicinePatch.indexedMedList.Count];
                    for (int i = 0; i < ModMedicinePatch.indexedMedList.Count; i++)
                    {
                        tex[i] = ModMedicinePatch.indexedMedList[i].tex;
                    }

                    Traverse.Create(typeof(Pharmacist.Resources)).Field("medcareGraphics").SetValue(tex);

                    Log.Message("Done Patching Pharmacist medcare list");

                    Log.Message("Patching Pharmacist comparison function..");
                    var harmony = new Harmony("Antaios.Rimworld.PharmMedicinePatch");

                    harmony.Patch(
                        typeof(Pharmacist.PharmacistUtility).GetMethod("TendAdvice", new Type[] { typeof(Pawn), typeof(Pharmacist.InjurySeverity) }),
                        null,
                        new HarmonyMethod(typeof(PharmacistPatch).GetMethod("TendAdvicePostfix"))
                        );

                    Log.Message("Done patching Pharmacist comparison function..");
                }))();
            }
            catch (TypeLoadException)
            {
                Log.Message("Pharmacist not detected");
            }
        }
        public static bool _Prefix(this MedicalCareCategory cat, ThingDef meds, ref bool __state, ref bool __result)
        {
            //if MedicalCareCategory is within base game range, use original method - EXCEPT glitterworld.
            __state = false;
            if ((int)cat <= 3)
            {
                __state = true;
            }

            if (!__state)
            {
                __result = ModMedicinePatch.GetDynamicAllowsMedicine(cat, meds);
            }
            return(__state);
        }
        public static void TendAdvicePostfix(ref MedicalCareCategory __result, Pawn patient, Pharmacist.InjurySeverity severity)
        {
            Pharmacist.Population population = Pharmacist.PharmacistUtility.GetPopulation(patient);
            var pharmacist    = Pharmacist.PharmacistSettings.medicalCare[population][severity];
            var playerSetting = patient?.playerSettings?.medCare ?? MedicalCareCategory.Best;

            //get values which indicate relative medical potency
            float ph = ModMedicinePatch.GetCarePotency(pharmacist);
            float ps = ModMedicinePatch.GetCarePotency(playerSetting);

            MedicalCareCategory r = playerSetting;

            if (ph < ps)
            {
                r = pharmacist;
            }

            __result = r;
        }
 public static bool _Prefix(Rect rect, Pawn pawn)
 {
     ModMedicinePatch.DynamicMedicalCareSelectButton(rect, pawn);
     return(false);
 }
 public static void _Postfix(Rect rect, ref MedicalCareCategory medCare)
 {
     ModMedicinePatch.DynamicMedicalCareSetter(rect, ref medCare);
 }