[Feature] 1543 - SceneEnvironment Trigger Registration (#1564)

* Added trigger Registration/Unregistration for scene environments

* Fixed so that saving throw damage mitigation works again (#1555)

* . (#1563)

* Fixed DowntimeMoves and ItemFeatures reset functions (#1568)

* Fixed an error where a player having their token initially selected caused an error in effectsDisplay.mjs (#1569)

* [Fix] Damage Rerolls (#1566)

* Fixed so that damage rerolls work again

* Set default data for a roll instead and fix title (#1570)

* Set default data for a roll instead and fix title

* Ensure same options object is used

---------

Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com>

* Fixed when users drag in compendium environments to the sceneEnvironments (#1573)

* .

---------

Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com>
This commit is contained in:
WBHarry 2026-01-24 11:15:07 +01:00 committed by GitHub
parent 0d84516813
commit bdb8997324
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 44 additions and 11 deletions

View file

@ -72,10 +72,21 @@ 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);
@ -84,14 +95,17 @@ 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) {
/* TODO: Finish sceneEnvironment registration and unreg */ this.registerSceneEnvironmentTriggers(scene.flags.daggerheart);
// 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;
@ -108,13 +122,11 @@ 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) { if (dualityTrigger?.size) {
const tokenBoundActors = ['adversary', 'environment']; const triggerActors = ['character', '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

@ -51,6 +51,27 @@ 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);