diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css
index 112dbb6..58e2437 100644
--- a/css/fvtt-lethal-fantasy.css
+++ b/css/fvtt-lethal-fantasy.css
@@ -1951,6 +1951,18 @@ i.lethalfantasy {
.lethalfantasy-roll-dialog fieldset {
padding: 4px;
}
+.lethalfantasy-roll-dialog .goto-token-button {
+ justify-content: center;
+ align-items: center;
+ align-content: center;
+ margin-left: 0.5rem;
+ max-width: 8rem;
+ background-color: var(--color-dark-6);
+ color: var(--color-dark-2);
+ border: none;
+ border-radius: 4px;
+ padding: 0.5rem;
+}
.lethalfantasy-range-defense-dialog {
width: 18rem;
}
diff --git a/lang/en.json b/lang/en.json
index 9b43889..29dbd7f 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -281,6 +281,7 @@
}
},
"Label": {
+ "gotoToken": "Go to token",
"combatAction": "Combat action",
"currentAction": "Current ongoing action",
"selectAction": "Select an action",
diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs
index 9cb4066..7c674d3 100644
--- a/module/documents/roll.mjs
+++ b/module/documents/roll.mjs
@@ -223,7 +223,7 @@ export default class LethalFantasyRoll extends Roll {
options.rollTarget.charModifier = options.rollTarget.actorModifiers.intSpellModifier
hasStaticModifier = options.rollType === "spell-power"
//hasModifier = options.rollType !== "spell-attack"
- if ( hasStaticModifier ) {
+ if (hasStaticModifier) {
options.rollTarget.staticModifier = options.rollTarget.actorLevel
} else {
options.rollTarget.staticModifier = 0
@@ -240,7 +240,7 @@ export default class LethalFantasyRoll extends Roll {
options.rollTarget.charModifier = options.rollTarget.actorModifiers.chaMiracleModifier
hasStaticModifier = options.rollType === "miracle-power"
//hasModifier = options.rollType !== "miracle-attack"
- if ( hasStaticModifier ) {
+ if (hasStaticModifier) {
options.rollTarget.staticModifier = options.rollTarget.actorLevel
} else {
options.rollTarget.staticModifier = 0
@@ -331,16 +331,19 @@ export default class LethalFantasyRoll extends Roll {
}
const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-dialog.hbs", dialogContext)
- const title = LethalFantasyRoll.createTitle(options.rollType, options.rollTarget)
+ let position = game.user.getFlag(SYSTEM.id, "roll-dialog-pos") || { top: -1, left: -1 }
const label = game.i18n.localize("LETHALFANTASY.Roll.roll")
const rollContext = await foundry.applications.api.DialogV2.wait({
- window: { title: title },
+ window: { title: "Roll dialog" },
classes: ["lethalfantasy"],
content,
+ position,
buttons: [
{
label: label,
callback: (event, button, dialog) => {
+ let position = $(dialog).position()
+ game.user.setFlag(SYSTEM.id, "roll-dialog-pos", foundry.utils.duplicate(position))
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
return obj
@@ -352,6 +355,15 @@ export default class LethalFantasyRoll extends Roll {
actions: {
"selectGranted": (event, button, dialog) => {
hasGrantedDice = true
+ },
+ "gotoToken" : (event, button, dialog) => {
+ let tokenId = $(button).data("tokenId")
+ let token = canvas.tokens?.get(tokenId)
+ if (token) {
+ canvas.animatePan({ x: token.x, y: token.y, duration: 200 })
+ canvas.tokens.releaseAll();
+ token.control({ releaseOthers: true });
+ }
}
},
rejectClose: false // Click on Close button will not launch an error
@@ -630,6 +642,8 @@ export default class LethalFantasyRoll extends Roll {
}
let currentAction = combatant.getFlag(SYSTEM.id, "currentAction")
+ let position = game.user.getFlag(SYSTEM.id, "combat-action-dialog-pos") || { top: -1, left: -1 }
+
let dialogContext = {
progressionDiceId: "",
fieldRollMode,
@@ -647,24 +661,34 @@ export default class LethalFantasyRoll extends Roll {
action: "roll",
label: "Roll progression dice",
callback: (event, button, dialog) => {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", pos)
return "rollProgressionDice"
},
})
} else if (currentAction.type === "spell" || currentAction.type === "miracle") {
let label = ""
if (currentAction.spellStatus === "castingTime") {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", pos)
label = "Wait casting time"
}
if (currentAction.spellStatus === "toBeCasted") {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", pos)
label = "Cast spell/miracle"
}
if (currentAction.spellStatus === "lethargy") {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", pos)
label = "Roll lethargy dice"
}
buttons.push({
action: "roll",
label: label,
callback: (event, button, dialog) => {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
return "rollLethargyDice"
},
})
@@ -674,6 +698,8 @@ export default class LethalFantasyRoll extends Roll {
action: "roll",
label: "Select action",
callback: (event, button, dialog) => {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
return obj
@@ -687,13 +713,17 @@ export default class LethalFantasyRoll extends Roll {
action: "cancel",
label: "Other action, not listed here",
callback: (event, button, dialog) => {
+ let pos = $('#combat-action-dialog').position()
+ game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
return null;
}
})
let rollContext = await foundry.applications.api.DialogV2.wait({
window: { title: "Combat Action Dialog" },
+ id: "combat-action-dialog",
classes: ["lethalfantasy"],
+ position,
content,
buttons,
rejectClose: false // Click on Close button will not launch an error
@@ -854,178 +884,6 @@ export default class LethalFantasyRoll extends Roll {
}
}
- /* ***********************************************************/
- static async promptProgressionDice(options = {}) {
-
- const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
- const fieldRollMode = new foundry.data.fields.StringField({
- choices: rollModes,
- blank: false,
- default: "public",
- })
- let dialogContext = {
- progressionDiceId: "",
- fieldRollMode,
- rollModes,
- ...options
- }
-
- const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-progression-dice-dialog.hbs", dialogContext)
-
- const label = game.i18n.localize("LETHALFANTASY.Label.rollProgressionDice")
- const rollContext = await foundry.applications.api.DialogV2.wait({
- window: { title: "Progression Roll" },
- classes: ["lethalfantasy"],
- content,
- buttons: [
- {
- action: "roll",
- label: "Roll Progression Dice or Continue Loading",
- callback: (event, button, dialog) => {
- const output = Array.from(button.form.elements).reduce((obj, input) => {
- if (input.name) obj[input.name] = input.value
- return obj
- }, {})
- return output
- },
- },
- {
- action: "cast",
- label: "Cast a spell/Miracle",
- callback: (event, button, dialog) => {
- return "casting"
- },
- },
- {
- action: "cancel",
- label: "Other action, no progression dice",
- callback: (event, button, dialog) => {
- return null;
- }
- }
- ],
- rejectClose: false // Click on Close button will not launch an error
- })
-
- console.log("RollContext", dialogContext, rollContext)
- let combat = game.combats.get(options.combatId)
- let actor = game.actors.get(options.actorId)
-
- if (rollContext === "casting") {
- combat.setCasting(options.combatantId)
- let message = `Starting casting a spell !`
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- return
- }
-
- if (rollContext === null || !rollContext?.progressionDiceId) {
- c.resetCasting(options.combatantId)
- combat.resetProgression(options.combatantId)
- let message = `${actor.name} : Other action, progression reset`
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- return
- }
-
-
- // Get the weapons from the actor items
- let rangedMode
- let searchId = rollContext.progressionDiceId
- if (searchId.match("simpleAim")) {
- searchId = searchId.replace("simpleAim", "")
- rangedMode = "simpleAim"
- }
- if (searchId.match("carefulAim")) {
- searchId = searchId.replace("carefulAim", "")
- rangedMode = "carefulAim"
- }
- if (searchId.match("focusedAim")) {
- searchId = searchId.replace("focusedAim", "")
- rangedMode = "focusedAim"
- }
-
- if (searchId.match("spell")) {
- searchId = searchId.replace("spell", "")
- let spell = actor.items.find(i => i.type === "spell" && i.id === searchId)
- let dice = LethalFantasyUtils.getLethargyDice(spell.system.level)
- if (combat.isCasting(options.combatantId)) {
- if (options.rollProgressionCount <= spell.system.castingTime) {
- let message = `Spell casting time : ${spell.name}, count : ${options.rollProgressionCount}/${spell.system.castingTime}`
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- return
- }
- if (options.rollProgressionCount > spell.system.castingTime) {
- let message = `Spell ${spell.name} has been cast !`
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- combat.resetCasting(options.combatantId)
- combat.resetProgression(options.combatantId)
- return
- }
- } else {
- let formula = dice
- let roll = new Roll(formula)
- await roll.evaluate()
- let max = roll.dice[0].faces - 1
- let toCompare = Math.min(options.rollProgressionCount, max)
- let message
- if (roll.total > toCompare) {
- message = `Spell Lethargy ongoing ... (${roll.total}/${toCompare}, spell level ${spell.system.level})`
- } else {
- combat.resetProgression(options.combatantId)
- message = `Spell Lethargy ended ! (${roll.total}/${toCompare}, spell level ${spell.system.level})
${actor.name} can return to normal actions.`
- }
- let msg = await roll.toMessage({ flavor: message }, { rollMode: rollContext.visibility })
- if (game?.dice3d) {
- await game.dice3d.waitFor3DAnimationByMessageID(msg.id)
- }
- }
- return
- }
-
- let weapon = actor.items.find(i => i.type === "weapon" && i.id === searchId)
- let formula = weapon.system.combatProgressionDice
-
- let rangedLoad
- if (rangedMode) {
- let toSplit = weapon.system.speed[rangedMode]
- let split = toSplit.split("+")
- rangedLoad = Number(split[0]) || 0
- formula = split[1]
- console.log("Ranged Mode", rangedMode, rangedLoad, formula, options.rollProgressionCount)
- }
-
- if (rangedLoad && options.rollProgressionCount <= rangedLoad) {
- let message = `Ranged weapon ${weapon.name} is loading, loading count : ${options.rollProgressionCount}/${rangedLoad}`
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- return
- }
-
- let isMonster = actor.type === "monster"
- // Get the dice and roll it if
- let roll = new Roll(formula)
- await roll.evaluate()
-
- let max = roll.dice[0].faces - 1
- max = Math.min(options.rollProgressionCount, max)
- let msg = await roll.toMessage({ flavor: `Progression Roll for ${weapon.name}, progression count : ${options.rollProgressionCount}/${max}` }, { rollMode: rollContext.visibility })
- if (game?.dice3d) {
- await game.dice3d.waitFor3DAnimationByMessageID(msg.id)
- }
-
- if (roll.total <= max) {
- // Notify that the player can act now with a chat message
- let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOK", { isMonster, name: actor.name, weapon: weapon.name, roll: roll.total })
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- // Update the combatant progression count
- let combat = game.combats.get(options.combatId)
- let combatant = combat.combatants.get(options.combatantId)
- combatant.update({ 'system.progressionCount': 0 })
- } else {
- // Notify that the player cannot act now with a chat message
- let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKO", { isMonster, name: actor.name, weapon: weapon.name, roll: roll.total })
- ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
- }
- }
-
/* ***********************************************************/
static async promptRangedDefense(rollTarget) {
diff --git a/module/models/monster.mjs b/module/models/monster.mjs
index b139611..bbe9532 100644
--- a/module/models/monster.mjs
+++ b/module/models/monster.mjs
@@ -149,7 +149,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
- async prepareMonsterRoll(rollType, rollKey, rollDice) {
+ async prepareMonsterRoll(rollType, rollKey, rollDice = undefined, tokenId = undefined) {
let rollTarget
switch (rollType) {
case "monster-attack":
@@ -212,6 +212,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
}
// In all cases
+ rollTarget.tokenId = tokenId
console.log(rollTarget)
await this.roll(rollType, rollTarget)
}
@@ -260,8 +261,8 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
hasAttack = true
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOKMonster", { isMonster: true, name: this.parent.name, weapon: attack.name, roll: roll.total })
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: this.parent }) })
- this.prepareMonsterRoll("monster-attack", key)
let token = combatant?.token
+ this.prepareMonsterRoll("monster-attack", key, undefined, token?.id)
if ( token?.object ) {
token.object?.control({releaseOthers: true});
return canvas.animatePan(token.object.center);
diff --git a/packs-system/lf-equipment/000245.log b/packs-system/lf-equipment/000262.log
similarity index 100%
rename from packs-system/lf-equipment/000245.log
rename to packs-system/lf-equipment/000262.log
diff --git a/packs-system/lf-equipment/CURRENT b/packs-system/lf-equipment/CURRENT
index 7635e11..1aa57fc 100644
--- a/packs-system/lf-equipment/CURRENT
+++ b/packs-system/lf-equipment/CURRENT
@@ -1 +1 @@
-MANIFEST-000243
+MANIFEST-000261
diff --git a/packs-system/lf-equipment/LOG b/packs-system/lf-equipment/LOG
index fcdae95..42c0fd9 100644
--- a/packs-system/lf-equipment/LOG
+++ b/packs-system/lf-equipment/LOG
@@ -1,8 +1,3 @@
-2025/04/23-16:02:07.087054 7f3145ffb6c0 Recovering log #241
-2025/04/23-16:02:07.096981 7f3145ffb6c0 Delete type=3 #239
-2025/04/23-16:02:07.097039 7f3145ffb6c0 Delete type=0 #241
-2025/04/23-16:04:44.893831 7f2ea7fff6c0 Level-0 table #246: started
-2025/04/23-16:04:44.893889 7f2ea7fff6c0 Level-0 table #246: 0 bytes OK
-2025/04/23-16:04:44.900365 7f2ea7fff6c0 Delete type=0 #244
-2025/04/23-16:04:44.921865 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
-2025/04/23-16:04:44.921936 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
+2025/04/25-21:22:26.619523 7fa7f51fa6c0 Recovering log #259
+2025/04/25-21:22:26.629405 7fa7f51fa6c0 Delete type=3 #257
+2025/04/25-21:22:26.629471 7fa7f51fa6c0 Delete type=0 #259
diff --git a/packs-system/lf-equipment/LOG.old b/packs-system/lf-equipment/LOG.old
index c2f166c..fd0e157 100644
--- a/packs-system/lf-equipment/LOG.old
+++ b/packs-system/lf-equipment/LOG.old
@@ -1,8 +1,8 @@
-2025/04/22-23:31:24.238771 7f31457fa6c0 Recovering log #237
-2025/04/22-23:31:24.249942 7f31457fa6c0 Delete type=3 #235
-2025/04/22-23:31:24.250077 7f31457fa6c0 Delete type=0 #237
-2025/04/22-23:43:44.737443 7f2ea7fff6c0 Level-0 table #242: started
-2025/04/22-23:43:44.737479 7f2ea7fff6c0 Level-0 table #242: 0 bytes OK
-2025/04/22-23:43:44.744412 7f2ea7fff6c0 Delete type=0 #240
-2025/04/22-23:43:44.750880 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
-2025/04/22-23:43:44.750915 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
+2025/04/25-21:12:25.063567 7fa7f49f96c0 Recovering log #255
+2025/04/25-21:12:25.123483 7fa7f49f96c0 Delete type=3 #253
+2025/04/25-21:12:25.123549 7fa7f49f96c0 Delete type=0 #255
+2025/04/25-21:21:41.663813 7fa7eebff6c0 Level-0 table #260: started
+2025/04/25-21:21:41.663837 7fa7eebff6c0 Level-0 table #260: 0 bytes OK
+2025/04/25-21:21:41.670063 7fa7eebff6c0 Delete type=0 #258
+2025/04/25-21:21:41.683068 7fa7eebff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
+2025/04/25-21:21:41.683094 7fa7eebff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
diff --git a/packs-system/lf-equipment/MANIFEST-000243 b/packs-system/lf-equipment/MANIFEST-000261
similarity index 72%
rename from packs-system/lf-equipment/MANIFEST-000243
rename to packs-system/lf-equipment/MANIFEST-000261
index 593eb36..a2db5dc 100644
Binary files a/packs-system/lf-equipment/MANIFEST-000243 and b/packs-system/lf-equipment/MANIFEST-000261 differ
diff --git a/packs-system/lf-gifts/000244.log b/packs-system/lf-gifts/000261.log
similarity index 100%
rename from packs-system/lf-gifts/000244.log
rename to packs-system/lf-gifts/000261.log
diff --git a/packs-system/lf-gifts/CURRENT b/packs-system/lf-gifts/CURRENT
index d3ee291..8819f7c 100644
--- a/packs-system/lf-gifts/CURRENT
+++ b/packs-system/lf-gifts/CURRENT
@@ -1 +1 @@
-MANIFEST-000242
+MANIFEST-000260
diff --git a/packs-system/lf-gifts/LOG b/packs-system/lf-gifts/LOG
index d6fbfd9..fa3da03 100644
--- a/packs-system/lf-gifts/LOG
+++ b/packs-system/lf-gifts/LOG
@@ -1,8 +1,3 @@
-2025/04/23-16:02:07.100445 7f3144ff96c0 Recovering log #240
-2025/04/23-16:02:07.110685 7f3144ff96c0 Delete type=3 #238
-2025/04/23-16:02:07.110874 7f3144ff96c0 Delete type=0 #240
-2025/04/23-16:04:44.900471 7f2ea7fff6c0 Level-0 table #245: started
-2025/04/23-16:04:44.900493 7f2ea7fff6c0 Level-0 table #245: 0 bytes OK
-2025/04/23-16:04:44.907623 7f2ea7fff6c0 Delete type=0 #243
-2025/04/23-16:04:44.921891 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
-2025/04/23-16:04:44.921950 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
+2025/04/25-21:22:26.632055 7fa7ef7fe6c0 Recovering log #258
+2025/04/25-21:22:26.642442 7fa7ef7fe6c0 Delete type=3 #256
+2025/04/25-21:22:26.642504 7fa7ef7fe6c0 Delete type=0 #258
diff --git a/packs-system/lf-gifts/LOG.old b/packs-system/lf-gifts/LOG.old
index dab4fff..337904d 100644
--- a/packs-system/lf-gifts/LOG.old
+++ b/packs-system/lf-gifts/LOG.old
@@ -1,8 +1,8 @@
-2025/04/22-23:31:24.253009 7f3144ff96c0 Recovering log #236
-2025/04/22-23:31:24.263050 7f3144ff96c0 Delete type=3 #234
-2025/04/22-23:31:24.263096 7f3144ff96c0 Delete type=0 #236
-2025/04/22-23:43:44.744546 7f2ea7fff6c0 Level-0 table #241: started
-2025/04/22-23:43:44.744578 7f2ea7fff6c0 Level-0 table #241: 0 bytes OK
-2025/04/22-23:43:44.750735 7f2ea7fff6c0 Delete type=0 #239
-2025/04/22-23:43:44.750897 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
-2025/04/22-23:43:44.750924 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
+2025/04/25-21:12:25.126076 7fa7ef7fe6c0 Recovering log #254
+2025/04/25-21:12:25.194012 7fa7ef7fe6c0 Delete type=3 #252
+2025/04/25-21:12:25.194129 7fa7ef7fe6c0 Delete type=0 #254
+2025/04/25-21:21:41.677033 7fa7eebff6c0 Level-0 table #259: started
+2025/04/25-21:21:41.677055 7fa7eebff6c0 Level-0 table #259: 0 bytes OK
+2025/04/25-21:21:41.682956 7fa7eebff6c0 Delete type=0 #257
+2025/04/25-21:21:41.683087 7fa7eebff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
+2025/04/25-21:21:41.683125 7fa7eebff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
diff --git a/packs-system/lf-gifts/MANIFEST-000242 b/packs-system/lf-gifts/MANIFEST-000242
deleted file mode 100644
index 382badf..0000000
Binary files a/packs-system/lf-gifts/MANIFEST-000242 and /dev/null differ
diff --git a/packs-system/lf-gifts/MANIFEST-000260 b/packs-system/lf-gifts/MANIFEST-000260
new file mode 100644
index 0000000..1f6a706
Binary files /dev/null and b/packs-system/lf-gifts/MANIFEST-000260 differ
diff --git a/packs-system/lf-skills/000244.log b/packs-system/lf-skills/000261.log
similarity index 100%
rename from packs-system/lf-skills/000244.log
rename to packs-system/lf-skills/000261.log
diff --git a/packs-system/lf-skills/CURRENT b/packs-system/lf-skills/CURRENT
index d3ee291..8819f7c 100644
--- a/packs-system/lf-skills/CURRENT
+++ b/packs-system/lf-skills/CURRENT
@@ -1 +1 @@
-MANIFEST-000242
+MANIFEST-000260
diff --git a/packs-system/lf-skills/LOG b/packs-system/lf-skills/LOG
index 39afd33..fcfa986 100644
--- a/packs-system/lf-skills/LOG
+++ b/packs-system/lf-skills/LOG
@@ -1,8 +1,3 @@
-2025/04/23-16:02:07.071305 7f31457fa6c0 Recovering log #240
-2025/04/23-16:02:07.081459 7f31457fa6c0 Delete type=3 #238
-2025/04/23-16:02:07.081639 7f31457fa6c0 Delete type=0 #240
-2025/04/23-16:04:44.907842 7f2ea7fff6c0 Level-0 table #245: started
-2025/04/23-16:04:44.907895 7f2ea7fff6c0 Level-0 table #245: 0 bytes OK
-2025/04/23-16:04:44.913971 7f2ea7fff6c0 Delete type=0 #243
-2025/04/23-16:04:44.921908 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
-2025/04/23-16:04:44.921963 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2025/04/25-21:22:26.603891 7fa7f49f96c0 Recovering log #258
+2025/04/25-21:22:26.613982 7fa7f49f96c0 Delete type=3 #256
+2025/04/25-21:22:26.614103 7fa7f49f96c0 Delete type=0 #258
diff --git a/packs-system/lf-skills/LOG.old b/packs-system/lf-skills/LOG.old
index eec478b..8bd2a76 100644
--- a/packs-system/lf-skills/LOG.old
+++ b/packs-system/lf-skills/LOG.old
@@ -1,8 +1,8 @@
-2025/04/22-23:31:24.225117 7f31467fc6c0 Recovering log #236
-2025/04/22-23:31:24.235493 7f31467fc6c0 Delete type=3 #234
-2025/04/22-23:31:24.235550 7f31467fc6c0 Delete type=0 #236
-2025/04/22-23:43:44.724728 7f2ea7fff6c0 Level-0 table #241: started
-2025/04/22-23:43:44.724783 7f2ea7fff6c0 Level-0 table #241: 0 bytes OK
-2025/04/22-23:43:44.730920 7f2ea7fff6c0 Delete type=0 #239
-2025/04/22-23:43:44.750847 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
-2025/04/22-23:43:44.750890 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2025/04/25-21:12:25.004274 7fa7f51fa6c0 Recovering log #254
+2025/04/25-21:12:25.060536 7fa7f51fa6c0 Delete type=3 #252
+2025/04/25-21:12:25.060709 7fa7f51fa6c0 Delete type=0 #254
+2025/04/25-21:21:41.670183 7fa7eebff6c0 Level-0 table #259: started
+2025/04/25-21:21:41.670208 7fa7eebff6c0 Level-0 table #259: 0 bytes OK
+2025/04/25-21:21:41.676916 7fa7eebff6c0 Delete type=0 #257
+2025/04/25-21:21:41.683078 7fa7eebff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2025/04/25-21:21:41.683166 7fa7eebff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
diff --git a/packs-system/lf-skills/MANIFEST-000242 b/packs-system/lf-skills/MANIFEST-000242
deleted file mode 100644
index 5dc9204..0000000
Binary files a/packs-system/lf-skills/MANIFEST-000242 and /dev/null differ
diff --git a/packs-system/lf-skills/MANIFEST-000260 b/packs-system/lf-skills/MANIFEST-000260
new file mode 100644
index 0000000..3dfb436
Binary files /dev/null and b/packs-system/lf-skills/MANIFEST-000260 differ
diff --git a/packs-system/lf-vulnerabilities/000244.log b/packs-system/lf-vulnerabilities/000261.log
similarity index 100%
rename from packs-system/lf-vulnerabilities/000244.log
rename to packs-system/lf-vulnerabilities/000261.log
diff --git a/packs-system/lf-vulnerabilities/CURRENT b/packs-system/lf-vulnerabilities/CURRENT
index d3ee291..8819f7c 100644
--- a/packs-system/lf-vulnerabilities/CURRENT
+++ b/packs-system/lf-vulnerabilities/CURRENT
@@ -1 +1 @@
-MANIFEST-000242
+MANIFEST-000260
diff --git a/packs-system/lf-vulnerabilities/LOG b/packs-system/lf-vulnerabilities/LOG
index c2bbda0..b1fd44d 100644
--- a/packs-system/lf-vulnerabilities/LOG
+++ b/packs-system/lf-vulnerabilities/LOG
@@ -1,8 +1,3 @@
-2025/04/23-16:02:07.114345 7f31467fc6c0 Recovering log #240
-2025/04/23-16:02:07.124115 7f31467fc6c0 Delete type=3 #238
-2025/04/23-16:02:07.124180 7f31467fc6c0 Delete type=0 #240
-2025/04/23-16:04:44.931650 7f2ea7fff6c0 Level-0 table #245: started
-2025/04/23-16:04:44.931686 7f2ea7fff6c0 Level-0 table #245: 0 bytes OK
-2025/04/23-16:04:44.938777 7f2ea7fff6c0 Delete type=0 #243
-2025/04/23-16:04:44.971323 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
-2025/04/23-16:04:44.971357 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2025/04/25-21:22:26.644388 7fa7effff6c0 Recovering log #258
+2025/04/25-21:22:26.654206 7fa7effff6c0 Delete type=3 #256
+2025/04/25-21:22:26.654257 7fa7effff6c0 Delete type=0 #258
diff --git a/packs-system/lf-vulnerabilities/LOG.old b/packs-system/lf-vulnerabilities/LOG.old
index 2cda392..87bc508 100644
--- a/packs-system/lf-vulnerabilities/LOG.old
+++ b/packs-system/lf-vulnerabilities/LOG.old
@@ -1,8 +1,8 @@
-2025/04/22-23:31:24.265717 7f3145ffb6c0 Recovering log #236
-2025/04/22-23:31:24.276539 7f3145ffb6c0 Delete type=3 #234
-2025/04/22-23:31:24.276606 7f3145ffb6c0 Delete type=0 #236
-2025/04/22-23:43:44.731066 7f2ea7fff6c0 Level-0 table #241: started
-2025/04/22-23:43:44.731099 7f2ea7fff6c0 Level-0 table #241: 0 bytes OK
-2025/04/22-23:43:44.737300 7f2ea7fff6c0 Delete type=0 #239
-2025/04/22-23:43:44.750866 7f2ea7fff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
-2025/04/22-23:43:44.750946 7f2ea7fff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2025/04/25-21:12:25.197251 7fa7effff6c0 Recovering log #254
+2025/04/25-21:12:25.252610 7fa7effff6c0 Delete type=3 #252
+2025/04/25-21:12:25.252672 7fa7effff6c0 Delete type=0 #254
+2025/04/25-21:21:41.657695 7fa7eebff6c0 Level-0 table #259: started
+2025/04/25-21:21:41.657740 7fa7eebff6c0 Level-0 table #259: 0 bytes OK
+2025/04/25-21:21:41.663703 7fa7eebff6c0 Delete type=0 #257
+2025/04/25-21:21:41.683056 7fa7eebff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2025/04/25-21:21:41.683109 7fa7eebff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
diff --git a/packs-system/lf-vulnerabilities/MANIFEST-000242 b/packs-system/lf-vulnerabilities/MANIFEST-000260
similarity index 71%
rename from packs-system/lf-vulnerabilities/MANIFEST-000242
rename to packs-system/lf-vulnerabilities/MANIFEST-000260
index b86db05..b0f94bd 100644
Binary files a/packs-system/lf-vulnerabilities/MANIFEST-000242 and b/packs-system/lf-vulnerabilities/MANIFEST-000260 differ
diff --git a/styles/roll.less b/styles/roll.less
index b862f32..2536b2b 100644
--- a/styles/roll.less
+++ b/styles/roll.less
@@ -13,6 +13,19 @@
fieldset {
padding: 4px;
}
+ .goto-token-button {
+ justify-content: center;
+ align-items: center;
+ align-content: center;
+ margin-left: 0.5rem;
+ max-width: 8rem;
+ background-color: var(--color-dark-6);
+ color: var(--color-dark-2);
+ border: none;
+ border-radius: 4px;
+ padding: 0.5rem;
+ }
+
}
.lethalfantasy-range-defense-dialog {
@@ -24,7 +37,7 @@
select {
margin-left: 0.5rem;
min-width: 10rem;
- max-width: 10rem;
+ max-width: 10rem;
}
.field-section {
display: flex;
@@ -34,13 +47,13 @@
.field-name {
width:4rem;
min-width: 4rem;
- max-width: 4rem;
+ max-width: 4rem;
}
}
.dialog-form {
- .form-footer {
+ .form-footer {
button {
min-width: 14rem;
min-height: 3.2rem;
diff --git a/templates/roll-dialog.hbs b/templates/roll-dialog.hbs
index 3afcd11..48a7588 100644
--- a/templates/roll-dialog.hbs
+++ b/templates/roll-dialog.hbs
@@ -3,6 +3,12 @@