public virtual bool CanEverDoBill(Bill bill, out HashSet <Pawn> pawnsAble, MagicRecipeDef mrDefIn = null) { MagicRecipeDef mrDef = null; if (bill != null) { mrDef = bill.recipe as MagicRecipeDef; } if (mrDefIn != null) { mrDef = mrDefIn; } pawnsAble = new HashSet <Pawn>(); if (mrDef != null && mrDef is MagicRecipeDef) { float manaReq = mrDef.manaCost; if (mrDef.mageCount > 0) { manaReq = mrDef.manaCost / mrDef.mageCount; } List <Pawn> magePawnsInRange = TM_Calc.FindNearbyMages(this.Position, this.Map, this.Faction, 50, true); if (magePawnsInRange != null && magePawnsInRange.Count > 0) { for (int i = 0; i < magePawnsInRange.Count; i++) { Pawn p = magePawnsInRange[i]; CompAbilityUserMagic comp = p.GetComp <CompAbilityUserMagic>(); if (p.Spawned && !p.Drafted && !p.InMentalState && p.GetPosture() == PawnPosture.Standing && p.workSettings.WorkIsActive(TorannMagicDefOf.TM_Magic) && comp != null && comp.Mana != null && comp.Mana.CurLevel >= manaReq) { pawnsAble.Add(p); if (pawnsAble.Count >= mrDef.mageCount) { return(true); } } } } } return(false); }