Compare commits

..

No commits in common. "bdb89973248dc0001814a3e393697c850c528446" and "edc3017b3920c6cb8393aca4dfe6d3367c1eef6a" have entirely different histories.

6 changed files with 22 additions and 67 deletions

View file

@ -298,15 +298,13 @@ Hooks.on('chatMessage', (_, message) => {
? CONFIG.DH.ACTIONS.advantageState.disadvantage.value ? CONFIG.DH.ACTIONS.advantageState.disadvantage.value
: undefined; : undefined;
const difficulty = rollCommand.difficulty; const difficulty = rollCommand.difficulty;
const grantResources = Boolean(rollCommand.grantResources);
const target = getCommandTarget({ allowNull: true }); const target = getCommandTarget({ allowNull: true });
const title = const title = flavor ??
(flavor ?? traitValue) traitValue ? game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', {
? game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', { ability: game.i18n.localize(SYSTEM.ACTOR.abilities[traitValue].label)
ability: game.i18n.localize(SYSTEM.ACTOR.abilities[traitValue].label) })
}) : game.i18n.localize('DAGGERHEART.GENERAL.duality');
: game.i18n.localize('DAGGERHEART.GENERAL.duality');
enrichedDualityRoll({ enrichedDualityRoll({
reaction, reaction,
@ -316,8 +314,7 @@ Hooks.on('chatMessage', (_, message) => {
title, title,
label: game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll'), label: game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll'),
actionType: null, actionType: null,
advantage, advantage
grantResources
}); });
return false; return false;
} }

View file

@ -85,7 +85,6 @@ export default class DhDeathMove extends HandlebarsApplicationMixin(ApplicationV
label: game.i18n.localize('DAGGERHEART.GENERAL.dualityDice'), label: game.i18n.localize('DAGGERHEART.GENERAL.dualityDice'),
actionType: null, actionType: null,
advantage: null, advantage: null,
grantResources: false,
customConfig: { skips: { resources: true, reaction: true } } customConfig: { skips: { resources: true, reaction: true } }
}); });

View file

@ -72,21 +72,10 @@ export default class RegisteredTriggers extends Map {
} }
} }
unregisterSceneEnvironmentTriggers(flagSystemData) {
const sceneData = new game.system.api.data.scenes.DHScene(flagSystemData);
for (const environment of sceneData.sceneEnvironments) {
if (environment.pack) continue;
this.unregisterItemTriggers(environment.system.features);
}
}
unregisterSceneTriggers(scene) { unregisterSceneTriggers(scene) {
this.unregisterSceneEnvironmentTriggers(scene.flags.daggerheart);
for (const triggerKey of Object.keys(CONFIG.DH.TRIGGER.triggers)) { for (const triggerKey of Object.keys(CONFIG.DH.TRIGGER.triggers)) {
const existingTrigger = this.get(triggerKey); const existingTrigger = this.get(triggerKey);
if (!existingTrigger) continue; if (!existingTrigger) continue;
const filtered = new Map(); const filtered = new Map();
for (const [uuid, data] of existingTrigger.entries()) { for (const [uuid, data] of existingTrigger.entries()) {
if (!uuid.startsWith(scene.uuid)) filtered.set(uuid, data); if (!uuid.startsWith(scene.uuid)) filtered.set(uuid, data);
@ -95,17 +84,14 @@ export default class RegisteredTriggers extends Map {
} }
} }
registerSceneEnvironmentTriggers(flagSystemData) {
const sceneData = new game.system.api.data.scenes.DHScene(flagSystemData);
for (const environment of sceneData.sceneEnvironments) {
for (const feature of environment.system.features) {
if (feature) this.registerItemTriggers(feature, true);
}
}
}
registerSceneTriggers(scene) { registerSceneTriggers(scene) {
this.registerSceneEnvironmentTriggers(scene.flags.daggerheart); /* TODO: Finish sceneEnvironment registration and unreg */
// const systemData = new game.system.api.data.scenes.DHScene(scene.flags.daggerheart);
// for (const environment of systemData.sceneEnvironments) {
// for (const feature of environment.system.features) {
// if(feature) this.registerItemTriggers(feature, true);
// }
// }
for (const actor of scene.tokens.filter(x => x.actor).map(x => x.actor)) { for (const actor of scene.tokens.filter(x => x.actor).map(x => x.actor)) {
if (actor.prototypeToken.actorLink) continue; if (actor.prototypeToken.actorLink) continue;
@ -122,11 +108,13 @@ export default class RegisteredTriggers extends Map {
if (!triggerSettings.enabled) return updates; if (!triggerSettings.enabled) return updates;
const dualityTrigger = this.get(trigger); const dualityTrigger = this.get(trigger);
if (dualityTrigger?.size) { if (dualityTrigger) {
const triggerActors = ['character', 'adversary', 'environment']; const tokenBoundActors = ['adversary', 'environment'];
const triggerActors = ['character', ...tokenBoundActors];
for (let [itemUuid, { actor: actorUuid, triggeringActorType, commands }] of dualityTrigger.entries()) { for (let [itemUuid, { actor: actorUuid, triggeringActorType, commands }] of dualityTrigger.entries()) {
const actor = await foundry.utils.fromUuid(actorUuid); const actor = await foundry.utils.fromUuid(actorUuid);
if (!actor || !triggerActors.includes(actor.type)) continue; if (!actor || !triggerActors.includes(actor.type)) continue;
if (tokenBoundActors.includes(actor.type) && !actor.getActiveTokens().length) continue;
const triggerData = CONFIG.DH.TRIGGER.triggers[trigger]; const triggerData = CONFIG.DH.TRIGGER.triggers[trigger];
if (triggerData.usesActor && triggeringActorType !== 'any') { if (triggerData.usesActor && triggeringActorType !== 'any') {

View file

@ -274,7 +274,7 @@ export default class DualityRoll extends D20Roll {
} }
static async handleTriggers(roll, config) { static async handleTriggers(roll, config) {
if (!config.source?.actor || config.skips?.triggers) return; if (!config.source?.actor) return;
const updates = []; const updates = [];
const dualityUpdates = await game.system.registeredTriggers.runTrigger( const dualityUpdates = await game.system.registeredTriggers.runTrigger(

View file

@ -51,27 +51,6 @@ export default class DhScene extends Scene {
} }
} }
async _preUpdate(changes, options, user) {
const allowed = await super._preUpdate(changes, options, user);
if (allowed === false) return false;
if (changes.flags?.daggerheart) {
if (this._source.flags.daggerheart) {
const unregisterTriggerData = this._source.flags.daggerheart.sceneEnvironments.reduce(
(acc, env) => {
if (!changes.flags.daggerheart.sceneEnvironments.includes(env)) acc.sceneEnvironments.push(env);
return acc;
},
{ ...this._source.flags.daggerheart, sceneEnvironments: [] }
);
game.system.registeredTriggers.unregisterSceneEnvironmentTriggers(unregisterTriggerData);
}
game.system.registeredTriggers.registerSceneEnvironmentTriggers(changes.flags.daggerheart);
}
}
_onDelete(options, userId) { _onDelete(options, userId) {
super._onDelete(options, userId); super._onDelete(options, userId);

View file

@ -47,7 +47,6 @@ function getDualityMessage(roll, flavor) {
${roll?.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''} ${roll?.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''}
${roll?.advantage ? 'data-advantage="true"' : ''} ${roll?.advantage ? 'data-advantage="true"' : ''}
${roll?.disadvantage ? 'data-disadvantage="true"' : ''} ${roll?.disadvantage ? 'data-disadvantage="true"' : ''}
${roll?.grantResources ? 'data-grant-resources="true"' : ''}
> >
${roll?.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'} ${roll?.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'}
${label} ${label}
@ -64,8 +63,7 @@ export const renderDualityButton = async event => {
traitValue = button.dataset.trait?.toLowerCase(), traitValue = button.dataset.trait?.toLowerCase(),
target = getCommandTarget({ allowNull: true }), target = getCommandTarget({ allowNull: true }),
difficulty = button.dataset.difficulty, difficulty = button.dataset.difficulty,
advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined, advantage = button.dataset.advantage ? Number(button.dataset.advantage) : undefined;
grantResources = Boolean(button.dataset?.grantResources);
await enrichedDualityRoll( await enrichedDualityRoll(
{ {
@ -75,15 +73,14 @@ export const renderDualityButton = async event => {
difficulty, difficulty,
title: button.dataset.title, title: button.dataset.title,
label: button.dataset.label, label: button.dataset.label,
advantage, advantage
grantResources
}, },
event event
); );
}; };
export const enrichedDualityRoll = async ( export const enrichedDualityRoll = async (
{ reaction, traitValue, target, difficulty, title, label, advantage, grantResources, customConfig }, { reaction, traitValue, target, difficulty, title, label, advantage, customConfig },
event event
) => { ) => {
const config = { const config = {
@ -96,18 +93,13 @@ export const enrichedDualityRoll = async (
advantage, advantage,
type: reaction ? 'reaction' : null type: reaction ? 'reaction' : null
}, },
skips: {
resources: !grantResources,
triggers: !grantResources
},
type: 'trait', type: 'trait',
hasRoll: true, hasRoll: true,
...(customConfig ?? {}) ...(customConfig ?? {})
}; };
if (target) { if (target) {
const result = await target.diceRoll(config); await target.diceRoll(config);
result.resourceUpdates.updateResources();
} else { } else {
// For no target, call DualityRoll directly with basic data // For no target, call DualityRoll directly with basic data
config.data = { experiences: {}, traits: {}, rules: {} }; config.data = { experiences: {}, traits: {}, rules: {} };