Enhance rolls and fix dialog position
This commit is contained in:
parent
2ce5088471
commit
791a7d6b67
@ -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;
|
||||
}
|
||||
|
@ -281,6 +281,7 @@
|
||||
}
|
||||
},
|
||||
"Label": {
|
||||
"gotoToken": "Go to token",
|
||||
"combatAction": "Combat action",
|
||||
"currentAction": "Current ongoing action",
|
||||
"selectAction": "Select an action",
|
||||
|
@ -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})<br>${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) {
|
||||
|
||||
|
@ -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);
|
||||
|
@ -1 +1 @@
|
||||
MANIFEST-000243
|
||||
MANIFEST-000261
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000242
|
||||
MANIFEST-000260
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Binary file not shown.
BIN
packs-system/lf-gifts/MANIFEST-000260
Normal file
BIN
packs-system/lf-gifts/MANIFEST-000260
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000242
|
||||
MANIFEST-000260
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Binary file not shown.
BIN
packs-system/lf-skills/MANIFEST-000260
Normal file
BIN
packs-system/lf-skills/MANIFEST-000260
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000242
|
||||
MANIFEST-000260
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Binary file not shown.
@ -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;
|
||||
|
@ -3,6 +3,12 @@
|
||||
<fieldSet class="">
|
||||
<legend>{{localize (concat "LETHALFANTASY.Label." rollType)}} - {{actorName}}</legend>
|
||||
|
||||
{{#if rollTarget.tokenId}}
|
||||
<div class="dialog-save">
|
||||
<a class="goto-token-button" data-action="gotoToken" data-token-id="{{rollTarget.tokenId}}">{{localize "LETHALFANTASY.Label.gotoToken"}} </a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (match rollType "attack")}}
|
||||
<div class="dialog-save">Attack roll ! - {{rollTarget.name}}</div>
|
||||
{{/if}}
|
||||
@ -87,4 +93,6 @@
|
||||
{{selectOptions rollModes selected=visibility}}
|
||||
</select>
|
||||
</fieldSet>
|
||||
|
||||
|
||||
</div>
|
Loading…
x
Reference in New Issue
Block a user