diff --git a/lang/en.json b/lang/en.json index df6a3e64..414efe43 100755 --- a/lang/en.json +++ b/lang/en.json @@ -78,6 +78,8 @@ "transform": { "name": "Transform", "tooltip": "Transform one actor into another", + "noTransformActor": "There is no assigned actor to transform into", + "transformActorMissing": "The assigned actor to transform into does not exist. It was probably deleted or moved in/out of a compendium", "canvasError": "There is no active scene.", "prototypeError": "You can only use a transform action from a Token" } @@ -138,6 +140,7 @@ }, "transform": { "dropTransformHere": "Drop Transform Here", + "actorIsMissing": "The linked actor is missing. You should delete this link.", "clearHitPoints": "Clear Hitpoints", "clearStress": "Clear Stress" } diff --git a/module/applications/sheets-configs/action-base-config.mjs b/module/applications/sheets-configs/action-base-config.mjs index c6676ede..ce0e7e24 100644 --- a/module/applications/sheets-configs/action-base-config.mjs +++ b/module/applications/sheets-configs/action-base-config.mjs @@ -139,9 +139,14 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) } if (context.source.transform) { + const actor = await foundry.utils.fromUuid(context.source.transform.actorUUID); context.transform = { ...context.source.transform, - actor: await foundry.utils.fromUuid(context.source.transform.actorUUID) + actor: + actor ?? + (context.source.transform.actorUUID && !actor + ? { error: game.i18n.localize('DAGGERHEART.ACTIONS.Settings.transform.actorIsMissing') } + : null) }; } diff --git a/module/data/fields/action/transformField.mjs b/module/data/fields/action/transformField.mjs index 61ddc3ca..c351c75a 100644 --- a/module/data/fields/action/transformField.mjs +++ b/module/data/fields/action/transformField.mjs @@ -21,6 +21,17 @@ export default class DHSummonField extends fields.SchemaField { } static async execute() { + if (!this.transform.actorUUID) { + ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.transform.noTransformActor')); + return false; + } + + const baseActor = await foundry.utils.fromUuid(this.transform.actorUUID); + if (!baseActor) { + ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.transform.transformActorMissing')); + return false; + } + if (!canvas.scene) { ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.transform.canvasError')); return false; @@ -31,7 +42,7 @@ export default class DHSummonField extends fields.SchemaField { return false; } - const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(this.transform.actorUUID)); + const actor = await DHSummonField.getWorldActor(baseActor); const tokenSizes = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).tokenSizes; const tokenSize = actor?.system.metadata.usesSize ? tokenSizes[actor.system.size] : actor.prototypeToken.width; diff --git a/styles/less/sheets/actions/actions.less b/styles/less/sheets/actions/actions.less index a8618045..5c21dc60 100644 --- a/styles/less/sheets/actions/actions.less +++ b/styles/less/sheets/actions/actions.less @@ -14,11 +14,11 @@ .transform-resources { display: flex; - justify-content: space-between; + flex-direction: column; .transform-resource { display: flex; - flex-direction: column; + align-items: center; gap: 2px; .resource-title { @@ -60,6 +60,10 @@ gap: 5px; } } + + .actor-drop-hint { + flex: none; + } } .drop-dragger { diff --git a/templates/actionTypes/transform.hbs b/templates/actionTypes/transform.hbs index 82be3c46..ae17862a 100644 --- a/templates/actionTypes/transform.hbs +++ b/templates/actionTypes/transform.hbs @@ -6,15 +6,20 @@