diff --git a/module/applications/ui/chatLog.mjs b/module/applications/ui/chatLog.mjs index 12c19aab..e2e3b6d4 100644 --- a/module/applications/ui/chatLog.mjs +++ b/module/applications/ui/chatLog.mjs @@ -141,8 +141,8 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo ...actionType, _id: foundry.utils.randomID(), name: game.i18n.localize(actionType.name), - itemSource: { - type: CONFIG.DH.ITEM.itemSourceType.restMove, + originItem: { + type: CONFIG.DH.ITEM.originItemType.restMove, itemPath: movePath, actionIndex: actionIndex } diff --git a/module/config/itemConfig.mjs b/module/config/itemConfig.mjs index 9fcc9189..544d6b2d 100644 --- a/module/config/itemConfig.mjs +++ b/module/config/itemConfig.mjs @@ -1548,7 +1548,7 @@ export const beastformTypes = { } }; -export const itemSourceType = { +export const originItemType = { itemCollection: 'itemCollection', restMove: 'restMove' }; diff --git a/module/data/action/baseAction.mjs b/module/data/action/baseAction.mjs index b15be216..ba401ae9 100644 --- a/module/data/action/baseAction.mjs +++ b/module/data/action/baseAction.mjs @@ -1,7 +1,7 @@ import DhpActor from '../../documents/actor.mjs'; import D20RollDialog from '../../applications/dialogs/d20RollDialog.mjs'; import { ActionMixin } from '../fields/actionField.mjs'; -import { itemSourceField } from '../chat-message/actorRoll.mjs'; +import { originItemField } from '../chat-message/actorRoll.mjs'; const fields = foundry.data.fields; @@ -26,7 +26,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel description: new fields.HTMLField(), img: new fields.FilePathField({ initial: undefined, categories: ['IMAGE'], base64: false }), chatDisplay: new fields.BooleanField({ initial: true, label: 'DAGGERHEART.ACTIONS.Config.displayInChat' }), - itemSource: itemSourceField(), + originItem: originItemField(), actionType: new fields.StringField({ choices: CONFIG.DH.ITEM.actionTypes, initial: 'action', @@ -217,7 +217,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel title: `${this.item instanceof CONFIG.Actor.documentClass ? '' : `${this.item.name}: `}${game.i18n.localize(this.name)}`, source: { item: this.item._id, - itemSource: this.itemSource, + originItem: this.originItem, action: this._id, actor: this.actor.uuid }, diff --git a/module/data/chat-message/actorRoll.mjs b/module/data/chat-message/actorRoll.mjs index e9ed7f75..61262529 100644 --- a/module/data/chat-message/actorRoll.mjs +++ b/module/data/chat-message/actorRoll.mjs @@ -17,11 +17,11 @@ const targetsField = () => }) ); -export const itemSourceField = () => +export const originItemField = () => new fields.SchemaField({ type: new fields.StringField({ - choices: CONFIG.DH.ITEM.itemSourceType, - initial: CONFIG.DH.ITEM.itemSourceType.itemCollection + choices: CONFIG.DH.ITEM.originItemType, + initial: CONFIG.DH.ITEM.originItemType.itemCollection }), itemPath: new fields.StringField(), actionIndex: new fields.StringField() @@ -45,7 +45,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel { source: new fields.SchemaField({ actor: new fields.StringField(), item: new fields.StringField(), - itemSource: itemSourceField(), + originItem: originItemField(), action: new fields.StringField() }), damage: new fields.ObjectField(), @@ -59,15 +59,15 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel { return fromUuidSync(this.source.actor); } - get itemAction() { + get actionItem() { const actionActor = this.actionActor; if (!actionActor || !this.source.item) return null; - switch (this.source.itemSource.type) { - case CONFIG.DH.ITEM.itemSourceType.restMove: + switch (this.source.originItem.type) { + case CONFIG.DH.ITEM.originItemType.restMove: const restMoves = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).restMoves; - return Array.from(foundry.utils.getProperty(restMoves, `${this.source.itemSource.itemPath}`).actions)[ - this.source.itemSource.actionIndex + return Array.from(foundry.utils.getProperty(restMoves, `${this.source.originItem.itemPath}`).actions)[ + this.source.originItem.actionIndex ]; default: const item = actionActor.items.get(this.source.item); @@ -76,8 +76,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel { } get action() { - const actionActor = this.actionActor, - itemAction = this.itemAction; + const { actionActor, actionItem: itemAction } = this; if (!this.source.action) return null; if (itemAction) return itemAction; else if (actionActor?.system.attack?._id === this.source.action) return actionActor.system.attack; diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index c5fd19b9..bb81c702 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -98,7 +98,9 @@ export default class DamageField extends fields.SchemaField { }); } - const token = game.scenes.find(x => x.active).tokens.find(x => x.id === target.id); + const token = target.id + ? game.scenes.find(x => x.active).tokens.find(x => x.id === target.id) + : actor.prototypeToken; if (config.hasHealing) damagePromises.push( actor.takeHealing(config.damage).then(updates => targetDamage.push({ token, updates })) diff --git a/module/data/fields/action/targetField.mjs b/module/data/fields/action/targetField.mjs index 486e818d..41383fea 100644 --- a/module/data/fields/action/targetField.mjs +++ b/module/data/fields/action/targetField.mjs @@ -26,7 +26,7 @@ export default class TargetField extends fields.SchemaField { let targets; // If the Action is configured as self-targeted, set targets as the owner. Probably better way than to fallback to getDependentTokens if (this.target?.type === CONFIG.DH.GENERAL.targetTypes.self.id) - targets = [this.actor.token ?? this.actor.getDependentTokens()[0]]; + targets = [this.actor.token ?? this.actor.prototypeToken]; else { targets = Array.from(game.user.targets); if (this.target.type !== CONFIG.DH.GENERAL.targetTypes.any.id) { diff --git a/module/documents/chatMessage.mjs b/module/documents/chatMessage.mjs index ec4c5a49..7e313891 100644 --- a/module/documents/chatMessage.mjs +++ b/module/documents/chatMessage.mjs @@ -145,9 +145,11 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage { }); html.querySelectorAll('.token-target-container').forEach(element => { - element.addEventListener('pointerover', this.hoverTarget); - element.addEventListener('pointerout', this.unhoverTarget); - element.addEventListener('click', this.clickTarget); + if (element.dataset.token) { + element.addEventListener('pointerover', this.hoverTarget); + element.addEventListener('pointerout', this.unhoverTarget); + element.addEventListener('click', this.clickTarget); + } }); } diff --git a/styles/less/ui/chat/damage-summary.less b/styles/less/ui/chat/damage-summary.less index 02fdbadf..3fea45e5 100644 --- a/styles/less/ui/chat/damage-summary.less +++ b/styles/less/ui/chat/damage-summary.less @@ -28,12 +28,15 @@ display: flex; flex-direction: column; gap: 2px; - cursor: pointer; transition: all 0.3s ease; border-radius: 6px; - &:hover { - background: @golden-10; + &.clickable { + cursor: pointer; + + &:hover { + background: @golden-10; + } } header { diff --git a/styles/less/ui/chat/effect-summary.less b/styles/less/ui/chat/effect-summary.less index 9bea1fd9..053c0be8 100644 --- a/styles/less/ui/chat/effect-summary.less +++ b/styles/less/ui/chat/effect-summary.less @@ -90,11 +90,14 @@ background: transparent; transition: all 0.3s ease; padding: 5px; - cursor: pointer; transition: all 0.3s ease; - &:hover { - background: @golden-10; + &.clickable { + cursor: pointer; + + &:hover { + background: @golden-10; + } } img { diff --git a/templates/ui/chat/damageSummary.hbs b/templates/ui/chat/damageSummary.hbs index aa8246e1..721f153f 100644 --- a/templates/ui/chat/damageSummary.hbs +++ b/templates/ui/chat/damageSummary.hbs @@ -1,6 +1,6 @@