private static string HealthReport([NotNull] Pawn pawn) { var segments = new List <string> { ResponseHelper.JoinPair("TKUtils.PawnHealth.OverallHealth".Localize(), pawn.health.summaryHealth.SummaryHealthPercent.ToStringPercent()) }; if (pawn.health.State != PawnHealthState.Mobile) { segments[0] += $" {GetHealthStateFriendly(pawn.health.State)}"; } else { segments[0] += $" {GetMoodFriendly(pawn)}"; } if (pawn.health.hediffSet.BleedRateTotal > 0.01f) { int ticks = HealthUtility.TicksUntilDeathDueToBloodLoss(pawn); segments.Add( ticks >= 60000 ? ResponseHelper.BleedingSafeGlyphs.AltText("WontBleedOutSoon".Localize().CapitalizeFirst()) : $"{ResponseHelper.BleedingBadGlyphs.AltText("BleedingRate".Localize())} ({ticks.ToStringTicksToPeriod(shortForm: true)})" ); } List <PawnCapacityDef> source = GetCapacitiesForPawn(pawn).ToList(); if (source.Count > 0) { source = source.OrderBy(d => d.listOrder).ToList(); string[] capacities = source.Where(capacity => PawnCapacityUtility.BodyCanEverDoCapacity(pawn.RaceProps.body, capacity)) .Select( capacity => ResponseHelper.JoinPair( RichTextHelper.StripTags(capacity.GetLabelFor(pawn)).CapitalizeFirst(), HealthCardUtility.GetEfficiencyLabel(pawn, capacity).First ) ) .ToArray(); segments.Add(capacities.SectionJoin()); } else { segments.Add("TKUtils.Responses.UnsupportedRace".LocalizeKeyed(pawn.kindDef.race.defName)); } if (!TkSettings.ShowSurgeries) { return(segments.GroupedJoin()); } BillStack surgeries = pawn.health.surgeryBills; if (surgeries?.Count <= 0) { return(segments.GroupedJoin()); } string[] queued = surgeries !.Bills.Select(item => RichTextHelper.StripTags(item.LabelCap)).ToArray(); segments.Add(ResponseHelper.JoinPair("TKUtils.PawnHealth.QueuedSurgeries".Localize(), queued.SectionJoin())); return(segments.GroupedJoin()); }