public static bool isPotentialHost(this PawnKindDef p, out string failReason)
 {
     failReason = string.Empty;
     if (!p.race.race.body.AllParts.Any(x => x.def.defName.Contains("Head")))
     {
         failReason = "HasHead";
         return(false);
     }
     if (p.isNeomorph())
     {
         failReason = "isNeomorph";
         return(false);
     }
     if (p.isXenomorph())
     {
         failReason = "isXenomorph";
         return(false);
     }
     if (UtilChjAndroids.ChjAndroid)
     {
         if (p.race.defName == "ChjAndroid" || p.race.defName == "ChjDroid")
         {
             failReason = "ChjAndroid";
             return(false);
         }
     }
     if (UtilTieredAndroids.TieredAndroid)
     {
         if (p.race.defName.Contains("Android" + "Tier"))
         {
             failReason = "TieredAndroid";
             return(false);
         }
     }
     if (p.RaceProps.body.defName.Contains("AIRobot"))
     {
         failReason = "AIRobot";
         return(false);
     }
     if (p.race.defName.Contains("Android"))
     {
         failReason = "Android";
         return(false);
     }
     if (p.race.defName.Contains("Droid"))
     {
         failReason = "Droid";
         return(false);
     }
     if (p.race.defName.Contains("Mech"))
     {
         failReason = "Mech";
         return(false);
     }
     if (p.race.defName.Contains("TM_Undead"))
     {
         failReason = "TM_Undead";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("TM_StoneFlesh"))
     {
         failReason = "TM_StoneFlesh";
         return(false);
     }
     if (p.race.defName.Contains("TM_") && p.race.defName.Contains("Minion"))
     {
         failReason = "TM_Minion";
         return(false);
     }
     if (p.race.defName.Contains("TM_Demon"))
     {
         failReason = "TM_Demon";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("ChaosDeamon"))
     {
         failReason = "ChaosDeamon";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("Necron"))
     {
         failReason = "Necron";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("EldarConstruct"))
     {
         failReason = "EldarConstruct";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("ImperialConstruct"))
     {
         failReason = "ImperialConstruct";
         return(false);
     }
     if (p.race.race.FleshType.defName.Contains("MechanicusConstruct"))
     {
         failReason = "MechanicusConstruct";
         return(false);
     }
     if (p.RaceProps.IsMechanoid)
     {
         failReason = "IsMechanoid";
         return(false);
     }
     if (!p.RaceProps.IsFlesh)
     {
         failReason = "IsFlesh";
         return(false);
     }
     if (p.defaultFactionType == XenomorphDefOf.RRY_Xenomorph)
     {
         failReason = "IsXenomorphFaction";
         return(false);
     }
     if (p.race.race.baseBodySize < 0.65f && !p.RaceProps.Humanlike)
     {
         failReason = "NonhumanlikeTooSmall";
         return(false);
     }
     return(true);
 }
 public static bool isPotentialHost(this PawnKindDef p)
 {
     return(XenomorphUtil.isInfectablePawnKind(p) && !p.isXenomorph() && !p.isNeomorph());
 }