5 Commits

Author SHA1 Message Date
59a39850ce Fix miracle/spell rolls + upadte compendiums
All checks were successful
Release Creation / build (release) Successful in 56s
2025-09-09 20:14:25 +02:00
6eeb391d1a Move aiming to attacker
All checks were successful
Release Creation / build (release) Successful in 1m9s
2025-09-05 23:26:11 +02:00
c7727076bf Various fixes and renamingé
All checks were successful
Release Creation / build (release) Successful in 1m30s
2025-09-02 21:06:33 +02:00
d0411f9ec9 Various fixes and renamingé 2025-09-02 18:17:31 +02:00
e5653a4edc Latest modifications & changes
All checks were successful
Release Creation / build (release) Successful in 1m47s
2025-08-31 11:28:52 +02:00
47 changed files with 438 additions and 337 deletions

View File

@@ -682,7 +682,8 @@ i.lethalfantasy {
gap: 4px;
}
.lethalfantasy .tab.character-spells .main-div .spells .spell .item-img {
width: 24px;
min-width: 24px;
max-width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-spells .main-div .spells .spell .name {
@@ -2292,6 +2293,15 @@ i.lethalfantasy {
font-size: calc(var(--font-size-standard) * 1);
color: var(--color-dark-1);
}
.main select,
.dialog-damage select,
.dialog-resource select,
.dialog-challenge select,
.dialog-save select {
min-width: 8rem;
max-width: 8rem;
margin-left: 1rem;
}
.dice-roll {
flex-direction: column;
}

View File

@@ -83,7 +83,7 @@
},
"challenges": {
"agility": {
"label": "Agility"
"label": "Dexterity"
},
"dying": {
"label": "Dying"
@@ -181,7 +181,7 @@
},
"challenges": {
"agility": {
"label": "Agility"
"label": "Dexterity"
},
"dying": {
"label": "Dying"
@@ -281,6 +281,7 @@
}
},
"Label": {
"agility": "Dexterity",
"gotoToken": "Go to token",
"combatAction": "Combat action",
"currentAction": "Current ongoing action",
@@ -348,7 +349,7 @@
"cha": "CHA",
"challenge": "Challenge",
"challenges": {
"agility": "Agility",
"agility": "Dexterity",
"dying": "Dying",
"strength": "Strength"
},

View File

@@ -44,63 +44,64 @@ export const MONEY = {
}
export const MORTAL_CHOICES = {
"mankind": {label: "Mankind", id: "mankind", defenseBonus: 0},
"elf": {label: "Elf", id: "elf", defenseBonus: 0},
"dwarf": {label: "Dwarf", id: "dwarf", defenseBonus: 0},
"halfelf": {label: "Half-Elf", id: "halfelf", defenseBonus: 0},
"halforc": {label: "Half-Orc", id: "halforc", defenseBonus: 0},
"gnome": {label: "Gnome", id: "gnome", defenseBonus: 2},
"halflings": {label: "Halflings", id: "halflings", defenseBonus: 2}
"mankind": { label: "Mankind", id: "mankind", defenseBonus: 0 },
"elf": { label: "Elf", id: "elf", defenseBonus: 0 },
"dwarf": { label: "Dwarf", id: "dwarf", defenseBonus: 0 },
"halfelf": { label: "Half-Elf", id: "halfelf", defenseBonus: 0 },
"halforc": { label: "Half-Orc", id: "halforc", defenseBonus: 0 },
"gnome": { label: "Gnome", id: "gnome", defenseBonus: 2 },
"halflings": { label: "Halfling", id: "halflings", defenseBonus: 2 }
}
export const FAVOR_CHOICES = {
"none": {label: "None", value: "none"},
"favor": {label: "Favor", value: "favor"},
"disfavor": {label: "Disfavor", value: "disfavor"}
"none": { label: "None", value: "none" },
"favor": { label: "Favor", value: "favor" },
"disfavor": { label: "Disfavor", value: "disfavor" }
}
export const MOVEMENT_CHOICES = {
"none": {label: "None (D20E Disfavor)", disfavor: true, value: "2D20kl"},
"walk": {label: "Walk (D20E Disfavor)", disfavor: true, value: "2D20kl"},
"run": {label: "Jog/Run/Sprint (D20E Favor)", favor: true, value: "2D20kh"},
"incombat": {label: "In Combat (D20E)", favor: false, value: "D20"}
"none": { label: "None (D20E Disfavor)", disfavor: true, value: "2D20kl" },
"walk": { label: "Walk (D20E)", disfavor: true, value: "D20" },
"incombat": { label: "In Combat (D20E)", favor: false, value: "D20" },
"run": { label: "Jog/Run/Sprint (D20E Favor)", favor: true, value: "2D20kh" }
}
export const MOVE_DIRECTION_CHOICES = {
"none": {label: "None (+0)", value: "0"},
"away": {label: "Away (+4)", value: "+4"},
"toward": {label: "Toward (-5)", value: "-5"},
"lateral": {label: "Lateral (+10)", value: "+10"}
"away": { label: "Away (+0)", value: "+0" },
"toward": { label: "Toward (0)", value: "0" },
"lateral": { label: "Lateral (Red +5)", value: "+5" },
"none": { label: "None (+0)", value: "0" },
}
export const SIZE_CHOICES = {
"tiny": {label: "Tiny (+10)", value: "+10"},
"small": {label: "Small (+5)", value: "+5"},
"medium": {label: "Medium (+0)", value: "0"},
"huge": {label: "Huge (-10)", value: "-10"}
"tiny": { label: "Tiny (Blue +11)", value: "+11" },
"small": { label: "Small (Purple +7)", value: "+7" },
"medium": { label: "Medium (Red +5)", value: "+5" },
"large": { label: "Large (Yellow +1)", value: "+1" },
"huge": { label: "Huge (0)", value: "0" }
}
export const RANGE_CHOICES = {
"pointblank": {label: "Point Blank (-5)", value: "-5"},
"short": {label: "Short (+0)", value: "0"},
"medium": {label: "Medium (+8)", value: "+8"},
"long": {label: "Long (+15)", value: "+15"},
"extreme": {label: "Extreme (+20)", value: "+20"},
"beyondskill": {label: "Beyond Skill (+25)", value: "+25"}
"pointblank": { label: "Point Blank (Special)", value: "pointblank" },
"short": { label: "Short (+0)", value: "0" },
"medium": { label: "Medium (Red +5)", value: "+5" },
"long": { label: "Long (Purle +7)", value: "+7" },
"extreme": { label: "Extreme (Grey +9)", value: "+9" },
"beyondskill": { label: "Beyond Skill (Blue +11)", value: "beyondskill" }
}
export const ATTACKER_AIM_CHOICES = {
"simple": {label: "Simple (+0)", value: "0"},
"careful": {label: "Careful (-4)", value: "-4"},
"focused": {label: "Focused (-8)", value: "-8"}
"simple": { label: "Simple (+0)", value: "0" },
"careful": { label: "Careful (Red +5)", value: "+4" },
"focused": { label: "Focused (Grey +9)", value: "+9" }
}
export const SPELL_LETHARGY_DICE = [
{dice: "D6", level: "1-5", value: "6", maxLevel: 5},
{dice: "D8", level: "6-10", value: "8", maxLevel: 10},
{dice: "D10", value: "10", level: "11-15", maxLevel: 15},
{dice: "D12", value: "12", level: "16-20", maxLevel: 20},
{dice: "D20", value: "20", level: "21-25", maxLevel: 25}
{ dice: "D6", level: "1-5", value: "6", maxLevel: 5 },
{ dice: "D8", level: "6-10", value: "8", maxLevel: 10 },
{ dice: "D10", value: "10", level: "11-15", maxLevel: 15 },
{ dice: "D12", value: "12", level: "16-20", maxLevel: 20 },
{ dice: "D20", value: "20", level: "21-25", maxLevel: 25 }
]
export const INITIATIVE_DICE_CHOICES_PER_CLASS = {
@@ -108,44 +109,44 @@ export const INITIATIVE_DICE_CHOICES_PER_CLASS = {
{ "name": "Asleep or totally distracted (2D12)", "value": "2D12" },
{ "name": "Awake but unsuspecting (2D8)", "value": "2D8" },
{ "name": "Declared Ready on Alert (2D6)", "value": "2D6" },
{ "name": "Aware of the enemy, can hear them but not see (2D4)", "value": "2D4" },
{ "name": "Aware and know exactly where the enemy is (2D3)", "value": "2D3" }
/*{ "name": "Aware of the enemy, can hear them but not see (2D4)", "value": "2D4" },
{ "name": "Aware and know exactly where the enemy is (2D3)", "value": "2D3" }*/
],
"fighter": [
{ "name": "Asleep or totally distracted (1D12)", "value": "1D12" },
{ "name": "Awake but unsuspecting (1D8)", "value": "1D8" },
{ "name": "Declared Ready on Alert (1D6)", "value": "1D6" },
{ "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" },
{ "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3" }
{ "name": "Declared Ready on Alert (1)", "value": "1" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" },
{ "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3" }*/
],
"rogue": [
{ "name": "Asleep or totally distracted (1D10)", "value": "1D10" },
{ "name": "Awake but unsuspecting (1D8)", "value": "1D8" },
{ "name": "Declared Ready on Alert (1D6)", "value": "1D6" },
{ "name": "Aware of the enemy, can hear them but not see (1D3)", "value": "1D3" },
{ "name": "Aware and know exactly where the enemy is (1D2)", "value": "1D2" }
{ "name": "Declared Ready on Alert (1)", "value": "1" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D3)", "value": "1D3" },
{ "name": "Aware and know exactly where the enemy is (1D2)", "value": "1D2" }*/
],
"ranger": [
{ "name": "Asleep or totally distracted (1D10)", "value": "1D10" },
{ "name": "Awake but unsuspecting (1D8)", "value": "1D8" },
{ "name": "Declared Ready on Alert (1D6)", "value": "1D6" },
{ "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" },
{ "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3"}
{ "name": "Declared Ready on Alert (1)", "value": "1" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" },
{ "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3" }*/
],
"cleric": [
{ "name": "Asleep or totally distracted (1D12)", "value": "1D12" },
{ "name": "Awake but unsuspecting (1D10)", "value": "1D10" },
{ "name": "Declared Ready on Alert (1D8)", "value": "1D8" },
{ "name": "Aware of the enemy, can hear them but not see (1D6)", "value": "1D6" },
{ "name": "Aware and know exactly where the enemy is (1D4)", "value": "1D4" }
{ "name": "Declared Ready on Alert (1D)", "value": "1D" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D6)", "value": "1D6" },
{ "name": "Aware and know exactly where the enemy is (1D4)", "value": "1D4" }*/
],
"magicuser": [
{ "name": "Sleeping to recover Aether Points (2D20)", "value": "2D20" },
{ "name": "Asleep or totally distracted (1D20)", "value": "1D20" },
{ "name": "Awake but unsuspecting (1D12)", "value": "1D12" },
{ "name": "Declared Ready on Alert (1D10)", "value": "1D10" },
{ "name": "Aware of the enemy, can hear them but not see (1D8)", "value": "1D8" },
{ "name": "Aware and know exactly where the enemy is (1D6)", "value": "1D6" }
{ "name": "Declared Ready on Alert (1)", "value": "1" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D8)", "value": "1D8" },
{ "name": "Aware and know exactly where the enemy is (1D6)", "value": "1D6" }*/
]
}
@@ -159,12 +160,12 @@ export const CHAR_CLASSES = {
}
export const CHAR_CLASSES_DEFINES = {
"untrained": {id: "untrained", label: "Untrained"},
"fighter": {id: "fighter", label: "Fighter"},
"rogue": {id: "rogue", label: "Rogue"},
"ranger": {id: "ranger", label: "Ranger"},
"cleric": {id: "cleric", label: "Cleric"},
"magicuser": {id: "magicuser", label: "Magic User"}
"untrained": { id: "untrained", label: "Untrained" },
"fighter": { id: "fighter", label: "Fighter" },
"rogue": { id: "rogue", label: "Rogue" },
"ranger": { id: "ranger", label: "Ranger" },
"cleric": { id: "cleric", label: "Cleric" },
"magicuser": { id: "magicuser", label: "Magic User" }
}
export const DICE_VALUES = {
@@ -177,10 +178,10 @@ export const DICE_VALUES = {
"d20": "D20"
}
export const CHARACTERISTIC_ATTACK = [ "str", "int", "wis", "dex"]
export const CHARACTERISTIC_RANGED_ATTACK = [ "int", "wis", "dex"]
export const CHARACTERISTIC_DEFENSE = [ "int", "wis", "dex" ]
export const CHARACTERISTIC_DAMAGE = [ "str" ]
export const CHARACTERISTIC_ATTACK = ["str", "int", "wis", "dex"]
export const CHARACTERISTIC_RANGED_ATTACK = ["int", "wis", "dex"]
export const CHARACTERISTIC_DEFENSE = ["int", "wis", "dex"]
export const CHARACTERISTIC_DAMAGE = ["str"]
export const DEFENSE_DICE_VALUES = {
"0": "0",
@@ -216,41 +217,41 @@ export const SPELL_CRITICAL = {
}
export const CHOICE_MODIFIERS = {
"-9": "-9",
"-8": "-8",
"-7": "-7",
"-6": "-6",
"-5": "-5",
"-4": "-4",
"-3": "-3",
"-2": "-2",
"-1": "-1",
"+0": "0",
"+1": "+1",
"+2": "+2",
"+3": "+3",
"+4": "+4",
"+5": "+5",
"+6": "+6",
"+7": "+7",
"+8": "+8",
"+9": "+9",
"+10": "+10",
"+11": "+11",
"+12": "+12",
"+13": "+13",
"+14": "+14",
"+15": "+15",
"+16": "+16",
"+17": "+17",
"+18": "+18",
"+19": "+19",
"+20": "+20",
"+21": "+21",
"+22": "+22",
"+23": "+23",
"+24": "+24",
"+25": "+25"
"-9": "-9",
"-8": "-8",
"-7": "-7",
"-6": "-6",
"-5": "-5",
"-4": "-4",
"-3": "-3",
"-2": "-2",
"-1": "-1",
"+0": "0",
"+1": "+1",
"+2": "+2",
"+3": "+3",
"+4": "+4",
"+5": "+5",
"+6": "+6",
"+7": "+7",
"+8": "+8",
"+9": "+9",
"+10": "+10",
"+11": "+11",
"+12": "+12",
"+13": "+13",
"+14": "+14",
"+15": "+15",
"+16": "+16",
"+17": "+17",
"+18": "+18",
"+19": "+19",
"+20": "+20",
"+21": "+21",
"+22": "+22",
"+23": "+23",
"+24": "+24",
"+25": "+25"
}
export const ASCII = `

View File

@@ -96,6 +96,10 @@ export default class LethalFantasyRoll extends Roll {
return this.options.badResult
}
get rollData() {
return this.options.rollData
}
/**
* Prompt the user with a dialog to configure and execute a roll.
*
@@ -124,6 +128,9 @@ export default class LethalFantasyRoll extends Roll {
let hasFavor = false
let hasMaxValue = true
let hasGrantedDice = false
let pointBlank = false
let letItFly = false
let beyondSkill = false
let hasStaticModifier = false
let hasExplode = true
@@ -132,13 +139,11 @@ export default class LethalFantasyRoll extends Roll {
hasD30 = options.rollType === "save"
if (options.rollTarget.rollKey === "dying") {
dice = options.rollTarget.value
maxValue = Number(options.rollTarget.value.match(/\d+/)[0])
hasModifier = false
hasChangeDice = true
hasFavor = true
} else {
dice = "1D20"
maxValue = 20
hasFavor = true
}
@@ -148,7 +153,6 @@ export default class LethalFantasyRoll extends Roll {
dice = options.rollTarget.formula
baseFormula = options.rollTarget.formula
hasModifier = false
maxValue = 100
hasMaxValue = false
hasChangeDice = false
hasFavor = false
@@ -158,7 +162,6 @@ export default class LethalFantasyRoll extends Roll {
options.rollName = options.rollTarget.name
dice = "1D20"
baseFormula = "D20"
maxValue = 20
hasModifier = true
hasChangeDice = false
hasFavor = true
@@ -172,29 +175,27 @@ export default class LethalFantasyRoll extends Roll {
} else if (options.rollType === "monster-skill") {
options.rollName = game.i18n.localize(`LETHALFANTASY.Label.${options.rollTarget.rollKey}`)
dice = "1D100"
baseFormula = "D100"
maxValue = 100
dice = "1D20"
baseFormula = "D20"
hasModifier = true
hasFavor = true
hasChangeDice = false
} else if (options.rollType === "skill") {
options.rollName = options.rollTarget.name
dice = "1D100"
baseFormula = "D100"
maxValue = 100
hasD30 = true
dice = "1D20"
baseFormula = "D20"
hasModifier = true
hasFavor = true
hasChangeDice = false
options.rollTarget.value = options.rollTarget.system.skillTotal
options.rollTarget.value = Math.floor(options.rollTarget.system.skillTotal / 10)
} else if (options.rollType === "weapon-attack" || options.rollType === "weapon-defense") {
hasD30 = true
options.rollName = options.rollTarget.name
dice = "1D20"
baseFormula = "D20"
maxValue = 20
hasModifier = true
hasChangeDice = false
hasFavor = true
@@ -216,7 +217,6 @@ export default class LethalFantasyRoll extends Roll {
options.rollName = options.rollTarget.name
dice = "1D20"
baseFormula = "D20"
maxValue = 20
hasModifier = true
hasChangeDice = false
options.rollTarget.value = options.rollTarget.actorModifiers.levelSpellModifier + options.rollTarget.actorModifiers.intSpellModifier
@@ -234,7 +234,6 @@ export default class LethalFantasyRoll extends Roll {
options.rollName = options.rollTarget.name
dice = "1D20"
baseFormula = "D20"
maxValue = 20
hasChangeDice = false
options.rollTarget.value = options.rollTarget.actorModifiers.levelMiracleModifier + options.rollTarget.actorModifiers.chaMiracleModifier
options.rollTarget.charModifier = options.rollTarget.actorModifiers.chaMiracleModifier
@@ -271,7 +270,6 @@ export default class LethalFantasyRoll extends Roll {
}
dice = dice.replace("E", "")
baseFormula = dice
maxValue = 20
} else if (options.rollType.includes("monster-damage")) {
options.rollName = options.rollTarget.name
@@ -282,7 +280,6 @@ export default class LethalFantasyRoll extends Roll {
dice = options.rollTarget.damageDice
dice = dice.replace("E", "")
baseFormula = dice
maxValue = 20
}
@@ -317,7 +314,10 @@ export default class LethalFantasyRoll extends Roll {
hasModifier,
hasFavor,
hasChangeDice,
pointBlank,
baseValue: options.rollTarget.value,
attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES,
attackerAim: "0",
changeDice: `${dice}`,
fieldRollMode,
choiceModifier,
@@ -359,7 +359,16 @@ export default class LethalFantasyRoll extends Roll {
"selectGranted": (event, button, dialog) => {
hasGrantedDice = true
},
"gotoToken" : (event, button, dialog) => {
"selectBeyondSkill": (event, button, dialog) => {
beyondSkill = button.checked
},
"selectPointBlank": (event, button, dialog) => {
pointBlank = button.checked
},
"selectLetItFly": (event, button, dialog) => {
letItFly = button.checked
},
"gotoToken": (event, button, dialog) => {
let tokenId = $(button).data("tokenId")
let token = canvas.tokens?.get(tokenId)
if (token) {
@@ -383,16 +392,15 @@ export default class LethalFantasyRoll extends Roll {
let bonus = Number(options.rollTarget.value)
fullModifier = rollContext.modifier === "" ? 0 : parseInt(rollContext.modifier, 10) + bonus
fullModifier += (rollContext.saveSpell) ? options.rollTarget.actorModifiers.saveModifier : 0
if (Number(rollContext.attackerAim) > 0) {
fullModifier += Number(rollContext.attackerAim)
}
if (fullModifier === 0) {
modifierFormula = "0"
} else {
if (options.rollType === "skill" || options.rollType === "monster-skill") {
modifierFormula = `${fullModifier}`
} else {
let modAbs = Math.abs(fullModifier)
modifierFormula = `D${modAbs + 1} - 1`
}
let modAbs = Math.abs(fullModifier)
modifierFormula = `D${modAbs + 1} - 1`
}
if (hasStaticModifier) {
modifierFormula += ` + ${options.rollTarget.staticModifier}`
@@ -415,6 +423,14 @@ export default class LethalFantasyRoll extends Roll {
}
}
// Latest addition : favor choice at point blank range
if (pointBlank) {
rollContext.favor = "favor"
}
if (beyondSkill) {
rollContext.favor = "disfavor"
}
// Specific pain case
if (options.rollType === "save" && options.rollTarget.rollKey === "pain" || options.rollTarget.rollKey === "paincourage") {
baseFormula = options.rollTarget.rollDice
@@ -428,6 +444,16 @@ export default class LethalFantasyRoll extends Roll {
hasD30 = false
}
if (letItFly) {
baseFormula = "1D20"
titleFormula = `1D20E`
modifierFormula = "0"
fullModifier = 0
hasFavor = false
hasExplode = true
rollContext.favor = "none"
}
maxValue = Number(baseFormula.match(/\d+$/)[0]) // Update the max value agains
const rollData = {
@@ -440,6 +466,9 @@ export default class LethalFantasyRoll extends Roll {
actorImage: options.actorImage,
rollMode: rollContext.visibility,
hasTarget: options.hasTarget,
pointBlank,
beyondSkill,
letItFly,
hasGrantedDice,
titleFormula,
targetName,
@@ -552,6 +581,7 @@ export default class LethalFantasyRoll extends Roll {
rollBase.options.titleFormula = titleFormula
rollBase.options.D30result = options.D30result
rollBase.options.badResult = badResult
rollBase.options.rollData = foundry.utils.duplicate(rollData)
/**
* A hook event that fires after the roll has been made.
@@ -935,7 +965,24 @@ export default class LethalFantasyRoll extends Roll {
rejectClose: false // Click on Close button will not launch an error
})
// If the user cancels the dialog, exit
if (rollContext === null) return
console.log("RollContext", rollContext)
// Add disfavor/favor option if point blank range
if (rollContext.range === "pointblank") {
rollContext.movement = rollContext.movement.replace("kh", "")
rollContext.movement = rollContext.movement.replace("kl", "")
rollContext.movement += "kl" // Add the kl to the movement (disfavor for point blank range)
rollContext.range = "0"
}
if (rollContext.range === "beyondskill") {
rollContext.movement = rollContext.movement.replace("kh", "")
rollContext.movement = rollContext.movement.replace("kl", "")
rollContext.movement += "kh" // Add the kl to the movement (disfavor for point blank range)
rollContext.range = "+11"
}
// Build the final modifier
let fullModifier = Number(rollContext.moveDirection) +
Number(rollContext.size) +
@@ -951,9 +998,6 @@ export default class LethalFantasyRoll extends Roll {
modifierFormula = `${modAbs}`
}
// If the user cancels the dialog, exit
if (rollContext === null) return
let rollData = { ...rollContext }
let options = { ...rollContext }
options.rollName = "Ranged Defense"
@@ -965,6 +1009,7 @@ export default class LethalFantasyRoll extends Roll {
let rollD30 = await new Roll("1D30").evaluate()
options.D30result = rollD30.total
let dice = rollContext.movement
let maxValue = 20 // As per latest changes (was : Number(dice.match(/\d+$/)[0])
let rollTotal = -1
@@ -1082,6 +1127,7 @@ export default class LethalFantasyRoll extends Roll {
targetArmor: this.targetArmor,
D30result: this.D30result,
badResult: this.badResult,
rollData: this.rollData,
isPrivate: isPrivate
}
cardData.cssClass = cardData.css.join(" ")
@@ -1113,6 +1159,7 @@ export default class LethalFantasyRoll extends Roll {
targetArmor: this.targetArmor,
targetMalus: this.targetMalus,
realDamage: this.realDamage,
rollData: this.rollData,
...messageData,
},
{ rollMode: rollMode },

View File

@@ -1 +1 @@
MANIFEST-000372
MANIFEST-000408

View File

@@ -1,8 +1,8 @@
2025/06/10-20:35:39.155336 7f629dffb6c0 Recovering log #370
2025/06/10-20:35:39.196584 7f629dffb6c0 Delete type=3 #368
2025/06/10-20:35:39.196659 7f629dffb6c0 Delete type=0 #370
2025/06/10-20:37:28.450501 7f5ffffff6c0 Level-0 table #375: started
2025/06/10-20:37:28.450543 7f5ffffff6c0 Level-0 table #375: 0 bytes OK
2025/06/10-20:37:28.476819 7f5ffffff6c0 Delete type=0 #373
2025/06/10-20:37:28.500565 7f5ffffff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/06/10-20:37:28.500612 7f5ffffff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/09-20:04:59.829367 7f811affd6c0 Recovering log #406
2025/09/09-20:04:59.839654 7f811affd6c0 Delete type=3 #404
2025/09/09-20:04:59.839707 7f811affd6c0 Delete type=0 #406
2025/09/09-20:14:01.132105 7f811a7fc6c0 Level-0 table #411: started
2025/09/09-20:14:01.132136 7f811a7fc6c0 Level-0 table #411: 0 bytes OK
2025/09/09-20:14:01.139097 7f811a7fc6c0 Delete type=0 #409
2025/09/09-20:14:01.170651 7f811a7fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/09-20:14:01.170691 7f811a7fc6c0 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/06/05-15:50:28.883020 7ff25bfff6c0 Recovering log #366
2025/06/05-15:50:28.892731 7ff25bfff6c0 Delete type=3 #364
2025/06/05-15:50:28.892781 7ff25bfff6c0 Delete type=0 #366
2025/06/05-16:13:09.126587 7ff25a3ff6c0 Level-0 table #371: started
2025/06/05-16:13:09.126654 7ff25a3ff6c0 Level-0 table #371: 0 bytes OK
2025/06/05-16:13:09.133473 7ff25a3ff6c0 Delete type=0 #369
2025/06/05-16:13:09.133695 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/06/05-16:13:09.133722 7ff25a3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/09-20:04:40.803409 7f8120dfa6c0 Recovering log #402
2025/09/09-20:04:40.813179 7f8120dfa6c0 Delete type=3 #400
2025/09/09-20:04:40.813231 7f8120dfa6c0 Delete type=0 #402
2025/09/09-20:04:50.082984 7f811a7fc6c0 Level-0 table #407: started
2025/09/09-20:04:50.083011 7f811a7fc6c0 Level-0 table #407: 0 bytes OK
2025/09/09-20:04:50.088948 7f811a7fc6c0 Delete type=0 #405
2025/09/09-20:04:50.102813 7f811a7fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/09-20:04:50.102846 7f811a7fc6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000371
MANIFEST-000407

View File

@@ -1,8 +1,15 @@
2025/06/10-20:35:39.201789 7f629d7fa6c0 Recovering log #369
2025/06/10-20:35:39.246460 7f629d7fa6c0 Delete type=3 #367
2025/06/10-20:35:39.246611 7f629d7fa6c0 Delete type=0 #369
2025/06/10-20:37:28.405714 7f5ffffff6c0 Level-0 table #374: started
2025/06/10-20:37:28.405787 7f5ffffff6c0 Level-0 table #374: 0 bytes OK
2025/06/10-20:37:28.430215 7f5ffffff6c0 Delete type=0 #372
2025/06/10-20:37:28.500536 7f5ffffff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/06/10-20:37:28.500586 7f5ffffff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/09-20:04:59.843330 7f811bfff6c0 Recovering log #405
2025/09/09-20:04:59.853031 7f811bfff6c0 Delete type=3 #403
2025/09/09-20:04:59.853123 7f811bfff6c0 Delete type=0 #405
2025/09/09-20:14:01.039360 7f811a7fc6c0 Level-0 table #410: started
2025/09/09-20:14:01.042968 7f811a7fc6c0 Level-0 table #410: 15906 bytes OK
2025/09/09-20:14:01.050037 7f811a7fc6c0 Delete type=0 #408
2025/09/09-20:14:01.083045 7f811a7fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/09-20:14:01.083115 7f811a7fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at '!items!zjvGljrLk5SshC9D' @ 152 : 0
2025/09/09-20:14:01.083123 7f811a7fc6c0 Compacting 1@1 + 1@2 files
2025/09/09-20:14:01.086586 7f811a7fc6c0 Generated table #411@1: 32 keys, 15258 bytes
2025/09/09-20:14:01.086603 7f811a7fc6c0 Compacted 1@1 + 1@2 files => 15258 bytes
2025/09/09-20:14:01.094593 7f811a7fc6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2025/09/09-20:14:01.094890 7f811a7fc6c0 Delete type=2 #322
2025/09/09-20:14:01.095210 7f811a7fc6c0 Delete type=2 #410
2025/09/09-20:14:01.122172 7f811a7fc6c0 Manual compaction at level-1 from '!items!zjvGljrLk5SshC9D' @ 152 : 0 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/06/05-15:50:28.899788 7ff25affd6c0 Recovering log #365
2025/06/05-15:50:28.910099 7ff25affd6c0 Delete type=3 #363
2025/06/05-15:50:28.910166 7ff25affd6c0 Delete type=0 #365
2025/06/05-16:13:09.075458 7ff25a3ff6c0 Level-0 table #370: started
2025/06/05-16:13:09.075508 7ff25a3ff6c0 Level-0 table #370: 0 bytes OK
2025/06/05-16:13:09.082149 7ff25a3ff6c0 Delete type=0 #368
2025/06/05-16:13:09.102903 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/06/05-16:13:09.102950 7ff25a3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/09-20:04:40.816586 7f811affd6c0 Recovering log #401
2025/09/09-20:04:40.826708 7f811affd6c0 Delete type=3 #399
2025/09/09-20:04:40.826778 7f811affd6c0 Delete type=0 #401
2025/09/09-20:04:50.089056 7f811a7fc6c0 Level-0 table #406: started
2025/09/09-20:04:50.089094 7f811a7fc6c0 Level-0 table #406: 0 bytes OK
2025/09/09-20:04:50.095242 7f811a7fc6c0 Delete type=0 #404
2025/09/09-20:04:50.102822 7f811a7fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/09-20:04:50.102852 7f811a7fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000371
MANIFEST-000407

View File

@@ -1,8 +1,15 @@
2025/06/10-20:35:39.107142 7f629e7fc6c0 Recovering log #369
2025/06/10-20:35:39.151441 7f629e7fc6c0 Delete type=3 #367
2025/06/10-20:35:39.151517 7f629e7fc6c0 Delete type=0 #369
2025/06/10-20:37:28.430382 7f5ffffff6c0 Level-0 table #374: started
2025/06/10-20:37:28.430420 7f5ffffff6c0 Level-0 table #374: 0 bytes OK
2025/06/10-20:37:28.450367 7f5ffffff6c0 Delete type=0 #372
2025/06/10-20:37:28.500550 7f5ffffff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/06/10-20:37:28.500595 7f5ffffff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/09-20:04:59.816534 7f8120dfa6c0 Recovering log #405
2025/09/09-20:04:59.826062 7f8120dfa6c0 Delete type=3 #403
2025/09/09-20:04:59.826148 7f8120dfa6c0 Delete type=0 #405
2025/09/09-20:14:01.064807 7f811a7fc6c0 Level-0 table #410: started
2025/09/09-20:14:01.070719 7f811a7fc6c0 Level-0 table #410: 149145 bytes OK
2025/09/09-20:14:01.076657 7f811a7fc6c0 Delete type=0 #408
2025/09/09-20:14:01.083085 7f811a7fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/09-20:14:01.111093 7f811a7fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at '!items!zt8s7564ep1La4XQ' @ 612 : 0
2025/09/09-20:14:01.111103 7f811a7fc6c0 Compacting 1@1 + 1@2 files
2025/09/09-20:14:01.115854 7f811a7fc6c0 Generated table #411@1: 88 keys, 116881 bytes
2025/09/09-20:14:01.115886 7f811a7fc6c0 Compacted 1@1 + 1@2 files => 116881 bytes
2025/09/09-20:14:01.121744 7f811a7fc6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2025/09/09-20:14:01.121874 7f811a7fc6c0 Delete type=2 #322
2025/09/09-20:14:01.122036 7f811a7fc6c0 Delete type=2 #410
2025/09/09-20:14:01.122196 7f811a7fc6c0 Manual compaction at level-1 from '!items!zt8s7564ep1La4XQ' @ 612 : 0 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/06/05-15:50:28.868698 7ff2609fa6c0 Recovering log #365
2025/06/05-15:50:28.879202 7ff2609fa6c0 Delete type=3 #363
2025/06/05-15:50:28.879260 7ff2609fa6c0 Delete type=0 #365
2025/06/05-16:13:09.089330 7ff25a3ff6c0 Level-0 table #370: started
2025/06/05-16:13:09.089359 7ff25a3ff6c0 Level-0 table #370: 0 bytes OK
2025/06/05-16:13:09.096545 7ff25a3ff6c0 Delete type=0 #368
2025/06/05-16:13:09.102932 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/06/05-16:13:09.102971 7ff25a3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/09-20:04:40.790103 7f811b7fe6c0 Recovering log #401
2025/09/09-20:04:40.799986 7f811b7fe6c0 Delete type=3 #399
2025/09/09-20:04:40.800061 7f811b7fe6c0 Delete type=0 #401
2025/09/09-20:04:50.076859 7f811a7fc6c0 Level-0 table #406: started
2025/09/09-20:04:50.076908 7f811a7fc6c0 Level-0 table #406: 0 bytes OK
2025/09/09-20:04:50.082849 7f811a7fc6c0 Delete type=0 #404
2025/09/09-20:04:50.102802 7f811a7fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/09-20:04:50.102835 7f811a7fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000071
MANIFEST-000107

View File

@@ -1,8 +1,15 @@
2025/06/10-20:35:39.298099 7f629dffb6c0 Recovering log #69
2025/06/10-20:35:39.345253 7f629dffb6c0 Delete type=3 #67
2025/06/10-20:35:39.345331 7f629dffb6c0 Delete type=0 #69
2025/06/10-20:37:28.546716 7f5ffffff6c0 Level-0 table #74: started
2025/06/10-20:37:28.546783 7f5ffffff6c0 Level-0 table #74: 0 bytes OK
2025/06/10-20:37:28.574324 7f5ffffff6c0 Delete type=0 #72
2025/06/10-20:37:28.612191 7f5ffffff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/06/10-20:37:28.612270 7f5ffffff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/09-20:04:59.867080 7f811b7fe6c0 Recovering log #105
2025/09/09-20:04:59.877643 7f811b7fe6c0 Delete type=3 #103
2025/09/09-20:04:59.877696 7f811b7fe6c0 Delete type=0 #105
2025/09/09-20:14:01.050289 7f811a7fc6c0 Level-0 table #110: started
2025/09/09-20:14:01.058207 7f811a7fc6c0 Level-0 table #110: 430019 bytes OK
2025/09/09-20:14:01.064385 7f811a7fc6c0 Delete type=0 #108
2025/09/09-20:14:01.083065 7f811a7fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/09-20:14:01.095323 7f811a7fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at '!items!zKOpU34oLziGJW6y' @ 639 : 0
2025/09/09-20:14:01.095336 7f811a7fc6c0 Compacting 1@1 + 1@2 files
2025/09/09-20:14:01.103834 7f811a7fc6c0 Generated table #111@1: 260 keys, 421724 bytes
2025/09/09-20:14:01.103860 7f811a7fc6c0 Compacted 1@1 + 1@2 files => 421724 bytes
2025/09/09-20:14:01.110575 7f811a7fc6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2025/09/09-20:14:01.110756 7f811a7fc6c0 Delete type=2 #22
2025/09/09-20:14:01.110964 7f811a7fc6c0 Delete type=2 #110
2025/09/09-20:14:01.122184 7f811a7fc6c0 Manual compaction at level-1 from '!items!zKOpU34oLziGJW6y' @ 639 : 0 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/06/05-15:50:28.926119 7ff2609fa6c0 Recovering log #65
2025/06/05-15:50:28.936828 7ff2609fa6c0 Delete type=3 #63
2025/06/05-15:50:28.936884 7ff2609fa6c0 Delete type=0 #65
2025/06/05-16:13:09.082352 7ff25a3ff6c0 Level-0 table #70: started
2025/06/05-16:13:09.082382 7ff25a3ff6c0 Level-0 table #70: 0 bytes OK
2025/06/05-16:13:09.089177 7ff25a3ff6c0 Delete type=0 #68
2025/06/05-16:13:09.102923 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/06/05-16:13:09.102957 7ff25a3ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/09-20:04:40.841664 7f8120dfa6c0 Recovering log #101
2025/09/09-20:04:40.852508 7f8120dfa6c0 Delete type=3 #99
2025/09/09-20:04:40.852585 7f8120dfa6c0 Delete type=0 #101
2025/09/09-20:04:50.121356 7f811a7fc6c0 Level-0 table #106: started
2025/09/09-20:04:50.121387 7f811a7fc6c0 Level-0 table #106: 0 bytes OK
2025/09/09-20:04:50.127905 7f811a7fc6c0 Delete type=0 #104
2025/09/09-20:04:50.128027 7f811a7fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/09-20:04:50.128057 7f811a7fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000371
MANIFEST-000407

View File

@@ -1,8 +1,8 @@
2025/06/10-20:35:39.249707 7f629cff96c0 Recovering log #369
2025/06/10-20:35:39.295266 7f629cff96c0 Delete type=3 #367
2025/06/10-20:35:39.295351 7f629cff96c0 Delete type=0 #369
2025/06/10-20:37:28.477031 7f5ffffff6c0 Level-0 table #374: started
2025/06/10-20:37:28.477121 7f5ffffff6c0 Level-0 table #374: 0 bytes OK
2025/06/10-20:37:28.500386 7f5ffffff6c0 Delete type=0 #372
2025/06/10-20:37:28.500575 7f5ffffff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/06/10-20:37:28.500603 7f5ffffff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/09-20:04:59.855289 7f8120dfa6c0 Recovering log #405
2025/09/09-20:04:59.864565 7f8120dfa6c0 Delete type=3 #403
2025/09/09-20:04:59.864636 7f8120dfa6c0 Delete type=0 #405
2025/09/09-20:14:01.076905 7f811a7fc6c0 Level-0 table #410: started
2025/09/09-20:14:01.076943 7f811a7fc6c0 Level-0 table #410: 0 bytes OK
2025/09/09-20:14:01.082931 7f811a7fc6c0 Delete type=0 #408
2025/09/09-20:14:01.083098 7f811a7fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/09-20:14:01.122157 7f811a7fc6c0 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/06/05-15:50:28.913563 7ff25b7fe6c0 Recovering log #365
2025/06/05-15:50:28.923236 7ff25b7fe6c0 Delete type=3 #363
2025/06/05-15:50:28.923301 7ff25b7fe6c0 Delete type=0 #365
2025/06/05-16:13:09.096673 7ff25a3ff6c0 Level-0 table #370: started
2025/06/05-16:13:09.096704 7ff25a3ff6c0 Level-0 table #370: 0 bytes OK
2025/06/05-16:13:09.102790 7ff25a3ff6c0 Delete type=0 #368
2025/06/05-16:13:09.102942 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/06/05-16:13:09.102964 7ff25a3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/09-20:04:40.829012 7f811b7fe6c0 Recovering log #401
2025/09/09-20:04:40.838454 7f811b7fe6c0 Delete type=3 #399
2025/09/09-20:04:40.838506 7f811b7fe6c0 Delete type=0 #401
2025/09/09-20:04:50.095335 7f811a7fc6c0 Level-0 table #406: started
2025/09/09-20:04:50.095357 7f811a7fc6c0 Level-0 table #406: 0 bytes OK
2025/09/09-20:04:50.102580 7f811a7fc6c0 Delete type=0 #404
2025/09/09-20:04:50.102829 7f811a7fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/09-20:04:50.102841 7f811a7fc6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -4,7 +4,6 @@
overflow: scroll;
}
.character-main {
display: flex;
@@ -46,7 +45,7 @@
min-width: 2.2rem;
max-width: 2.2rem;
margin-left: 4px;
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
.character-hp-max {
clear: both;
@@ -58,7 +57,7 @@
input {
width: 3.2rem;
text-align: center;
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
}
}
@@ -223,7 +222,7 @@
}
}
.tab.character-biography .main-div{
.tab.character-biography .main-div {
.biodata {
display: grid;
grid-template-columns: repeat(4, 1fr);
@@ -253,7 +252,7 @@
}
}
.tab.character-skills .main-div{
.tab.character-skills .main-div {
display: grid;
grid-template-columns: 1fr;
legend {
@@ -474,7 +473,7 @@
min-width: 12rem;
}
.item-detail {
min-width:2rem;
min-width: 2rem;
}
}
.shields {
@@ -493,13 +492,12 @@
}
}
.item-detail {
min-width:2.5rem;
min-width: 2.5rem;
}
.name {
min-width: 12rem;
}
}
}
.tab.character-spells .main-div {
@@ -535,7 +533,6 @@
}
}
.spells {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -546,7 +543,8 @@
align-items: center;
gap: 4px;
.item-img {
width: 24px;
min-width: 24px;
max-width: 24px;
height: 24px;
}
.name {

View File

@@ -25,7 +25,6 @@
border-radius: 4px;
padding: 0.5rem;
}
}
.lethalfantasy-range-defense-dialog {
@@ -45,13 +44,12 @@
justify-content: left;
}
.field-name {
width:4rem;
width: 4rem;
min-width: 4rem;
max-width: 4rem;
}
}
.dialog-form {
.form-footer {
button {
@@ -87,7 +85,6 @@
}
}
.main,
.dialog-damage,
.dialog-resource,
@@ -99,8 +96,13 @@
justify-content: center;
align-items: center;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
color: var(--color-dark-1);
select {
min-width: 8rem;
max-width: 8rem;
margin-left: 1rem;
}
}
&.dice-roll {
@@ -133,7 +135,7 @@
flex-direction: column;
.introText {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
width: 210px;
margin-left: 20px;
}
@@ -144,7 +146,7 @@
flex-direction: column;
justify-content: center;
align-items: center;
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
text-shadow: 0 0 10px var(--color-shadow-primary);
}
}

View File

@@ -13,9 +13,11 @@
<fieldset class="">
<div class="flexrow character-hp">
<span class="name">{{localize "LETHALFANTASY.Label.HP"}}</span>
{{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp-value"}}
{{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode
classes="character-hp-value"}}
&nbsp;/&nbsp;
{{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp-value"}}
{{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode
classes="character-hp-value"}}
</div>
<div class="flexrow character-hp">
<span class="name">{{localize "LETHALFANTASY.Label.grit"}}</span>
@@ -36,7 +38,8 @@
<div class="flexrow ">
<span class="">{{localize "LETHALFANTASY.Label.damageResistanceShort"}}</span>
{{formInput systemFields.hp.fields.damageResistance value=system.hp.fields.damageResistance disabled=isPlayMode classes="character-hp"}}
{{formInput systemFields.hp.fields.damageResistance value=system.hp.fields.damageResistance
disabled=isPlayMode classes="character-hp"}}
</div>
@@ -84,36 +87,40 @@
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.contagion"}}
</a>
</span>
</span>
{{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value
disabled=true}}
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="poison"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.poison"}}
{{localize "LETHALFANTASY.Label.saves.poison"}}
</a>
</span>
{{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value
</span>
{{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value
disabled=true }}
<!--
<span class="name-pain">
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D12"><i
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D12"><i
class="lf-roll-small fa-solid fa-dice-d12"></i>
{{localize "LETHALFANTASY.Label.saves.pain"}}
{{localize "LETHALFANTASY.Label.saves.pain"}}
</a>
</span>
<span class="name-pain">
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D20"><i
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D20"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.pain"}}
{{localize "LETHALFANTASY.Label.saves.pain"}}
</a>
</span>
</span>
{{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=true}}
<span data-tooltip="Pain save if wound exceeds">
{{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode tooltip="Pain Damage"}}
{{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode
tooltip="Pain Damage"}}
</span>
-->
</div>
</div>
</fieldset>
@@ -132,7 +139,7 @@
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.challenges.agility"}}</a></span>
{{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value
disabled=true
disabled=true
}}
<span class="name"><a class="rollable" data-roll-type="challenge" data-roll-key="dying"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
@@ -228,14 +235,6 @@
{{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
<span>{{localize "LETHALFANTASY.Label.app"}}</span>
{{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value
disabled=isPlayMode data-char-id="app" }}
{{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent
disabled=isPlayMode type="number"}}
</div>
</fieldset>
</section>

View File

@@ -1,52 +1,52 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.divinityPoints"}}</legend>
<div class="miracle-details">
<div class="miracle-detail">
<span >Current</span>
{{formField systemFields.divinityPoints.fields.value value=system.divinityPoints.value localize=true}}
<a data-action="divinityPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="divinityPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.divinityPoints"}}</legend>
<div class="miracle-details">
<div class="miracle-detail">
<span>Current</span>
{{formField systemFields.divinityPoints.fields.value value=system.divinityPoints.value localize=true}}
<a data-action="divinityPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="divinityPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
<span >Max</span>
{{formField systemFields.divinityPoints.fields.max value=system.divinityPoints.max localize=true disabled=isPlayMode}}
<span>Max</span>
{{formField systemFields.divinityPoints.fields.max value=system.divinityPoints.max localize=true
disabled=isPlayMode}}
</div>
</div>
</div>
</fieldset>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addMiracle"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createMiracle"></i></a>{{/if}}</legend>
<div class="miracles">
{{#each miracles as |item|}}
<div class="miracle" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" >
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" >
{{item.name}}
</div>
<a class="rollable" data-roll-type="miracle-attack" data-roll-key="{{item.id}}" data-tooltip="Miracle Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="miracle-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="miracle-power" data-roll-key="{{item.id}}" data-tooltip="Miracle Power">
<i class="fa-duotone fa-solid fa-stars" data-roll-type="miracle-power" data-roll-key="{{item.id}}"></i>
</a>
<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>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addMiracle"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createMiracle"></i></a>{{/if}}</legend>
<div class="miracles">
{{#each miracles as |item|}}
<div class="miracle" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name">
{{item.name}}
</div>
<a class="rollable" data-roll-type="miracle-attack" data-roll-key="{{item.id}}" data-tooltip="Miracle Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="miracle-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="miracle-power" data-roll-key="{{item.id}}" data-tooltip="Miracle Power">
<i class="fa-duotone fa-solid fa-stars" data-roll-type="miracle-power" data-roll-key="{{item.id}}"></i>
</a>
<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>
{{/each}}
</div>
</fieldset>
</div>
</fieldset>
</div>
</section>

View File

@@ -15,38 +15,37 @@
disabled=isPlayMode}}
</div>
</div>
</div>
</fieldset>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addSpell"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createSpell"></i></a>{{/if}}</legend>
<div class="spells">
{{#each spells as |item|}}
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name">
{{item.name}}
</div>
<a class="rollable" data-roll-type="spell-attack" data-roll-key="{{item.id}}" data-tooltip="Spell Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="spell-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="spell-power" data-roll-key="{{item.id}}" data-tooltip="Spell Power">
<i class="fa-duotone fa-solid fa-stars" data-roll-type="spell-power" data-roll-key="{{item.id}}"></i>
</a>
<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>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addSpell"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createSpell"></i></a>{{/if}}</legend>
<div class="spells">
{{#each spells as |item|}}
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name">
{{item.name}}
</div>
<a class="rollable" data-roll-type="spell-attack" data-roll-key="{{item.id}}" data-tooltip="Spell Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="spell-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="spell-power" data-roll-key="{{item.id}}" data-tooltip="Spell Power">
<i class="fa-duotone fa-solid fa-stars" data-roll-type="spell-power" data-roll-key="{{item.id}}"></i>
</a>
<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>
{{/each}}
</div>
</fieldset>
</fieldset>
</div>
</section>

View File

@@ -23,6 +23,16 @@
<span>{{rollTarget.weapon.name}}</span>
{{/if}}
{{#if rollData.letItFly}}
<span>Let It Fly attack ! </span>
{{/if}}
{{#if rollData.pointBlank}}
<span>Point Blank Range Attack !</span>
{{/if}}
{{#if rollData.beyondSkill}}
<span>Beyond Skill Range Attack !</span>
{{/if}}
<span>Formula : {{titleFormula}}</span>
{{#each diceResults as |result|}}

View File

@@ -32,14 +32,6 @@
</select>
</div>
<div class="field-section">
<span class="field-name">Aim :</span>
<select name="attackerAim" data-tooltip-direction="UP">
{{selectOptions attackerAimChoices selected=attackerAim}}
</select>
</div>
</fieldSet>
<fieldSet>

View File

@@ -5,7 +5,8 @@
{{#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>
<a class="goto-token-button" data-action="gotoToken" data-token-id="{{rollTarget.tokenId}}">{{localize
"LETHALFANTASY.Label.gotoToken"}} </a>
</div>
{{/if}}
@@ -30,17 +31,37 @@
{{#if (match rollType "attack")}}
<div class="dialog-save">Add Granted Attack Dice
<input type="checkbox" data-action="selectGranted" name="granted" >
<input type="checkbox" data-action="selectGranted" name="granted">
</div>
{{#if rollTarget.weapon}}
{{#if (eq rollTarget.weapon.system.weaponType "melee")}}
{{else}}
<div class="dialog-save">Point Blank Range Attack
<input type="checkbox" data-action="selectPointBlank" name="pointBlankV">
</div>
<div class="dialog-save">Beyond Skill Range Attack
<input type="checkbox" data-action="selectBeyondSkill" name="beyondSkillV">
</div>
<div class="dialog-save">Let it Fly (Pure D20E)
<input type="checkbox" data-action="selectLetItFly" name="letItFlyV">
</div>
<div class="dialog-save">Aiming
<select name="attackerAim" data-tooltip-direction="UP">
{{selectOptions attackerAimChoices selected=attackerAim}}
</select>
</div>
{{/if}}
{{/if}}
{{/if}}
{{#if (match rollType "defense")}}
<div class="dialog-save">Add Granted Defense Dice
<input type="checkbox" data-action="selectGranted" name="granted" >
<input type="checkbox" data-action="selectGranted" name="granted">
</div>
{{/if}}
{{#if (match rollType "damage")}}
<div class="dialog-save">Add Granted Damage Dice
<input type="checkbox" data-action="selectGranted" name="granted" >
<input type="checkbox" data-action="selectGranted" name="granted">
</div>
{{/if}}

View File

@@ -29,7 +29,7 @@
</div>
<div class="align-top">
<label>Destruction</label>
<!-- <label>Destruction</label>
<div class="shift-right">
{{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}}
{{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}}
@@ -41,7 +41,7 @@
{{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}}
{{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}}
{{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}}
</div>
</div> -->
{{formField systemFields.equipped value=system.equipped}}