From c3cb9121af561f7fa20983b280a7c226113d6410 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sat, 6 Dec 2025 21:08:08 +0100 Subject: [PATCH] [Fix] Beastform Effect Size Issue (#1368) * Fixed so beastform effects handle actors being smaller than 1 * . --- module/data/activeEffect/beastformEffect.mjs | 12 +++++++-- module/documents/actor.mjs | 28 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/module/data/activeEffect/beastformEffect.mjs b/module/data/activeEffect/beastformEffect.mjs index 0bd43c9c..b5e775fc 100644 --- a/module/data/activeEffect/beastformEffect.mjs +++ b/module/data/activeEffect/beastformEffect.mjs @@ -19,8 +19,8 @@ export default class BeastformEffect extends BaseEffect { base64: false }), tokenSize: new fields.SchemaField({ - height: new fields.NumberField({ integer: true, nullable: true }), - width: new fields.NumberField({ integer: true, nullable: true }) + height: new fields.NumberField({ integer: false, nullable: true }), + width: new fields.NumberField({ integer: false, nullable: true }) }) }), advantageOn: new fields.ArrayField(new fields.StringField()), @@ -29,6 +29,14 @@ export default class BeastformEffect extends BaseEffect { }; } + /** @inheritDoc */ + static migrateData(source) { + if (!source.characterTokenData.tokenSize.height) source.characterTokenData.tokenSize.height = 1; + if (!source.characterTokenData.tokenSize.width) source.characterTokenData.tokenSize.width = 1; + + return super.migrateData(source); + } + async _onCreate(_data, _options, userId) { if (userId !== game.user.id) return; diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 82d413d1..20339375 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -877,4 +877,32 @@ export default class DhpActor extends Actor { return acc; }, []); } + + /* Temporarily copying the foundry method to add a fix to a bug with scenes + https://discord.com/channels/170995199584108546/1296292044011995136/1446693077443149856 + */ + getDependentTokens({ scenes, linked = false } = {}) { + if (this.isToken && !scenes) return [this.token]; + if (scenes) scenes = Array.isArray(scenes) ? scenes : [scenes]; + else scenes = Array.from(this._dependentTokens.keys()); + + /* Code to filter out nonexistant scenes */ + scenes = scenes.filter(scene => game.scenes.some(x => x.id === scene.id)); + + if (this.isToken) { + const parent = this.token.parent; + return scenes.includes(parent) ? [this.token] : []; + } + + const allTokens = []; + for (const scene of scenes) { + if (!scene) continue; + const tokens = this._dependentTokens.get(scene); + for (const token of tokens ?? []) { + if (!linked || token.actorLink) allTokens.push(token); + } + } + + return allTokens; + } }