// 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); }