3 Commits

Author SHA1 Message Date
59a891630e Fix tooltip
All checks were successful
Release Creation / build (release) Successful in 38s
2025-09-20 09:34:13 +02:00
35b88b3914 Poison/Contagion fixes again
All checks were successful
Release Creation / build (release) Successful in 42s
2025-09-19 23:32:15 +02:00
cb8bcfd9ea Ranged defense fixes again
All checks were successful
Release Creation / build (release) Successful in 43s
2025-09-19 22:30:26 +02:00
34 changed files with 295 additions and 267 deletions

View File

@@ -2236,10 +2236,17 @@ i.lethalfantasy {
.lethalfantasy-range-defense-dialog fieldset { .lethalfantasy-range-defense-dialog fieldset {
padding: 4px; padding: 4px;
} }
.lethalfantasy-range-defense-dialog .fieldset-centered {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
.lethalfantasy-range-defense-dialog select { .lethalfantasy-range-defense-dialog select {
margin-left: 0.5rem; margin-left: 0.5rem;
min-width: 10rem; min-width: 12rem;
max-width: 10rem; max-width: 12rem;
} }
.lethalfantasy-range-defense-dialog .field-section { .lethalfantasy-range-defense-dialog .field-section {
display: flex; display: flex;
@@ -2247,9 +2254,9 @@ i.lethalfantasy {
justify-content: left; justify-content: left;
} }
.lethalfantasy-range-defense-dialog .field-name { .lethalfantasy-range-defense-dialog .field-name {
width: 4rem; width: 5rem;
min-width: 4rem; min-width: 5rem;
max-width: 4rem; max-width: 5em;
} }
.dialog-form .form-footer button { .dialog-form .form-footer button {
min-width: 14rem; min-width: 14rem;

View File

@@ -143,7 +143,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event) const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
// Handle different data types // Handle different data types
if (data.type === "Item") { if (data.type === "Item") {
const item = await fromUuid(data.uuid) const item = await fromUuid(data.uuid)
return this._onDropItem(item) return this._onDropItem(item)
} }

View File

@@ -130,6 +130,7 @@ export default class LethalFantasyRoll extends Roll {
let hasGrantedDice = false let hasGrantedDice = false
let pointBlank = false let pointBlank = false
let letItFly = false let letItFly = false
let saveSpell = false
let beyondSkill = false let beyondSkill = false
let hasStaticModifier = false let hasStaticModifier = false
let hasExplode = true let hasExplode = true
@@ -368,6 +369,9 @@ export default class LethalFantasyRoll extends Roll {
"selectLetItFly": (event, button, dialog) => { "selectLetItFly": (event, button, dialog) => {
letItFly = button.checked letItFly = button.checked
}, },
"saveSpellCheck": (event, button, dialog) => {
saveSpell = button.checked
},
"gotoToken": (event, button, dialog) => { "gotoToken": (event, button, dialog) => {
let tokenId = $(button).data("tokenId") let tokenId = $(button).data("tokenId")
let token = canvas.tokens?.get(tokenId) let token = canvas.tokens?.get(tokenId)
@@ -384,6 +388,7 @@ export default class LethalFantasyRoll extends Roll {
// If the user cancels the dialog, exit // If the user cancels the dialog, exit
if (rollContext === null) return if (rollContext === null) return
console.log("rollContext", rollContext, hasGrantedDice) console.log("rollContext", rollContext, hasGrantedDice)
rollContext.saveSpell = saveSpell // Update fucking flag
let fullModifier = 0 let fullModifier = 0
let titleFormula = "" let titleFormula = ""
@@ -405,7 +410,6 @@ export default class LethalFantasyRoll extends Roll {
if (hasStaticModifier) { if (hasStaticModifier) {
modifierFormula += ` + ${options.rollTarget.staticModifier}` modifierFormula += ` + ${options.rollTarget.staticModifier}`
} }
// modifierFormula += ` + ${options.rollTarget.charModifier}`
let sign = fullModifier < 0 ? "-" : "+" let sign = fullModifier < 0 ? "-" : "+"
if (hasExplode) { if (hasExplode) {
titleFormula = `${dice}E ${sign} ${modifierFormula}` titleFormula = `${dice}E ${sign} ${modifierFormula}`
@@ -440,10 +444,11 @@ export default class LethalFantasyRoll extends Roll {
} }
// Specific pain/poison/contagion case // Specific pain/poison/contagion case
if (options.rollType === "save" && (options.rollTarget.rollKey === "pain" || options.rollTarget.rollKey === "paincourage" || options.rollTarget.rollKey === "poison" || options.rollTarget.rollKey === "contagion")) { if (options.rollType === "save" && (options.rollTarget.rollKey === "poison" || options.rollTarget.rollKey === "contagion")) {
hasD30 = false hasD30 = false
hasStaticModifier = true hasStaticModifier = true
modifierFormula = ` + ${Math.abs(fullModifier)}` modifierFormula = ` + ${Math.abs(fullModifier)}`
titleFormula = `${dice}E + ${Math.abs(fullModifier)}`
} }
if (letItFly) { if (letItFly) {
@@ -622,7 +627,6 @@ export default class LethalFantasyRoll extends Roll {
fieldRollMode, fieldRollMode,
rollModes rollModes
} }
console.log("CTX", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext)
@@ -657,7 +661,6 @@ export default class LethalFantasyRoll extends Roll {
let combat = game.combats.get(options.combatId) let combat = game.combats.get(options.combatId)
combat.updateEmbeddedDocuments("Combatant", [{ _id: options.combatantId, initiative: initRoll.total, 'system.progressionCount': 0 }]); combat.updateEmbeddedDocuments("Combatant", [{ _id: options.combatantId, initiative: initRoll.total, 'system.progressionCount': 0 }]);
} }
} }
/* ***********************************************************/ /* ***********************************************************/
@@ -920,9 +923,9 @@ export default class LethalFantasyRoll extends Roll {
} }
/* ***********************************************************/ /* ***********************************************************/
static async promptRangedDefense(rollTarget) { static async promptRangedDefense(options = {}) {
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes);
const fieldRollMode = new foundry.data.fields.StringField({ const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes, choices: rollModes,
blank: false, blank: false,
@@ -937,13 +940,12 @@ export default class LethalFantasyRoll extends Roll {
attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES, attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES,
movement: "none", movement: "none",
moveDirection: "none", moveDirection: "none",
size: "medium", size: "+5",
range: "short", range: "short",
attackerAim: "simple", attackerAim: "simple",
fieldRollMode, fieldRollMode,
rollModes rollModes
} }
console.log("CTX", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/range-defense-dialog.hbs", dialogContext) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/range-defense-dialog.hbs", dialogContext)
@@ -990,18 +992,18 @@ export default class LethalFantasyRoll extends Roll {
Number(rollContext.size) + Number(rollContext.size) +
Number(rollContext.range) + Number(rollContext.range) +
Number(rollContext?.attackerAim || 0) Number(rollContext?.attackerAim || 0)
console.log("Modifier", fullModifier, rollContext)
let modifierFormula let modifierFormula
if (fullModifier === 0) { if (fullModifier === 0) {
modifierFormula = "0" modifierFormula = "0"
} else { } else {
let modAbs = Math.abs(fullModifier) let modAbs = Math.abs(fullModifier)
modifierFormula = `D${modAbs+1} -1` modifierFormula = `D${modAbs + 1} -1`
} }
let rollData = { ...rollContext } let rollData = { ...rollContext }
let options = { ...rollContext } // Merge rollContext object into options object
options = { ...options, ...rollContext }
options.rollName = "Ranged Defense" options.rollName = "Ranged Defense"
const rollBase = new this(rollContext.movement, options.data, rollData) const rollBase = new this(rollContext.movement, options.data, rollData)
@@ -1011,13 +1013,15 @@ export default class LethalFantasyRoll extends Roll {
let rollD30 = await new Roll("1D30").evaluate() let rollD30 = await new Roll("1D30").evaluate()
options.D30result = rollD30.total options.D30result = rollD30.total
let badResult = 0
if (rollContext.movement.includes("kh")) { if (rollContext.movement.includes("kh")) {
rollData.favor = "favor" rollData.favor = "favor"
badResult = Math.min(rollBase.terms[0].results[0].result, rollBase.terms[0].results[1]?.result || 20)
} }
if (rollContext.movement.includes("kl")) { if (rollContext.movement.includes("kl")) {
rollData.favor = "disfavor" rollData.favor = "disfavor"
badResult = Math.max(rollBase.terms[0].results[0].result, rollBase.terms[0].results[1]?.result || 1)
} }
let dice = rollContext.movement let dice = rollContext.movement
let maxValue = 20 // As per latest changes (was : Number(dice.match(/\d+$/)[0]) let maxValue = 20 // As per latest changes (was : Number(dice.match(/\d+$/)[0])
let rollTotal = -1 let rollTotal = -1
@@ -1043,14 +1047,15 @@ export default class LethalFantasyRoll extends Roll {
} else { } else {
rollTotal = diceSum rollTotal = diceSum
} }
rollBase.options = { ...rollBase.options, ...options }
rollBase.options.resultType = resultType rollBase.options.resultType = resultType
rollBase.options.rollTotal = rollTotal rollBase.options.rollTotal = rollTotal
rollBase.options.diceResults = diceResults rollBase.options.diceResults = diceResults
rollBase.options.rollTarget = options.rollTarget rollBase.options.rollTarget = options.rollTarget
rollBase.options.titleFormula = `${dice}E + ${modifierFormula}` rollBase.options.titleFormula = `1D20E + ${modifierFormula}`
rollBase.options.D30result = options.D30result rollBase.options.D30result = options.D30result
rollBase.options.rollName = "Ranged Defense" rollBase.options.rollName = "Ranged Defense"
rollBase.options.badResult = badResult
rollBase.options.rollData = foundry.utils.duplicate(rollData) rollBase.options.rollData = foundry.utils.duplicate(rollData)
/** /**
* A hook event that fires after the roll has been made. * A hook event that fires after the roll has been made.

View File

@@ -179,13 +179,13 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
if (!SYSTEM.MORTAL_CHOICES[data.biodata.mortal]) { if (!SYSTEM.MORTAL_CHOICES[data.biodata.mortal]) {
for (let key in SYSTEM.MORTAL_CHOICES) { for (let key in SYSTEM.MORTAL_CHOICES) {
let mortal = SYSTEM.MORTAL_CHOICES[key] let mortal = SYSTEM.MORTAL_CHOICES[key]
if ( mortal.label.toLowerCase() === data.biodata.mortal.toLowerCase()) { if (mortal.label.toLowerCase() === data.biodata.mortal.toLowerCase()) {
data.biodata.mortal = mortal.id data.biodata.mortal = mortal.id
} }
if ( data.biodata.mortal.toLowerCase().includes("shire")) { if (data.biodata.mortal.toLowerCase().includes("shire")) {
data.biodata.mortal = "halflings" data.biodata.mortal = "halflings"
} }
if ( data.biodata.mortal.toLowerCase().includes("human")) { if (data.biodata.mortal.toLowerCase().includes("human")) {
data.biodata.mortal = "mankind" data.biodata.mortal = "mankind"
} }
} }
@@ -235,8 +235,8 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
this.saves.toughness.value = conDef.toughness_save + this.modifiers.saveModifier this.saves.toughness.value = conDef.toughness_save + this.modifiers.saveModifier
this.challenges.dying.value = conDef.stabilization_dice this.challenges.dying.value = conDef.stabilization_dice
this.saves.contagion.value = this.characteristics.con.value + this.modifiers.saveModifier this.saves.contagion.value = this.characteristics.con.value;// + this.modifiers.saveModifier
this.saves.poison.value = this.characteristics.con.value + this.modifiers.saveModifier this.saves.poison.value = this.characteristics.con.value; // + this.modifiers.saveModifier
this.combat.attackModifier = 0 this.combat.attackModifier = 0
for (let chaKey of SYSTEM.CHARACTERISTIC_ATTACK) { for (let chaKey of SYSTEM.CHARACTERISTIC_ATTACK) {

View File

@@ -1 +1 @@
MANIFEST-000416 MANIFEST-000424

View File

@@ -1,8 +1,8 @@
2025/09/17-07:46:03.118742 7f3080dfa6c0 Recovering log #414 2025/09/20-09:24:47.271364 7f7d00dfa6c0 Recovering log #422
2025/09/17-07:46:03.213578 7f3080dfa6c0 Delete type=3 #412 2025/09/20-09:24:47.284417 7f7d00dfa6c0 Delete type=3 #420
2025/09/17-07:46:03.213653 7f3080dfa6c0 Delete type=0 #414 2025/09/20-09:24:47.284476 7f7d00dfa6c0 Delete type=0 #422
2025/09/17-07:46:49.420076 7f307a7fc6c0 Level-0 table #419: started 2025/09/20-09:32:46.867336 7f7cf9fff6c0 Level-0 table #427: started
2025/09/17-07:46:49.420100 7f307a7fc6c0 Level-0 table #419: 0 bytes OK 2025/09/20-09:32:46.867378 7f7cf9fff6c0 Level-0 table #427: 0 bytes OK
2025/09/17-07:46:49.429915 7f307a7fc6c0 Delete type=0 #417 2025/09/20-09:32:46.873522 7f7cf9fff6c0 Delete type=0 #425
2025/09/17-07:46:49.430201 7f307a7fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886330 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/17-07:46:49.430227 7f307a7fc6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886530 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/16-23:16:29.221312 7f307affd6c0 Recovering log #410 2025/09/19-21:01:58.948341 7f7cfaffd6c0 Recovering log #418
2025/09/16-23:16:29.232289 7f307affd6c0 Delete type=3 #408 2025/09/19-21:01:58.990053 7f7cfaffd6c0 Delete type=3 #416
2025/09/16-23:16:29.232343 7f307affd6c0 Delete type=0 #410 2025/09/19-21:01:58.990118 7f7cfaffd6c0 Delete type=0 #418
2025/09/16-23:47:50.382735 7f307a7fc6c0 Level-0 table #415: started 2025/09/19-22:28:27.055322 7f7cf9fff6c0 Level-0 table #423: started
2025/09/16-23:47:50.383046 7f307a7fc6c0 Level-0 table #415: 0 bytes OK 2025/09/19-22:28:27.055429 7f7cf9fff6c0 Level-0 table #423: 0 bytes OK
2025/09/16-23:47:50.390243 7f307a7fc6c0 Delete type=0 #413 2025/09/19-22:28:27.062766 7f7cf9fff6c0 Delete type=0 #421
2025/09/16-23:47:50.410779 7f307a7fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082558 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/16-23:47:50.410810 7f307a7fc6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082605 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000416 MANIFEST-000424

View File

@@ -1,8 +1,8 @@
2025/09/17-07:46:03.218339 7f307bfff6c0 Recovering log #414 2025/09/20-09:24:47.288998 7f7cfb7fe6c0 Recovering log #422
2025/09/17-07:46:03.309130 7f307bfff6c0 Delete type=3 #412 2025/09/20-09:24:47.299397 7f7cfb7fe6c0 Delete type=3 #420
2025/09/17-07:46:03.309200 7f307bfff6c0 Delete type=0 #414 2025/09/20-09:24:47.299460 7f7cfb7fe6c0 Delete type=0 #422
2025/09/17-07:46:49.410790 7f307a7fc6c0 Level-0 table #419: started 2025/09/20-09:32:46.860990 7f7cf9fff6c0 Level-0 table #427: started
2025/09/17-07:46:49.410814 7f307a7fc6c0 Level-0 table #419: 0 bytes OK 2025/09/20-09:32:46.861071 7f7cf9fff6c0 Level-0 table #427: 0 bytes OK
2025/09/17-07:46:49.419958 7f307a7fc6c0 Delete type=0 #417 2025/09/20-09:32:46.867149 7f7cf9fff6c0 Delete type=0 #425
2025/09/17-07:46:49.430187 7f307a7fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886314 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/17-07:46:49.430218 7f307a7fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886448 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/16-23:16:29.238114 7f3080dfa6c0 Recovering log #409 2025/09/19-21:01:58.995284 7f7cfbfff6c0 Recovering log #418
2025/09/16-23:16:29.248900 7f3080dfa6c0 Delete type=3 #407 2025/09/19-21:01:59.036400 7f7cfbfff6c0 Delete type=3 #416
2025/09/16-23:16:29.248979 7f3080dfa6c0 Delete type=0 #409 2025/09/19-21:01:59.036480 7f7cfbfff6c0 Delete type=0 #418
2025/09/16-23:47:50.397435 7f307a7fc6c0 Level-0 table #415: started 2025/09/19-22:28:27.076046 7f7cf9fff6c0 Level-0 table #423: started
2025/09/16-23:47:50.397478 7f307a7fc6c0 Level-0 table #415: 0 bytes OK 2025/09/19-22:28:27.076085 7f7cf9fff6c0 Level-0 table #423: 0 bytes OK
2025/09/16-23:47:50.404058 7f307a7fc6c0 Delete type=0 #413 2025/09/19-22:28:27.082428 7f7cf9fff6c0 Delete type=0 #421
2025/09/16-23:47:50.410801 7f307a7fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082612 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/16-23:47:50.410854 7f307a7fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082639 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000416 MANIFEST-000424

View File

@@ -1,8 +1,8 @@
2025/09/17-07:46:03.016134 7f307affd6c0 Recovering log #414 2025/09/20-09:24:47.256899 7f7cfaffd6c0 Recovering log #422
2025/09/17-07:46:03.115017 7f307affd6c0 Delete type=3 #412 2025/09/20-09:24:47.266896 7f7cfaffd6c0 Delete type=3 #420
2025/09/17-07:46:03.115113 7f307affd6c0 Delete type=0 #414 2025/09/20-09:24:47.267003 7f7cfaffd6c0 Delete type=0 #422
2025/09/17-07:46:49.400823 7f307a7fc6c0 Level-0 table #419: started 2025/09/20-09:32:46.873729 7f7cf9fff6c0 Level-0 table #427: started
2025/09/17-07:46:49.400858 7f307a7fc6c0 Level-0 table #419: 0 bytes OK 2025/09/20-09:32:46.873757 7f7cf9fff6c0 Level-0 table #427: 0 bytes OK
2025/09/17-07:46:49.410679 7f307a7fc6c0 Delete type=0 #417 2025/09/20-09:32:46.880314 7f7cf9fff6c0 Delete type=0 #425
2025/09/17-07:46:49.430172 7f307a7fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886342 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/17-07:46:49.430210 7f307a7fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886583 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/16-23:16:29.207343 7f307bfff6c0 Recovering log #409 2025/09/19-21:01:58.905694 7f7d00dfa6c0 Recovering log #418
2025/09/16-23:16:29.216984 7f307bfff6c0 Delete type=3 #407 2025/09/19-21:01:58.943958 7f7d00dfa6c0 Delete type=3 #416
2025/09/16-23:16:29.217040 7f307bfff6c0 Delete type=0 #409 2025/09/19-21:01:58.944064 7f7d00dfa6c0 Delete type=0 #418
2025/09/16-23:47:50.390364 7f307a7fc6c0 Level-0 table #415: started 2025/09/19-22:28:27.069590 7f7cf9fff6c0 Level-0 table #423: started
2025/09/16-23:47:50.390390 7f307a7fc6c0 Level-0 table #415: 0 bytes OK 2025/09/19-22:28:27.069620 7f7cf9fff6c0 Level-0 table #423: 0 bytes OK
2025/09/16-23:47:50.397293 7f307a7fc6c0 Delete type=0 #413 2025/09/19-22:28:27.075890 7f7cf9fff6c0 Delete type=0 #421
2025/09/16-23:47:50.410791 7f307a7fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082581 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/16-23:47:50.410840 7f307a7fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082657 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000116 MANIFEST-000124

View File

@@ -1,8 +1,8 @@
2025/09/17-07:46:03.403212 7f307affd6c0 Recovering log #114 2025/09/20-09:24:47.318521 7f7cfaffd6c0 Recovering log #122
2025/09/17-07:46:03.504394 7f307affd6c0 Delete type=3 #112 2025/09/20-09:24:47.328528 7f7cfaffd6c0 Delete type=3 #120
2025/09/17-07:46:03.504449 7f307affd6c0 Delete type=0 #114 2025/09/20-09:24:47.328622 7f7cfaffd6c0 Delete type=0 #122
2025/09/17-07:46:49.470775 7f307a7fc6c0 Level-0 table #119: started 2025/09/20-09:32:46.909549 7f7cf9fff6c0 Level-0 table #127: started
2025/09/17-07:46:49.470837 7f307a7fc6c0 Level-0 table #119: 0 bytes OK 2025/09/20-09:32:46.909792 7f7cf9fff6c0 Level-0 table #127: 0 bytes OK
2025/09/17-07:46:49.482316 7f307a7fc6c0 Delete type=0 #117 2025/09/20-09:32:46.915753 7f7cf9fff6c0 Delete type=0 #125
2025/09/17-07:46:49.503080 7f307a7fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.934449 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/17-07:46:49.523511 7f307a7fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.934489 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/16-23:16:29.263902 7f307affd6c0 Recovering log #109 2025/09/19-21:01:59.113262 7f7cfaffd6c0 Recovering log #118
2025/09/16-23:16:29.274398 7f307affd6c0 Delete type=3 #107 2025/09/19-21:01:59.152822 7f7cfaffd6c0 Delete type=3 #116
2025/09/16-23:16:29.274490 7f307affd6c0 Delete type=0 #109 2025/09/19-21:01:59.152924 7f7cfaffd6c0 Delete type=0 #118
2025/09/16-23:47:50.437467 7f307a7fc6c0 Level-0 table #115: started 2025/09/19-22:28:27.089546 7f7cf9fff6c0 Level-0 table #123: started
2025/09/16-23:47:50.437529 7f307a7fc6c0 Level-0 table #115: 0 bytes OK 2025/09/19-22:28:27.089602 7f7cf9fff6c0 Level-0 table #123: 0 bytes OK
2025/09/16-23:47:50.443898 7f307a7fc6c0 Delete type=0 #113 2025/09/19-22:28:27.095855 7f7cf9fff6c0 Delete type=0 #121
2025/09/16-23:47:50.474392 7f307a7fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.116632 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/16-23:47:50.474456 7f307a7fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.145745 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000415 MANIFEST-000423

View File

@@ -1,8 +1,8 @@
2025/09/17-07:46:03.312040 7f307b7fe6c0 Recovering log #413 2025/09/20-09:24:47.303028 7f7d00dfa6c0 Recovering log #421
2025/09/17-07:46:03.400421 7f307b7fe6c0 Delete type=3 #411 2025/09/20-09:24:47.316425 7f7d00dfa6c0 Delete type=3 #419
2025/09/17-07:46:03.400487 7f307b7fe6c0 Delete type=0 #413 2025/09/20-09:24:47.316502 7f7d00dfa6c0 Delete type=0 #421
2025/09/17-07:46:49.390955 7f307a7fc6c0 Level-0 table #418: started 2025/09/20-09:32:46.880413 7f7cf9fff6c0 Level-0 table #426: started
2025/09/17-07:46:49.391029 7f307a7fc6c0 Level-0 table #418: 0 bytes OK 2025/09/20-09:32:46.880437 7f7cf9fff6c0 Level-0 table #426: 0 bytes OK
2025/09/17-07:46:49.400683 7f307a7fc6c0 Delete type=0 #416 2025/09/20-09:32:46.886234 7f7cf9fff6c0 Delete type=0 #424
2025/09/17-07:46:49.430144 7f307a7fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886455 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/17-07:46:49.430391 7f307a7fc6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/09/20-09:32:46.886560 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/16-23:16:29.250993 7f307bfff6c0 Recovering log #409 2025/09/19-21:01:59.044069 7f7cfb7fe6c0 Recovering log #417
2025/09/16-23:16:29.261540 7f307bfff6c0 Delete type=3 #407 2025/09/19-21:01:59.110180 7f7cfb7fe6c0 Delete type=3 #415
2025/09/16-23:16:29.261614 7f307bfff6c0 Delete type=0 #409 2025/09/19-21:01:59.110282 7f7cfb7fe6c0 Delete type=0 #417
2025/09/16-23:47:50.404206 7f307a7fc6c0 Level-0 table #414: started 2025/09/19-22:28:27.062900 7f7cf9fff6c0 Level-0 table #422: started
2025/09/16-23:47:50.404257 7f307a7fc6c0 Level-0 table #414: 0 bytes OK 2025/09/19-22:28:27.062937 7f7cf9fff6c0 Level-0 table #422: 0 bytes OK
2025/09/16-23:47:50.410667 7f307a7fc6c0 Delete type=0 #412 2025/09/19-22:28:27.069460 7f7cf9fff6c0 Delete type=0 #420
2025/09/16-23:47:50.410817 7f307a7fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082570 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/16-23:47:50.410847 7f307a7fc6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/09/19-22:28:27.082620 7f7cf9fff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -33,10 +33,17 @@
fieldset { fieldset {
padding: 4px; padding: 4px;
} }
.fieldset-centered {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
select { select {
margin-left: 0.5rem; margin-left: 0.5rem;
min-width: 10rem; min-width: 12rem;
max-width: 10rem; max-width: 12rem;
} }
.field-section { .field-section {
display: flex; display: flex;
@@ -44,9 +51,9 @@
justify-content: left; justify-content: left;
} }
.field-name { .field-name {
width: 4rem; width: 5rem;
min-width: 4rem; min-width: 5rem;
max-width: 4rem; max-width: 5em;
} }
} }

View File

@@ -1,161 +1,168 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="combat" data-group="sheet"> <section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="combat" data-group="sheet">
<div class="main-div"> <div class="main-div">
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend> <legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend>
<div class="combat-details"> <div class="combat-details">
<div class="combat-detail"> <div class="combat-detail">
<button class="action" data-action="rangedAttackDefense"> <button class="action" data-action="rangedAttackDefense">
{{localize "LETHALFANTASY.Label.rangedAttackDefense"}} {{localize "LETHALFANTASY.Label.rangedAttackDefense"}}
</button> </button>
<button class="action" data-action="rollInitiative"> <button class="action" data-action="rollInitiative">
{{localize "LETHALFANTASY.Label.rollInitiative"}} {{localize "LETHALFANTASY.Label.rollInitiative"}}
</button> </button>
<div class="flexrow armor-hp">
<span class="name">{{localize "LETHALFANTASY.Label.armorHitPoints"}}</span>
{{formInput systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true }}
<a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="armorHitPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
</div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="attackDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.grantedAttackDice"}}</a></span>
{{formInput systemFields.granted.fields.attackDice value=system.granted.attackDice disabled=isPlayMode }}
</div>
<div class="flexrow granted ">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="defenseDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.grantedDefenseDice"}}</a></span>
{{formInput systemFields.granted.fields.defenseDice value=system.granted.defenseDice disabled=isPlayMode }}
</div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="damageDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.grantedDamageDice"}}</a></span>
{{formInput systemFields.granted.fields.damageDice value=system.granted.damageDice disabled=isPlayMode }}
</div>
<div class="flexrow armor-hp">
<span class="name">{{localize "LETHALFANTASY.Label.armorHitPoints"}}</span>
{{formInput systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true }}
<a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="armorHitPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
</div> </div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="attackDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedAttackDice"}}</a></span>
{{formInput systemFields.granted.fields.attackDice value=system.granted.attackDice disabled=isPlayMode }}
</div>
<div class="flexrow granted ">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="defenseDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedDefenseDice"}}</a></span>
{{formInput systemFields.granted.fields.defenseDice value=system.granted.defenseDice disabled=isPlayMode }}
</div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="damageDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedDamageDice"}}</a></span>
{{formInput systemFields.granted.fields.damageDice value=system.granted.damageDice disabled=isPlayMode }}
</div>
</div> </div>
</div> </fieldset>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.wounds"}}</legend> <legend>{{localize "LETHALFANTASY.Label.wounds"}}</legend>
<div class="wounds"> <div class="wounds">
{{#each system.hp.wounds as |wound idx|}} {{#each system.hp.wounds as |wound idx|}}
<div class="wound"> <div class="wound">
Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}" value="{{wound.description}}" data-name="description" > Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}"
Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.duration}}" data-name="duration" > value="{{wound.description}}" data-name="description">
HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.value}}" data-name="value" > Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}"
value="{{wound.duration}}" data-name="duration">
HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}"
value="{{wound.value}}" data-name="value">
</div> </div>
{{/each}} {{/each}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.weapons"}}</legend>
<div class="weapons">
{{#each weapons as |item|}}
<div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
data-drag-type="damage">
{{#if (ne item.img "icons/svg/item-bag.svg")}}
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
<div class="name">
{{item.name}}
</div>
<div class="attack-icons">
<a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="weapon-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small"
data-roll-key="{{item.id}}"></i>S
</a>
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium"
data-roll-key="{{item.id}}"></i>M
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.armors"}}</legend> <legend>{{localize "LETHALFANTASY.Label.weapons"}}</legend>
<div class="armors"> <div class="weapons">
{{#each armors as |item|}} {{#each weapons as |item|}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> data-drag-type="damage">
<div class="name" data-tooltip="{{{item.system.description}}}"> {{#if (ne item.img "icons/svg/item-bag.svg")}}
{{item.name}} <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}"
</div> />
<div class="item-detail" data-tooltip="Defense">{{item.system.defense}}</div> {{/if}}
<div class="item-detail" data-tooltip="Maximum movement">{{item.system.maximumMovement}}</div> <div class="name" data-tooltip="{{item.system.description}}">
<div class="item-detail" data-tooltip="HP">{{item.system.hp}}</div> {{item.name}}
<div class="item-detail" data-tooltip="Damage Reduction">{{item.system.damageReduction}}</div> </div>
<div class="controls"> <div class="attack-icons">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> <a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}" <i class="lf-roll-small fa-solid fa-swords" data-roll-type="weapon-attack"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small"
data-roll-key="{{item.id}}"></i>S
</a>
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium"
data-roll-key="{{item.id}}"></i>M
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div> </div>
{{/each}}
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.shields"}}</legend> <legend>{{localize "LETHALFANTASY.Label.armors"}}</legend>
<div class="shields"> <div class="armors">
{{#each shields as |item|}} {{#each armors as |item|}}
<div class="shield" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}"> <div class="name" data-tooltip="{{item.system.description}}">
{{item.name}} {{item.name}}
</div> </div>
<div class="item-detail" data-tooltip="Defense"> <div class="item-detail" data-tooltip="Defense">{{item.system.defense}}</div>
<a class="rollable" data-roll-type="shield-roll" data-roll-key="{{item.id}}" data-tooltip="Shield Defense"> <div class="item-detail" data-tooltip="Maximum movement">{{item.system.maximumMovement}}</div>
<i class="lf-roll-small fa-solid fa-shield" data-roll-type="shield-roll" data-roll-key="{{item.id}}"></i> <div class="item-detail" data-tooltip="HP">{{item.system.hp}}</div>
{{upperFirst item.system.defense}} <div class="item-detail" data-tooltip="Damage Reduction">{{item.system.damageReduction}}</div>
</a> <div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
</div> data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<div class="item-detail" data-tooltip="Movement reduction">{{item.system.movementreduction}}</div> <a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
<div class="item-detail" data-tooltip="Has cover">{{#if item.system.hascover}}Cover{{/if}}</div> data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div> </div>
{{/each}}
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<div>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.shields"}}</legend>
<div class="shields">
{{#each shields as |item|}}
<div class="shield" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{item.system.description}}">
{{item.name}}
</div>
<div class="item-detail" data-tooltip="Defense">
<a class="rollable" data-roll-type="shield-roll" data-roll-key="{{item.id}}" data-tooltip="Shield Defense">
<i class="lf-roll-small fa-solid fa-shield" data-roll-type="shield-roll" data-roll-key="{{item.id}}"></i>
{{upperFirst item.system.defense}}
</a>
</div>
<div class="item-detail" data-tooltip="Movement reduction">{{item.system.movementreduction}}</div>
<div class="item-detail" data-tooltip="Has cover">{{#if item.system.hascover}}Cover{{/if}}</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</div>
</section> </section>

View File

@@ -6,7 +6,7 @@
</div> </div>
<div class="intro-right"> <div class="intro-right">
<span>{{actingCharName}} - {{upperFirst rollName}}</span> <span><STRONG>{{actingCharName}} - {{upperFirst rollName}}</STRONG></span>
{{#if (match rollType "attack")}} {{#if (match rollType "attack")}}
<span>Attack roll !</span> <span>Attack roll !</span>
@@ -15,8 +15,14 @@
<span>Defense roll !</span> <span>Defense roll !</span>
{{/if}} {{/if}}
{{#if (eq rollData.favor "favor")}}
<span><strong>Favor roll</strong></span>
{{/if}}
{{#if (eq rollData.favor "disfavor")}}
<span><strong>Disfavor roll</strong></span>
{{/if}}
{{#if badResult}} {{#if badResult}}
<span>{{localize "LETHALFANTASY.Label.otherResult"}} : {{badResult}}</span> <span><strong>{{localize "LETHALFANTASY.Label.otherResult"}}</strong> : {{badResult}}</span>
{{/if}} {{/if}}
{{#if rollTarget.weapon}} {{#if rollTarget.weapon}}
@@ -32,14 +38,8 @@
{{#if rollData.beyondSkill}} {{#if rollData.beyondSkill}}
<span>Beyond Skill Range Attack !</span> <span>Beyond Skill Range Attack !</span>
{{/if}} {{/if}}
{{#if (eq rollData.favor "favor")}}
<span>Favor roll</span>
{{/if}}
{{#if (eq rollData.favor "disfavor")}}
<span>Disfavor roll</span>
{{/if}}
<span>Formula : {{titleFormula}}</span> <span><strong>Formula</strong> : {{titleFormula}}</span>
{{#each diceResults as |result|}} {{#each diceResults as |result|}}
<span>{{result.dice}} : {{result.value}}</span> <span>{{result.dice}} : {{result.value}}</span>

View File

@@ -36,9 +36,11 @@
<fieldSet> <fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend> <legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility"> <span class="fieldset-centered">
{{selectOptions rollModes selected=visibility localize=true}} <select name="visibility">
</select> {{selectOptions rollModes selected=visibility localize=true}}
</select>
</span>
</fieldSet> </fieldSet>
</div> </div>

View File

@@ -92,7 +92,7 @@
{{#if rollTarget.magicUser}} {{#if rollTarget.magicUser}}
<div> <div>
<span>Save against spell (+{{rollTarget.actorModifiers.saveModifier}}) ?</span> <span>Save against spell (+{{rollTarget.actorModifiers.saveModifier}}) ?</span>
<input type="checkbox" name="saveSpell" value="saveSpell"> <input type="checkbox" name="saveSpellCheck" data-action="saveSpellCheck">
</div> </div>
{{/if}} {{/if}}
{{/if}} {{/if}}