diff --git a/lang/en.json b/lang/en.json index b75d5ccc..81a5d314 100755 --- a/lang/en.json +++ b/lang/en.json @@ -550,7 +550,9 @@ "title": "Tag Team Roll", "leaderTitle": "Initiating Character", "membersTitle": "Participants", + "partyTeam": "Party Team", "hopeCost": "Hope Cost", + "initiatingCharacter": "Initiating Character", "linkMessageHint": "Make a roll from your character sheet to link it to the Tag Team Roll", "damageNotRolled": "Damage not rolled in chat message yet", "insufficientHope": "The initiating character doesn't have enough hope", diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index db39cc67..cb8a5113 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -1,4 +1,4 @@ -import { RefreshType, socketEvent } from '../../systemRegistration/socket.mjs'; +import { GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs'; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; @@ -122,15 +122,27 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio async updateSource(update) { await this.data.updateSource(update); - await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, this.data.toObject()); - Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); - await game.socket.emit(`system.${CONFIG.DH.id}`, { - action: socketEvent.Refresh, - data: { - refreshType: RefreshType.TagTeamRoll - } - }); + if (game.user.isGM) { + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, this.data.toObject()); + Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.Refresh, + data: { + refreshType: RefreshType.TagTeamRoll + } + }); + } else { + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.GMUpdate, + data: { + action: GMUpdateEvent.UpdateSetting, + uuid: CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, + update: this.data.toObject(), + refresh: { refreshType: RefreshType.TagTeamRoll } + } + }); + } } static async updateData(_event, _element, formData) { @@ -228,7 +240,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio : 1; resourceUpdates.push({ key: 'hope', value: value, total: -value, enabled: true }); } - if (systemData.roll.isCritical) resourceUpdates.push({ key: 'stress', value: 1, total: -1, enabled: true }); + if (systemData.roll.isCritical) resourceUpdates.push({ key: 'stress', value: -1, total: 1, enabled: true }); if (systemData.roll.result.duality === -1) { fearUpdate.value = fearUpdate.value === null ? 1 : fearUpdate.value + 1; fearUpdate.total = fearUpdate.total === null ? -1 : fearUpdate.total - 1; @@ -242,17 +254,27 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } /* Improve by fetching default from schema */ - await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, { - members: [], - initiator: { id: null, cost: 3 } - }); - Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); - await game.socket.emit(`system.${CONFIG.DH.id}`, { - action: socketEvent.Refresh, - data: { - refreshType: RefreshType.TagTeamRoll - } - }); + const update = { members: [], initiator: { id: null, cost: 3 } }; + if (game.user.isGM) { + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, update); + Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.Refresh, + data: { + refreshType: RefreshType.TagTeamRoll + } + }); + } else { + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.GMUpdate, + data: { + action: GMUpdateEvent.UpdateSetting, + uuid: CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, + update: update, + refresh: { refreshType: RefreshType.TagTeamRoll } + } + }); + } } static async assignRoll(char, message) { @@ -261,15 +283,27 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio if (!character) return; await settings.updateSource({ [`members.${char.id}.messageId`]: message.id }); - await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, settings); - Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); - await game.socket.emit(`system.${CONFIG.DH.id}`, { - action: socketEvent.Refresh, - data: { - refreshType: RefreshType.TagTeamRoll - } - }); + if (game.user.isGM) { + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, settings); + Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.TagTeamRoll }); + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.Refresh, + data: { + refreshType: RefreshType.TagTeamRoll + } + }); + } else { + await game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.GMUpdate, + data: { + action: GMUpdateEvent.UpdateSetting, + uuid: CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, + update: settings, + refresh: { refreshType: RefreshType.TagTeamRoll } + } + }); + } } async close(options = {}) { diff --git a/module/dice/dhRoll.mjs b/module/dice/dhRoll.mjs index 5b998462..bbe3628b 100644 --- a/module/dice/dhRoll.mjs +++ b/module/dice/dhRoll.mjs @@ -240,7 +240,6 @@ export const registerRollDiceHooks = () => { config.tagTeamSelected ) return; - const actor = await fromUuid(config.source.actor); let updates = []; if (!actor) return; diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index 8fedc368..813c913b 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -256,9 +256,11 @@ export default class DualityRoll extends D20Roll { }); newRoll.extra = newRoll.extra.slice(2); + const tagTeamSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll); Hooks.call(`${CONFIG.DH.id}.postRollDuality`, { source: { actor: message.system.source.actor ?? '' }, targets: message.system.targets, + tagTeamSelected: Object.values(tagTeamSettings.members).some(x => x.messageId === message._id), roll: newRoll, rerolledRoll: newRoll.result.duality !== message.system.roll.result.duality ? message.system.roll : undefined diff --git a/templates/dialogs/tagTeamDialog.hbs b/templates/dialogs/tagTeamDialog.hbs index 575d19e4..3c96a573 100644 --- a/templates/dialogs/tagTeamDialog.hbs +++ b/templates/dialogs/tagTeamDialog.hbs @@ -1,7 +1,7 @@
- {{localize "Party Team"}} + {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.partyTeam"}}
@@ -76,20 +76,20 @@

- {{localize "Initiating Character"}} + {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.initiatingCharacter"}}

- {{localize "Cost"}} + {{localize "DAGGERHEART.GENERAL.Cost.single"}}

{{#if showResult}} {{#if selectedData.result}}
-

Tag Team Roll: {{selectedData.result}}

+

{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.title"}}: {{selectedData.result}}

{{#if usesDamage}}