From bf8c5c007699261bb41a5f0ff5e272c968b8208a Mon Sep 17 00:00:00 2001 From: CDeenen Date: Fri, 23 Apr 2021 02:13:09 +0200 Subject: [PATCH] v1.4.2 --- MaterialDeck.js | 24 +++++--- changelog.md | 32 +++++++++- img/other/.thumb/d20.png.jpg | Bin 0 -> 14739 bytes img/token/.thumb/temp_hp_empty.png.jpg | Bin 0 -> 17369 bytes module.json | 4 +- src/combattracker.js | 1 + src/macro.js | 1 + src/playlist.js | 10 +-- src/scene.js | 4 +- src/token.js | 81 ++++++++++++++----------- 10 files changed, 102 insertions(+), 55 deletions(-) create mode 100644 img/other/.thumb/d20.png.jpg create mode 100644 img/token/.thumb/temp_hp_empty.png.jpg diff --git a/MaterialDeck.js b/MaterialDeck.js index dda26c7..49259dd 100644 --- a/MaterialDeck.js +++ b/MaterialDeck.js @@ -30,7 +30,7 @@ let activeSounds = []; export let hotbarUses = false; export let calculateHotbarUses; - +let controlTokenTimer; //CONFIG.debug.hooks = true; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -116,7 +116,7 @@ async function analyzeWSmessage(msg){ if (action == 'token'){ tokenControl.active = true; - tokenControl.update(device,selectedTokenId,device); + tokenControl.pushData(selectedTokenId,settings,context,device); } else if (action == 'move') move.update(settings,context,device); @@ -353,17 +353,13 @@ Hooks.once('ready', async()=>{ } const hotbarUsesTemp = game.modules.get("illandril-hotbar-uses"); - if (hotbarUsesTemp != undefined) { - hotbarUses = true; - } - + if (hotbarUsesTemp != undefined) hotbarUses = true; }); Hooks.on('updateToken',(scene,token)=>{ if (enableModule == false || ready == false) return; let tokenId = token._id; - if (tokenId == selectedTokenId) - tokenControl.update(selectedTokenId); + if (tokenId == selectedTokenId) tokenControl.update(selectedTokenId); if (macroControl != undefined) macroControl.updateAll(); }); @@ -373,8 +369,10 @@ Hooks.on('updateActor',(scene,actor)=>{ for (let i=0; i{ if (enableModule == false || ready == false) return; if (controlled) { selectedTokenId = token.data._id; + tokenControl.update(selectedTokenId); + if (controlTokenTimer != undefined) { + clearTimeout(controlTokenTimer); + controlTokenTimer = undefined; + } } else { + controlTokenTimer = setTimeout(function(){tokenControl.update(selectedTokenId);},10) selectedTokenId = undefined; } - tokenControl.update(selectedTokenId); + if (macroControl != undefined) macroControl.updateAll(); }); diff --git a/changelog.md b/changelog.md index 4bb73d8..544b4ae 100644 --- a/changelog.md +++ b/changelog.md @@ -1,8 +1,38 @@ # Changelog Material Deck Module +### v1.4.2 - 23-04-2021 +Fixes: + + +Additions: + + +Other: + + +
+Compatible server app and SD plugin:
+Material Server v1.0.2 (unchanged): https://github.com/CDeenen/MaterialServer/releases
+SD plugin v1.4.2 (must be updated!): https://github.com/CDeenen/MaterialDeck_SD/releases
+ ### v1.4.1 - 21-04-2021 Fixes: ### v1.4.0 - 21-04-2021 diff --git a/img/other/.thumb/d20.png.jpg b/img/other/.thumb/d20.png.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a07cfb29655ff48016ebaffc66e34fe3b3a82ba GIT binary patch literal 14739 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 K|M(Va|9=C;I;AiG literal 0 HcmV?d00001 diff --git a/img/token/.thumb/temp_hp_empty.png.jpg b/img/token/.thumb/temp_hp_empty.png.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94323a3de2452397a6278f39ecd23e59cbc2ccbf GIT binary patch literal 17369 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 p.id == tokenId); + if (settings.combatTrackerMode) { + const mode = settings.combatTrackerMode; + token = canvas.tokens.children[0].children.find(p => p.id == tokenId); + } else if (selection == 'selected') token = canvas.tokens.controlled[0]; else if (selection != 'selected' && tokenIdentifier == '') {} else if (selection == 'tokenName') token = canvas.tokens.children[0].children.find(p => p.name == tokenIdentifier); @@ -76,7 +79,8 @@ export class TokenControl{ stats = 'none'; } - if (icon) iconSrc = token.data.img; + if (icon == 'tokenIcon') iconSrc = token.data.img; + else if (icon == 'actorIcon') iconSrc = token.actor.data.img; if (name && stats != 'none' && stats != 'HPbox') txt += "\n"; if (stats == 'custom'){ const custom = settings.custom ? settings.custom : ''; @@ -99,7 +103,7 @@ export class TokenControl{ else if (game.system.id == 'dnd5e'){ let attributes = token.actor.data.data.attributes; if (stats == 'HP') { - if (!icon) { + if (icon == 'stats') { uses = { available: attributes.hp.value, maximum: attributes.hp.max, @@ -119,7 +123,7 @@ export class TokenControl{ else if (stats == 'TempHP') { const val = (attributes.hp.temp == null) ? 0 : attributes.hp.temp; const max = (attributes.hp.tempmax == null) ? 0 : attributes.hp.tempmax - if (!icon) { + if (icon == 'stats') { uses = { available: (attributes.hp.temp == null) ? 0 : attributes.hp.temp, maximum: (max == 0) ? 1 : attributes.hp.tempmax, @@ -186,7 +190,7 @@ export class TokenControl{ } else if (stats == 'Skill') { const skill = settings.skill ? settings.skill : 'acr'; - const value = token.actor.data.data.skills?.[skill].mod; + const value = token.actor.data.data.skills?.[skill].total; if (value >= 0) txt += '+'; txt += value; } @@ -200,7 +204,7 @@ export class TokenControl{ else if (game.system.id == 'D35E' || game.system.id == 'pf1'){ let attributes = token.actor.data.data.attributes; if (stats == 'HP') { - if (!icon) { + if (icon == 'stats') { uses = { available: attributes.hp.value, maximum: attributes.hp.max, @@ -273,7 +277,7 @@ export class TokenControl{ else if (game.system.id == 'pf2e'){ let attributes = token.actor.data.data.attributes; if (stats == 'HP') { - if (!icon) { + if (icon == 'stats') { uses = { available: attributes.hp.value, maximum: attributes.hp.max, @@ -341,7 +345,7 @@ export class TokenControl{ else if (game.system.id == 'demonlord'){ let characteristics = token.actor.data.data.characteristics; if (stats == 'HP') { - if (!icon) { + if (icon == 'stats') { uses = { available: attributes.hp.value, maximum: attributes.hp.max, @@ -391,7 +395,7 @@ export class TokenControl{ ring = 2; ringColor = "#FF7B00"; } - if (icon == false) { + if (icon == 'stats') { iconSrc = window.CONFIG.controlIcons.visibility; overlay = true; } @@ -406,7 +410,7 @@ export class TokenControl{ ring = 2; ringColor = "#FF7B00"; } - if (icon == false) { + if (icon == 'stats') { iconSrc = window.CONFIG.controlIcons.combat; overlay = true; } @@ -417,7 +421,7 @@ export class TokenControl{ ring = 2; ringColor = "#FF7B00"; } - if (icon == false) { + if (icon == 'stats') { iconSrc = "fas fa-bullseye"; } } @@ -429,9 +433,9 @@ export class TokenControl{ ring = 1; if (game.system.id == 'dnd5e' || game.system.id == 'D35E' || game.system.id == 'pf1'){ const condition = settings.condition ? settings.condition : 'removeAll'; - if (condition == 'removeAll' && icon == false) + if (condition == 'removeAll' && icon == 'stats') iconSrc = window.CONFIG.controlIcons.effects; - else if (icon == false) { + else if (icon == 'stats') { let effect = CONFIG.statusEffects.find(e => e.id === condition); iconSrc = effect.icon; let effects = compatibleCore("0.8.1") ? token.actor.effects.contents : token.actor.effects.entries; @@ -444,9 +448,9 @@ export class TokenControl{ } else if (game.system.id == 'pf2e') { const condition = settings.condition ? settings.condition : 'removeAll'; - if (condition == 'removeAll' && icon == false) + if (condition == 'removeAll' && icon == 'stats') iconSrc = window.CONFIG.controlIcons.effects; - else if (icon == false) { + else if (icon == 'stats') { let effects = token.data.effects; for (let i=0; i e.id === condition); iconSrc = effect.icon; let effects = token.actor.effects.entries; @@ -485,7 +489,7 @@ export class TokenControl{ overlay = true; const condition = settings.cubConditionName; if (condition == undefined || condition == '') return; - if (icon == false) { + if (icon == 'stats') { let effect = CONFIG.statusEffects.find(e => e.label === condition); iconSrc = effect.icon; let effects = compatibleCore("0.8.1") ? token.actor.effects.contents : token.actor.effects.entries; @@ -501,7 +505,7 @@ export class TokenControl{ streamDeck.noPermission(context,device); return; } - if (icon == false) return; + if (icon != 'stats') return; const method = settings.wildcardMethod ? settings.wildcardMethod : 'iterate'; let value = parseInt(settings.wildcardValue); if (isNaN(value)) value = 1; @@ -541,7 +545,7 @@ export class TokenControl{ streamDeck.noPermission(context,device); return; } - if (icon == false) { + if (icon == 'stats') { iconSrc = window.CONFIG.controlIcons.visibility; ring = 2; overlay = true; @@ -552,14 +556,14 @@ export class TokenControl{ streamDeck.noPermission(context,device); return; } - if (icon == false) { + if (icon == 'stats') { iconSrc = window.CONFIG.controlIcons.combat; ring = 2; overlay = true; } } else if (settings.onClick == 'target') { //target token - if (icon == false) { + if (icon == 'stats') { iconSrc = "fas fa-bullseye"; ring = 2; overlay = true; @@ -574,21 +578,21 @@ export class TokenControl{ const condition = settings.condition ? settings.condition : 'removeAll'; if (condition == 'removeAll' && icon == false) iconSrc = window.CONFIG.controlIcons.effects; - else if (icon == false) + else if (icon == 'stats') iconSrc = CONFIG.statusEffects.find(e => e.id === condition).icon; } else if (game.system.id == 'pf2e') { const condition = settings.condition ? settings.condition : 'removeAll'; - if (condition == 'removeAll' && icon == false) + if (condition == 'removeAll' && icon == 'stats') iconSrc = window.CONFIG.controlIcons.effects; - else if (icon == false) + else if (icon == 'stats') iconSrc = this.pf2eCondition(condition); } else if (game.system.id == 'demonlord'){ const condition = settings.condition ? settings.condition : 'removeAll'; - if (condition == 'removeAll' && icon == false) + if (condition == 'removeAll' && icon == 'stats') iconSrc = window.CONFIG.controlIcons.effects; - else if (icon == false) + else if (icon == 'stats') iconSrc = CONFIG.statusEffects.find(e => e.id === condition).icon; } ring = 1; @@ -601,7 +605,7 @@ export class TokenControl{ } const condition = settings.cubConditionName; if (condition == undefined || condition == '') return; - if (icon == false) { + if (icon == 'stats') { iconSrc = CONFIG.statusEffects.find(e => e.label === condition).icon; } ring = 1; @@ -609,7 +613,7 @@ export class TokenControl{ } } - if (icon == false){ + if (icon == 'stats'){ if (MODULE.getPermission('TOKEN','STATS') == false) stats = statsOld; if (stats == 'HP') //HP iconSrc = "modules/MaterialDeck/img/token/hp_empty.png"; @@ -851,12 +855,17 @@ export class TokenControl{ const ability = settings.rollAbility ? settings.rollAbility : 'str'; const skill = settings.rollSkill ? settings.rollSkill : 'acr'; const save = settings.rollSave ? settings.rollSave : 'str'; - const rollOptions = otherControls.rollOption ? otherControls.rollOption : 'dialog'; - const options = { - fastForward: (otherControls.rollOption != 'dialog'), - advantage: (otherControls.rollOption == 'advantage'), - disadvantage: (otherControls.rollOption == 'disadvantage') - } + const rollMode = settings.rollMode ? settings.rollMode : 'default'; + let options; + if (rollMode == 'default') + options = { + fastForward: (otherControls.rollOption != 'dialog'), + advantage: (otherControls.rollOption == 'advantage'), + disadvantage: (otherControls.rollOption == 'disadvantage') + } + else if (rollMode == 'normal') options = {fastForward:true} + else if (rollMode == 'advantage') options = {fastForward:true,advantage:true} + else if (rollMode == 'disadvantage') options = {fastForward:true,disadvantage:true} if (game.system.id == 'pf2e') { if (roll == 'ability') token.actor.data.data.saves?.[ability].roll(options);