diff --git a/CHANGELOG.md b/CHANGELOG.md index e1f805d..eaef77d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,4 +25,14 @@ Jul 30, 2022 ## v0.0.6 Jul 30, 2022 * Fix attack/strike roll fudges for PF2e -* Add concept of "Total Roll" (including modifiers) vs "Raw Die Roll" (only the die) \ No newline at end of file +* Add concept of "Total Roll" (including modifiers) vs "Raw Die Roll" (only the die) + +## v0.0.7 +Aug 1, 2022 +* Remove 'Times' functionality from fudge +* Fix for raw die fudge still happening when global disabled +* Issue where disabled fudge before enabled would prevent selection of enabled +* Change fudge icon behavior for global disabled +* Fudge icon adjustments #14 +* Fudge config adjustments #15 +* Fix fudge whispers going to more than GM #16 diff --git a/module.json b/module.json index dd75b4c..5cd32e7 100644 --- a/module.json +++ b/module.json @@ -3,7 +3,7 @@ "title": "Die Hard", "description": "Adjustments for DND5e & PF2e die rolls like fudging...", "author": "Jeremy (UranusBytes)", - "version": "0.0.6", + "version": "0.0.7", "minimumCoreVersion": "9", "compatibleCoreVersion": "9", "esmodules": [ diff --git a/scripts/classes/DieHard.js b/scripts/classes/DieHard.js index 148de98..ae1ceda 100644 --- a/scripts/classes/DieHard.js +++ b/scripts/classes/DieHard.js @@ -24,7 +24,8 @@ export default class DieHard { let fudgeButton = document.createElement('label'); //fudgeButton.setAttribute('id', 'die-hard-fudge-icon'); fudgeButton.classList.add('die-hard-fudge-icon'); - fudgeButton.innerHTML = '
'; + // fudgeButton.innerHTML = ' '; + fudgeButton.innerHTML = ''; fudgeButton.addEventListener("click", async (ev) => { new DieHardFudgeDialog().render(true); diff --git a/scripts/classes/DieHardDnd5e.js b/scripts/classes/DieHardDnd5e.js index 379388c..1df2fd3 100644 --- a/scripts/classes/DieHardDnd5e.js +++ b/scripts/classes/DieHardDnd5e.js @@ -181,8 +181,8 @@ export default class DieHardDnd5e extends DieHardSystem{ actorFudges = [] } dieHardLog(false, functionLogName + ' - actorFudges', actorFudges); - let fudgeIndex = actorFudges.findIndex(element => { return element.whatId === rollType;}); - if (fudgeIndex !== -1 && actorFudges[fudgeIndex].statusActive) { + let fudgeIndex = actorFudges.findIndex(element => { return ((element.whatId === rollType) && (element.statusActive));}); + if (fudgeIndex !== -1) { dieHardLog(false, functionLogName + ' - active actor fudge', actorFudges[fudgeIndex]); foundry.utils.mergeObject(options, {data: {fudge: true, fudgeOperator: actorFudges[fudgeIndex].operator, fudgeOperatorValue: actorFudges[fudgeIndex].operatorValue, fudgeHow: actorFudges[fudgeIndex].howFormula }}); if (actorFudges[fudgeIndex].statusEndless) { @@ -205,8 +205,8 @@ export default class DieHardDnd5e extends DieHardSystem{ userFudges = [] } dieHardLog(false, functionLogName + ' - userFudges', userFudges); - fudgeIndex = userFudges.findIndex(element => { return element.whatId === rollType;}); - if (fudgeIndex !== -1 && userFudges[fudgeIndex].statusActive) { + fudgeIndex = userFudges.findIndex(element => { return ((element.whatId === rollType) && (element.statusActive));}); + if (fudgeIndex !== -1) { dieHardLog(false, functionLogName + ' - active user fudge', userFudges[fudgeIndex]); foundry.utils.mergeObject(options, {data: {fudge: true, fudgeOperator: userFudges[fudgeIndex].operator, fudgeOperatorValue: userFudges[fudgeIndex].operatorValue, fudgeHow: userFudges[fudgeIndex].howFormula }}); if (userFudges[fudgeIndex].statusEndless) { diff --git a/scripts/classes/DieHardFudgeDialog.js b/scripts/classes/DieHardFudgeDialog.js index fa93c01..addc26b 100644 --- a/scripts/classes/DieHardFudgeDialog.js +++ b/scripts/classes/DieHardFudgeDialog.js @@ -256,9 +256,11 @@ export default class DieHardFudgeDialog extends FormApplication { } let fudgeTimes = 1; + /* if (Number.isInteger(Number.parseInt(formData.fudgeTimes))) { fudgeTimes = Number.parseInt(formData.fudgeTimes); } + */ try { for (let loopIndex = 0; loopIndex < fudgeTimes; loopIndex++) { diff --git a/scripts/classes/DieHardPf2e.js b/scripts/classes/DieHardPf2e.js index 1246f18..abf83f3 100644 --- a/scripts/classes/DieHardPf2e.js +++ b/scripts/classes/DieHardPf2e.js @@ -155,6 +155,9 @@ export default class DieHardPf2e extends DieHardSystem { /** * Generic wrapper for all PF2e Check rolls */ + + // Currently not used, since can't find way to intercept lower level roll + /* wrappedCheckRoll(wrapped, check, context, event, callback) { dieHardLog(true, 'DieHardPf2e.wrappedCheckRoll - this', this); dieHardLog(true, 'DieHardPf2e.wrappedCheckRoll - arguments.length', arguments.length); @@ -251,6 +254,7 @@ export default class DieHardPf2e extends DieHardSystem { let result = wrapped(check, context, event, callback); dieHardLog(false, 'DieHardPf2e.wrappedCheckRoll - result', result); } + */ /* actorRollSave(wrapped, skillId, options = {}) { diff --git a/scripts/classes/DieHardSystem.js b/scripts/classes/DieHardSystem.js index 8f1c8e8..ea13095 100644 --- a/scripts/classes/DieHardSystem.js +++ b/scripts/classes/DieHardSystem.js @@ -113,13 +113,19 @@ export default class DieHardSystem{ dieHardLog(false, functionLogName + ' - this', this); dieHardLog(false, functionLogName + ' - eval_options', eval_options); + if (game.settings.get('foundry-die-hard', 'dieHardSettings').fudgeConfig.globalDisable) { + dieHardLog(true, functionLogName + ' - Globally disabled', game.settings.get('foundry-die-hard', 'dieHardSettings').fudgeConfig.globalDisable); + // Globally disabled + return wrapped(eval_options) + } + // Check if user has an active raw fudge let userFudges = game.users.current.getFlag('foundry-die-hard', 'fudges'); if (! Array.isArray(userFudges)) { userFudges = [] } - let fudgeIndex = userFudges.findIndex(element => { return element.whatId === ('rawd' + this.faces);}); - if (fudgeIndex !== -1 && userFudges[fudgeIndex].statusActive) { + let fudgeIndex = userFudges.findIndex(element => { return ((element.whatId === ('rawd' + this.faces)) && (element.statusActive));}); + if (fudgeIndex !== -1) { dieHardLog(false, functionLogName + ' - active user raw fudge', userFudges[fudgeIndex]); // Time to make the fudge @@ -202,8 +208,28 @@ export default class DieHardSystem{ continue; } + dieHardLog(false, functionLogName + ' - DEBUG POINT'); // Check if actor has an active total fudge // ToDo: something goes here... #6 + /* + // Check if actor has an active fudge + let actorFudges = game.actors.get(actorId).getFlag('foundry-die-hard', 'fudges'); + if (! Array.isArray(actorFudges)) { + actorFudges = [] + } + //dieHardLog(false, 'DieHardDnd5e.wrappedRoll - actorFudges', actorFudges); + let fudgeIndex = actorFudges.findIndex(element => { return element.whatId === rollType;}); + if (fudgeIndex !== -1 && actorFudges[fudgeIndex].statusActive) { + dieHardLog(false, 'DieHardDnd5e.wrappedRoll - active actor fudge', actorFudges[fudgeIndex]); + foundry.utils.mergeObject(options, {data: {fudge: true, fudgeOperator: actorFudges[fudgeIndex].operator, fudgeOperatorValue: actorFudges[fudgeIndex].operatorValue, fudgeHow: actorFudges[fudgeIndex].howFormula }}); + // Delete the fudge from the actor + let deletedFudge = actorFudges.splice(fudgeIndex,1) + game.actors.get(actorId).setFlag('foundry-die-hard', 'fudges', actorFudges); + // Check if still have active fudges; + this.refreshActiveFudgesIcon(); + } + + */ // Check if user has an active total fudge let userFudges = game.users.current.getFlag('foundry-die-hard', 'fudges'); @@ -211,9 +237,9 @@ export default class DieHardSystem{ userFudges = [] } - let fudgeIndex = userFudges.findIndex(element => { return element.whatId === ('totald' + this.dice[die].faces);}); + let fudgeIndex = userFudges.findIndex(element => { return ((element.whatId === ('totald' + this.dice[die].faces)) && (element.statusActive));}); dieHardLog(false, functionLogName + ' - dice faces', this.dice[die].faces); - if (fudgeIndex !== -1 && userFudges[fudgeIndex].statusActive) { + if (fudgeIndex !== -1) { dieHardLog(false, functionLogName + ' - active user total fudge', userFudges[fudgeIndex]); foundry.utils.mergeObject(this, {data: {fudge: true, fudgeOperator: userFudges[fudgeIndex].operator, fudgeOperatorValue: userFudges[fudgeIndex].operatorValue, fudgeHow: userFudges[fudgeIndex].howFormula }}); @@ -314,13 +340,18 @@ export default class DieHardSystem{ dmToGm(message) { var dm_ids = []; - for (let indexA = 0; indexA < game.users.length; indexA++) { - if (game.users[indexA].value.isGM) { - dm_ids.push(game.users[indexA].key) + // dieHardLog(false, 'DieHardSystem.dmToGm - game.users.values()', game.users.values()); + for (let user of game.users.values()) { + // dieHardLog(false, 'DieHardSystem.dmToGm - user', user); + if (user.isGM) { + dm_ids.push(user.id) + // dieHardLog(false, 'DieHardSystem.dmToGm - Added', user); } } + // dieHardLog(false, 'DieHardSystem.dmToGm - dm_ids', dm_ids); let whisper_to_dm = ChatMessage.create({ user: game.user.id, + type: CONST.CHAT_MESSAGE_TYPES.WHISPER, whisper: dm_ids, blind: true, content: message @@ -431,11 +462,12 @@ export default class DieHardSystem{ async refreshActiveFudgesIcon() { if (game.settings.get('foundry-die-hard', 'dieHardSettings').fudgeConfig.globalDisable) { - document.getElementById('die-hard-pause-fudge-icon').classList.remove("die-hard-fudge-pause-icon-hidden"); - document.getElementById('die-hard-fudge-icon').classList.remove("die-hard-fudge-icon-active"); + document.getElementById('die-hard-pause-fudge-icon').classList.remove("die-hard-icon-hidden"); + document.getElementById('die-hard-fudge-icon').classList.add("die-hard-icon-hidden"); return; } else { - document.getElementById('die-hard-pause-fudge-icon').classList.add("die-hard-fudge-pause-icon-hidden"); + document.getElementById('die-hard-pause-fudge-icon').classList.add("die-hard-icon-hidden"); + document.getElementById('die-hard-fudge-icon').classList.remove("die-hard-icon-hidden"); } if (this.hasActiveFudges()) { document.getElementById('die-hard-fudge-icon').classList.add("die-hard-fudge-icon-active"); diff --git a/styles/die-hard.css b/styles/die-hard.css index 9d3759f..9a85e66 100644 --- a/styles/die-hard.css +++ b/styles/die-hard.css @@ -10,18 +10,26 @@ Inspiration/plagarism from https://gitlab.com/asacolips-projects/foundry-mods/fo z-index: 99999999; position: absolute; } -#chat-controls .die-hard-fudge-pause-icon-hidden { - visibility: hidden; +#chat-controls .die-hard-icon-hidden { + display: none; } #chat-controls #die-hard-pause-fudge-icon { flex: 0 0 0; - padding-left: 2px; + padding-left: 0px; color: #FFA500; } +.die-hard-status-button { + margin-right: 5px; + margin-left: 5px; +} #chat-controls .die-hard-fudge-icon-active { + color: #FFA500; + /* animation-name: fudge-icon-color; animation-duration: 2s; animation-iteration-count: infinite; + + */ } @@ -125,7 +133,7 @@ div.die-hard-form-group { cursor: pointer; text-align:center; } - +/* @keyframes fudge-icon-color { 0% { color: #FFFFFF; @@ -137,7 +145,7 @@ div.die-hard-form-group { color: #FFFFFF; } } - +*/ .die-hard-form-error { animation-name: die-hard-form-error-color; animation-duration: 1s; diff --git a/templates/die-hard-fudge-config.html b/templates/die-hard-fudge-config.html index 7e38e6d..e26e25b 100644 --- a/templates/die-hard-fudge-config.html +++ b/templates/die-hard-fudge-config.html @@ -62,9 +62,11 @@