New source found from dndbeyond.com

This commit is contained in:
2025-07-02 01:00:11 -07:00
parent 2c657770de
commit b7f7f4a655
24 changed files with 291 additions and 43 deletions
@@ -512,7 +512,7 @@ export function deriveWeaponReach(item, modifiers, ruleData) {
* @param modifiers
* @param martialArtsLevel
*/
export function deriveAvailableWeaponAbilities(item, modifiers, martialArtsLevelScale, isDedicatedWeapon, isPactWeapon, isHexWeapon) {
export function deriveAvailableWeaponAbilities(item, modifiers, martialArtsLevelScale, isDedicatedWeapon, isPactWeapon, isHexWeapon, appliedWeaponReplacementStats) {
const availableAbilities = [];
const attackType = getAttackType(item);
if (attackType === AttackTypeRangeEnum.MELEE || hasWeaponProperty(item, WeaponPropertyEnum.FINESSE)) {
@@ -562,6 +562,22 @@ export function deriveAvailableWeaponAbilities(item, modifiers, martialArtsLevel
});
}
}
//handle Weapon Replacement Stats
if (appliedWeaponReplacementStats.length > 0) {
const enableAbilityStatReplacementModifiers = modifiers.filter((modifier) => ModifierValidators.isReplaceWeaponAbilityModifier(modifier));
enableAbilityStatReplacementModifiers.forEach((modifier) => {
//get the origin of the modifier
const dataOrigin = ModifierAccessors.getDataOrigin(modifier);
if (dataOrigin) {
const replacementAbilities = deriveReplacementWeaponAbilities(modifiers, dataOrigin);
replacementAbilities.forEach((ability) => {
if (!availableAbilities.includes(ability)) {
availableAbilities.push(ability);
}
});
}
});
}
return availableAbilities;
}
export function deriveReplacementWeaponAbilities(modifiers, enableModifierDataOrigin) {