Esempio n. 1
0
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(this.hediff, false);

            if (ambientTemperature > floatRange2.max)
            {
                float num = ambientTemperature - floatRange2.max;
                num = HediffGiver_Heat.TemperatureOverageAdjustmentCurve.Evaluate(num);
                float num2 = num * 6.45E-05f;
                num2 = Mathf.Max(num2, 0.000375f);
                HealthUtility.AdjustSeverity(pawn, this.hediff, num2);
            }
            else if (firstHediffOfDef != null && ambientTemperature < floatRange.max)
            {
                float num3 = firstHediffOfDef.Severity * 0.027f;
                num3 = Mathf.Clamp(num3, 0.0015f, 0.015f);
                firstHediffOfDef.Severity -= num3;
            }
            if (pawn.Dead)
            {
                return;
            }
            if (pawn.IsNestedHashIntervalTick(60, 420))
            {
                float num4 = floatRange.max + 150f;
                if (ambientTemperature > num4)
                {
                    float num5 = ambientTemperature - num4;
                    num5 = HediffGiver_Heat.TemperatureOverageAdjustmentCurve.Evaluate(num5);
                    int        num6  = Mathf.Max(GenMath.RoundRandom(num5 * 0.06f), 3);
                    DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, (float)num6, 0f, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown, null);
                    dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside);
                    pawn.TakeDamage(dinfo);
                    if (pawn.Faction == Faction.OfPlayer)
                    {
                        Find.TickManager.slower.SignalForceNormalSpeed();
                        if (MessagesRepeatAvoider.MessageShowAllowed("PawnBeingBurned", 60f))
                        {
                            Messages.Message("MessagePawnBeingBurned".Translate(new object[]
                            {
                                pawn.LabelShort
                            }).CapitalizeFirst(), pawn, MessageTypeDefOf.ThreatSmall, true);
                        }
                    }
                    Lord lord = pawn.GetLord();
                    if (lord != null)
                    {
                        lord.ReceiveMemo(HediffGiver_Heat.MemoPawnBurnedByAir);
                    }
                }
            }
        }
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            HediffDef  hediffDef          = (pawn.RaceProps.FleshType != FleshTypeDefOf.Insectoid) ? this.hediff : this.hediffInsectoid;
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(hediffDef, false);

            if (ambientTemperature < floatRange2.min)
            {
                float num  = Mathf.Abs(ambientTemperature - floatRange2.min);
                float num2 = num * 6.45E-05f;
                num2 = Mathf.Max(num2, 0.00075f);
                HealthUtility.AdjustSeverity(pawn, hediffDef, num2);
                if (pawn.Dead)
                {
                    return;
                }
            }
            if (firstHediffOfDef != null)
            {
                if (ambientTemperature > floatRange.min)
                {
                    float num3 = firstHediffOfDef.Severity * 0.027f;
                    num3 = Mathf.Clamp(num3, 0.0015f, 0.015f);
                    firstHediffOfDef.Severity -= num3;
                }
                else if (pawn.RaceProps.FleshType != FleshTypeDefOf.Insectoid)
                {
                    if (ambientTemperature < 0f && firstHediffOfDef.Severity > 0.37f)
                    {
                        float num4 = 0.025f * firstHediffOfDef.Severity;
                        if (Rand.Value < num4)
                        {
                            BodyPartRecord bodyPartRecord;
                            if ((from x in pawn.RaceProps.body.AllPartsVulnerableToFrostbite
                                 where !hediffSet.PartIsMissing(x)
                                 select x).TryRandomElementByWeight((BodyPartRecord x) => x.def.frostbiteVulnerability, out bodyPartRecord))
                            {
                                int            num5      = Mathf.CeilToInt((float)bodyPartRecord.def.hitPoints * 0.5f);
                                DamageDef      frostbite = DamageDefOf.Frostbite;
                                float          amount    = (float)num5;
                                BodyPartRecord hitPart   = bodyPartRecord;
                                DamageInfo     dinfo     = new DamageInfo(frostbite, amount, 0f, -1f, null, hitPart, null, DamageInfo.SourceCategory.ThingOrUnknown, null);
                                pawn.TakeDamage(dinfo);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(base.hediff, false);

            if (ambientTemperature > floatRange2.max)
            {
                float x = ambientTemperature - floatRange2.max;
                x = HediffGiver_Heat.TemperatureOverageAdjustmentCurve.Evaluate(x);
                float a = (float)(x * 6.44999963697046E-05);
                a = Mathf.Max(a, 0.000375f);
                HealthUtility.AdjustSeverity(pawn, base.hediff, a);
            }
            else if (firstHediffOfDef != null && ambientTemperature < floatRange.max)
            {
                float value = (float)(firstHediffOfDef.Severity * 0.027000000700354576);
                value = Mathf.Clamp(value, 0.0015f, 0.015f);
                firstHediffOfDef.Severity -= value;
            }
            if (!pawn.Dead && pawn.IsNestedHashIntervalTick(60, 420))
            {
                float num = (float)(floatRange.max + 150.0);
                if (ambientTemperature > num)
                {
                    float x2 = ambientTemperature - num;
                    x2 = HediffGiver_Heat.TemperatureOverageAdjustmentCurve.Evaluate(x2);
                    int        amount = Mathf.Max(GenMath.RoundRandom((float)(x2 * 0.059999998658895493)), 3);
                    DamageInfo dinfo  = new DamageInfo(DamageDefOf.Burn, amount, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown);
                    dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside);
                    pawn.TakeDamage(dinfo);
                    if (pawn.Faction == Faction.OfPlayer)
                    {
                        Find.TickManager.slower.SignalForceNormalSpeed();
                        if (MessagesRepeatAvoider.MessageShowAllowed("PawnBeingBurned", 60f))
                        {
                            Messages.Message("MessagePawnBeingBurned".Translate(pawn.LabelShort).CapitalizeFirst(), pawn, MessageTypeDefOf.ThreatSmall);
                        }
                    }
                    Lord lord = pawn.GetLord();
                    if (lord != null)
                    {
                        lord.ReceiveMemo(HediffGiver_Heat.MemoPawnBurnedByAir);
                    }
                }
            }
        }
Esempio n. 4
0
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(base.hediff, false);

            if (ambientTemperature < floatRange2.min)
            {
                float num = Mathf.Abs(ambientTemperature - floatRange2.min);
                float a   = (float)(num * 6.44999963697046E-05);
                a = Mathf.Max(a, 0.00075f);
                HealthUtility.AdjustSeverity(pawn, base.hediff, a);
                if (pawn.Dead)
                {
                    return;
                }
            }
            if (firstHediffOfDef != null)
            {
                if (ambientTemperature > floatRange.min)
                {
                    float value = (float)(firstHediffOfDef.Severity * 0.027000000700354576);
                    value = Mathf.Clamp(value, 0.0015f, 0.015f);
                    firstHediffOfDef.Severity -= value;
                }
                else if (ambientTemperature < 0.0 && firstHediffOfDef.Severity > 0.37000000476837158)
                {
                    float          num2           = (float)(0.02500000037252903 * firstHediffOfDef.Severity);
                    BodyPartRecord bodyPartRecord = default(BodyPartRecord);
                    if (Rand.Value < num2 && (from x in pawn.RaceProps.body.AllPartsVulnerableToFrostbite
                                              where !hediffSet.PartIsMissing(x)
                                              select x).TryRandomElementByWeight <BodyPartRecord>((Func <BodyPartRecord, float>)((BodyPartRecord x) => x.def.frostbiteVulnerability), out bodyPartRecord))
                    {
                        int            num3      = Mathf.CeilToInt((float)((float)bodyPartRecord.def.hitPoints * 0.5));
                        DamageDef      frostbite = DamageDefOf.Frostbite;
                        int            amount    = num3;
                        BodyPartRecord hitPart   = bodyPartRecord;
                        DamageInfo     dinfo     = new DamageInfo(frostbite, amount, -1f, null, hitPart, null, DamageInfo.SourceCategory.ThingOrUnknown);
                        pawn.TakeDamage(dinfo);
                    }
                }
            }
        }
Esempio n. 5
0
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(hediff);

            if (ambientTemperature > floatRange2.max)
            {
                float x = ambientTemperature - floatRange2.max;
                x = TemperatureOverageAdjustmentCurve.Evaluate(x);
                float a = x * 6.45E-05f;
                a = Mathf.Max(a, 0.000375f);
                HealthUtility.AdjustSeverity(pawn, hediff, a);
            }
            else if (firstHediffOfDef != null && ambientTemperature < floatRange.max)
            {
                float value = firstHediffOfDef.Severity * 0.027f;
                value = Mathf.Clamp(value, 0.0015f, 0.015f);
                firstHediffOfDef.Severity -= value;
            }
            if (!pawn.Dead && pawn.IsNestedHashIntervalTick(60, 420))
            {
                float num = floatRange.max + 150f;
                if (ambientTemperature > num)
                {
                    float x2 = ambientTemperature - num;
                    x2 = TemperatureOverageAdjustmentCurve.Evaluate(x2);
                    int        num2  = Mathf.Max(GenMath.RoundRandom(x2 * 0.06f), 3);
                    DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, (float)num2);
                    dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside);
                    pawn.TakeDamage(dinfo);
                    if (pawn.Faction == Faction.OfPlayer)
                    {
                        Find.TickManager.slower.SignalForceNormalSpeed();
                        if (MessagesRepeatAvoider.MessageShowAllowed("PawnBeingBurned", 60f))
                        {
                            Messages.Message("MessagePawnBeingBurned".Translate(pawn.LabelShort, pawn).CapitalizeFirst(), pawn, MessageTypeDefOf.ThreatSmall);
                        }
                    }
                    pawn.GetLord()?.ReceiveMemo(MemoPawnBurnedByAir);
                }
            }
        }
Esempio n. 6
0
        public override void OnIntervalPassed(Pawn pawn, Hediff cause)
        {
            float      ambientTemperature = pawn.AmbientTemperature;
            FloatRange floatRange         = pawn.ComfortableTemperatureRange();
            FloatRange floatRange2        = pawn.SafeTemperatureRange();
            HediffSet  hediffSet          = pawn.health.hediffSet;
            HediffDef  hediffDef          = ((pawn.RaceProps.FleshType == FleshTypeDefOf.Insectoid) ? hediffInsectoid : hediff);
            Hediff     firstHediffOfDef   = hediffSet.GetFirstHediffOfDef(hediffDef);

            if (ambientTemperature < floatRange2.min)
            {
                float a = Mathf.Abs(ambientTemperature - floatRange2.min) * 6.45E-05f;
                a = Mathf.Max(a, 0.00075f);
                HealthUtility.AdjustSeverity(pawn, hediffDef, a);
                if (pawn.Dead)
                {
                    return;
                }
            }
            if (firstHediffOfDef == null)
            {
                return;
            }
            if (ambientTemperature > floatRange.min)
            {
                float value = firstHediffOfDef.Severity * 0.027f;
                value = Mathf.Clamp(value, 0.0015f, 0.015f);
                firstHediffOfDef.Severity -= value;
            }
            else if (pawn.RaceProps.FleshType != FleshTypeDefOf.Insectoid && ambientTemperature < 0f && firstHediffOfDef.Severity > 0.37f)
            {
                float num = 0.025f * firstHediffOfDef.Severity;
                if (Rand.Value < num && pawn.RaceProps.body.AllPartsVulnerableToFrostbite.Where((BodyPartRecord x) => !hediffSet.PartIsMissing(x)).TryRandomElementByWeight((BodyPartRecord x) => x.def.frostbiteVulnerability, out var result))
                {
                    int        num2  = Mathf.CeilToInt((float)result.def.hitPoints * 0.5f);
                    DamageInfo dinfo = new DamageInfo(DamageDefOf.Frostbite, num2, 0f, -1f, null, result);
                    pawn.TakeDamage(dinfo);
                }
            }
        }