private static PerkObject[] GetAllPerks() { var perks = new HashSet <PerkObject>(); try { var all_po = PerkObject.All; if (all_po != null) { perks.AddRange(all_po, true); } } catch (NullReferenceException) { } try { var all_def = DefaultPerks.GetAllPerks(); if (all_def != null) { perks.AddRange(all_def, true); } } catch (NullReferenceException) { } var typeDefaultPerks = typeof(DefaultPerks); var typePerkObject = typeof(PerkObject); var classs = typeDefaultPerks.GetNestedTypes().Where(x => !x.IsGenericType && x.IsClass && x.IsAbstract && x.IsSealed); var fields = classs.SelectMany(x => x.GetProperties(BindingFlags.Public | BindingFlags.Static).Where(y => y.PropertyType == typePerkObject)).ToArray(); foreach (var item in fields) { object value; try { value = item.GetValue(null); } catch (TargetInvocationException e) { if (e.InnerException != null && e.InnerException is NullReferenceException) { continue; } throw e; } catch (NullReferenceException) { continue; } if (value != null && value is PerkObject perkObject) { perks.Add(perkObject); } } return(perks.ToArray()); }
public static void InitializePerksPostfix(DefaultPerks __instance) { //PerkFixesHelper.FixPerkBonus(__instance, "OneHandedToBeBlunt", 5f, 0.5f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "OneHandedShieldWall", -20f, 5f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "OneHandedArrowCatcher", 5f, 5f, SkillEffect.EffectIncrementType.AddFactor); PerkFixesHelper.FixPerkBonus(__instance, "TwoHandedTerror", 20f, 10f, SkillEffect.EffectIncrementType.AddFactor); PerkFixesHelper.FixPerkBonus(__instance, "TwoHandedHope", 30f, 5f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "TwoHandedWayOfTheGreatAxe", 0.5f, 0.2f, SkillEffect.EffectIncrementType.AddFactor); PerkFixesHelper.FixPerkBonus(__instance, "PolearmStandardBearer", 20f, 20f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "PolearmSteadKiller", 70f, 0f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "PolearmFootwork", 2f, 0f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "PolearmLancer", 30f, 0f, SkillEffect.EffectIncrementType.AddFactor); //PerkFixesHelper.FixPerkBonus(__instance, "ThrowingSkullCrusher", 20f, 0f, SkillEffect.EffectIncrementType.AddFactor); }
public static void FixPerkBonus(DefaultPerks dpobj, string perkID, float primaryBonus, float secondaryBonus, SkillEffect.EffectIncrementType incrementType) { bool flag = false; FieldInfo field = typeof(DefaultPerks).GetField(perkID, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { PerkObject perkObject = field.GetValue(dpobj) as PerkObject; if (perkObject != null) { perkObject.Initialize(perkObject.Name.ToString(), perkObject.Description.ToString(), perkObject.Skill, (int)perkObject.RequiredSkillValue, perkObject.AlternativePerk, perkObject.PrimaryRole, primaryBonus, perkObject.SecondaryRole, secondaryBonus, incrementType, ""); flag = true; } } if (!flag) { InformationManager.DisplayMessage(new InformationMessage("Patch Failed:" + perkID, new Color(0.8f, 0f, 0f, 1f))); } }
static PerkObject[] GetAllPerks() { var perks = new HashSet <PerkObject>(); var all_po = PerkObject.All; if (all_po != null) { foreach (var item in all_po) { perks.Add(item); } } var all_def = DefaultPerks.GetAllPerks(); if (all_def != null) { foreach (var item in all_def) { perks.Add(item); } } var typeDefaultPerks = typeof(DefaultPerks); var typePerkObject = typeof(PerkObject); var classs = typeDefaultPerks.GetNestedTypes().Where(x => !x.IsGenericType && x.IsClass && x.IsAbstract && x.IsSealed); var fields = classs.SelectMany(x => x.GetProperties(BindingFlags.Public | BindingFlags.Static).Where(y => y.PropertyType == typePerkObject)).ToArray(); foreach (var item in fields) { var value = item.GetValue(null); if (value != null && value is PerkObject perkObject) { perks.Add(perkObject); } } return(perks.ToArray()); }