From 1d75b080875586e26cb7ba5cadceeaaba51bbd68 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Fri, 18 Jul 2025 00:49:44 +0200 Subject: [PATCH] Fixed so active effects can handle expressions again (#368) --- lang/en.json | 10 +++------- module/config/itemConfig.mjs | 11 +---------- module/documents/activeEffect.mjs | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/lang/en.json b/lang/en.json index 39e49b67..4e9a9b11 100755 --- a/lang/en.json +++ b/lang/en.json @@ -777,7 +777,7 @@ "WeaponFeature": { "barrier": { "name": "Barrier", - "description": "+{armorScore} to Armor Score; -1 to Evasion" + "description": "Gain your character's Tier + 1 to Armor Score; -1 to Evasion" }, "bonded": { "name": "Bonded", @@ -893,7 +893,7 @@ }, "paired": { "name": "Paired", - "description": "+{bonusDamage} to primary weapon damage to targets within Melee range" + "description": "Add your character's Tier + 1 to primary weapon damage against targets within Melee range" }, "parry": { "name": "Parry", @@ -913,7 +913,7 @@ }, "protective": { "name": "Protective", - "description": "+{tier} to Armor Score" + "description": "Add your character's Tier to your Armor Score" }, "quick": { "name": "Quick", @@ -962,10 +962,6 @@ "timebending": { "name": "Timebending", "description": "You can choose the target of your attack after making your attack roll." - }, - "versatile": { - "name": "Versatile", - "description": "This weapon can also be used with these statistics—{characterTrait}, {range}, {damage}." } } }, diff --git a/module/config/itemConfig.mjs b/module/config/itemConfig.mjs index b26a26ca..6b28a1ae 100644 --- a/module/config/itemConfig.mjs +++ b/module/config/itemConfig.mjs @@ -439,7 +439,7 @@ export const weaponFeatures = { { key: 'system.bonuses.damage.primaryWeapon.bonus', mode: 2, - value: '@system.levelData.levels.current' + value: '@system.levelData.level.current' } ] } @@ -1261,15 +1261,6 @@ export const weaponFeatures = { timebending: { label: 'DAGGERHEART.CONFIG.WeaponFeature.timebending.name', description: 'DAGGERHEART.CONFIG.WeaponFeature.timebending.description' - }, - versatile: { - label: 'DAGGERHEART.CONFIG.WeaponFeature.versatile.name', - description: 'DAGGERHEART.CONFIG.WeaponFeature.versatile.description' - // versatile: { - // characterTrait: '', - // range: '', - // damage: '' - // } } }; diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index aa1a5b0d..6c4545b1 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -55,10 +55,24 @@ export default class DhActiveEffect extends ActiveEffect { } static applyField(model, change, field) { - change.value = itemAbleRollParse(change.value, model, change.effect.parent); + change.value = this.effectSafeEval(itemAbleRollParse(change.value, model, change.effect.parent)); super.applyField(model, change, field); } + /* Altered Foundry safeEval to allow non-numeric returns */ + static effectSafeEval(expression) { + let result; + try { + // eslint-disable-next-line no-new-func + const evl = new Function('sandbox', `with (sandbox) { return ${expression}}`); + result = evl(Roll.MATH_PROXY); + } catch (err) { + return expression; + } + + return result; + } + async toChat(origin) { const cls = getDocumentClass('ChatMessage'); const systemData = {