public override bool ShouldSkip(Pawn pawn, bool forced = false) { if (!LoadedModManager.GetMod <RemnantMod>().GetSettings <RemnantModSettings>().autoCollectAmmunition) { return(true); } if (pawn.NonHumanlikeOrWildMan()) { return(true); } List <ThingDef> thingDefs = AmmunitionUtility.NeedsAmmunition(pawn).ToList(); thingDefs.RemoveAll(t => pawn.inventory.GetDirectlyHeldThings().Any(d => d.def == t && d.stackCount >= 5)); if (thingDefs.Count() == 0) { return(true); } if (pawn.Map.GetDirectlyHeldThings().Where(t => !t.IsForbidden(pawn) && thingDefs.Contains(t.def)).Count() == 0) { return(true); } foreach (ThingDef thingDef in thingDefs) { if ((!pawn.inventory.GetDirectlyHeldThings().Any(t => t.def == thingDef) || pawn.inventory.GetDirectlyHeldThings().Any(t => t.def == thingDef && t.stackCount < 5)) && pawn.Map.GetDirectlyHeldThings().Any(t => t.def == thingDef)) { return(false); } } return(true); }
public override IEnumerable <Thing> PotentialWorkThingsGlobal(Pawn pawn) { List <ThingDef> thingDefs = AmmunitionUtility.NeedsAmmunition(pawn).ToList(); if (thingDefs.Count() == 0) { return(new List <Thing>()); } return(pawn.Map.GetDirectlyHeldThings().Where(t => !t.IsForbidden(pawn) && thingDefs.Contains(t.def) && (!pawn.inventory.GetDirectlyHeldThings().Any(p => p.def == t.def) || pawn.inventory.GetDirectlyHeldThings().Any(p => p.def == t.def && p.stackCount < 5)))); }