public void NotifyPlayerOfKilled(DamageInfo?dinfo, Hediff hediff, Caravan caravan)
        {
            TaggedString taggedString = "";

            taggedString = (dinfo.HasValue ? dinfo.Value.Def.deathMessage.Formatted(pawn.LabelShortCap, pawn.Named("PAWN")) : ((hediff == null) ? "PawnDied".Translate(pawn.LabelShortCap, pawn.Named("PAWN")) : "PawnDiedBecauseOf".Translate(pawn.LabelShortCap, hediff.def.LabelCap, pawn.Named("PAWN"))));
            Quest quest = null;

            if (pawn.IsBorrowedByAnyFaction())
            {
                foreach (QuestPart_LendColonistsToFaction item in QuestUtility.GetAllQuestPartsOfType <QuestPart_LendColonistsToFaction>())
                {
                    if (item.LentColonistsListForReading.Contains(pawn))
                    {
                        taggedString += "\n\n" + "LentColonistDied".Translate(pawn.Named("PAWN"), item.lendColonistsToFaction.Named("FACTION"));
                        quest         = item.quest;
                        break;
                    }
                }
            }
            taggedString = taggedString.AdjustedFor(pawn);
            if (pawn.Faction == Faction.OfPlayer)
            {
                TaggedString label = "Death".Translate() + ": " + pawn.LabelShortCap;
                if (caravan != null)
                {
                    Messages.Message("MessageCaravanDeathCorpseAddedToInventory".Translate(pawn.Named("PAWN")), caravan, MessageTypeDefOf.PawnDeath);
                }
                if (pawn.Name != null && !pawn.Name.Numerical && pawn.RaceProps.Animal)
                {
                    label += " (" + pawn.KindLabel + ")";
                }
                pawn.relations.CheckAppendBondedAnimalDiedInfo(ref taggedString, ref label);
                Find.LetterStack.ReceiveLetter(label, taggedString, LetterDefOf.Death, pawn, null, quest);
            }
            else
            {
                Messages.Message(taggedString, pawn, MessageTypeDefOf.PawnDeath);
            }
        }