Пример #1
0
        public static void Postfix(Pawn_NeedsTracker __instance)
        {
            var traverse = Traverse.Create(__instance);
            var pp       = traverse.Field("pawn").GetValue <Pawn>();

            if (!pp.IsWarframe())
            {
                return;
            }

            foreach (var nnd in getUselessNeed())
            {
                if (__instance.TryGetNeed(nnd) == null)
                {
                    continue;
                }

                //__instance.RemoveNeed(nnd);
                var item     = __instance.TryGetNeed(nnd);
                var needlist = traverse.Field("needs").GetValue <List <Need> >();
                needlist.Remove(item);

                //    __instance.BindDirectNeedFields();
            }
        }
Пример #2
0
        public static IEnumerable <Need_FoodGroup> GetFoodGroups(this Pawn_NeedsTracker needs)
        {
            Need_Dairy dairy = needs.TryGetNeed <Need_Dairy>();

            if (dairy == null)
            {
                yield break;
            }
            yield return(dairy);

            yield return(needs.TryGetNeed <Need_Fruit>());

            yield return(needs.TryGetNeed <Need_Vegetables>());

            yield return(needs.TryGetNeed <Need_Protein>());

            yield return(needs.TryGetNeed <Need_Grain>());
        }
Пример #3
0
        public static Need_FoodGroup GetByFoodGroup(this Pawn_NeedsTracker needs, FoodGroup foodGroup)
        {
            switch (foodGroup)
            {
            case FoodGroup.Vegetable:
                return(needs.TryGetNeed <Need_Vegetables>());

            case FoodGroup.Fruit:
                return(needs.TryGetNeed <Need_Fruit>());

            case FoodGroup.Grain:
                return(needs.TryGetNeed <Need_Grain>());

            case FoodGroup.Protein:
                return(needs.TryGetNeed <Need_Protein>());

            case FoodGroup.Dairy:
                return(needs.TryGetNeed <Need_Dairy>());

            default:
                throw new NotImplementedException();
            }
        }
            static void postfix(ref Pawn_NeedsTracker __instance)
            {
                Pawn_NeedsTracker tr        = __instance;
                FieldInfo         fieldInfo = AccessTools.Field(typeof(Pawn_NeedsTracker), "pawn");
                Pawn pawn = fieldInfo.GetValue(__instance) as Pawn;

                if (xxx.is_human(pawn) && pawn.ageTracker.CurLifeStageIndex < AgeStage.Teenager)
                {
                    if (tr.TryGetNeed(NeedDefOf.Joy) == null)
                    {
                        MethodInfo method = AccessTools.Method(typeof(Pawn_NeedsTracker), "AddNeed");
                        method.Invoke(tr, new object[] { NeedDefOf.Joy });
                    }
                }
            }
Пример #5
0
 public static void Postfix(Pawn_NeedsTracker __instance, Pawn ___pawn)
 {
     if (___pawn is Wendigo)
     {
         var removed = __instance.AllNeeds.RemoveAll(x => x.GetType() == typeof(Need_Food));
         if (!(__instance.food is Need_Flesh))
         {
             var need = __instance.AllNeeds.FirstOrDefault(x => x.GetType() == typeof(Need_Flesh));
             if (need is null)
             {
                 need     = (Need)Activator.CreateInstance(WendigoDefOf.RCW_Flesh.needClass, ___pawn);
                 need.def = WendigoDefOf.RCW_Flesh;
                 __instance.AllNeeds.Add(need);
                 need.SetInitialLevel();
             }
             __instance.food = __instance.TryGetNeed <Need_Flesh>();
         }
     }
 }
Пример #6
0
 public static Need_Water water(this Pawn_NeedsTracker needs)
 {
     return(needs.TryGetNeed <Need_Water>());
 }