2025-05-28 15:36:51 -07:00

46 lines
2.0 KiB
JavaScript

import { AbilitySkillEnum, StealthCheckTypeEnum } from '../Core';
import { DataOriginGenerators, DataOriginTypeEnum } from '../DataOrigin';
import { DiceAdjustmentRollTypeEnum, DiceAdjustmentTypeEnum } from '../Dice';
import { ItemAccessors } from '../Item';
import { ModifierDerivers, ModifierValidators } from '../Modifier';
import { hack__updateDisadvantageAdjustments } from './hacks';
/**
*
* @param skill
* @param modifiers
*/
export function deriveAdvantageAdjustments(skill, modifiers) {
return modifiers
.filter((modifier) => ModifierValidators.isValidSkillAdvantageModifier(modifier, skill))
.map((modifier) => ModifierDerivers.deriveDiceAdjustment(modifier, DiceAdjustmentTypeEnum.ADVANTAGE));
}
/**
*
* @param skill
* @param modifiers
* @param equippedArmor
* @param nonProficientEquippedArmor
*/
export function deriveDisadvantageAdjustments(skill, modifiers, equippedArmor, nonProficientEquippedArmor) {
let skillDiceAdjustments = modifiers
.filter((modifier) => ModifierValidators.isValidSkillDisadvantageModifier(modifier, skill))
.map((modifier) => ModifierDerivers.deriveDiceAdjustment(modifier, DiceAdjustmentTypeEnum.DISADVANTAGE));
if (skill.id === AbilitySkillEnum.STEALTH) {
equippedArmor.forEach((item) => {
if (ItemAccessors.getStealthCheck(item) === StealthCheckTypeEnum.DISADVANTAGE) {
skillDiceAdjustments.push({
type: DiceAdjustmentTypeEnum.DISADVANTAGE,
rollType: DiceAdjustmentRollTypeEnum.ABILITY_CHECK,
dataOrigin: DataOriginGenerators.generateDataOrigin(DataOriginTypeEnum.ITEM, item),
restriction: 'with armor worn',
uniqueKey: [ItemAccessors.getUniqueKey(item), 'INNATE'].join('-'),
statId: null,
amount: null,
});
}
});
}
skillDiceAdjustments = hack__updateDisadvantageAdjustments(skill, skillDiceAdjustments, nonProficientEquippedArmor);
return skillDiceAdjustments;
}