根据向量相似度分析,与 'HediffDef, Malnutrition' 最相关的代码定义如下: --- **文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\Core\Defs\HediffDefs\Hediffs_Global_Needs.xml` **相似度:** 0.8237 ```xml Malnutrition Abnormally low body fat and weight, typically caused by lack of food. Malnutrition is always very unpleasant, but its initial effects are mild. Without food, though, a malnourished creature will waste away, losing muscle mass and capacities. Malnutrition ends with death. Upon re-feeding malnutrition naturally recovers over time. Malnourished creatures have larger appetites than normal. 1 true
  • 1.5 0.5
  • Consciousness -0.05
  • 0.2 2 0.6
  • Consciousness -0.10
  • 0.4 2.5 0.6
  • Consciousness -0.20
  • 0.6 3 0.6
  • Consciousness -0.30
  • 0.8 true 0.6
  • Consciousness 0.1
  • ``` --- **文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\StatPart_Malnutrition.txt` **相似度:** 0.7310 ```csharp public class StatPart_Malnutrition : StatPart { private SimpleCurve curve; public override void TransformValue(StatRequest req, ref float val) { if (TryGetMalnutritionFactor(req, out var _, out var factor)) { val *= factor; } } public override string ExplanationPart(StatRequest req) { if (TryGetMalnutritionFactor(req, out var malnutritionSeverity, out var factor)) { return "StatsReport_Malnutrition".Translate(malnutritionSeverity.ToStringPercent()) + ": x" + factor.ToStringPercent(); } return null; } private bool TryGetMalnutritionFactor(StatRequest req, out float malnutritionSeverity, out float factor) { factor = 0f; malnutritionSeverity = 0f; if (!req.HasThing || !(req.Thing is Pawn pawn)) { return false; } Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Malnutrition); if (firstHediffOfDef == null) { return false; } malnutritionSeverity = firstHediffOfDef.Severity; factor = curve.Evaluate(malnutritionSeverity); return true; } } ``` --- **文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\Need_Food.txt` **相似度:** 0.6580 ```csharp public class Need_Food : Need { public int lastNonStarvingTick = -99999; public const float BaseFoodFallPerTick = 2.6666667E-05f; private const float BaseMalnutritionSeverityPerDay = 0.453f; private const float BaseMalnutritionSeverityPerInterval = 0.0011325f; private CompHoldingPlatformTarget platformComp; public bool Starving => CurCategory == HungerCategory.Starving; public float PercentageThreshUrgentlyHungry => pawn.RaceProps.FoodLevelPercentageWantEat * 0.4f; public float PercentageThreshHungry => pawn.RaceProps.FoodLevelPercentageWantEat * 0.8f; public float NutritionBetweenHungryAndFed => (1f - PercentageThreshHungry) * MaxLevel; private CompHoldingPlatformTarget PlatformTarget => platformComp ?? (platformComp = pawn.TryGetComp()); public HungerCategory CurCategory { get { if (base.CurLevelPercentage <= 0f) { return HungerCategory.Starving; } if (base.CurLevelPercentage < PercentageThreshUrgentlyHungry) { return HungerCategory.UrgentlyHungry; } if (base.CurLevelPercentage < PercentageThreshHungry) { return HungerCategory.Hungry; } return HungerCategory.Fed; } } public float FoodFallPerTick => FoodFallPerTickAssumingCategory(CurCategory); public int TicksUntilHungryWhenFed => Mathf.CeilToInt(NutritionBetweenHungryAndFed / FoodFallPerTickAssumingCategory(HungerCategory.Fed)); public int TicksUntilHungryWhenFedIgnoringMalnutrition => Mathf.CeilToInt(NutritionBetweenHungryAndFed / FoodFallPerTickAssumingCategory(HungerCategory.Fed, ignoreMalnutrition: true)); public override int GUIChangeArrow { get { if (GainingFood()) { return 1; } if (!(FoodFallPerTickAssumingCategory(HungerCategory.Hungry) > 0f)) { return 0; } return -1; } } public override float MaxLevel { get { if (Current.ProgramState != ProgramState.Playing) { return pawn.BodySize * pawn.ageTracker.CurLifeStage.foodMaxFactor; } return pawn.GetStatValue(StatDefOf.MaxNutrition, applyPostProcess: true, 15); } } public float NutritionWanted => MaxLevel - CurLevel; public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - lastNonStarvingTick); private float MalnutritionSeverityPerInterval => 0.0011325f * Mathf.Lerp(0.8f, 1.2f, Rand.ValueSeeded(pawn.thingIDNumber ^ 0x26EF7A)); protected override bool IsFrozen { get { if (!base.IsFrozen && !pawn.Deathresting) { return PlatformTarget?.CurrentlyHeldOnPlatform ?? false; } return true; } } public Need_Food(Pawn pawn) : base(pawn) { } public bool GainingFood() { if (pawn.jobs?.curDriver is IEatingDriver { GainingNutritionNow: not false }) { return true; } if (ModsConfig.BiotechActive && ChildcareUtility.CanSuckle(pawn, out var _) && pawn.CarriedBy?.jobs.curDriver is JobDriver_FeedBaby { Feeding: not false }) { return true; } return false; } public float FoodFallPerTickAssumingCategory(HungerCategory hunger, bool ignoreMalnutrition = false) { Building_Bed building_Bed = pawn.CurrentBed(); float num = BaseHungerRate(pawn.ageTracker.CurLifeStage, pawn.def) * hunger.HungerMultiplier() * pawn.health.hediffSet.GetHungerRateFactor(ignoreMalnutrition ? HediffDefOf.Malnutrition : null) * (pawn.story?.traits?.HungerRateFactor ?? 1f) * (building_Bed?.GetStatValue(StatDefOf.BedHungerRateFactor) ?? 1f); if (ModsConfig.BiotechActive) { Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Lactating); if (firstHediffOfDef != null) { HediffComp_Lactating hediffComp_Lactating = firstHediffOfDef.TryGetComp(); if (hediffComp_Lactating != null) { num += hediffComp_Lactating.AddedNutritionPerDay() / 60000f; } } } if (ModsConfig.BiotechActive && pawn.genes != null) { int num2 = 0; foreach (Gene item in pawn.genes.GenesListForReading) { if (!item.Overridden) { num2 += item.def.biostatMet; } } num *= GeneTuning.MetabolismToFoodConsumptionFactorCurve.Evaluate(num2); } if (ModsConfig.AnomalyActive) { CompHoldingPlatformTarget platformTarget = PlatformTarget; if (platformTarget != null && platformTarget.CurrentlyHeldOnPlatform) { num = 0f; } } return num; } public override void NeedInterval() { if (!IsFrozen) { CurLevel -= FoodFallPerTick * 150f; } if (!Starving) { lastNonStarvingTick = Find.TickManager.TicksGame; } if (!IsFrozen || pawn.Deathresting) { if (Starving) { HealthUtility.AdjustSeverity(pawn, HediffDefOf.Malnutrition, MalnutritionSeverityPerInterval); } else { HealthUtility.AdjustSeverity(pawn, HediffDefOf.Malnutrition, 0f - MalnutritionSeverityPerInterval); } } } public override void SetInitialLevel() { StatDefOf.MaxNutrition.Worker.ClearCacheForThing(pawn); base.CurLevelPercentage = (pawn.RaceProps.Humanlike ? 0.8f : Rand.Range(0.5f, 0.9f)); if (Current.ProgramState == ProgramState.Playing) { lastNonStarvingTick = Find.TickManager.TicksGame; } } public override void OnNeedRemoved() { if (pawn.health.hediffSet.TryGetHediff(HediffDefOf.Malnutrition, out var hediff)) { pawn.health.RemoveHediff(hediff); } } public override string GetTipString() { return (base.LabelCap + ": " + base.CurLevelPercentage.ToStringPercent()).Colorize(ColoredText.TipSectionTitleColor) + " (" + CurLevel.ToString("0.##") + " / " + MaxLevel.ToString("0.##") + ")\n" + def.description; } public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = int.MaxValue, float customMargin = -1f, bool drawArrows = true, bool doTooltip = true, Rect? rectForTooltip = null, bool drawLabel = true) { if (threshPercents == null) { threshPercents = new List(); } threshPercents.Clear(); threshPercents.Add(PercentageThreshHungry); threshPercents.Add(PercentageThreshUrgentlyHungry); base.DrawOnGUI(rect, maxThresholdMarkers, customMargin, drawArrows, doTooltip, rectForTooltip, drawLabel); } public static float BaseHungerRate(LifeStageDef lifeStage, ThingDef pawnDef) { return lifeStage.hungerRateFactor * pawnDef.race.baseHungerRate * 2.6666667E-05f; } public override void ExposeData() { base.ExposeData(); Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -99999); } } ``` --- **文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\HediffDefOf.txt` **相似度:** 0.6514 ```csharp public static class HediffDefOf { public static HediffDef Cut; public static HediffDef SurgicalCut; public static HediffDef ExecutionCut; public static HediffDef Bite; public static HediffDef MissingBodyPart; public static HediffDef Misc; [MayRequireBiotech] public static HediffDef BloodfeederMark; [MayRequireAnomaly] public static HediffDef Decayed; [MayRequireAnomaly] public static HediffDef Digested; [MayRequireOdyssey] public static HediffDef PorcupineQuill; public static HediffDef BloodLoss; public static HediffDef Hypothermia; public static HediffDef Heatstroke; public static HediffDef Malnutrition; public static HediffDef ToxicBuildup; public static HediffDef PsychicShock; public static HediffDef ResurrectionSickness; public static HediffDef ResurrectionPsychosis; [MayRequireBiotech] public static HediffDef PollutionStimulus; [MayRequireBiotech] public static HediffDef ToxGasExposure; [MayRequireAnomaly] public static HediffDef Shambler; [MayRequireAnomaly] public static HediffDef ShamblerCorpse; [MayRequireAnomaly] public static HediffDef Rising; [MayRequireAnomaly] public static HediffDef DeathRefusal; [MayRequireAnomaly] public static HediffDef DeathRefusalSickness; [MayRequireAnomaly] public static HediffDef MetalhorrorImplant; [MayRequireAnomaly] public static HediffDef MetalhorrorSpeedBoost; [MayRequireAnomaly] public static HediffDef PsychicTrance; [MayRequireAnomaly] public static HediffDef DuplicateSickness; [MayRequireAnomaly] public static HediffDef VoidTouched; [MayRequireAnomaly] public static HediffDef MeatHunger; [MayRequireAnomaly] public static HediffDef ShardHolder; [MayRequireAnomaly] public static HediffDef Inhumanized; [MayRequireAnomaly] public static HediffDef DarknessExposure; [MayRequireAnomaly] public static HediffDef LightExposure; [MayRequireAnomaly] public static HediffDef DisruptorFlash; [MayRequireOdyssey] public static HediffDef VacuumExposure; [MayRequireOdyssey] public static HediffDef PsilocapHigh; [MayRequireOdyssey] public static HediffDef GravNausea; [MayRequireOdyssey] public static HediffDef VolcanicAsh; public static HediffDef Anesthetic; public static HediffDef CryptosleepSickness; public static HediffDef FoodPoisoning; public static HediffDef Pregnant; [MayRequireBiotech] public static HediffDef PregnantHuman; [MayRequireBiotech] public static HediffDef MorningSickness; [MayRequireBiotech] public static HediffDef PregnancyMood; [MayRequireBiotech] public static HediffDef PregnancyLabor; [MayRequireBiotech] public static HediffDef PregnancyLaborPushing; [MayRequireBiotech] public static HediffDef OvumExtracted; [MayRequireBiotech] public static HediffDef VatLearning; [MayRequireBiotech] public static HediffDef VatGrowing; public static HediffDef CatatonicBreakdown; public static HediffDef Scaria; [MayRequireIdeology] public static HediffDef Scarification; [MayRequireIdeology] public static HediffDef NeuralSupercharge; [MayRequireIdeology] public static HediffDef BiosculptingSickness; [MayRequireRoyalty] public static HediffDef PsychicEntropy; [MayRequireRoyalty] public static HediffDef PsychicHangover; [MayRequireRoyalty] public static HediffDef PsychicSuppression; [MayRequireRoyalty] public static HediffDef Abasia; [MayRequireRoyalty] public static HediffDef PsychicLove; public static HediffDef Sterilized; [MayRequireBiotech] public static HediffDef Vasectomy; [MayRequireBiotech] public static HediffDef ImplantedIUD; [MayRequireIdeology] public static HediffDef WorkFocus; [MayRequireBiotech] public static HediffDef ScanningSickness; [MayRequireBiotech] public static HediffDef PsychicBond; [MayRequireBiotech] public static HediffDef PsychicBondTorn; public static HediffDef LungRot; public static HediffDef LungRotExposure; public static HediffDef CoveredInFirefoam; [MayRequireAnomaly] public static HediffDef BioferriteExtracted; public static HediffDef Plague; public static HediffDef WoundInfection; public static HediffDef ScariaInfection; public static HediffDef AlcoholHigh; public static HediffDef Hangover; public static HediffDef DrugOverdose; public static HediffDef WakeUpTolerance; public static HediffDef GoJuiceTolerance; public static HediffDef Blindness; public static HediffDef Carcinoma; public static HediffDef Dementia; public static HediffDef OrganDecay; [MayRequireBiotech] public static HediffDef DetoxifierLung; [MayRequireRoyalty] public static HediffDef LoveEnhancer; [MayRequireRoyalty] public static HediffDef PsychicAmplifier; [MayRequireRoyalty] public static HediffDef PsychicHarmonizer; [MayRequireBiotech] public static HediffDef MechlinkImplant; [MayRequireBiotech] public static HediffDef SelfShutdown; [MayRequireBiotech] public static HediffDef InterruptedDeathrest; [MayRequireBiotech] public static HediffDef InfantIllness; [MayRequireBiotech] public static HediffDef Stillborn; [MayRequireBiotech] public static HediffDef PostpartumExhaustion; [MayRequireBiotech] public static HediffDef Lactating; [MayRequireBiotech] public static HediffDef RegenerationComa; [MayRequireBiotech] public static HediffDef XenogermLossShock; [MayRequireBiotech] public static HediffDef XenogermReplicating; [MayRequireBiotech] public static HediffDef GeneticDrugNeed; [MayRequireBiotech] public static HediffDef BioStarvation; [MayRequireBiotech] public static HediffDef XenogerminationComa; [MayRequireBiotech] public static HediffDef Deathrest; [MayRequireBiotech] public static HediffDef DeathrestExhaustion; [MayRequireBiotech] public static HediffDef BandNode; [MayRequireBiotech] public static HediffDef HemogenCraving; [MayRequireAnomaly] public static HediffDef HoraxianInvisibility; [MayRequireAnomaly] public static HediffDef RevenantHypnosis; [MayRequireAnomaly] public static HediffDef AwokenHypnosis; [MayRequireAnomaly] public static HediffDef DarkPsychicShock; [MayRequireAnomaly] public static HediffDef Tentacle; [MayRequireAnomaly] public static HediffDef FleshWhip; [MayRequireAnomaly] public static HediffDef OrganDecayUndiagnosedDuplicaton; [MayRequireAnomaly] public static HediffDef CrumblingMindUndiagnosedDuplication; [MayRequireAnomaly] public static HediffDef OrganDecayCreepjoiner; [MayRequireAnomaly] public static HediffDef CrumblingMind; [MayRequireAnomaly] public static HediffDef CrumbledMind; [MayRequireAnomaly] public static HediffDef BlissLobotomy; [MayRequireAnomaly] public static HediffDef PleasurePulse; [MayRequireAnomaly] public static HediffDef NeurosisPulse; [MayRequireAnomaly] public static HediffDef BloodRage; [MayRequireAnomaly] public static HediffDef FrenzyField; [MayRequireAnomaly] public static HediffDef AgonyPulse; [MayRequireAnomaly] public static HediffDef CubeInterest; [MayRequireAnomaly] public static HediffDef CubeWithdrawal; [MayRequireAnomaly] public static HediffDef CubeRage; [MayRequireAnomaly] public static HediffDef CubeComa; [MayRequireAnomaly] public static HediffDef BrainwipeComa; [MayRequireAnomaly] public static HediffDef CorpseTorment; [MayRequireAnomaly] public static HediffDef PsychicallyDead; [MayRequireAnomaly] public static HediffDef Psychophage; [MayRequireAnomaly] public static HediffDef SleepSuppression; [MayRequireAnomaly] public static HediffDef RageSpeed; [MayRequireAnomaly] public static HediffDef AwokenCorpse; [MayRequireAnomaly] public static HediffDef RapidRegeneration; [MayRequireAnomaly] public static HediffDef GhoulBarbs; [MayRequireAnomaly] public static HediffDef GhoulPlating; [MayRequireAnomaly] public static HediffDef AdrenalHeart; [MayRequireAnomaly] public static HediffDef FleshmassStomach; [MayRequireAnomaly] public static HediffDef FleshmassLung; [MayRequireAnomaly] public static HediffDef Metalblood; [MayRequireOdyssey] public static HediffDef SentienceCatalyst; static HediffDefOf() { DefOfHelper.EnsureInitializedInCtor(typeof(HediffDefOf)); } } ```