/// <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);
            }
        }
Example #2
0
        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);
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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);
        }
Example #9
0
        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);
            }
        }
Example #10
0
        /// <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();
        }
Example #12
0
        /// <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);
        }
Example #15
0
        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);
//                }
//            }
        }
Example #16
0
        // 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;
        }