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);
             }
         }
     }
 }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 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);
            }
        }
Пример #5
0
 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);
         }
     }
 }
Пример #6
0
        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);
            }
        }
Пример #7
0
        // 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);
            }
        }
Пример #8
0
        // 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);
            }
        }