Exemplo n.º 1
0
        private static string InfoTextLineFrom(StatPart_ApparelStatOffset instance, Thing gear, float heddifSeverity, StatDef apparelStat)
        {
            float num = gear.GetStatValue(apparelStat, true);

            num += StatWorker.StatOffsetFromGear(gear, apparelStat);
            num  = -num;
            if (!gear.def.HasModExtension <WaterGear>())
            {
                num = num * Mathf.Clamp(1f - heddifSeverity, ModSettings_WaterIsCold.wetInsFactor, 1f);
                return("    " + gear.LabelCap + ": " + num.ToStringByStyle(instance.parentStat.toStringStyle, ToStringNumberSense.Offset) + " (wet)");
            }
            return("    " + gear.LabelCap + ": " + num.ToStringByStyle(instance.parentStat.toStringStyle, ToStringNumberSense.Offset));
        }
Exemplo n.º 2
0
 private static bool PawnWearingRelevantGear(StatRequest req, Pawn pawn, StatDef apparelStat)
 {
     if (pawn.apparel != null)
     {
         for (int i = 0; i < pawn.apparel.WornApparel.Count; i++)
         {
             Apparel apparel = pawn.apparel.WornApparel[i];
             if (apparel.GetStatValue(apparelStat, true) != 0f)
             {
                 return(true);
             }
             if (StatWorker.StatOffsetFromGear(apparel, apparelStat) != 0f)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Exemplo n.º 3
0
 public static bool IgnoreInsulationWhenWet(StatRequest req, ref float val, StatDef ___apparelStat, bool ___subtract)
 {
     if (___apparelStat != StatDefOf.Insulation_Cold || !___subtract)
     {
         return(true);
     }
     if (req.HasThing && req.Thing != null)
     {
         Pawn pawn = req.Thing as Pawn;
         if (pawn != null)
         {
             Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(DefOf_WaterIsCold.WetCold, false);
             if (firstHediffOfDef == null)
             {
                 return(true);
             }
             float multiplier = Mathf.Clamp(1f - firstHediffOfDef.Severity, ModSettings_WaterIsCold.wetInsFactor / 100f, 1f);
             if (pawn.apparel != null && multiplier > 0)
             {
                 for (int i = 0; i < pawn.apparel.WornApparel.Count; i++)
                 {
                     Apparel apparel = pawn.apparel.WornApparel[i];
                     float   num     = apparel.GetStatValue(___apparelStat, true);
                     num += StatWorker.StatOffsetFromGear(apparel, ___apparelStat);
                     if (!apparel.def.HasModExtension <WaterGear>())
                     {
                         num *= multiplier;
                     }
                     val -= num;
                 }
             }
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 4
0
        public float GetValueUnfinalized(StatRequest req, bool applyPostProcess = true)
        {
            if (Prefs.DevMode && this.IsDisabledFor(req.Thing))
            {
                Log.ErrorOnce(string.Format("Attempted to calculate value for disabled stat {0}; this is meant as a consistency check, either set the stat to neverDisabled or ensure this pawn cannot accidentally use this stat (thing={1})", this.stat, req.Thing.ToStringSafe()), 75193282 + this.stat.index);
            }

            float num  = this.GetBaseValueFor(req.Def);
            Pawn  pawn = req.Thing as Pawn;

            if (pawn != null)
            {
                if (pawn.skills != null)
                {
                    if (this.stat.skillNeedOffsets != null)
                    {
                        for (int i = 0; i < this.stat.skillNeedOffsets.Count; i++)
                        {
                            num += this.stat.skillNeedOffsets[i].ValueFor(pawn);
                        }
                    }
                }
                else
                {
                    num += this.stat.noSkillOffset;
                }

                if (this.stat.capacityOffsets != null)
                {
                    for (int j = 0; j < this.stat.capacityOffsets.Count; j++)
                    {
                        PawnCapacityOffset pawnCapacityOffset = this.stat.capacityOffsets[j];
                        num += pawnCapacityOffset.GetOffset(pawn.health.capacities.GetLevel(pawnCapacityOffset.capacity));
                    }
                }

                if (pawn.story != null)
                {
                    for (int k = 0; k < pawn.story.traits.allTraits.Count; k++)
                    {
                        num += pawn.story.traits.allTraits[k].OffsetOfStat(this.stat);
                    }
                }

                List <Hediff> hediffs = pawn.health.hediffSet.hediffs;
                for (int l = 0; l < hediffs.Count; l++)
                {
                    HediffStage curStage = hediffs[l].CurStage;
                    if (curStage != null)
                    {
                        num += curStage.statOffsets.GetStatOffsetFromList(this.stat);
                    }
                }

                if (pawn.apparel != null)
                {
                    for (int m = 0; m < pawn.apparel.WornApparel.Count; m++)
                    {
                        num += StatWorker.StatOffsetFromGear(pawn.apparel.WornApparel[m], this.stat);
                    }
                }

                if (pawn.equipment != null && pawn.equipment.Primary != null)
                {
                    num += StatWorker.StatOffsetFromGear(pawn.equipment.Primary, this.stat);
                }

                if (pawn.story != null)
                {
                    for (int n = 0; n < pawn.story.traits.allTraits.Count; n++)
                    {
                        num *= pawn.story.traits.allTraits[n].MultiplierOfStat(this.stat);
                    }
                }

                num *= pawn.ageTracker.CurLifeStage.statFactors.GetStatFactorFromList(this.stat);
            }

            if (req.StuffDef != null && (num > 0.0 || this.stat.applyFactorsIfNegative))
            {
                num += req.StuffDef.stuffProps.statOffsets.GetStatOffsetFromList(this.stat);
                num *= req.StuffDef.stuffProps.statFactors.GetStatFactorFromList(this.stat);
            }

            if (req.HasThing)
            {
                CompAffectedByFacilities compAffectedByFacilities = req.Thing.TryGetComp <CompAffectedByFacilities>();
                if (compAffectedByFacilities != null)
                {
                    num += compAffectedByFacilities.GetStatOffset(this.stat);
                }

                if (this.stat.statFactors != null)
                {
                    for (int num2 = 0; num2 < this.stat.statFactors.Count; num2++)
                    {
                        num *= req.Thing.GetStatValue(this.stat.statFactors[num2], true);
                    }
                }

                if (pawn != null)
                {
                    if (pawn.skills != null)
                    {
                        if (this.stat.skillNeedFactors != null)
                        {
                            for (int num3 = 0; num3 < this.stat.skillNeedFactors.Count; num3++)
                            {
                                num *= this.stat.skillNeedFactors[num3].ValueFor(pawn);
                            }
                        }
                    }
                    else
                    {
                        num *= this.stat.noSkillFactor;
                    }

                    if (this.stat.capacityFactors != null)
                    {
                        for (int num4 = 0; num4 < this.stat.capacityFactors.Count; num4++)
                        {
                            PawnCapacityFactor pawnCapacityFactor = this.stat.capacityFactors[num4];
                            float factor = pawnCapacityFactor.GetFactor(pawn.health.capacities.GetLevel(pawnCapacityFactor.capacity));
                            num = Mathf.Lerp(num, num * factor, pawnCapacityFactor.weight);
                        }
                    }

                    if (pawn.Inspired)
                    {
                        num += pawn.InspirationDef.statOffsets.GetStatOffsetFromList(this.stat);
                        num *= pawn.InspirationDef.statFactors.GetStatFactorFromList(this.stat);
                    }
                }
            }

            return(num);
        }