public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { if (!base.ShouldTakeCareOfPrisoner(pawn, t)) { return(null); } Pawn pawn2 = (Pawn)t; if (!WardenFeedUtility.ShouldBeFed(pawn2)) { return(null); } if (pawn2.needs.food.CurLevelPercentage >= pawn2.needs.food.PercentageThreshHungry + 0.02f) { return(null); } Thing thing; ThingDef thingDef; if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out thing, out thingDef, false, true, false, false, false, false, false)) { JobFailReason.Is("NoFood".Translate(), null); return(null); } float nutrition = FoodUtility.GetNutrition(thing, thingDef); return(new Job(JobDefOf.FeedPatient, thing, pawn2) { count = FoodUtility.WillIngestStackCountOf(pawn2, thingDef, nutrition) }); }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { if (!ShouldTakeCareOfPrisoner(pawn, t)) { return(null); } Pawn pawn2 = (Pawn)t; if (!WardenFeedUtility.ShouldBeFed(pawn2)) { return(null); } if (pawn2.needs.food.CurLevelPercentage >= pawn2.needs.food.PercentageThreshHungry + 0.02f) { return(null); } if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out Thing foodSource, out ThingDef foodDef, canRefillDispenser: false, canUseInventory: true, allowForbidden: false, allowCorpse: false)) { JobFailReason.Is("NoFood".Translate()); return(null); } float nutrition = FoodUtility.GetNutrition(foodSource, foodDef); Job job = new Job(JobDefOf.FeedPatient, foodSource, pawn2); job.count = FoodUtility.WillIngestStackCountOf(pawn2, foodDef, nutrition); return(job); }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { Job result; if (!base.ShouldTakeCareOfPrisoner(pawn, t)) { result = null; } else { Pawn pawn2 = (Pawn)t; Thing thing; ThingDef thingDef; if (!pawn2.guest.CanBeBroughtFood) { result = null; } else if (!pawn2.Position.IsInPrisonCell(pawn2.Map)) { result = null; } else if (pawn2.needs.food.CurLevelPercentage >= pawn2.needs.food.PercentageThreshHungry + 0.02f) { result = null; } else if (WardenFeedUtility.ShouldBeFed(pawn2)) { result = null; } else if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out thing, out thingDef, false, true, false, false, false, false, false)) { result = null; } else if (thing.GetRoom(RegionType.Set_Passable) == pawn2.GetRoom(RegionType.Set_Passable)) { result = null; } else if (WorkGiver_Warden_DeliverFood.FoodAvailableInRoomTo(pawn2)) { result = null; } else { float nutrition = FoodUtility.GetNutrition(thing, thingDef); result = new Job(JobDefOf.DeliverFood, thing, pawn2) { count = FoodUtility.WillIngestStackCountOf(pawn2, thingDef, nutrition), targetC = RCellFinder.SpotToChewStandingNear(pawn2, thing) }; } } return(result); }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { Pawn pawn2 = (Pawn)t; if (FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out var foodSource, out var foodDef, canRefillDispenser: false)) { float nutrition = FoodUtility.GetNutrition(foodSource, foodDef); Job job = JobMaker.MakeJob(JobDefOf.FeedPatient); job.targetA = foodSource; job.targetB = pawn2; job.count = FoodUtility.WillIngestStackCountOf(pawn2, foodDef, nutrition); return(job); } return(null); }
protected Job TakeFoodForAnimalInteractJob(Pawn pawn, Pawn tamee) { float num = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee) * 2f * 4f; ThingDef foodDef; Thing thing = FoodUtility.BestFoodSourceOnMap(pawn, tamee, desperate: false, out foodDef, FoodPreferability.RawTasty, allowPlant: false, allowDrug: false, allowCorpse: false, allowDispenserFull: false, allowDispenserEmpty: false); if (thing == null) { return(null); } float nutrition = FoodUtility.GetNutrition(thing, foodDef); Job job = new Job(JobDefOf.TakeInventory, thing); job.count = Mathf.CeilToInt(num / nutrition); return(job); }
protected Job TakeFoodForAnimalInteractJob(Pawn pawn, Pawn tamee) { float num = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee) * 2f * 4f; ThingDef foodDef; Thing thing = FoodUtility.BestFoodSourceOnMap(pawn, tamee, false, out foodDef, FoodPreferability.RawTasty, false, false, false, false, false, false, false, false, false); if (thing == null) { return(null); } float nutrition = FoodUtility.GetNutrition(thing, foodDef); return(new Job(JobDefOf.TakeInventory, thing) { count = Mathf.CeilToInt(num / nutrition) }); }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { Pawn pawn2 = (Pawn)t; Thing thing; ThingDef thingDef; if (FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out thing, out thingDef, false, true, false, true, false, false, false)) { float nutrition = FoodUtility.GetNutrition(thing, thingDef); return(new Job(JobDefOf.FeedPatient) { targetA = thing, targetB = pawn2, count = FoodUtility.WillIngestStackCountOf(pawn2, thingDef, nutrition) }); } return(null); }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { if (!ShouldTakeCareOfPrisoner(pawn, t)) { return(null); } Pawn pawn2 = (Pawn)t; if (!pawn2.guest.CanBeBroughtFood) { return(null); } if (!pawn2.Position.IsInPrisonCell(pawn2.Map)) { return(null); } if (pawn2.needs.food.CurLevelPercentage >= pawn2.needs.food.PercentageThreshHungry + 0.02f) { return(null); } if (WardenFeedUtility.ShouldBeFed(pawn2)) { return(null); } if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn2, pawn2.needs.food.CurCategory == HungerCategory.Starving, out Thing foodSource, out ThingDef foodDef, canRefillDispenser: false, canUseInventory: true, allowForbidden: false, allowCorpse: false)) { return(null); } if (foodSource.GetRoom() == pawn2.GetRoom()) { return(null); } if (FoodAvailableInRoomTo(pawn2)) { return(null); } float nutrition = FoodUtility.GetNutrition(foodSource, foodDef); Job job = new Job(JobDefOf.DeliverFood, foodSource, pawn2); job.count = FoodUtility.WillIngestStackCountOf(pawn2, foodDef, nutrition); job.targetC = RCellFinder.SpotToChewStandingNear(pawn2, foodSource); return(job); }
// Token: 0x0600009A RID: 154 RVA: 0x0000580C File Offset: 0x00003A0C public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { Pawn pawn2 = (Pawn)t; Predicate <Thing> predicate = (Thing t3) => t3.def.category == ThingCategory.Item && t3.IngestibleNow && pawn.RaceProps.CanEverEat(t3) && pawn.CanReserve(t3, 1, -1, null, false) && !t3.IsForbidden(pawn.Faction) && !t3.IsNotFresh() && t3.def.IsNutritionGivingIngestible; bool flag = predicate == null; Job result; if (flag) { result = null; } else { Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.OnCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), 10f, predicate, null, 0, -1, false, RegionType.Set_Passable, false); bool flag2 = thing == null; if (flag2) { result = null; } else { bool flag3 = predicate != null && thing != null && pawn2 != null; if (flag3) { ThingDef def = thing.def; float nutrition = FoodUtility.GetNutrition(thing, def); result = new Job(WPJobDefOf.WPFeedPatient) { targetA = thing, targetB = pawn2, count = FoodUtility.WillIngestStackCountOf(pawn2, def, nutrition) }; } else { result = null; } } } return(result); }
// Token: 0x060004FD RID: 1277 RVA: 0x000321F8 File Offset: 0x000305F8 protected override Job TryGiveJob(Pawn pawn) { bool selected = Find.Selector.SelectedObjects.Contains(pawn) && Prefs.DevMode; Need_Food food = pawn.needs.food; LifeStageDef stage = pawn.ageTracker.CurLifeStage; bool desperate = food.CurCategory >= HungerCategory.Starving; bool canRefillDispenser = false; bool canUseInventory = false; bool allowCorpse = true; bool flag3 = this.forceScanWholeMap; if (stage == pawn.RaceProps.lifeStageAges[pawn.RaceProps.lifeStageAges.Count - 1].def) { if (selected) { Log.Message(string.Format("adult {0} @ {1}", pawn, pawn.Position)); } if (food.CurCategory == HungerCategory.Fed) { return(null); } } else { if (selected) { Log.Message(string.Format("young {0} @ {1}", pawn, pawn.Position)); } /* * if (food.CurCategory == HungerCategory.Fed) * { * return null; * } */ } float nutrition; if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn, desperate, out Thing thing, out ThingDef thingDef, canRefillDispenser, canUseInventory, true, allowCorpse, true, pawn.IsWildMan(), flag3)) { return(null); } if (thing is Corpse corpse) { if (selected) { Log.Message(string.Format("{0} is corpse @ {1}", thing, thing.Position)); } nutrition = FoodUtility.GetNutrition(thing, thingDef); return(new Job(XenomorphDefOf.RRY_Neomorph_Ingest, thing) { count = FoodUtility.WillIngestStackCountOf(pawn, thingDef, nutrition) }); } if (thing is Pawn pawn2) { if (selected) { Log.Message(string.Format("{0} is pawn @ {1}", thing, thing.Position)); } if (pawn2 != null) { return(new Job(JobDefOf.PredatorHunt, pawn2) { killIncappedTarget = true }); } } nutrition = FoodUtility.GetNutrition(thing, thingDef); if (selected) { Log.Message(string.Format("{0} is thing @ {1}", thing, thing.Position)); } return(new Job(XenomorphDefOf.RRY_Neomorph_Ingest, thing) { count = FoodUtility.WillIngestStackCountOf(pawn, thingDef, nutrition) }); }
protected override Job TryGiveJob(Pawn pawn) { Need_Food food = pawn.needs.food; if (food == null || food.CurCategory < this.minCategory) { return(null); } bool flag; if (pawn.AnimalOrWildMan()) { flag = true; } else { Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Malnutrition, false); flag = (firstHediffOfDef != null && firstHediffOfDef.Severity > 0.4f); } bool flag2 = pawn.needs.food.CurCategory == HungerCategory.Starving; bool desperate = flag2; bool canRefillDispenser = true; bool canUseInventory = true; bool allowCorpse = flag; bool flag3 = this.forceScanWholeMap; Thing thing; ThingDef thingDef; if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn, desperate, out thing, out thingDef, canRefillDispenser, canUseInventory, false, allowCorpse, false, pawn.IsWildMan(), flag3)) { return(null); } Pawn pawn2 = thing as Pawn; if (pawn2 != null) { return(new Job(JobDefOf.PredatorHunt, pawn2) { killIncappedTarget = true }); } if (thing is Plant && thing.def.plant.harvestedThingDef == thingDef) { return(new Job(JobDefOf.Harvest, thing)); } Building_NutrientPasteDispenser building_NutrientPasteDispenser = thing as Building_NutrientPasteDispenser; if (building_NutrientPasteDispenser != null && !building_NutrientPasteDispenser.HasEnoughFeedstockInHoppers()) { Building building = building_NutrientPasteDispenser.AdjacentReachableHopper(pawn); if (building != null) { ISlotGroupParent hopperSgp = building as ISlotGroupParent; Job job = WorkGiver_CookFillHopper.HopperFillFoodJob(pawn, hopperSgp); if (job != null) { return(job); } } thing = FoodUtility.BestFoodSourceOnMap(pawn, pawn, flag2, out thingDef, FoodPreferability.MealLavish, false, !pawn.IsTeetotaler(), false, false, false, false, false, false, this.forceScanWholeMap); if (thing == null) { return(null); } } float nutrition = FoodUtility.GetNutrition(thing, thingDef); return(new Job(JobDefOf.Ingest, thing) { count = FoodUtility.WillIngestStackCountOf(pawn, thingDef, nutrition) }); }
protected override Job TryGiveJob(Pawn pawn) { Need_Food food = pawn.needs.food; if (food == null || (int)food.CurCategory < (int)minCategory) { return(null); } bool flag; if (pawn.AnimalOrWildMan()) { flag = true; } else { Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Malnutrition); flag = (firstHediffOfDef != null && firstHediffOfDef.Severity > 0.4f); } bool flag2 = pawn.needs.food.CurCategory == HungerCategory.Starving; bool desperate = flag2; bool canRefillDispenser = true; bool canUseInventory = true; bool allowCorpse = flag; bool flag3 = forceScanWholeMap; Thing foodSource = default(Thing); ThingDef foodDef = default(ThingDef); if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn, desperate, out foodSource, out foodDef, canRefillDispenser, canUseInventory, allowForbidden: false, allowCorpse, allowSociallyImproper: false, pawn.IsWildMan(), flag3)) { return(null); } Pawn pawn2 = foodSource as Pawn; if (pawn2 != null) { Job job = new Job(JobDefOf.PredatorHunt, pawn2); job.killIncappedTarget = true; return(job); } if (foodSource is Plant && foodSource.def.plant.harvestedThingDef == foodDef) { return(new Job(JobDefOf.Harvest, foodSource)); } Building_NutrientPasteDispenser building_NutrientPasteDispenser = foodSource as Building_NutrientPasteDispenser; if (building_NutrientPasteDispenser != null && !building_NutrientPasteDispenser.HasEnoughFeedstockInHoppers()) { Building building = building_NutrientPasteDispenser.AdjacentReachableHopper(pawn); if (building != null) { ISlotGroupParent hopperSgp = building as ISlotGroupParent; Job job2 = WorkGiver_CookFillHopper.HopperFillFoodJob(pawn, hopperSgp); if (job2 != null) { return(job2); } } foodSource = FoodUtility.BestFoodSourceOnMap(pawn, pawn, flag2, out foodDef, FoodPreferability.MealLavish, allowPlant: false, !pawn.IsTeetotaler(), allowCorpse: false, allowDispenserFull: false, allowDispenserEmpty: false, allowForbidden: false, allowSociallyImproper: false, allowHarvest: false, forceScanWholeMap); if (foodSource == null) { return(null); } } float nutrition = FoodUtility.GetNutrition(foodSource, foodDef); Job job3 = new Job(JobDefOf.Ingest, foodSource); job3.count = FoodUtility.WillIngestStackCountOf(pawn, foodDef, nutrition); return(job3); }
// Token: 0x060004FD RID: 1277 RVA: 0x000321F8 File Offset: 0x000305F8 protected override Job TryGiveJob(Pawn pawn) { Need_Food food = pawn.needs.food; LifeStageDef stage = pawn.ageTracker.CurLifeStage; if (stage == pawn.RaceProps.lifeStageAges[pawn.RaceProps.lifeStageAges.Count - 1].def) { return(null); } bool flag; if (pawn.AnimalOrWildMan()) { flag = true; } else { Hediff firstHediffOfDef = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.Malnutrition, false); flag = (firstHediffOfDef != null && firstHediffOfDef.Severity > 0.4f); } bool flag2 = pawn.needs.food.CurCategory == HungerCategory.Starving; bool desperate = flag2; Thing thing; ThingDef thingDef; bool canRefillDispenser = false; bool canUseInventory = false; bool allowCorpse = true; bool flag3 = false; if (pawn.GetLord() != null && pawn.GetLord() is Lord L) { if (L.CurLordToil is LordToil_DefendAndExpandHiveLike Hivelord) { if (Hivelord.Data.assignedHiveLikes.TryGetValue(pawn) != null) { if (!Hivelord.Data.assignedHiveLikes.TryGetValue(pawn).active) { return(null); } } } } if (!FoodUtility.TryFindBestFoodSourceFor(pawn, pawn, desperate, out thing, out thingDef, canRefillDispenser, canUseInventory, true, allowCorpse, true, pawn.IsWildMan(), flag3)) { return(null); } if (thing.GetType() != typeof(Corpse)) { return(null); } Pawn pawn2 = thing as Pawn; if (pawn2 != null && pawn.CanSee(pawn2) && pawn.isXenomorph()) { return(new Job(JobDefOf.PredatorHunt, pawn2) { killIncappedTarget = true }); } float nutrition = FoodUtility.GetNutrition(thing, thingDef); return(new Job(XenomorphDefOf.RRY_Neomorph_Ingest, thing) { count = FoodUtility.WillIngestStackCountOf(pawn, thingDef, nutrition) }); }