private static void TrySatisfyPawnNeeds(Pawn pawn, Caravan caravan) { if (!pawn.Dead) { List <Need> allNeeds = pawn.needs.AllNeeds; for (int i = 0; i < allNeeds.Count; i++) { Need need = allNeeds[i]; Need_Rest need_Rest = need as Need_Rest; Need_Food need_Food = need as Need_Food; Need_Chemical need_Chemical = need as Need_Chemical; if (need_Rest != null) { CaravanPawnsNeedsUtility.TrySatisfyRestNeed(pawn, need_Rest, caravan); } else if (need_Food != null) { CaravanPawnsNeedsUtility.TrySatisfyFoodNeed(pawn, need_Food, caravan); } else if (need_Chemical != null) { CaravanPawnsNeedsUtility.TrySatisfyChemicalNeed(pawn, need_Chemical, caravan); } } } }
private void TrySatisfyPawnNeeds(Pawn pawn) { if (pawn.Dead) { return; } List <Need> allNeeds = pawn.needs.AllNeeds; for (int i = 0; i < allNeeds.Count; i++) { Need need = allNeeds[i]; Need_Rest need_Rest = need as Need_Rest; Need_Food need_Food = need as Need_Food; Need_Chemical need_Chemical = need as Need_Chemical; Need_Joy need_Joy = need as Need_Joy; if (need_Rest != null) { this.TrySatisfyRestNeed(pawn, need_Rest); } else if (need_Food != null) { this.TrySatisfyFoodNeed(pawn, need_Food); } else if (need_Chemical != null) { this.TrySatisfyChemicalNeed(pawn, need_Chemical); } else if (need_Joy != null) { this.TrySatisfyJoyNeed(pawn, need_Joy); } } }
private void TrySatisfyChemicalNeed(Pawn pawn, Need_Chemical chemical) { if ((int)chemical.CurCategory < 2 && CaravanInventoryUtility.TryGetDrugToSatisfyChemicalNeed(caravan, pawn, chemical, out Thing drug, out Pawn owner)) { IngestDrug(pawn, drug, owner); } }
private static void TrySatisfyChemicalNeed(Pawn pawn, Need_Chemical chemical, Caravan caravan) { Thing drug = default(Thing); Pawn drugOwner = default(Pawn); if ((int)chemical.CurCategory < 2 && CaravanInventoryUtility.TryGetBestDrug(caravan, pawn, chemical, out drug, out drugOwner)) { CaravanPawnsNeedsUtility.IngestDrug(pawn, drug, drugOwner, caravan); } }
private static void TrySatisfyChemicalNeed(Pawn pawn, Need_Chemical chemical, Caravan caravan) { if (chemical.CurCategory < DrugDesireCategory.Satisfied) { Thing drug; Pawn drugOwner; if (CaravanInventoryUtility.TryGetDrugToSatisfyChemicalNeed(caravan, pawn, chemical, out drug, out drugOwner)) { CaravanPawnsNeedsUtility.IngestDrug(pawn, drug, drugOwner, caravan); } } }
private void TrySatisfyChemicalNeed(Pawn pawn, Need_Chemical chemical) { if (chemical.CurCategory >= DrugDesireCategory.Satisfied) { return; } Thing drug; Pawn drugOwner; if (CaravanInventoryUtility.TryGetDrugToSatisfyChemicalNeed(this.caravan, pawn, chemical, out drug, out drugOwner)) { this.IngestDrug(pawn, drug, drugOwner); } }
// RimWorld.Planet.CaravanPawnsNeedsUtility public static void TrySatisfyChemicalNeed(Pawn pawn, Need_Chemical chemical, Pawn vehicle) { if (chemical.CurCategory >= DrugDesireCategory.Satisfied) { return; } Thing drug; Pawn drugOwner; if (TryGetBestDrug(vehicle, pawn, chemical, out drug, out drugOwner)) { IngestDrug(pawn, drug, drugOwner, vehicle); } }
// RimWorld.Planet.CaravanInventoryUtility public static bool TryGetBestDrug(Pawn vehicle, Pawn forPawn, Need_Chemical chemical, out Thing drug, out Pawn owner) { var addictionHediff = chemical.AddictionHediff; if (addictionHediff == null) { drug = null; owner = null; return(false); } var list = vehicle?.inventory?.innerContainer?.InnerListForReading; Thing thing = null; for (var i = 0; i < list.Count; i++) { var thing2 = list[i]; if (thing2.IngestibleNow && thing2.def.IsDrug) { var compDrug = thing2.TryGetComp <CompDrug>(); if (compDrug != null && compDrug.Props.chemical != null) { if (compDrug.Props.chemical.addictionHediff == addictionHediff.def) { if (forPawn.drugs == null || forPawn.drugs.CurrentPolicy[thing2.def].allowedForAddiction || forPawn.story == null || forPawn.story.traits.DegreeOfTrait(TraitDefOf.DrugDesire) > 0) { thing = thing2; break; } } } } } if (thing != null) { drug = thing; owner = forPawn; return(true); } drug = null; owner = null; return(false); }
public static bool TryGetBestDrug(Caravan caravan, Pawn forPawn, Need_Chemical chemical, out Thing drug, out Pawn owner) { Hediff_Addiction addictionHediff = chemical.AddictionHediff; if (addictionHediff == null) { drug = null; owner = null; return(false); } List <Thing> list = CaravanInventoryUtility.AllInventoryItems(caravan); Thing thing = null; for (int i = 0; i < list.Count; i++) { Thing thing2 = list[i]; if (thing2.IngestibleNow && thing2.def.IsDrug) { CompDrug compDrug = thing2.TryGetComp <CompDrug>(); if (compDrug != null && compDrug.Props.chemical != null) { if (compDrug.Props.chemical.addictionHediff == addictionHediff.def) { if (forPawn.drugs == null || forPawn.drugs.CurrentPolicy[thing2.def].allowedForAddiction || forPawn.story == null || forPawn.story.traits.DegreeOfTrait(TraitDefOf.DrugDesire) > 0) { thing = thing2; break; } } } } } if (thing != null) { drug = thing; owner = CaravanInventoryUtility.GetOwnerOf(caravan, thing); return(true); } drug = null; owner = null; return(false); }
private void TrySatisfyPawnNeeds(Pawn pawn) { if (pawn.Dead) { return; } List <Need> allNeeds = pawn.needs.AllNeeds; for (int i = 0; i < allNeeds.Count; i++) { Need need = allNeeds[i]; Need_Rest need_Rest = need as Need_Rest; Need_Food need_Food = need as Need_Food; Need_Chemical need_Chemical = need as Need_Chemical; Need_Joy need_Joy = need as Need_Joy; if (need_Rest != null) { TrySatisfyRestNeed(pawn, need_Rest); } else if (need_Food != null) { TrySatisfyFoodNeed(pawn, need_Food); } else if (need_Chemical != null) { TrySatisfyChemicalNeed(pawn, need_Chemical); } else if (need_Joy != null) { TrySatisfyJoyNeed(pawn, need_Joy); } } Pawn_PsychicEntropyTracker psychicEntropy = pawn.psychicEntropy; if (psychicEntropy.Psylink != null) { TryGainPsyfocus(psychicEntropy); } }