// Token: 0x06000031 RID: 49 RVA: 0x00002E20 File Offset: 0x00001020
        protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested)
        {
            bool flag = AddictionUtility.AddictedToAnything(pawn);

            if (flag)
            {
                foreach (ChemicalDef chemical in DefDatabase <ChemicalDef> .AllDefs)
                {
                    bool flag2 = AddictionUtility.IsAddicted(pawn, chemical);
                    if (flag2)
                    {
                        Hediff hediff  = AddictionUtility.FindAddictionHediff(pawn, chemical);
                        Hediff hediff2 = AddictionUtility.FindToleranceHediff(pawn, chemical);
                        pawn.health.RemoveHediff(hediff);
                        bool flag3 = hediff2 != null;
                        if (flag3)
                        {
                            pawn.health.RemoveHediff(hediff2);
                        }
                    }
                }
                foreach (HediffDef def in this.BeneficialAddictiveDrugHediffs)
                {
                    Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(def, false);
                    bool   flag4            = firstHediffOfDef != null;
                    if (flag4)
                    {
                        pawn.health.RemoveHediff(firstHediffOfDef);
                    }
                }
            }
        }
 protected virtual void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested)
 {
     if (!AddictionUtility.AddictedToAnything(pawn))
     {
         return;
     }
     using (IEnumerator <ChemicalDef> enumerator = DefDatabase <ChemicalDef> .get_AllDefs().GetEnumerator())
     {
         while (((IEnumerator)enumerator).MoveNext())
         {
             ChemicalDef current = enumerator.Current;
             if (AddictionUtility.IsAddicted(pawn, current))
             {
                 Hediff addictionHediff = (Hediff)AddictionUtility.FindAddictionHediff(pawn, current);
                 Hediff toleranceHediff = AddictionUtility.FindToleranceHediff(pawn, current);
                 ((Pawn_HealthTracker)pawn.health).RemoveHediff(addictionHediff);
                 if (toleranceHediff != null)
                 {
                     ((Pawn_HealthTracker)pawn.health).RemoveHediff(toleranceHediff);
                 }
             }
         }
     }
     using (IEnumerator <HediffDef> enumerator = this.BeneficialAddictiveDrugHediffs.GetEnumerator())
     {
         while (((IEnumerator)enumerator).MoveNext())
         {
             HediffDef current          = enumerator.Current;
             Hediff    firstHediffOfDef = ((HediffSet)((Pawn_HealthTracker)pawn.health).hediffSet).GetFirstHediffOfDef(current, false);
             if (firstHediffOfDef != null)
             {
                 ((Pawn_HealthTracker)pawn.health).RemoveHediff(firstHediffOfDef);
             }
         }
     }
 }
        private static bool IsValidCandidateToRedress(Pawn pawn, PawnGenerationRequest request)
        {
            if (pawn.def != request.KindDef.race)
            {
                return(false);
            }
            if (!request.WorldPawnFactionDoesntMatter && pawn.Faction != request.Faction)
            {
                return(false);
            }
            if (!request.AllowDead)
            {
                if (pawn.Dead || pawn.Destroyed)
                {
                    return(false);
                }
                if (pawn.health.hediffSet.GetBrain() == null)
                {
                    return(false);
                }
            }
            if (!request.AllowDowned && pawn.Downed)
            {
                return(false);
            }
            if (pawn.health.hediffSet.BleedRateTotal > 0.001f)
            {
                return(false);
            }
            if (!request.CanGeneratePawnRelations && pawn.RaceProps.IsFlesh && pawn.relations.RelatedToAnyoneOrAnyoneRelatedToMe)
            {
                return(false);
            }
            if (!request.AllowGay && pawn.RaceProps.Humanlike && pawn.story.traits.HasTrait(TraitDefOf.Gay))
            {
                return(false);
            }
            if (!request.AllowAddictions && AddictionUtility.AddictedToAnything(pawn))
            {
                return(false);
            }
            if (request.ProhibitedTraits != null && request.ProhibitedTraits.Any((TraitDef t) => pawn.story.traits.HasTrait(t)))
            {
                return(false);
            }
            List <SkillRange> skills = request.KindDef.skills;

            if (skills != null)
            {
                for (int i = 0; i < skills.Count; i++)
                {
                    SkillRecord skill = pawn.skills.GetSkill(skills[i].Skill);
                    if (skill.TotallyDisabled)
                    {
                        return(false);
                    }
                    if (skill.Level < skills[i].Range.min || skill.Level > skills[i].Range.max)
                    {
                        return(false);
                    }
                }
            }
            if (request.ForcedTraits != null)
            {
                foreach (TraitDef forcedTrait in request.ForcedTraits)
                {
                    if (!pawn.story.traits.HasTrait(forcedTrait))
                    {
                        return(false);
                    }
                }
            }
            if (request.ValidatorPreGear != null && !request.ValidatorPreGear(pawn))
            {
                return(false);
            }
            if (request.ValidatorPostGear != null && !request.ValidatorPostGear(pawn))
            {
                return(false);
            }
            if (request.FixedBiologicalAge.HasValue && pawn.ageTracker.AgeBiologicalYearsFloat != request.FixedBiologicalAge)
            {
                return(false);
            }
            if (request.FixedChronologicalAge.HasValue && (float)pawn.ageTracker.AgeChronologicalYears != request.FixedChronologicalAge)
            {
                return(false);
            }
            if (request.FixedGender.HasValue && pawn.gender != request.FixedGender)
            {
                return(false);
            }
            if (request.FixedLastName != null && (!(pawn.Name is NameTriple) || ((NameTriple)pawn.Name).Last != request.FixedLastName))
            {
                return(false);
            }
            if (request.FixedMelanin.HasValue && pawn.story != null && pawn.story.melanin != request.FixedMelanin)
            {
                return(false);
            }
            if (request.FixedTitle != null && (pawn.royalty == null || !pawn.royalty.HasTitle(request.FixedTitle)))
            {
                return(false);
            }
            if (request.KindDef.minTitleRequired != null)
            {
                if (pawn.royalty == null)
                {
                    return(false);
                }
                RoyalTitleDef royalTitleDef = pawn.royalty.MainTitle();
                if (royalTitleDef == null || royalTitleDef.seniority < request.KindDef.minTitleRequired.seniority)
                {
                    return(false);
                }
            }
            if (request.Context == PawnGenerationContext.PlayerStarter && Find.Scenario != null && !Find.Scenario.AllowPlayerStartingPawn(pawn, tryingToRedress: true, request))
            {
                return(false);
            }
            if (request.MustBeCapableOfViolence)
            {
                if (pawn.WorkTagIsDisabled(WorkTags.Violent))
                {
                    return(false);
                }
                if (pawn.RaceProps.ToolUser && !pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
                {
                    return(false);
                }
            }
            if (request.RedressValidator != null && !request.RedressValidator(pawn))
            {
                return(false);
            }
            if (request.KindDef.requiredWorkTags != 0 && pawn.kindDef != request.KindDef && (pawn.CombinedDisabledWorkTags & request.KindDef.requiredWorkTags) != 0)
            {
                return(false);
            }
            return(true);
        }