protected float FinalizeAndAddInjury(Pawn pawn, Hediff_Injury injury, DamageInfo dinfo, DamageResult result) { injury.TryGetComp <HediffComp_GetsPermanent>()?.PreFinalizeInjury(); float partHealth = pawn.health.hediffSet.GetPartHealth(injury.Part); if (pawn.IsColonist && !dinfo.IgnoreInstantKillProtection && dinfo.Def.ExternalViolenceFor(pawn) && !Rand.Chance(Find.Storyteller.difficultyValues.allowInstantKillChance)) { float num = ((injury.def.lethalSeverity > 0f) ? (injury.def.lethalSeverity * 1.1f) : 1f); float min = 1f; float max = Mathf.Min(injury.Severity, partHealth); for (int i = 0; i < 7; i++) { if (!pawn.health.WouldDieAfterAddingHediff(injury)) { break; } float num2 = Mathf.Clamp(partHealth - num, min, max); if (DebugViewSettings.logCauseOfDeath) { Log.Message($"CauseOfDeath: attempt to prevent death for {pawn.Name} on {injury.Part.Label} attempt:{i + 1} severity:{injury.Severity}->{num2} part health:{partHealth}"); } injury.Severity = num2; num *= 2f; min = 0f; } } pawn.health.AddHediff(injury, null, dinfo, result); float num3 = Mathf.Min(injury.Severity, partHealth); result.totalDamageDealt += num3; result.wounded = true; result.AddPart(pawn, injury.Part); result.AddHediff(injury); return(num3); }
protected float FinalizeAndAddInjury(Pawn pawn, Hediff_Injury injury, DamageInfo dinfo, DamageResult result) { injury.TryGetComp <HediffComp_GetsPermanent>()?.PreFinalizeInjury(); pawn.health.AddHediff(injury, null, dinfo, result); float num = Mathf.Min(injury.Severity, pawn.health.hediffSet.GetPartHealth(injury.Part)); result.totalDamageDealt += num; result.wounded = true; result.AddPart(pawn, injury.Part); result.AddHediff(injury); return(num); }