public override void OpenLetter()
        {
            Pawn pawn = lookTargets.TryGetPrimaryTarget().Thing as Pawn;

            ThingWithComps deadlyItem = (ThingWithComps)lookTargets.targets.First(gti => gti.HasThing && gti.Thing.TryGetComp <CompLootAffixableThing>() != null).Thing;
            var            comp       = deadlyItem.TryGetComp <CompLootAffixableThing>();
            LootAffixDef   affix      = comp.AllAffixDefs.First(lad => lad.IsNegativeDeadly(deadlyItem));
            string         affixLabel = comp.AllAffixesByAffixDefs[affix];

            TaggedString text = "RimLoot_NegativeDeadlyAffixLetter_Desc".Translate(
                pawn.Named("PAWN"),
                deadlyItem.Named("ITEM"),
                affix.FullStatsReport(deadlyItem, affixLabel).Named("EFFECT")
                );

            DiaNode nodeRoot = new DiaNode(text);

            nodeRoot.options.AddRange(Choices);
            Find.WindowStack.Add(new Dialog_NodeTreeWithFactionInfo(
                                     nodeRoot:  nodeRoot,
                                     faction:   relatedFaction,
                                     radioMode: radioMode,
                                     title:     title
                                     ));
        }
        public static void Postfix(ref List <FloatMenuOption> __result, Vector3 clickPos, Pawn pawn, bool suppressAutoTakeableGoto = false)
        {
            if (!pawn.RaceProps.Humanlike)
            {
                var compMachine = pawn.GetComp <CompMachine>();
                if (compMachine != null && compMachine.Props.canPickupWeapons)
                {
                    IntVec3        c          = IntVec3.FromVector3(clickPos);
                    ThingWithComps equipment  = null;
                    List <Thing>   thingList2 = c.GetThingList(pawn.Map);
                    for (int i = 0; i < thingList2.Count; i++)
                    {
                        if (thingList2[i].TryGetComp <CompEquippable>() != null)
                        {
                            equipment = (ThingWithComps)thingList2[i];
                            break;
                        }
                    }
                    if (equipment != null)
                    {
                        string          labelShort = equipment.LabelShort;
                        FloatMenuOption item6;
                        string          cantReason;
                        if (equipment.def.IsWeapon && pawn.WorkTagIsDisabled(WorkTags.Violent))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "IsIncapableOfViolenceLower".Translate(pawn.LabelShort, pawn), null);
                        }
                        else if (equipment.def.IsRangedWeapon && pawn.WorkTagIsDisabled(WorkTags.Shooting))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "IsIncapableOfShootingLower".Translate(pawn), null);
                        }
                        else if (!pawn.CanReach(equipment, PathEndMode.ClosestTouch, Danger.Deadly))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "NoPath".Translate().CapitalizeFirst(), null);
                        }
                        else if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "Incapable".Translate(), null);
                        }
                        else if (equipment.IsBurning())
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "BurningLower".Translate(), null);
                        }
                        else if (pawn.IsQuestLodger() && !EquipmentUtility.QuestLodgerCanEquip(equipment, pawn))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + "QuestRelated".Translate().CapitalizeFirst(), null);
                        }
                        else if (!EquipmentUtility.CanEquip(equipment, pawn, out cantReason, checkBonded: false))
                        {
                            item6 = new FloatMenuOption("CannotEquip".Translate(labelShort) + ": " + cantReason.CapitalizeFirst(), null);
                        }
                        else
                        {
                            string text4 = "Equip".Translate(labelShort);
                            if (equipment.def.IsRangedWeapon && pawn.story != null && pawn.story.traits.HasTrait(TraitDefOf.Brawler))
                            {
                                text4 += " " + "EquipWarningBrawler".Translate();
                            }
                            if (EquipmentUtility.AlreadyBondedToWeapon(equipment, pawn))
                            {
                                text4 += " " + "BladelinkAlreadyBonded".Translate();
                                TaggedString dialogText = "BladelinkAlreadyBondedDialog".Translate(pawn.Named("PAWN"), equipment.Named("WEAPON"), pawn.equipment.bondedWeapon.Named("BONDEDWEAPON"));
                                item6 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text4, delegate
                                {
                                    Find.WindowStack.Add(new Dialog_MessageBox(dialogText));
                                }, MenuOptionPriority.High), pawn, equipment);
                            }
                            else
                            {
                                item6 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text4, delegate
                                {
                                    string personaWeaponConfirmationText = EquipmentUtility.GetPersonaWeaponConfirmationText(equipment, pawn);
                                    if (!personaWeaponConfirmationText.NullOrEmpty())
                                    {
                                        Find.WindowStack.Add(new Dialog_MessageBox(personaWeaponConfirmationText, "Yes".Translate(), delegate
                                        {
                                            Equip();
                                        }, "No".Translate()));
                                    }
                                    else
                                    {
                                        Equip();
                                    }
                                }, MenuOptionPriority.High), pawn, equipment);
                            }
                        }
                        __result.Add(item6);
                        if (SimpleSidearmsPatch.SimpleSidearmsActive)
                        {
                            AppendSidearmsOptions(pawn, equipment, ref __result);
                        }
                    }

                    void Equip()
                    {
                        equipment.SetForbidden(value: false);
                        pawn.jobs.TryTakeOrderedJob(JobMaker.MakeJob(JobDefOf.Equip, equipment), JobTag.Misc);
                        FleckMaker.Static(equipment.DrawPos, equipment.MapHeld, FleckDefOf.FeedbackEquip);
                        PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.EquippingWeapons, KnowledgeAmount.Total);
                    }
                }
            }
        }