public static void addClassToBuff(BlueprintCharacterClass class_to_add, BlueprintArchetype[] archetypes_to_add, BlueprintBuff b, BlueprintCharacterClass class_to_check) { var components = b.ComponentsArray; foreach (var c in components.ToArray()) { if (c is ContextRankConfig) { addClassToContextRankConfig(class_to_add, archetypes_to_add, c as ContextRankConfig, b.name, class_to_check); } else if (c is Kingmaker.UnitLogic.Buffs.Components.AddAreaEffect) { addClassToAreaEffect(class_to_add, archetypes_to_add, (c as AddAreaEffect).AreaEffect, class_to_check); } else if (c is ContextCalculateAbilityParamsBasedOnClass) { var c_typed = c as ContextCalculateAbilityParamsBasedOnClass; b.ReplaceComponent(c, Common.createContextCalculateAbilityParamsBasedOnClassesWithArchetypes(new BlueprintCharacterClass[] { c_typed.CharacterClass, class_to_add }.Distinct().ToArray(), archetypes_to_add, c_typed.StatType)); } else if (c is NewMechanics.ContextCalculateAbilityParamsBasedOnClasses) { var c_typed = c as NewMechanics.ContextCalculateAbilityParamsBasedOnClasses; b.ReplaceComponent(c, Common.createContextCalculateAbilityParamsBasedOnClassesWithArchetypes(c_typed.CharacterClasses.AddToArray(class_to_add).Distinct().ToArray(), c_typed.archetypes.AddToArray(archetypes_to_add).Distinct().ToArray(), c_typed.StatType)); } else if (c is AddFactContextActions) { var c_typed = c as AddFactContextActions; if (c_typed.NewRound != null) { addClassToActionList(class_to_add, archetypes_to_add, c_typed.NewRound, class_to_check); } if (c_typed.Activated != null) { addClassToActionList(class_to_add, archetypes_to_add, c_typed.Activated, class_to_check); } if (c_typed.Deactivated != null) { addClassToActionList(class_to_add, archetypes_to_add, c_typed.Deactivated, class_to_check); } } else if (c is AddFacts) { var c_typed = c as AddFacts; foreach (var f in c_typed.Facts) { addClassToFact(class_to_add, archetypes_to_add, DomainSpellsType.NoSpells, f, class_to_check); } } } }