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(); } }
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>()); }
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 }); } } }
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>(); } } }
public static Need_Water water(this Pawn_NeedsTracker needs) { return(needs.TryGetNeed <Need_Water>()); }