This commit is contained in:
2025-08-11 21:22:41 +08:00
parent f8154ca5c1
commit 75561a846a
901 changed files with 22639 additions and 4 deletions

View File

@@ -0,0 +1,750 @@
根据向量相似度分析,与 'HediffDef, Malnutrition' 最相关的代码定义如下:
---
**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\Core\Defs\HediffDefs\Hediffs_Global_Needs.xml`
**相似度:** 0.8237
```xml
<HediffDef>
<defName>Malnutrition</defName>
<label>malnutrition</label>
<description>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.</description>
<lethalSeverity>1</lethalSeverity>
<scenarioCanAdd>true</scenarioCanAdd>
<stages>
<li>
<label>trivial</label>
<socialFightChanceFactor>1.5</socialFightChanceFactor>
<hungerRateFactorOffset>0.5</hungerRateFactorOffset>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.05</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.2</minSeverity>
<label>minor</label>
<socialFightChanceFactor>2</socialFightChanceFactor>
<hungerRateFactorOffset>0.6</hungerRateFactorOffset>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.10</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.4</minSeverity>
<label>moderate</label>
<socialFightChanceFactor>2.5</socialFightChanceFactor>
<hungerRateFactorOffset>0.6</hungerRateFactorOffset>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.20</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.6</minSeverity>
<label>severe</label>
<socialFightChanceFactor>3</socialFightChanceFactor>
<hungerRateFactorOffset>0.6</hungerRateFactorOffset>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.30</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.8</minSeverity>
<label>extreme</label>
<lifeThreatening>true</lifeThreatening>
<hungerRateFactorOffset>0.6</hungerRateFactorOffset>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0.1</setMax>
</li>
</capMods>
</li>
</stages>
</HediffDef>
```
---
**文件路径:** `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<CompHoldingPlatformTarget>());
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<HediffComp_Lactating>();
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<float>();
}
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));
}
}
```