From d81034f6f4c657493f8feba26bf6b73690c81b43 Mon Sep 17 00:00:00 2001 From: "Tim Evans (slaguru666)" Date: Sun, 24 May 2026 21:01:06 +0100 Subject: [PATCH] feat: add interactive combat roll modifier slider snappable UI and visual ticks --- css/mosh.css | 20 ++ module/actor/actor-sheet.js | 4 +- module/actor/actor.js | 193 +++++++++++++++--- .../conditions_0e/{000076.log => 000086.log} | 0 packs/conditions_0e/CURRENT | 2 +- packs/conditions_0e/LOG | 6 +- packs/conditions_0e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 153 -> 153 bytes .../conditions_1e/{000076.log => 000086.log} | 0 packs/conditions_1e/CURRENT | 2 +- packs/conditions_1e/LOG | 6 +- packs/conditions_1e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 153 -> 153 bytes .../{000076.log => 000086.log} | 0 packs/items_maintenance_1e/CURRENT | 2 +- packs/items_maintenance_1e/LOG | 6 +- packs/items_maintenance_1e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 154 -> 154 bytes .../{000076.log => 000086.log} | 0 packs/macros_hotbar_0e/CURRENT | 2 +- packs/macros_hotbar_0e/LOG | 6 +- packs/macros_hotbar_0e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 156 -> 156 bytes .../{000076.log => 000086.log} | 0 packs/macros_hotbar_1e/CURRENT | 2 +- packs/macros_hotbar_1e/LOG | 6 +- packs/macros_hotbar_1e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 156 -> 156 bytes .../{000076.log => 000086.log} | 0 packs/macros_triggered_0e/CURRENT | 2 +- packs/macros_triggered_0e/LOG | 6 +- packs/macros_triggered_0e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 157 -> 157 bytes .../{000078.log => 000088.log} | 0 packs/macros_triggered_1e/CURRENT | 2 +- packs/macros_triggered_1e/LOG | 6 +- packs/macros_triggered_1e/LOG.old | 10 +- .../{MANIFEST-000077 => MANIFEST-000087} | Bin 158 -> 158 bytes .../rolltables_0e/{000076.log => 000086.log} | 0 packs/rolltables_0e/CURRENT | 2 +- packs/rolltables_0e/LOG | 6 +- packs/rolltables_0e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 208 -> 208 bytes .../rolltables_1e/{000076.log => 000086.log} | 0 packs/rolltables_1e/CURRENT | 2 +- packs/rolltables_1e/LOG | 6 +- packs/rolltables_1e/LOG.old | 10 +- .../{MANIFEST-000075 => MANIFEST-000085} | Bin 208 -> 208 bytes templates/chat/rollCheck.html | 7 + 49 files changed, 258 insertions(+), 128 deletions(-) rename packs/conditions_0e/{000076.log => 000086.log} (100%) rename packs/conditions_0e/{MANIFEST-000075 => MANIFEST-000085} (83%) rename packs/conditions_1e/{000076.log => 000086.log} (100%) rename packs/conditions_1e/{MANIFEST-000075 => MANIFEST-000085} (83%) rename packs/items_maintenance_1e/{000076.log => 000086.log} (100%) rename packs/items_maintenance_1e/{MANIFEST-000075 => MANIFEST-000085} (83%) rename packs/macros_hotbar_0e/{000076.log => 000086.log} (100%) rename packs/macros_hotbar_0e/{MANIFEST-000075 => MANIFEST-000085} (65%) rename packs/macros_hotbar_1e/{000076.log => 000086.log} (100%) rename packs/macros_hotbar_1e/{MANIFEST-000075 => MANIFEST-000085} (82%) rename packs/macros_triggered_0e/{000076.log => 000086.log} (100%) rename packs/macros_triggered_0e/{MANIFEST-000075 => MANIFEST-000085} (81%) rename packs/macros_triggered_1e/{000078.log => 000088.log} (100%) rename packs/macros_triggered_1e/{MANIFEST-000077 => MANIFEST-000087} (81%) rename packs/rolltables_0e/{000076.log => 000086.log} (100%) rename packs/rolltables_0e/{MANIFEST-000075 => MANIFEST-000085} (92%) rename packs/rolltables_1e/{000076.log => 000086.log} (100%) rename packs/rolltables_1e/{MANIFEST-000075 => MANIFEST-000085} (92%) diff --git a/css/mosh.css b/css/mosh.css index 1e994bf..9954e56 100644 --- a/css/mosh.css +++ b/css/mosh.css @@ -2338,6 +2338,26 @@ p { box-shadow: none !important; } +/* Skill picker scroll list — thin scrollbar, no overflow on the dialog */ +.macro-popup-dialog .sla-skill-scroll-list { + scrollbar-width: thin; + scrollbar-color: #aaa #e6e6e6; +} +.macro-popup-dialog .sla-skill-scroll-list::-webkit-scrollbar { + width: 6px; +} +.macro-popup-dialog .sla-skill-scroll-list::-webkit-scrollbar-track { + background: #e6e6e6; + border-radius: 3px; +} +.macro-popup-dialog .sla-skill-scroll-list::-webkit-scrollbar-thumb { + background: #aaa; + border-radius: 3px; +} +.macro-popup-dialog .sla-skill-scroll-list::-webkit-scrollbar-thumb:hover { + background: #888; +} + .mosh .sla-panel { margin-bottom: 14px; padding: 12px; diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 2dfbc42..1f9eba5 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -826,7 +826,7 @@ export class MothershipActorSheet extends foundry.appv1.sheets.ActorSheet { var item; item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - this.actor.rollCheck(null, null, null, item.name, item.system.bonus, null); + this.actor.rollCheck(null, null, null, item.name, item.system.bonus, null, null, { promptModifier: true }); }); html.find('.sla-ebb-skill-roll').click(ev => { @@ -858,7 +858,7 @@ export class MothershipActorSheet extends foundry.appv1.sheets.ActorSheet { //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); var item; item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - this.actor.rollWeaponAttack(item); + this.actor.rollWeaponAttack(item, { promptModifier: true }); }); // Rollable Damage diff --git a/module/actor/actor.js b/module/actor/actor.js index 7a63d3d..29f82a2 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -4,6 +4,21 @@ import { SLADrugSystem } from "../sla-drug-system.js"; import { SLA_SPECIES_BALANCE_VERSION, getSlaSpeciesStatAdjustments } from "../sla-species-balance.js"; import { buildSlaTraumaResponseText } from "../sla-trauma.js"; +// Global event delegation to handle interactive range slider value updates +// in a way that is fully compatible with Foundry VTT's HTML sanitization. +if (typeof document !== "undefined") { + document.addEventListener("input", (event) => { + const target = event.target; + if (target && target.tagName === "INPUT" && target.name === "rollModifier") { + const value = Number(target.value) || 0; + const label = target.closest(".resource")?.querySelector(".slider-value"); + if (label) { + label.innerText = (value >= 0 ? "+" : "") + value; + } + } + }); +} + const SLA_AMMO_TYPES = { STD: { label: "Standard", multiplier: 1, damageBonus: "", woundEffect: "", summary: "Standard ammunition." }, AP: { label: "AP", multiplier: 2, damageBonus: "-1", woundEffect: "Gunshot [-]", summary: "Armour-piercing ammunition. Treat target armour as halved and reduce damage by 1." }, @@ -1770,11 +1785,21 @@ export class MothershipActor extends Actor { //wrap skill list in a scrollable container so long lists don't push buttons off-screen const scrollableSkillList = `
${skillList}
`; //create final dialog data + const showModifier = !foundry.utils.hasProperty(context.attackContext ?? {}, "rollModifier"); + const modifierHtml = showModifier ? ` +
+ + +
+ ` : ""; const dialogData = { window: {title: dlgTitle}, classes: ["macro-popup-dialog"], position: {width: 600}, - content: skillHeader + scrollableSkillList + buttonDesc, + content: skillHeader + scrollableSkillList + modifierHtml + buttonDesc, buttons: [] }; //add adv/normal/dis buttons if we need a rollString @@ -1788,8 +1813,9 @@ export class MothershipActor extends Actor { rollString = `1d100 [+]`; skill = button.form.querySelector("input[name='skill']:checked")?.getAttribute("id"); skillValue = button.form.querySelector("input[name='skill']:checked")?.getAttribute("value"); - resolve([rollString, skill, skillValue]); - slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}`); + const rollModifier = showModifier ? (Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0) : (Number(context.attackContext?.rollModifier ?? 0) || 0); + resolve([rollString, skill, skillValue, rollModifier]); + slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}, modifier:${rollModifier}`); }, icon: `fas fa-angle-double-up` }, @@ -1800,8 +1826,9 @@ export class MothershipActor extends Actor { rollString = `1d100`; skill = button.form.querySelector("input[name='skill']:checked")?.getAttribute("id"); skillValue = button.form.querySelector("input[name='skill']:checked")?.getAttribute("value"); - resolve([rollString, skill, skillValue]); - slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}`); + const rollModifier = showModifier ? (Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0) : (Number(context.attackContext?.rollModifier ?? 0) || 0); + resolve([rollString, skill, skillValue, rollModifier]); + slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}, modifier:${rollModifier}`); }, icon: `fas fa-minus` }, @@ -1812,8 +1839,9 @@ export class MothershipActor extends Actor { rollString = `1d100 [-]`; skill = button.form.querySelector("input[name='skill']:checked")?.getAttribute("id"); skillValue = button.form.querySelector("input[name='skill']:checked")?.getAttribute("value"); - resolve([rollString, skill, skillValue]); - slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}`); + const rollModifier = showModifier ? (Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0) : (Number(context.attackContext?.rollModifier ?? 0) || 0); + resolve([rollString, skill, skillValue, rollModifier]); + slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}, modifier:${rollModifier}`); }, icon: `fas fa-angle-double-down` } @@ -1827,8 +1855,9 @@ export class MothershipActor extends Actor { callback: (event, button, dialog) => { skill = button.form.querySelector("input[name='skill']:checked")?.getAttribute("id"); skillValue = button.form.querySelector("input[name='skill']:checked")?.getAttribute("value"); - resolve([rollString, skill, skillValue]); - slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}`); + const rollModifier = showModifier ? (Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0) : (Number(context.attackContext?.rollModifier ?? 0) || 0); + resolve([rollString, skill, skillValue, rollModifier]); + slaDebug(`User left the chooseSkill dialog with: rollString:${rollString}, skill:${skill}, skillValue:${skillValue}, modifier:${rollModifier}`); }, icon: `fas fa-chevron-circle-right` } @@ -1849,19 +1878,29 @@ export class MothershipActor extends Actor { let dieAdv = die + ` [+]`; let dieDis = die + ` [-]`; //create final dialog data + const modifierHtml = ` +
+ + +
+ `; const dialogData = { window: {title: dlgTitle}, classes: ["macro-popup-dialog"], position: {width: 600}, - content: `
` + game.i18n.localize("Mosh.SelectYourRollType") + `:
`, + content: `
` + game.i18n.localize("Mosh.SelectYourRollType") + `:
` + modifierHtml + `
`, buttons: [ { label: game.i18n.localize("Mosh.Advantage"), action: `action_advantage`, callback: (event, button, dialog) => { rollString = dieAdv; - resolve([rollString]); - slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}`); + const rollModifier = Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0; + resolve([rollString, rollModifier]); + slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}, modifier:${rollModifier}`); }, icon: `fas fa-angle-double-up` }, @@ -1870,8 +1909,9 @@ export class MothershipActor extends Actor { action: `action_normal`, callback: (event, button, dialog) => { rollString = die; - resolve([rollString]); - slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}`); + const rollModifier = Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0; + resolve([rollString, rollModifier]); + slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}, modifier:${rollModifier}`); }, icon: `fas fa-minus` }, @@ -1880,8 +1920,9 @@ export class MothershipActor extends Actor { action: `action_disadvantage`, callback: (event, button, dialog) => { rollString = dieDis; - resolve([rollString]); - slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}`); + const rollModifier = Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0; + resolve([rollString, rollModifier]); + slaDebug(`User left the chooseAdvantage dialog with: rollString:${rollString}, modifier:${rollModifier}`); }, icon: `fas fa-angle-double-down` } @@ -2474,6 +2515,9 @@ export class MothershipActor extends Actor { rollString = chosenSkills[0]; skill = chosenSkills[1]; skillValue = chosenSkills[2]; + if (chosenSkills[3] !== undefined) { + attackContext.rollModifier = chosenSkills[3]; + } } //if rollString is STILL blank, redirect player to choose the roll if (!rollString) { @@ -2481,6 +2525,9 @@ export class MothershipActor extends Actor { let chosenRollType = await this.chooseAdvantage(this.system.stats[attribute].rollLabel, '1d100'); //set variables rollString = chosenRollType[0]; + if (chosenRollType[1] !== undefined) { + attackContext.rollModifier = chosenRollType[1]; + } } //if this is a weapon roll if (weapon) { @@ -2635,6 +2682,18 @@ export class MothershipActor extends Actor { } else { rollTarget = rollTargetOverride; } + const modifier = Number(attackContext?.rollModifier ?? 0) || 0; + if (modifier) { + rollTarget += modifier; + if (effectiveRollBreakdown) { + effectiveRollBreakdown.parts.push({ + label: "Roll Modifier", + value: modifier + }); + effectiveRollBreakdown.total += modifier; + effectiveRollBreakdown.formulaText += ` ${modifier >= 0 ? "+" : ""}${modifier}`; + } + } rollTarget = this.clampSlaRollTarget(rollTarget, rollString); if (effectiveRollBreakdown && (String(rollString ?? "").includes("1d100"))) { effectiveRollBreakdown = { @@ -4005,10 +4064,58 @@ export class MothershipActor extends Actor { return { total, parts }; } - async chooseWeaponAttackOptions(weapon) { + async promptRollModifier(title = "Roll Modifier") { + return new Promise((resolve) => { + const dialogData = { + window: { title }, + content: ` +
+
+ + +
+ -30 + -20 + -10 + 0 + +10 + +20 + +30 +
+
+
+ `, + buttons: [ + { + label: "Roll", + action: "roll", + icon: "fas fa-dice-d20", + callback: (_event, button) => { + const modifier = Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0; + resolve(modifier); + } + }, + { + label: "Cancel", + action: "cancel", + icon: "fas fa-times", + callback: () => resolve(null) + } + ], + close: () => resolve(null) + }; + new foundry.applications.api.DialogV2(dialogData).render({ force: true }); + }); + } + + async chooseWeaponAttackOptions(weapon, attackContext = {}) { const fireModes = this.getWeaponFireModes(weapon); const activeFireMode = this.getActiveWeaponFireMode(weapon); const ammoChoices = this.getWeaponAmmoChoices(weapon); + const showModifier = Boolean(attackContext?.promptModifier); return new Promise((resolve) => { const fireOptions = fireModes.map((mode) => ` @@ -4018,20 +4125,40 @@ export class MothershipActor extends Actor { `).join(""); + const modifierHtml = showModifier ? ` +
+ + +
+ -30 + -20 + -10 + 0 + +10 + +20 + +30 +
+
+ ` : ""; + const dialogData = { window: { title: `${weapon.name} Attack Setup` }, content: ` -
+
- - + +
- - + +
+ ${modifierHtml}
`, buttons: [ @@ -4043,10 +4170,12 @@ export class MothershipActor extends Actor { const fireLabel = button.form.querySelector("select[name='fireMode']")?.value ?? activeFireMode.label; const fireMode = fireModes.find((mode) => mode.label === fireLabel) ?? activeFireMode; const ammoTag = button.form.querySelector("select[name='ammoTag']")?.value ?? ammoChoices[0]?.tag ?? "STD"; + const rollModifier = showModifier ? (Number(button.form.querySelector("input[name='rollModifier']")?.value ?? 0) || 0) : 0; resolve({ fireMode: fireMode.label, shotsPerFire: fireMode.shots, - ammoTag + ammoTag, + rollModifier }); } }, @@ -4063,10 +4192,20 @@ export class MothershipActor extends Actor { }); } - async rollWeaponAttack(weapon) { - const attackContext = weapon?.system?.useAmmo ? await this.chooseWeaponAttackOptions(weapon) : {}; - if (weapon?.system?.useAmmo && !attackContext) return; - return this.rollCheck(null, 'low', 'combat', null, null, weapon, null, attackContext ?? {}); + async rollWeaponAttack(weapon, attackContext = {}) { + let context = { ...attackContext }; + if (weapon?.system?.useAmmo) { + const ammoContext = await this.chooseWeaponAttackOptions(weapon, context); + if (!ammoContext) return null; + context = { ...context, ...ammoContext }; + } else { + if (context.promptModifier) { + const rollMod = await this.promptRollModifier(`${weapon.name} Attack Roll`); + if (rollMod === null) return null; + context.rollModifier = rollMod; + } + } + return this.rollCheck(null, 'low', 'combat', null, null, weapon, null, context); } async cycleWeaponFireMode(itemId, direction = 1) { diff --git a/packs/conditions_0e/000076.log b/packs/conditions_0e/000086.log similarity index 100% rename from packs/conditions_0e/000076.log rename to packs/conditions_0e/000086.log diff --git a/packs/conditions_0e/CURRENT b/packs/conditions_0e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/conditions_0e/CURRENT +++ b/packs/conditions_0e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/conditions_0e/LOG b/packs/conditions_0e/LOG index 261434a..0a7bd48 100644 --- a/packs/conditions_0e/LOG +++ b/packs/conditions_0e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.701190 170dcb000 Recovering log #73 -2026/04/14-21:44:03.701635 170dcb000 Delete type=3 #71 -2026/04/14-21:44:03.701777 170dcb000 Delete type=0 #73 +2026/05/19-23:19:40.611150 173b87000 Recovering log #84 +2026/05/19-23:19:40.611608 173b87000 Delete type=3 #83 +2026/05/19-23:19:40.611656 173b87000 Delete type=0 #84 diff --git a/packs/conditions_0e/LOG.old b/packs/conditions_0e/LOG.old index 146d54c..ac7f163 100644 --- a/packs/conditions_0e/LOG.old +++ b/packs/conditions_0e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.528096 1725ef000 Recovering log #70 -2026/04/14-14:29:42.528525 1725ef000 Delete type=0 #70 -2026/04/14-14:29:42.528564 1725ef000 Delete type=3 #69 -2026/04/14-21:41:04.230515 172707000 Level-0 table #74: started -2026/04/14-21:41:04.230654 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.230837 172707000 Delete type=0 #72 -2026/04/14-21:41:04.231926 172707000 Manual compaction at level-0 from '!items!1r6ruvSdxn2bHHIk' @ 72057594037927935 : 1 .. '!items!zbKI2RCl5h3vowoy' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.606022 16eb7b000 Recovering log #82 +2026/04/16-22:16:27.612707 16eb7b000 Delete type=3 #81 +2026/04/16-22:16:27.612921 16eb7b000 Delete type=0 #82 diff --git a/packs/conditions_0e/MANIFEST-000075 b/packs/conditions_0e/MANIFEST-000085 similarity index 83% rename from packs/conditions_0e/MANIFEST-000075 rename to packs/conditions_0e/MANIFEST-000085 index ebc3835cbd2f8a105f35f9b23ee5d50a6a713ac4..07879e1a9fe94787ef00f6eae19597dcf7d8a236 100644 GIT binary patch delta 22 dcmbQqIFoTg7r)H573mxdj7(vi49wvy9so+{1y29~ delta 22 dcmbQqIFoTg7k|m>cYiq;7@2%H8JK-pJOEj!24nyL diff --git a/packs/conditions_1e/000076.log b/packs/conditions_1e/000086.log similarity index 100% rename from packs/conditions_1e/000076.log rename to packs/conditions_1e/000086.log diff --git a/packs/conditions_1e/CURRENT b/packs/conditions_1e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/conditions_1e/CURRENT +++ b/packs/conditions_1e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/conditions_1e/LOG b/packs/conditions_1e/LOG index d380f18..305f2ea 100644 --- a/packs/conditions_1e/LOG +++ b/packs/conditions_1e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.703209 171de3000 Recovering log #73 -2026/04/14-21:44:03.703506 171de3000 Delete type=3 #71 -2026/04/14-21:44:03.703538 171de3000 Delete type=0 #73 +2026/05/19-23:19:40.613309 172363000 Recovering log #84 +2026/05/19-23:19:40.613576 172363000 Delete type=3 #83 +2026/05/19-23:19:40.613610 172363000 Delete type=0 #84 diff --git a/packs/conditions_1e/LOG.old b/packs/conditions_1e/LOG.old index 0736811..765fc01 100644 --- a/packs/conditions_1e/LOG.old +++ b/packs/conditions_1e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.530946 171de3000 Recovering log #70 -2026/04/14-14:29:42.531303 171de3000 Delete type=0 #70 -2026/04/14-14:29:42.531327 171de3000 Delete type=3 #69 -2026/04/14-21:41:04.231427 172707000 Level-0 table #74: started -2026/04/14-21:41:04.231573 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.231822 172707000 Delete type=0 #72 -2026/04/14-21:41:04.231960 172707000 Manual compaction at level-0 from '!items!0ZAwhewvLBwX3opf' @ 72057594037927935 : 1 .. '!items!z0avrplKe6M0RcXk' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.615553 16f387000 Recovering log #82 +2026/04/16-22:16:27.616188 16f387000 Delete type=3 #81 +2026/04/16-22:16:27.616243 16f387000 Delete type=0 #82 diff --git a/packs/conditions_1e/MANIFEST-000075 b/packs/conditions_1e/MANIFEST-000085 similarity index 83% rename from packs/conditions_1e/MANIFEST-000075 rename to packs/conditions_1e/MANIFEST-000085 index 15c94ee812827958555a9a0333698e8e2e8a3f71..ce460f7ee1bd159613cee04858f188c9f3ea2b5f 100644 GIT binary patch delta 22 ecmbQqIFoTg7ypFcyI*oJFfxU4GBAg;qyPY1r3SeG delta 22 dcmbQqIFoTg7rzDDuWAkkMkXIl24-KD6aYuQ1t|ak diff --git a/packs/items_maintenance_1e/000076.log b/packs/items_maintenance_1e/000086.log similarity index 100% rename from packs/items_maintenance_1e/000076.log rename to packs/items_maintenance_1e/000086.log diff --git a/packs/items_maintenance_1e/CURRENT b/packs/items_maintenance_1e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/items_maintenance_1e/CURRENT +++ b/packs/items_maintenance_1e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/items_maintenance_1e/LOG b/packs/items_maintenance_1e/LOG index a3567c1..0156c1d 100644 --- a/packs/items_maintenance_1e/LOG +++ b/packs/items_maintenance_1e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.705381 1725ef000 Recovering log #73 -2026/04/14-21:44:03.705808 1725ef000 Delete type=3 #71 -2026/04/14-21:44:03.705977 1725ef000 Delete type=0 #73 +2026/05/19-23:19:40.614698 172b6f000 Recovering log #84 +2026/05/19-23:19:40.614916 172b6f000 Delete type=3 #83 +2026/05/19-23:19:40.614942 172b6f000 Delete type=0 #84 diff --git a/packs/items_maintenance_1e/LOG.old b/packs/items_maintenance_1e/LOG.old index fa6dc6a..b2b7e8a 100644 --- a/packs/items_maintenance_1e/LOG.old +++ b/packs/items_maintenance_1e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.533049 170dcb000 Recovering log #70 -2026/04/14-14:29:42.533339 170dcb000 Delete type=0 #70 -2026/04/14-14:29:42.533362 170dcb000 Delete type=3 #69 -2026/04/14-21:41:04.229609 172707000 Level-0 table #74: started -2026/04/14-21:41:04.229909 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.230444 172707000 Delete type=0 #72 -2026/04/14-21:41:04.231906 172707000 Manual compaction at level-0 from '!items!1HNvL7XEUcMQbLps' @ 72057594037927935 : 1 .. '!items!zRzb3Laiuw4ac6p0' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.618035 16fb93000 Recovering log #82 +2026/04/16-22:16:27.618455 16fb93000 Delete type=3 #81 +2026/04/16-22:16:27.618488 16fb93000 Delete type=0 #82 diff --git a/packs/items_maintenance_1e/MANIFEST-000075 b/packs/items_maintenance_1e/MANIFEST-000085 similarity index 83% rename from packs/items_maintenance_1e/MANIFEST-000075 rename to packs/items_maintenance_1e/MANIFEST-000085 index d7b78bb6c7146669167c87af0a4e0df989e69c23..e39162b8d345d167d047fe9ad2f7132715ecd022 100644 GIT binary patch delta 23 ecmbQmIE!&Ymw=qj)m5Afj7(vi49wvyCl~=xSOv@g delta 23 ecmbQmIE!&Ymq67Lt>v5yj7&b949vbPCl~=zHwDfB diff --git a/packs/macros_hotbar_0e/000076.log b/packs/macros_hotbar_0e/000086.log similarity index 100% rename from packs/macros_hotbar_0e/000076.log rename to packs/macros_hotbar_0e/000086.log diff --git a/packs/macros_hotbar_0e/CURRENT b/packs/macros_hotbar_0e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/macros_hotbar_0e/CURRENT +++ b/packs/macros_hotbar_0e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/macros_hotbar_0e/LOG b/packs/macros_hotbar_0e/LOG index 46d709f..478bd3b 100644 --- a/packs/macros_hotbar_0e/LOG +++ b/packs/macros_hotbar_0e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.707592 170dcb000 Recovering log #73 -2026/04/14-21:44:03.708035 170dcb000 Delete type=3 #71 -2026/04/14-21:44:03.708118 170dcb000 Delete type=0 #73 +2026/05/19-23:19:40.615928 17337b000 Recovering log #84 +2026/05/19-23:19:40.616184 17337b000 Delete type=3 #83 +2026/05/19-23:19:40.616214 17337b000 Delete type=0 #84 diff --git a/packs/macros_hotbar_0e/LOG.old b/packs/macros_hotbar_0e/LOG.old index 4f05c38..1ac9b00 100644 --- a/packs/macros_hotbar_0e/LOG.old +++ b/packs/macros_hotbar_0e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.534696 1725ef000 Recovering log #70 -2026/04/14-14:29:42.534932 1725ef000 Delete type=0 #70 -2026/04/14-14:29:42.534950 1725ef000 Delete type=3 #69 -2026/04/14-21:41:04.230890 172707000 Level-0 table #74: started -2026/04/14-21:41:04.231026 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.231365 172707000 Delete type=0 #72 -2026/04/14-21:41:04.231944 172707000 Manual compaction at level-0 from '!macros!2xRvRAixuocjCm40' @ 72057594037927935 : 1 .. '!macros!ilBclUmPwcd7aNQK' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.619986 16e36f000 Recovering log #82 +2026/04/16-22:16:27.620339 16e36f000 Delete type=3 #81 +2026/04/16-22:16:27.620370 16e36f000 Delete type=0 #82 diff --git a/packs/macros_hotbar_0e/MANIFEST-000075 b/packs/macros_hotbar_0e/MANIFEST-000085 similarity index 65% rename from packs/macros_hotbar_0e/MANIFEST-000075 rename to packs/macros_hotbar_0e/MANIFEST-000085 index 2442f2f3b29c8f2143df86d42685292df4daf55b..ddee787b5cfaba7f52dacfbbbc439c36ea62c42d 100644 GIT binary patch delta 22 dcmbQkIEQgUFaP3|WrsN!7@5L28JNRagaA}r1;zjX delta 22 dcmbQkIEQgUFaPWL4v8ELj7&b949vbPLI6-s1y}$8 diff --git a/packs/macros_hotbar_1e/000076.log b/packs/macros_hotbar_1e/000086.log similarity index 100% rename from packs/macros_hotbar_1e/000076.log rename to packs/macros_hotbar_1e/000086.log diff --git a/packs/macros_hotbar_1e/CURRENT b/packs/macros_hotbar_1e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/macros_hotbar_1e/CURRENT +++ b/packs/macros_hotbar_1e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/macros_hotbar_1e/LOG b/packs/macros_hotbar_1e/LOG index 74aa1c1..fa26daa 100644 --- a/packs/macros_hotbar_1e/LOG +++ b/packs/macros_hotbar_1e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.709360 171de3000 Recovering log #73 -2026/04/14-21:44:03.709675 171de3000 Delete type=3 #71 -2026/04/14-21:44:03.709706 171de3000 Delete type=0 #73 +2026/05/19-23:19:40.617145 17337b000 Recovering log #84 +2026/05/19-23:19:40.617442 17337b000 Delete type=3 #83 +2026/05/19-23:19:40.617486 17337b000 Delete type=0 #84 diff --git a/packs/macros_hotbar_1e/LOG.old b/packs/macros_hotbar_1e/LOG.old index dbbf01f..fd20169 100644 --- a/packs/macros_hotbar_1e/LOG.old +++ b/packs/macros_hotbar_1e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.536078 171de3000 Recovering log #70 -2026/04/14-14:29:42.536336 171de3000 Delete type=0 #70 -2026/04/14-14:29:42.536359 171de3000 Delete type=3 #69 -2026/04/14-21:41:04.232630 172707000 Level-0 table #74: started -2026/04/14-21:41:04.232740 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.232976 172707000 Delete type=0 #72 -2026/04/14-21:41:04.234457 172707000 Manual compaction at level-0 from '!macros!2u4a5gEogtLd3XQz' @ 72057594037927935 : 1 .. '!macros!trU0DtBJvJCPddsQ' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.621457 16e36f000 Recovering log #82 +2026/04/16-22:16:27.621716 16e36f000 Delete type=3 #81 +2026/04/16-22:16:27.621743 16e36f000 Delete type=0 #82 diff --git a/packs/macros_hotbar_1e/MANIFEST-000075 b/packs/macros_hotbar_1e/MANIFEST-000085 similarity index 82% rename from packs/macros_hotbar_1e/MANIFEST-000075 rename to packs/macros_hotbar_1e/MANIFEST-000085 index 7c81c4e07569ca1e4419df93a2f67dff43013ced..371f217cf486aa680ae8a43501ab2cff67ca2218 100644 GIT binary patch delta 22 dcmbQkIEQgUFaI?e|BW0Bj7(vi49wvyVgO9k1vdZy delta 22 dcmbQkIEQgUFaJLkR$~qZMkXIl24-ItF#tu51d9Lw diff --git a/packs/macros_triggered_0e/000076.log b/packs/macros_triggered_0e/000086.log similarity index 100% rename from packs/macros_triggered_0e/000076.log rename to packs/macros_triggered_0e/000086.log diff --git a/packs/macros_triggered_0e/CURRENT b/packs/macros_triggered_0e/CURRENT index d2ea14c..814a4b7 100644 --- a/packs/macros_triggered_0e/CURRENT +++ b/packs/macros_triggered_0e/CURRENT @@ -1 +1 @@ -MANIFEST-000075 +MANIFEST-000085 diff --git a/packs/macros_triggered_0e/LOG b/packs/macros_triggered_0e/LOG index 3181b3a..075df79 100644 --- a/packs/macros_triggered_0e/LOG +++ b/packs/macros_triggered_0e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.710794 170dcb000 Recovering log #73 -2026/04/14-21:44:03.711256 170dcb000 Delete type=3 #71 -2026/04/14-21:44:03.711288 170dcb000 Delete type=0 #73 +2026/05/19-23:19:40.618390 17337b000 Recovering log #84 +2026/05/19-23:19:40.618663 17337b000 Delete type=3 #83 +2026/05/19-23:19:40.618694 17337b000 Delete type=0 #84 diff --git a/packs/macros_triggered_0e/LOG.old b/packs/macros_triggered_0e/LOG.old index 3f0fa6d..9990834 100644 --- a/packs/macros_triggered_0e/LOG.old +++ b/packs/macros_triggered_0e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.537344 1715d7000 Recovering log #70 -2026/04/14-14:29:42.537597 1715d7000 Delete type=0 #70 -2026/04/14-14:29:42.537618 1715d7000 Delete type=3 #69 -2026/04/14-21:41:04.232083 172707000 Level-0 table #74: started -2026/04/14-21:41:04.232272 172707000 Level-0 table #74: 0 bytes OK -2026/04/14-21:41:04.232554 172707000 Delete type=0 #72 -2026/04/14-21:41:04.234426 172707000 Manual compaction at level-0 from '!macros!0Yw4QWSAeOuUzRqB' @ 72057594037927935 : 1 .. '!macros!z5V92LyXHjfMxnRQ' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.622897 16e36f000 Recovering log #82 +2026/04/16-22:16:27.623174 16e36f000 Delete type=3 #81 +2026/04/16-22:16:27.623240 16e36f000 Delete type=0 #82 diff --git a/packs/macros_triggered_0e/MANIFEST-000075 b/packs/macros_triggered_0e/MANIFEST-000085 similarity index 81% rename from packs/macros_triggered_0e/MANIFEST-000075 rename to packs/macros_triggered_0e/MANIFEST-000085 index 56505f526debedd971367242779d729cce76dc8e..9ed0e35ed34b010f091f816bcbb6715d6309c695 100644 GIT binary patch delta 23 ecmbQsIG1rkuRypDOEM<|BU2bB19LdbE=B-GZ3OrL delta 23 ecmbQsIG1rkuRw9h_dHGpMkXIl24-KDU5o%%<_0DJ diff --git a/packs/macros_triggered_1e/000078.log b/packs/macros_triggered_1e/000088.log similarity index 100% rename from packs/macros_triggered_1e/000078.log rename to packs/macros_triggered_1e/000088.log diff --git a/packs/macros_triggered_1e/CURRENT b/packs/macros_triggered_1e/CURRENT index c7a124b..d05b681 100644 --- a/packs/macros_triggered_1e/CURRENT +++ b/packs/macros_triggered_1e/CURRENT @@ -1 +1 @@ -MANIFEST-000077 +MANIFEST-000087 diff --git a/packs/macros_triggered_1e/LOG b/packs/macros_triggered_1e/LOG index 1bf42e2..adcedec 100644 --- a/packs/macros_triggered_1e/LOG +++ b/packs/macros_triggered_1e/LOG @@ -1,3 +1,3 @@ -2026/04/14-21:44:03.713901 1725ef000 Recovering log #75 -2026/04/14-21:44:03.714351 1725ef000 Delete type=0 #75 -2026/04/14-21:44:03.714384 1725ef000 Delete type=3 #73 +2026/05/19-23:19:40.619688 17337b000 Recovering log #86 +2026/05/19-23:19:40.620003 17337b000 Delete type=3 #85 +2026/05/19-23:19:40.620026 17337b000 Delete type=0 #86 diff --git a/packs/macros_triggered_1e/LOG.old b/packs/macros_triggered_1e/LOG.old index a57ff02..bb17d8a 100644 --- a/packs/macros_triggered_1e/LOG.old +++ b/packs/macros_triggered_1e/LOG.old @@ -1,7 +1,3 @@ -2026/04/14-14:29:42.538470 1725ef000 Recovering log #72 -2026/04/14-14:29:42.538719 1725ef000 Delete type=3 #71 -2026/04/14-14:29:42.538747 1725ef000 Delete type=0 #72 -2026/04/14-21:41:04.233774 172707000 Level-0 table #76: started -2026/04/14-21:41:04.233930 172707000 Level-0 table #76: 0 bytes OK -2026/04/14-21:41:04.234304 172707000 Delete type=0 #74 -2026/04/14-21:41:04.234513 172707000 Manual compaction at level-0 from '!macros!06NSvDYTtmkeUtLq' @ 72057594037927935 : 1 .. '!macros!zLRsweb35Lw0NMev' @ 0 : 0; will stop at (end) +2026/04/16-22:16:27.624570 16e36f000 Recovering log #84 +2026/04/16-22:16:27.625146 16e36f000 Delete type=3 #83 +2026/04/16-22:16:27.625212 16e36f000 Delete type=0 #84 diff --git a/packs/macros_triggered_1e/MANIFEST-000077 b/packs/macros_triggered_1e/MANIFEST-000087 similarity index 81% rename from packs/macros_triggered_1e/MANIFEST-000077 rename to packs/macros_triggered_1e/MANIFEST-000087 index a3f62cc0e42b6ac259b4a6c14009a68d14199623..951f8860249d097f220387fb486c1ba145835089 100644 GIT binary patch delta 23 ecmbQoIFE5cpTKp#?){t$j7$-n49t-%>zDvn7zP;t delta 23 ecmbQoIFE5cpFk0lbu=dfBac!6=k0f9aL7xQs4FfxU4GBAg;TwnwMXdwp) delta 23 fcmcb>c!6=k0f8IO!kIZ47@2%H8JK-pE-(TBV>c!6=k0fCAcpZz!)7@5L28JNRawy^*JWk&|r delta 23 ecmcb>c!6=k0Rb5U4rfjVMkXIl24-KDZ7cvwjs*z- diff --git a/templates/chat/rollCheck.html b/templates/chat/rollCheck.html index 41f396d..00b9819 100644 --- a/templates/chat/rollCheck.html +++ b/templates/chat/rollCheck.html @@ -70,6 +70,13 @@ {{/if}} {{/if}} + {{#unless isSlaEbbSkill}} + {{#if rollBreakdown}} + + {{/if}} + {{/unless}} {{/if}} {{#if (compare 'str' specialRoll '===' 'damage')}}