private bool CheckForExcessItems(Pawn pawn) { //if (pawn.CurJob != null && pawn.CurJob.def == JobDefOf.Tame) return false; CompInventory inventory = pawn.TryGetComp <CompInventory>(); Loadout loadout = pawn.GetLoadout(); if (inventory == null || inventory.container == null || loadout == null || loadout.Slots.NullOrEmpty()) { return(false); } if (inventory.container.Count > loadout.SlotCount + 1) { return(true); } // Check to see if there is at least one loadout slot specifying currently equipped weapon ThingWithComps equipment = ((pawn.equipment == null) ? null : pawn.equipment.Primary) ?? null; if (equipment != null && !loadout.Slots.Any(slot => slot.Def == equipment.GetInnerIfMinified().def&& slot.Count >= 1)) { return(true); } // Go through each item in the inventory and see if its part of our loadout bool allowDropRaw = Find.TickManager.TicksGame > pawn.mindState?.lastInventoryRawFoodUseTick + ticksBeforeDropRaw; foreach (Thing thing in inventory.container) { if (allowDropRaw || !thing.def.IsNutritionGivingIngestible || thing.def.ingestible.preferability > FoodPreferability.RawTasty) { LoadoutSlot slot = loadout.Slots.FirstOrDefault(x => x.Def == thing.def); if (slot == null) { return(true); } int numContained = InventoryCountDefs(inventory.container, thing.def); // Add currently equipped gun if (pawn.equipment != null && pawn.equipment.Primary != null) { if (pawn.equipment.Primary.def == slot.Def) { numContained++; } } if (slot.Count < numContained) { return(true); } } } return(false); }