public override bool StateCanOccur(Pawn pawn) { if (!base.StateCanOccur(pawn)) { return(false); } if (!pawn.Spawned) { return(false); } List <ChemicalDef> allDefsListForReading = DefDatabase <ChemicalDef> .AllDefsListForReading; for (int i = 0; i < allDefsListForReading.Count; i++) { if (AddictionUtility.CanBingeOnNow(pawn, allDefsListForReading[i], def.drugCategory)) { return(true); } if (def.drugCategory == DrugCategory.Hard && AddictionUtility.CanBingeOnNow(pawn, allDefsListForReading[i], DrugCategory.Social)) { return(true); } } return(false); }
/// <summary>Does the ingestion outcome special.</summary> /// <param name="pawn">The pawn.</param> /// <param name="ingested">The ingested.</param> protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { foreach (HediffDef h in AllCompleteDefs.Concat(AllPartialDefs)) { if (!h.CanInfect(pawn)) { continue; } Hediff hediff = HediffMaker.MakeHediff(h, pawn); float num; if (severity > 0f) { num = severity; } else { num = h.initialSeverity; } if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); } }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { Hediff hediffAdd = HediffMaker.MakeHediff(hediffDefAdd, pawn, null); float num; if (severity > 0f) { num = severity; } else { num = hediffDefAdd.initialSeverity; } if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediffAdd.Severity = num; pawn.health.AddHediff(hediffAdd, null, null, null); Hediff hediffRemove = pawn.health.hediffSet.hediffs.Find((Hediff h) => h.def == hediffDefRemove); if (hediffRemove != null) { pawn.health.RemoveHediff(hediffRemove); } }
// 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 override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { List <Hediff> hediffs = pawn.health.hediffSet.hediffs.Where(hd => hd.def == hediffDef).ToList(); foreach (Hediff hediff in hediffs) { float newSeverity = hediff.Severity; float effect = severity; if (divideByBodySize) { effect /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref effect); if (isScalar) { newSeverity *= effect; } else { newSeverity += effect; } hediff.Severity = newSeverity; } }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { if (ingested != null && ingested is BloodBagThingWithComps bag) { if (!pawn.GetBloodType()?.BloodType.CanGetBlood(bag?.BloodType) ?? false) { //TODO blood incompatibility, MVP FoodPoison var d = pawn?.health?.AddHediff(RimWorld.HediffDefOf.FoodPoisoning); if (d != null) { d.Severity = Rand.Value / 3f; } } } Hediff hediff = HediffMaker.MakeHediff(this.hediffDef, pawn, (BodyPartRecord)null); float effect = (double)this.severity <= 0.0 ? this.hediffDef.initialSeverity : this.severity; if (this.divideByBodySize) { effect /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, this.toleranceChemical, ref effect); hediff.Severity = effect; pawn.health.AddHediff(hediff, (BodyPartRecord)null, new DamageInfo?(), (DamageWorker.DamageResult)null); }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { if (raceDependencies != null) { for (int i = 0; i < raceDependencies.Count; i++) { raceDependencies raceDependency = raceDependencies[i]; if (pawn.def == raceDependency.race) { Hediff hediffRace = HediffMaker.MakeHediff(raceDependency.hediffDef, pawn, null); float numRace; if (raceDependency.severity > 0f) { numRace = raceDependency.severity; } else { numRace = raceDependency.hediffDef.initialSeverity; } if (raceDependency.divideByBodySize) { numRace /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, raceDependency.toleranceChemical, ref numRace); hediffRace.Severity = numRace; pawn.health.AddHediff(hediffRace, null, null); return; } } } Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn, null); float num; if (severity > 0f) { num = severity; } else { num = hediffDef.initialSeverity; } if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn); float effect = ((!(severity > 0f)) ? hediffDef.initialSeverity : severity) * ingested.stackCount; if (divideByBodySize) { effect /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref effect); hediff.Severity = effect; pawn.health.AddHediff(hediff); }
private bool CanFindLuciferiumAddict(Map map, out Pawn pawn) { pawn = null; foreach (Pawn pawn2 in map.mapPawns.FreeColonists) { if (AddictionUtility.IsAddicted(pawn2, ThingDefOfReconAndDiscovery.Luciferium)) { pawn = pawn2; return(true); } } return(false); }
protected override void DoWeatherOutcomeSpecial(Pawn pawn, GameCondition gameCondition) { var hediff = HediffMaker.MakeHediff(hediffDef, pawn); var num = severity > 0f ? severity : hediffDef.initialSeverity; if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff); }
private int BingeableAddictionsCount(Pawn pawn) { int num = 0; List <Hediff> hediffs = pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { Hediff_Addiction hediff_Addiction = hediffs[i] as Hediff_Addiction; if (hediff_Addiction != null && AddictionUtility.CanBingeOnNow(pawn, hediff_Addiction.Chemical, DrugCategory.Any)) { num++; } } return(num); }
private void ChooseRandomChemical() { addictions.Clear(); List <Hediff> hediffs = pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { Hediff_Addiction hediff_Addiction = hediffs[i] as Hediff_Addiction; if (hediff_Addiction != null && AddictionUtility.CanBingeOnNow(pawn, hediff_Addiction.Chemical, DrugCategory.Any)) { addictions.Add(hediff_Addiction.Chemical); } } if (addictions.Count > 0) { chemical = addictions.RandomElement(); drugCategory = DrugCategory.Any; addictions.Clear(); } else { chemical = (from x in DefDatabase <ChemicalDef> .AllDefsListForReading where AddictionUtility.CanBingeOnNow(pawn, x, def.drugCategory) select x).RandomElementWithFallback(); if (chemical != null) { drugCategory = def.drugCategory; } else { chemical = (from x in DefDatabase <ChemicalDef> .AllDefsListForReading where AddictionUtility.CanBingeOnNow(pawn, x, DrugCategory.Any) select x).RandomElementWithFallback(); if (chemical != null) { drugCategory = DrugCategory.Any; } else { chemical = DefDatabase <ChemicalDef> .AllDefsListForReading.RandomElement(); drugCategory = DrugCategory.Any; } } } }
private void ChooseRandomChemical() { MentalState_BingingDrug.addictions.Clear(); List <Hediff> hediffs = this.pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { Hediff_Addiction hediff_Addiction = hediffs[i] as Hediff_Addiction; if (hediff_Addiction != null && AddictionUtility.CanBingeOnNow(this.pawn, hediff_Addiction.Chemical, DrugCategory.Any)) { MentalState_BingingDrug.addictions.Add(hediff_Addiction.Chemical); } } if (MentalState_BingingDrug.addictions.Count > 0) { this.chemical = MentalState_BingingDrug.addictions.RandomElement <ChemicalDef>(); this.drugCategory = DrugCategory.Any; MentalState_BingingDrug.addictions.Clear(); } else { this.chemical = (from x in DefDatabase <ChemicalDef> .AllDefsListForReading where AddictionUtility.CanBingeOnNow(this.pawn, x, this.def.drugCategory) select x).RandomElementWithFallback(null); if (this.chemical != null) { this.drugCategory = this.def.drugCategory; } else { this.chemical = (from x in DefDatabase <ChemicalDef> .AllDefsListForReading where AddictionUtility.CanBingeOnNow(this.pawn, x, DrugCategory.Any) select x).RandomElementWithFallback(null); if (this.chemical != null) { this.drugCategory = DrugCategory.Any; } else { this.chemical = DefDatabase <ChemicalDef> .AllDefsListForReading.RandomElement <ChemicalDef>(); this.drugCategory = DrugCategory.Any; } } } }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { if (Rand.Chance(diseaseChance)) { Hediff disease = HediffMaker.MakeHediff(HediffDefOf.Flu, pawn); disease.Severity = 0.1f; pawn.health.AddHediff(disease); } Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn); float effect = (!(severity > 0f)) ? hediffDef.initialSeverity : severity; if (divideByBodySize) { effect /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref effect); hediff.Severity = effect; pawn.health.AddHediff(hediff); }
private void ChooseRandomChemical() { addictions.Clear(); List <Hediff> hediffs = pawn.health.hediffSet.hediffs; for (var i = 0; i < hediffs.Count; i++) { var hediff_Addiction = hediffs[i] as Hediff_Addiction; if (hediff_Addiction != null && AddictionUtility.CanBingeOnNow(pawn, hediff_Addiction.Chemical, DrugCategory.Any)) { addictions.Add(hediff_Addiction.Chemical); } } if (addictions.Count > 0) { chemical = addictions.RandomElement(); drugCategory = DrugCategory.Any; addictions.Clear(); return; } chemical = DefDatabase <ChemicalDef> .AllDefsListForReading.Where(IsValidChemical).RandomElementWithFallback(); if (chemical != null) { drugCategory = def.drugCategory; return; } chemical = DefDatabase <ChemicalDef> .AllDefsListForReading.Where(IsValidChemical).RandomElementWithFallback(); if (chemical != null) { drugCategory = DrugCategory.Any; return; } chemical = DefDatabase <ChemicalDef> .AllDefsListForReading.RandomElement(); drugCategory = DrugCategory.Any; }
public override void OnIntervalPassed(Pawn pawn, Hediff cause) { if (pawn.health.hediffSet.hediffs.Any(x => hediffDefs.Any(y => y == x.def))) { return; } RandUtilities.PushState(); if (Rand.RangeInclusive(0, 100) <= completeChance) { hediffDef = hediffDefsComplete.RandomElement(); } else { hediffDef = hediffDefs.RandomElement(); } Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn); float num; if (severity > 0f) { num = severity; } else { num = hediffDef.initialSeverity; } if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff); RandUtilities.PopState(); }
/// <summary>Does the ingestion outcome special.</summary> /// <param name="pawn">The pawn.</param> /// <param name="ingested">The ingested.</param> protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { float completeChance = LoadedModManager.GetMod <PawnmorpherMod>().GetSettings <PawnmorpherSettings>().partialChance; _scratchList.Clear(); if (Rand.RangeInclusive(0, 100) <= completeChance) { _scratchList.AddRange(AllCompleteDefs.Where(h => h.CanInfect(pawn))); } else { _scratchList.AddRange(AllPartialDefs.Where(h => h.CanInfect(pawn))); } if (_scratchList.Count == 0) { return; } hediffDef = _scratchList.RandElement(); Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn); float num; if (severity > 0f) { num = severity; } else { num = hediffDef.initialSeverity; } if (divideByBodySize) { AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); } hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { HiddenAntibiotics = HediffDef.Named("SuperAntiHidden"); Hediff hediff = HediffMaker.MakeHediff(this.hediffDef, pawn, null); float num = (!(this.severity > 0f)) ? this.hediffDef.initialSeverity : this.severity; if (this.divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, this.toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); List <Hediff> Hediffs = pawn.health.hediffSet.GetHediffs <Hediff>().ToList(); // Temporary variables used to determine if code runs or not int timesUsed = 0; Hediff infection = null; foreach (Hediff hediffList in Hediffs) { var StrHediff = hediffList.ToString(); if (StrHediff.Contains("SuperAntiHidden")) { timesUsed += 1; return; } if (StrHediff.Contains("Infection")) { infection = hediffList; } } if (timesUsed != 1 && infection != null) { pawn.health.AddHediff(HiddenAntibiotics); pawn.health.RemoveHediff(infection); } }
/// <summary>Does the ingestion outcome special.</summary> /// <param name="pawn">The pawn.</param> /// <param name="ingested">The ingested.</param> protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { if (!pawn.health.hediffSet.hediffs.Any(x => hediffDefs.Contains(x.def))) { _scratchList.Clear(); if (Rand.RangeInclusive(0, 100) <= completeChance) { _scratchList.AddRange(hediffDefsComplete.Where(h => h.CanInfect(pawn))); } else { _scratchList.AddRange(hediffDefs.Where(h => h.CanInfect(pawn))); } if (_scratchList.Count == 0) { return; } _hediffDef = _scratchList.RandElement(); Hediff hediff = HediffMaker.MakeHediff(_hediffDef, pawn); float num; if (severity > 0f) { num = severity; } else { num = _hediffDef.initialSeverity; } if (divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); } }
// Token: 0x06003563 RID: 13667 RVA: 0x00123774 File Offset: 0x00121974 protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { this.hediffDef = this.hediffDefs.RandomElement(); Hediff hediff = HediffMaker.MakeHediff(this.hediffDef, pawn, null); float num; if (this.severity > 0f) { num = this.severity; } else { num = this.hediffDef.initialSeverity; } if (this.divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, this.toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null, null); }
protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) { MilkThistleBenefit = HediffDef.Named("MilkThistleBenefit"); List <Hediff> Hediffs = pawn.health.hediffSet.GetHediffs <Hediff>().ToList(); foreach (Hediff hediffList in Hediffs) { if (hediffList.ToString().Contains("Cirrhosis")) { Hediff hediff = HediffMaker.MakeHediff(this.hediffDef, pawn, null); float num = (!(this.severity > 0f)) ? this.hediffDef.initialSeverity : this.severity; if (this.divideByBodySize) { num /= pawn.BodySize; } AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, this.toleranceChemical, ref num); hediff.Severity = num; pawn.health.AddHediff(hediff, null, null); } } }
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); }
public static void GiveVitaeEffects(Pawn receiver, Pawn donor) { var pawn = receiver; //Give Vitae High Effect Hediff vitaeHighHediff = HediffMaker.MakeHediff(VampDefOf.ROMV_VitaeHigh, pawn, null); float numHigh = 0.75f; AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, VampDefOf.ROMV_VitaeChemical, ref numHigh); vitaeHighHediff.Severity = numHigh; pawn.health.AddHediff(vitaeHighHediff, null, null); //Give Vitae Tolerance Effect Hediff vitaeToleranceHediff = HediffMaker.MakeHediff(VampDefOf.ROMV_VitaeTolerance, pawn, null); float numTol = 0.035f; numTol /= receiver.BodySize; AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, VampDefOf.ROMV_VitaeChemical, ref numTol); vitaeToleranceHediff.Severity = numTol; pawn.health.AddHediff(vitaeToleranceHediff, null, null); const float addictiveness = 1.0f; const float minToleranceToAddict = 0.01f; const float existingAddictionSeverityOffset = 0.2f; var needLevelOffset = 1f; var overdoseSeverityOffset = new FloatRange(0.18f, 0.35f); var chemical = VampDefOf.ROMV_VitaeChemical; var addictionHediffDef = VampDefOf.ROMV_VitaeAddiction; var lookTarget = receiver; var hediff = AddictionUtility.FindToleranceHediff(lookTarget, VampDefOf.ROMV_VitaeChemical); var num = hediff?.Severity ?? 0f; var hediffAddiction = AddictionUtility.FindAddictionHediff(lookTarget, VampDefOf.ROMV_VitaeChemical); if (hediffAddiction != null) { hediffAddiction.Severity += existingAddictionSeverityOffset; } else if (Rand.Value < addictiveness && num >= minToleranceToAddict) { lookTarget.health.AddHediff(addictionHediffDef, null, null); if (PawnUtility.ShouldSendNotificationAbout(lookTarget)) { Find.LetterStack.ReceiveLetter("LetterLabelNewlyAddicted".Translate(chemical.label).CapitalizeFirst(), "LetterNewlyAddicted".Translate(lookTarget.LabelShort, chemical.label, lookTarget.Named("PAWN")) .AdjustedFor(lookTarget, "PAWN").CapitalizeFirst(), LetterDefOf.NegativeEvent, lookTarget, null, null); } AddictionUtility.CheckDrugAddictionTeachOpportunity(lookTarget); } if (addictionHediffDef.causesNeed != null) { var need = lookTarget.needs.AllNeeds.Find((Need x) => x.def == addictionHediffDef.causesNeed); if (need != null) { AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(lookTarget, chemical, ref needLevelOffset); need.CurLevel += needLevelOffset; } } // var firstHediffOfDef = lookTarget.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.DrugOverdose, false); // var num2 = firstHediffOfDef?.Severity ?? 0f; // if (num2 < 0.9f && Rand.Value < largeOverdoseChance) // { // var num3 = Rand.Range(0.85f, 0.99f); // HealthUtility.AdjustSeverity(lookTarget, HediffDefOf.DrugOverdose, num3 - num2); // if (lookTarget.Faction == Faction.OfPlayer) // { // Messages.Message("MessageAccidentalOverdose".Translate(new object[] // { // lookTarget.LabelIndefinite(), // chemical.LabelCap // }).CapitalizeFirst(), MessageTypeDefOf.NegativeHealthEvent); // } // } // else // { // var num4 = overdoseSeverityOffset.RandomInRange / lookTarget.BodySize; // if (num4 > 0f) // { // HealthUtility.AdjustSeverity(lookTarget, HediffDefOf.DrugOverdose, num4); // } // } }
// Token: 0x06000016 RID: 22 RVA: 0x0000259C File Offset: 0x0000079C public static void DoSSVape(Pawn p, Thing t) { var HediffName = ""; var defName = t.def.defName; switch (defName) { case "SSVaperRegular": HediffName = "SSVape_Regular_High"; break; case "SSVaperFruity": HediffName = "SSVape_Fruity_High"; break; case "SSVaperMenthol": HediffName = "SSVape_Menthol_High"; break; } if (!HediffName.StartsWith("SSVape")) { return; } var hediffdef = DefDatabase <HediffDef> .GetNamed(HediffName, false); var SLChemDef = DefDatabase <ChemicalDef> .GetNamed("Smokeleaf"); if (hediffdef == null) { return; } var SeverityToApply = 0.5f; if (SSHediffEffecter.HediffEffect(hediffdef, SeverityToApply, p, null, out _)) { var SLTol = DefDatabase <HediffDef> .GetNamed("SmokeleafTolerance"); if (SLTol != null) { var Sev = 0.02f / p.BodySize; SSHediffEffecter.HediffEffect(SLTol, Sev, p, null, out _); } if (p.RaceProps.IsFlesh) { var addictionHediffDef = DefDatabase <HediffDef> .GetNamed("SmokeleafAddiction"); var hediff_Addiction = AddictionUtility.FindAddictionHediff(p, SLChemDef); var hediff = AddictionUtility.FindToleranceHediff(p, SLChemDef); var num = hediff?.Severity ?? 0f; if (hediff_Addiction != null) { hediff_Addiction.Severity += 0.06f; } else if (Rand.Value < 0.01f && num >= 0.15f) { p.health.AddHediff(addictionHediffDef); if (PawnUtility.ShouldSendNotificationAbout(p)) { Find.LetterStack.ReceiveLetter( "LetterLabelNewlyAddicted".Translate(SLChemDef.label).CapitalizeFirst(), "LetterNewlyAddicted".Translate(p.LabelShort, SLChemDef.label, p.Named("PAWN")) .AdjustedFor(p).CapitalizeFirst(), LetterDefOf.NegativeEvent, p); } } if (addictionHediffDef.causesNeed != null) { var need = p.needs.AllNeeds.Find(x => x.def == addictionHediffDef.causesNeed); if (need != null) { var effect = 1f; AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(p, SLChemDef, ref effect); need.CurLevel += effect; } } } } if (p?.needs != null) { var need2 = p.needs.TryGetNeed(NeedDefOf.Rest); if (need2 != null) { var effect2 = -0.1f; AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(p, SLChemDef, ref effect2); need2.CurLevel += effect2; } } bool joyNeed; if (p == null) { joyNeed = false; } else { var needs = p.needs; joyNeed = needs?.joy != null; } if (joyNeed) { var Chem = DefDatabase <JoyKindDef> .GetNamed("Chemical", false); var needs2 = p.needs; if (needs2 != null) { needs2.joy.GainJoy(0.85f, Chem); } } if (p?.Map != null) { var BreathOffset = new Vector3(0f, 0f, -0.04f); var loc = p.Drawer.DrawPos + p.Drawer.renderer.BaseHeadOffsetAt(p.Rotation) + (p.Rotation.FacingCell.ToVector3() * 0.21f) + BreathOffset; for (var i = 0; i < 4; i++) { ThrowVapeBreathPuff(loc, p.Map, p.Rotation.AsAngle, p.Position.ToVector3()); FleckMaker.ThrowSmoke(p.Position.ToVector3(), p.Map, 0.5f); } } var usesLeft = ((SSVapeData)t).SSVapeUses; usesLeft--; ((SSVapeData)t).SSVapeUses = usesLeft; if (usesLeft > 0) { return; } t.Destroy(); if (p == null) { return; } GenDrop.TryDropSpawn( ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("SSVaperEmpty", false)), p.Position, p.Map, ThingPlaceMode.Near, out var newVapeThing); ((SSVapeData)newVapeThing).SSVapeType = "empty"; ((SSVapeData)newVapeThing).SSVapeUses = 0; }
public static void SetFaction(this Pawn pawn, Faction newFaction, Pawn recruiter = null) { if (newFaction == pawn.Faction) { Log.Warning(string.Concat(new object[] { "Used ChangePawnFactionTo to change ", pawn, " to same faction ", newFaction })); return; } if (pawn.guest != null) { pawn.guest.SetGuestStatus(null, false); } if (pawn.Spawned) { pawn.Map.mapPawns.DeRegisterPawn(pawn); pawn.Map.pawnDestinationManager.RemovePawnFromSystem(pawn); pawn.Map.designationManager.RemoveAllDesignationsOn(pawn, false); } if (newFaction == Faction.OfPlayer || pawn.Faction == Faction.OfPlayer) { Find.ColonistBar.MarkColonistsDirty(); } Lord lord = pawn.GetLord(); if (lord != null) { lord.Notify_PawnLost(pawn, PawnLostCondition.ChangedFaction); } if (pawn.Faction != null && pawn.Faction.leader == pawn) { pawn.Faction.Notify_LeaderLost(); } if (newFaction == Faction.OfPlayer && pawn.RaceProps.Humanlike) { pawn.kindDef = newFaction.def.basicMemberKind; } // Call base SetFaction directly - horrible mojo warning MethodInfo method = typeof(Thing).GetMethod("SetFaction", BindingFlags.Public | BindingFlags.Instance); IntPtr fptr = method.MethodHandle.GetFunctionPointer(); ((Action <Faction, Pawn>)Activator.CreateInstance(typeof(Action <Faction, Pawn>), pawn, fptr))(newFaction, null); PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, false); if (pawn.Faction != null && pawn.Faction.IsPlayer) { if (pawn.workSettings != null) { pawn.workSettings.EnableAndInitialize(); } Find.Storyteller.intenderPopulation.Notify_PopulationGained(); } if (pawn.Drafted) { pawn.drafter.Drafted = false; } ReachabilityUtility.ClearCache(); pawn.health.surgeryBills.Clear(); if (pawn.Spawned) { pawn.Map.mapPawns.RegisterPawn(pawn); } pawn.GenerateNecessaryName(); if (pawn.playerSettings != null) { Pawn_PlayerSettings_Detour.ResetPPSMedicalCare(pawn.playerSettings, pawn); } pawn.ClearMind(true); if (!pawn.Dead && pawn.needs.mood != null) { pawn.needs.mood.thoughts.situational.Notify_SituationalThoughtsDirty(); } if (pawn.Spawned) { pawn.Map.attackTargetsCache.UpdateTarget(pawn); } Find.GameEnder.CheckGameOver(); AddictionUtility.CheckDrugAddictionTeachOpportunity(pawn); if (pawn.needs != null) { pawn.needs.AddOrRemoveNeedsAsAppropriate(); } if (pawn.playerSettings != null) { pawn.playerSettings.Notify_FactionChanged(); } }
private bool <ChooseRandomChemical> m__1(ChemicalDef x) { return(AddictionUtility.CanBingeOnNow(this.pawn, x, DrugCategory.Any)); }