internal static void Apply() { Main.Log("Apply"); // Start with a resistance that nearly matches the one you want var feature = DatabaseHelper.FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance; // Get the monsters you want - doesn't have to be this var monstersWithColdResistance = Helpers.GetMonstersWithFeatureDefinition(feature); // create your feature from the existing one (or create one from scratch if there's a class builder) var myFeature = FeatureDefinitionDamageAffinityEx.Create(feature, "PsionicBlastResistance", DamageAffinityTypeEx.AttributeAndProficiency, 5, 0.5); // DatabaseRepository.GetDatabase<FeatureDefinitionDamageAffinity>().Add(myFeature); // Add your feature to all the monsters you want foreach (var m in monstersWithColdResistance) { Main.Log($"Adding MyFeature to monster: {m.Name}."); m.Features.Add(myFeature); // Maybe remove the original one // m.Features.Remove(feature); } }
internal static FeatureDefinitionDamageAffinityEx Create(FeatureDefinitionDamageAffinity original, string name, DamageAffinityTypeEx damageAffinity, int flatBonusAmount, double ratio) { var retval = new FeatureDefinitionDamageAffinityEx { DamageAffinityTypeEx = damageAffinity, FlatBonusAmount = flatBonusAmount, Ratio = ratio }; // TODO - copy original to retval // AccessTools etc, class builder? AccessTools.Field(retval.GetType(), "guid").SetValue(retval, Guid.NewGuid().ToString("N")); retval.name = name; return(retval); }