static void Postfix(Pawn_AbilityTracker __instance, ref List <Ability> __result) { // The result can be null only if the method gets cancelled by the prefix if (__result == null) { __result = __instance.allAbilitiesCached; } }
static void Postfix(Pawn_AbilityTracker __instance, Pawn ___pawn) { if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs) { if (___pawn?.story?.adulthood == BackstoryCache.Ratkin_Sister && !__instance.abilities.Any(x => x.def == RatkinAbilityDefOf.RK_PrayerService)) { __instance.GainAbility(RatkinAbilityDefOf.RK_PrayerService); } } }
public static void GainAbility(this Pawn_AbilityTracker tracker, AbilityDef def, Thing source) { if (!tracker.abilities.Any((Ability a) => a.def == def)) { tracker.abilities.Add(Activator.CreateInstance(def.abilityClass, new object[] { tracker.pawn, def, source }) as Ability); } }
public static void GainEquipmentAbility(this Pawn_AbilityTracker tracker, EquipmentAbilityDef def, ThingWithComps thing) { if (!tracker.abilities.Any((Ability a) => a.def == def)) { EquipmentAbility ab = Activator.CreateInstance(def.abilityClass, new object[] { tracker.pawn, def }) as EquipmentAbility; ab.sourceEquipment = thing; tracker.abilities.Add(ab); } }