From c090daa2aaf3c11b9e393125ba2e4883223a9860 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 29 Apr 2026 19:53:39 -0600 Subject: [PATCH] Improve the chat message handling to make it so that the flavour can be properly updated if you include @active roll data --- module/data/Item/attribute.mjs | 25 +++++++++++++++++++++---- module/data/Item/generic.mjs | 23 ++++++++++++++++++++--- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/module/data/Item/attribute.mjs b/module/data/Item/attribute.mjs index 0059667..25eee87 100644 --- a/module/data/Item/attribute.mjs +++ b/module/data/Item/attribute.mjs @@ -136,11 +136,28 @@ export class AttributeItemData extends foundry.abstract.TypeDataModel { // Provide the chat-specific context when required if (macro.type === `chat`) { + const extraContext = { + name: this.parent.name, + min: this.min, + value: this.value, + max: this.max, + }; + Hooks.once(`taf.getRollData`, (data) => { - data.active = { - min: this.min, - value: this.value, - max: this.max, + data.active = extraContext; + }); + + // Apply any roll data additions to the message flavour as well + // since that doesn't get formatted by the ChatLog + Hooks.once(`preCreateChatMessage`, (message) => { + if (message.flavor.includes(`@active`)) { + const flavor = message.flavor.replaceAll( + /@active\.(\w+)/g, + (fullMatch, key) => { + return extraContext[key] || fullMatch; + }, + ); + message.updateSource({ flavor, }); }; }); }; diff --git a/module/data/Item/generic.mjs b/module/data/Item/generic.mjs index a8f8490..33b6477 100644 --- a/module/data/Item/generic.mjs +++ b/module/data/Item/generic.mjs @@ -59,10 +59,27 @@ export class GenericItemData extends foundry.abstract.TypeDataModel { // Provide the chat-specific context when required if (macro.type === `chat`) { + const extraContext = { + name: this.parent.name, + quantity: this.quantity, + equipped: this.equipped ? 1 : 0, + }; + Hooks.once(`taf.getRollData`, (data) => { - data.active = { - quantity: this.quantity, - equipped: this.equipped ? 1 : 0, + data.active = extraContext; + }); + + // Apply any roll data additions to the message flavour as well + // since that doesn't get formatted by the ChatLog + Hooks.once(`preCreateChatMessage`, (message) => { + if (message.flavor.includes(`@active`)) { + const flavor = message.flavor.replaceAll( + /@active\.(\w+)/g, + (fullMatch, key) => { + return extraContext[key] || fullMatch; + }, + ); + message.updateSource({ flavor, }); }; }); };