public static void ApparelGizmosFromComps(Apparel __instance, ref IEnumerable <Gizmo> __result) { if (__instance == null) { // Log.Warning("ApparelGizmosFromComps cannot access Apparel."); return; } if (__result == null) { // Log.Warning("ApparelGizmosFromComps creating new list."); return; } // Find all comps on the apparel. If any have gizmos, add them to the result returned from apparel already (typically empty set). List <Gizmo> l = new List <Gizmo>(__result); foreach (CompWearable comp in __instance.GetComps <CompWearable>()) { foreach (Gizmo gizmo in comp.CompGetGizmosWorn()) { l.Add(gizmo); } } __result = l; }
[HarmonyPostfix] // Apparel apparel public static void Notify_ApparelRemovedPostfix(Pawn_EquipmentTracker __instance, Apparel apparel) { bool abilityitem = apparel.TryGetCompFast <AbilitesExtended.CompAbilityItem>() != null; if (abilityitem) { Pawn pawn = __instance.pawn; if (!pawn.RaceProps.Humanlike) { return; } foreach (AbilitesExtended.CompAbilityItem compAbilityItem in apparel.GetComps <AbilitesExtended.CompAbilityItem>()) { if (__instance.pawn.abilities.abilities.Any(x => compAbilityItem.Props.Abilities.Contains(x.def))) { foreach (AbilityDef abilityDef in compAbilityItem.Props.Abilities) { if (__instance.pawn.abilities.abilities.Any(x => compAbilityItem.Props.Abilities.Contains(abilityDef))) { Ability ability = __instance.pawn.abilities.abilities.Find(x => x.def == abilityDef); __instance.pawn.abilities.abilities.Remove(ability); } } } } } }
public static void Notify_ApparelRemoved_PostFix(RimWorld.Pawn_ApparelTracker __instance, Apparel apparel) { foreach (CompAbilityItem cai in apparel.GetComps <CompAbilityItem>()) //((Pawn)__instance.ParentHolder).GetComps<CompAbilityItem>() ) { foreach (CompAbilityUser cau in ((Pawn)__instance.ParentHolder).GetComps <CompAbilityUser>()) { if (cau.GetType() == cai.Props.AbilityUserClass) { foreach (AbilityDef abdef in cai.Props.Abilities) { cau.RemoveApparelAbility(abdef); } } } } }
public static void Notify_ApparelAdded_PostFix(Pawn_ApparelTracker __instance, Apparel apparel) { foreach (var cai in apparel.GetComps <CompAbilityItem>() ) //((Pawn)__instance.ParentHolder).GetComps<CompAbilityItem>() ) { foreach (var cau in ((Pawn)__instance.ParentHolder).GetComps <CompAbilityUser>()) { if (cau.GetType() == cai.Props.AbilityUserClass) { cai.AbilityUserTarget = cau; foreach (var abdef in cai.Props.Abilities) { cau.AddApparelAbility(abdef); } } } } }
[HarmonyPostfix] // Apparel apparel public static void Notify_ApparelRemovedPostfix(Pawn_EquipmentTracker __instance, Apparel apparel) { bool abilityitem = apparel.TryGetComp <CompAbilityItem>() != null; if (abilityitem) { foreach (CompAbilityItem compAbilityItem in apparel.GetComps <CompAbilityItem>()) { foreach (CompAbilityUser compAbilityUser in __instance.pawn.GetComps <CompAbilityUser>()) { if (compAbilityUser.AbilityData.TemporaryApparelPowers.Any(x => compAbilityItem.Props.Abilities.Contains(x.Def))) { foreach (AbilityDef abilityDef in compAbilityItem.Props.Abilities) { compAbilityUser.RemoveApparelAbility(abilityDef); } } } } } }
[HarmonyPostfix] // Apparel apparel public static void Notify_ApparelRemovedPostfix(Pawn_EquipmentTracker __instance, Apparel apparel) { bool abilityitem = apparel.TryGetComp <CompAbilityItem>() != null; if (abilityitem) { foreach (CompAbilityItem compAbilityItem in apparel.GetComps <CompAbilityItem>()) { if (__instance.pawn.abilities.abilities.Any(x => compAbilityItem.Props.Abilities.Contains(x.def))) { foreach (AbilityDef abilityDef in compAbilityItem.Props.Abilities) { if (__instance.pawn.abilities.abilities.Any(x => compAbilityItem.Props.Abilities.Contains(abilityDef))) { Ability ability = __instance.pawn.abilities.abilities.Find(x => x.def == abilityDef); __instance.pawn.abilities.abilities.Remove(ability); } } } } } }