New source found from dndbeyond.com

This commit is contained in:
2026-07-08 01:00:09 -07:00
parent 9a983a6d7b
commit dcefa0d2f2
2865 changed files with 222467 additions and 49053 deletions
@@ -7,7 +7,7 @@ import { HelperUtils } from '../Helper';
import { ModifierAccessors, ModifierValidators } from '../Modifier';
import { OptionalClassFeatureAccessors } from '../OptionalClassFeature';
import { DefaultSpellCastingLearningStyle, SpellDerivers } from '../Spell';
import { getActiveId, getDefinitionClassFeatures, getDefinitionSpellcastingStatId, getId, getLevel, getMappingId, getSubclass, getClassFeatures, getDefinitionSpellCastingLearningStyle, } from './accessors';
import { getActiveId, getDefinitionClassFeatures, getDefinitionSpellcastingStatId, getId, getLevel, getMappingId, getSubclass, getClassFeatures, getDefinitionSpellCastingLearningStyle, getEnablesReplicateMagicItem, } from './accessors';
/**
*
* @param charClass
@@ -183,10 +183,11 @@ export function deriveReplacementWeaponAbilityStats(classModifiers) {
*
* @param classFeatures
*/
export function deriveDedicatedHexAndPactWeaponEnabled(classFeatures, classModifiers) {
export function deriveFeaturesEnabled(classFeatures, classModifiers) {
let enablesHexWeapon = false;
let enablesPactWeapon = false;
let enablesDedicatedWeapon = false;
let enablesReplicateMagicItem = false;
classModifiers.forEach((modifier) => {
if (!enablesPactWeapon && ModifierValidators.isEnablePactWeaponModifier(modifier)) {
enablesPactWeapon = true;
@@ -196,6 +197,10 @@ export function deriveDedicatedHexAndPactWeaponEnabled(classFeatures, classModif
enablesHexWeapon = true;
return;
}
if (!enablesReplicateMagicItem && ModifierValidators.isEnableReplicateMagicItemModifier(modifier)) {
enablesReplicateMagicItem = true;
return;
}
});
//TODO remove this once we have dedicated weapon driven by modifiers
classFeatures.forEach((feature) => {
@@ -207,6 +212,7 @@ export function deriveDedicatedHexAndPactWeaponEnabled(classFeatures, classModif
enablesHexWeapon,
enablesPactWeapon,
enablesDedicatedWeapon,
enablesReplicateMagicItem,
};
}
/**
@@ -310,3 +316,20 @@ export function deriveMaxInfusions(charClass) {
}
return null;
}
//Derives the maximum number of replicated magic items based on if the class enables the replicate magic item feature and if any of its class features have item mappings.
// It sums up the level scale fixed values and returns the total as the maximum number of replicated magic items.
export function deriveMaxReplicatedMagicItems(charClass) {
const enablesReplicateMagicItem = getEnablesReplicateMagicItem(charClass);
const features = getClassFeatures(charClass);
const replicateFeatures = features.filter((classFeature) => ClassFeatureAccessors.getHasItemMappings(classFeature));
if (enablesReplicateMagicItem) {
let maxCount = 0;
replicateFeatures.forEach((replicateFeature) => {
var _a, _b;
const levelScale = (_b = (_a = ClassFeatureAccessors.getLevelScale(replicateFeature)) === null || _a === void 0 ? void 0 : _a.fixedValue) !== null && _b !== void 0 ? _b : 0;
maxCount += levelScale;
});
return maxCount;
}
return null;
}