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