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);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
 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);
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 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);
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
        [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);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
0
        [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);
                            }
                        }
                    }
                }
            }
        }