This commit is contained in:
parent
4b087fc9d8
commit
d961e130e0
@ -493,7 +493,7 @@
|
||||
"messageLethargyKO": "Lethargy stil ongoing ...",
|
||||
"messageProgressionKO": "{name} can't attack this second.",
|
||||
"messageProgressionOKMonster": "{name} can attack this second with {weapon}.",
|
||||
"messageProgressionKOMonster": "{name} can't attack this second."
|
||||
"messageProgressionKOMonster": "{name} can't attack this second (dice result {roll})."
|
||||
},
|
||||
"Opponent": {
|
||||
"FIELDS": {}
|
||||
|
@ -138,7 +138,6 @@ export class LethalFantasyCombat extends Combat {
|
||||
}
|
||||
|
||||
async nextRound() {
|
||||
console.log('NEXT ROUND')
|
||||
this.turnsDone = false
|
||||
|
||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||
@ -162,13 +161,12 @@ export class LethalFantasyCombat extends Combat {
|
||||
|
||||
for (let c of this.combatants) {
|
||||
if ( nextRound >= c.initiative) {
|
||||
c.update({ 'system.progressionCount': c.system.progressionCount + 1 });
|
||||
let user = game.users.find(u => u.active && u.character && u.character.id === c.actor.id);
|
||||
if (user?.hasPlayerOwner) {
|
||||
game.socket.emit(`system.${SYSTEM.id}`, { type: "rollProgressionDice", progressionCount: c.system.progressionCount+1, actorId: c.actor.id, combatId: this.id, combatantId: c.id });
|
||||
} else {
|
||||
user = game.users.find(u => u.active && u.isGM);
|
||||
c.actor.system.rollProgressionDice(this.id, c.id, c.system.progressionCount+1);
|
||||
c.actor.system.rollProgressionDice(this.id, c.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,71 +166,8 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet {
|
||||
async _onRoll(event, target) {
|
||||
if (this.isEditMode) return
|
||||
const rollType = event.target.dataset.rollType
|
||||
let rollTarget
|
||||
let rollKey = event.target.dataset.rollKey
|
||||
switch (rollType) {
|
||||
case "monster-attack":
|
||||
case "monster-defense":
|
||||
case "monster-damage":
|
||||
rollTarget = foundry.utils.duplicate(this.document.system.attacks[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
break
|
||||
case "monster-skill":
|
||||
rollTarget = foundry.utils.duplicate(this.document.system.resists[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
break
|
||||
case "save":
|
||||
rollTarget = foundry.utils.duplicate(this.document.system.saves[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
rollTarget.rollDice = event.target.dataset?.rollDice
|
||||
break
|
||||
case "weapon-damage-small":
|
||||
case "weapon-damage-medium":
|
||||
case "weapon-attack":
|
||||
case "weapon-defense":
|
||||
let weapon = this.actor.items.find((i) => i.type === "weapon" && i.id === rollKey)
|
||||
let skill
|
||||
let skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase() === weapon.name.toLowerCase())
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 1.0)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase().replace(" skill", "") === weapon.name.toLowerCase())
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 1.0)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass === weapon.system.weaponClass)
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 0.5)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass.includes(SYSTEM.WEAPON_CATEGORIES[weapon.system.weaponClass]))
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 0.25)
|
||||
} else {
|
||||
ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound"))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!weapon || !skill) {
|
||||
console.error("Weapon or skill not found", weapon, skill)
|
||||
ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound"))
|
||||
return
|
||||
}
|
||||
rollTarget = skill
|
||||
rollTarget.weapon = weapon
|
||||
rollTarget.weaponSkillModifier = skill.weaponSkillModifier
|
||||
rollTarget.rollKey = rollKey
|
||||
rollTarget.combat = foundry.utils.duplicate(this.actor.system.combat)
|
||||
break
|
||||
default:
|
||||
ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType))
|
||||
break
|
||||
}
|
||||
|
||||
// In all cases
|
||||
console.log(rollTarget)
|
||||
await this.document.system.roll(rollType, rollTarget)
|
||||
let rollDice = event.target.dataset?.rollDice || "0"
|
||||
this.actor.system.prepareMonsterRoll(rollType, rollKey, rollDice)
|
||||
}
|
||||
// #endregion
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ export default class LethalFantasyActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* *************************************************/
|
||||
getBestWeaponClassSkill(skills, rollType, multiplier = 1.0) {
|
||||
let maxValue = 0
|
||||
let goodSkill = skills[0]
|
||||
@ -68,6 +69,7 @@ export default class LethalFantasyActor extends Actor {
|
||||
return goodSkill
|
||||
}
|
||||
|
||||
/* *************************************************/
|
||||
async prepareRoll(rollType, rollKey, rollDice ) {
|
||||
console.log("Preparing roll", rollType, rollKey, rollDice)
|
||||
let rollTarget
|
||||
|
@ -221,8 +221,8 @@ export default class LethalFantasyRoll extends Roll {
|
||||
hasChangeDice = false
|
||||
options.rollTarget.value = options.rollTarget.actorModifiers.levelSpellModifier + options.rollTarget.actorModifiers.intSpellModifier
|
||||
options.rollTarget.charModifier = options.rollTarget.actorModifiers.intSpellModifier
|
||||
hasStaticModifier = true // options.rollType === "spell-power"
|
||||
hasModifier = true //options.rollType !== "spell-attack"
|
||||
hasStaticModifier = options.rollType === "spell-power"
|
||||
hasModifier = options.rollType !== "spell-attack"
|
||||
options.rollTarget.staticModifier = options.rollTarget.actorLevel
|
||||
|
||||
} else if (options.rollType === "miracle" || options.rollType === "miracle-attack" || options.rollType === "miracle-power") {
|
||||
@ -234,8 +234,8 @@ export default class LethalFantasyRoll extends Roll {
|
||||
hasChangeDice = false
|
||||
options.rollTarget.value = options.rollTarget.actorModifiers.levelMiracleModifier + options.rollTarget.actorModifiers.chaMiracleModifier
|
||||
options.rollTarget.charModifier = options.rollTarget.actorModifiers.chaMiracleModifier
|
||||
hasStaticModifier = true // options.rollType === "spell-power"
|
||||
hasModifier = true // options.rollType !== "miracle-attack"
|
||||
hasStaticModifier = options.rollType === "spell-power"
|
||||
hasModifier = options.rollType !== "miracle-attack"
|
||||
options.rollTarget.staticModifier = options.rollTarget.actorLevel
|
||||
|
||||
} else if (options.rollType === "shield-roll") {
|
||||
@ -302,6 +302,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
rollType: options.rollType,
|
||||
rollTarget: options.rollTarget,
|
||||
rollName: options.rollName,
|
||||
actorName: options.actorName,
|
||||
rollModes,
|
||||
hasModifier,
|
||||
hasFavor,
|
||||
@ -373,7 +374,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
if (hasStaticModifier) {
|
||||
modifierFormula += ` + ${options.rollTarget.staticModifier}`
|
||||
}
|
||||
modifierFormula += ` + ${options.rollTarget.charModifier}`
|
||||
// modifierFormula += ` + ${options.rollTarget.charModifier}`
|
||||
let sign = fullModifier < 0 ? "-" : "+"
|
||||
if (hasExplode) {
|
||||
titleFormula = `${dice}E ${sign} ${modifierFormula}`
|
||||
@ -543,6 +544,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
return rollBase
|
||||
}
|
||||
|
||||
/* ***********************************************************/
|
||||
static async promptInitiative(options = {}) {
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
const fieldRollMode = new foundry.data.fields.StringField({
|
||||
@ -603,6 +605,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
|
||||
}
|
||||
|
||||
/* ***********************************************************/
|
||||
static async promptCombatAction(options = {}) {
|
||||
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
@ -641,22 +644,22 @@ export default class LethalFantasyRoll extends Roll {
|
||||
})
|
||||
} else if (currentAction.type === "spell" || currentAction.type === "miracle") {
|
||||
let label = ""
|
||||
if ( currentAction.spellStatus === "castingTime") {
|
||||
if (currentAction.spellStatus === "castingTime") {
|
||||
label = "Wait casting time"
|
||||
}
|
||||
if ( currentAction.spellStatus === "toBeCasted") {
|
||||
if (currentAction.spellStatus === "toBeCasted") {
|
||||
label = "Cast spell/miracle"
|
||||
}
|
||||
if ( currentAction.spellStatus === "lethargy") {
|
||||
if (currentAction.spellStatus === "lethargy") {
|
||||
label = "Roll lethargy dice"
|
||||
}
|
||||
buttons.push({
|
||||
action: "roll",
|
||||
label: label,
|
||||
callback: (event, button, dialog) => {
|
||||
return "rollLethargyDice"
|
||||
},
|
||||
})
|
||||
action: "roll",
|
||||
label: label,
|
||||
callback: (event, button, dialog) => {
|
||||
return "rollLethargyDice"
|
||||
},
|
||||
})
|
||||
}
|
||||
} else {
|
||||
buttons.push({
|
||||
@ -731,8 +734,8 @@ export default class LethalFantasyRoll extends Roll {
|
||||
|
||||
if (currentAction) {
|
||||
if (rollContext === "rollLethargyDice") {
|
||||
if ( currentAction.spellStatus === "castingTime") {
|
||||
if ( currentAction.castingTime < currentAction.system.castingTime) {
|
||||
if (currentAction.spellStatus === "castingTime") {
|
||||
if (currentAction.castingTime < currentAction.system.castingTime) {
|
||||
let message = `Casting time : ${currentAction.name}, count : ${currentAction.castingTime}/${currentAction.system.castingTime}`
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: combatant.actor }) })
|
||||
currentAction.castingTime += 1
|
||||
@ -747,8 +750,8 @@ export default class LethalFantasyRoll extends Roll {
|
||||
return
|
||||
}
|
||||
}
|
||||
if ( currentAction.spellStatus === "toBeCasted") {
|
||||
combatant.actor.prepareRoll( (currentAction.type === "spell") ? "spell-attack" : "miracle-attack" , currentAction._id)
|
||||
if (currentAction.spellStatus === "toBeCasted") {
|
||||
combatant.actor.prepareRoll((currentAction.type === "spell") ? "spell-attack" : "miracle-attack", currentAction._id)
|
||||
if (currentAction.type === "spell") {
|
||||
currentAction.spellStatus = "lethargy"
|
||||
await combatant.setFlag(SYSTEM.id, "currentAction", foundry.utils.duplicate(currentAction))
|
||||
@ -758,7 +761,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
}
|
||||
return
|
||||
}
|
||||
if ( currentAction.spellStatus === "lethargy") {
|
||||
if (currentAction.spellStatus === "lethargy") {
|
||||
// Roll lethargy dice
|
||||
let dice = LethalFantasyUtils.getLethargyDice(currentAction.system.level)
|
||||
let roll = new Roll(dice)
|
||||
@ -772,7 +775,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
// Update the combatant progression count
|
||||
await combatant.setFlag(SYSTEM.id, "currentAction", "")
|
||||
// Display the action selection window again
|
||||
combatant.actor.system.rollProgressionDice(options.combatId, options.combatantId )
|
||||
combatant.actor.system.rollProgressionDice(options.combatId, options.combatantId)
|
||||
} else {
|
||||
// Notify that the player cannot act now with a chat message
|
||||
currentAction.progressionCount += 1
|
||||
@ -839,7 +842,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ***********************************************************/
|
||||
static async promptProgressionDice(options = {}) {
|
||||
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
@ -1011,6 +1014,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
}
|
||||
}
|
||||
|
||||
/* ***********************************************************/
|
||||
static async promptRangedDefense(rollTarget) {
|
||||
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
|
@ -76,7 +76,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
}
|
||||
return new fields.SchemaField(schema, { label })
|
||||
}
|
||||
// Add 4 attackFields in an attack schema
|
||||
// Add 4 attackFields in an attack schema
|
||||
schema.attacks = new fields.SchemaField({
|
||||
attack1: attackField("1"),
|
||||
attack2: attackField("2"),
|
||||
@ -145,6 +145,73 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
await roll.toMessage({}, { rollMode: roll.options.rollMode })
|
||||
}
|
||||
|
||||
async prepareMonsterRoll(rollType, rollKey, rollDice) {
|
||||
let rollTarget
|
||||
switch (rollType) {
|
||||
case "monster-attack":
|
||||
case "monster-defense":
|
||||
case "monster-damage":
|
||||
rollTarget = foundry.utils.duplicate(this.attacks[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
break
|
||||
case "monster-skill":
|
||||
rollTarget = foundry.utils.duplicate(this.resists[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
break
|
||||
case "save":
|
||||
rollTarget = foundry.utils.duplicate(this.saves[rollKey])
|
||||
rollTarget.rollKey = rollKey
|
||||
rollTarget.rollDice = rollDice
|
||||
break
|
||||
case "weapon-damage-small":
|
||||
case "weapon-damage-medium":
|
||||
case "weapon-attack":
|
||||
case "weapon-defense":
|
||||
let weapon = this.actor.items.find((i) => i.type === "weapon" && i.id === rollKey)
|
||||
let skill
|
||||
let skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase() === weapon.name.toLowerCase())
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 1.0)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase().replace(" skill", "") === weapon.name.toLowerCase())
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 1.0)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass === weapon.system.weaponClass)
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 0.5)
|
||||
} else {
|
||||
skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass.includes(SYSTEM.WEAPON_CATEGORIES[weapon.system.weaponClass]))
|
||||
if (skills.length > 0) {
|
||||
skill = this.getBestWeaponClassSkill(skills, rollType, 0.25)
|
||||
} else {
|
||||
ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound"))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!weapon || !skill) {
|
||||
console.error("Weapon or skill not found", weapon, skill)
|
||||
ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound"))
|
||||
return
|
||||
}
|
||||
rollTarget = skill
|
||||
rollTarget.weapon = weapon
|
||||
rollTarget.weaponSkillModifier = skill.weaponSkillModifier
|
||||
rollTarget.rollKey = rollKey
|
||||
rollTarget.combat = foundry.utils.duplicate(this.combat)
|
||||
break
|
||||
default:
|
||||
ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType))
|
||||
break
|
||||
}
|
||||
|
||||
// In all cases
|
||||
console.log(rollTarget)
|
||||
await this.roll(rollType, rollTarget)
|
||||
}
|
||||
|
||||
async rollInitiative(combatId = undefined, combatantId = undefined) {
|
||||
const hasTarget = false
|
||||
|
||||
@ -164,7 +231,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
await roll.toMessage({}, { rollMode: roll.options.rollMode })
|
||||
}
|
||||
|
||||
async rollProgressionDice(combatId, combatantId, rollProgressionCount) {
|
||||
async rollProgressionDice(combatId, combatantId) {
|
||||
|
||||
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
|
||||
const fieldRollMode = new foundry.data.fields.StringField({
|
||||
@ -175,7 +242,8 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
|
||||
let roll = new Roll("1D8")
|
||||
await roll.evaluate()
|
||||
let max = rollProgressionCount
|
||||
let combatant = game.combats.get(combatId)?.combatants?.get(combatantId)
|
||||
|
||||
let msg = await roll.toMessage({ flavor: `Progression Roll for ${this.parent.name}` } )
|
||||
if (game?.dice3d) {
|
||||
await game.dice3d.waitFor3DAnimationByMessageID(msg.id)
|
||||
@ -188,14 +256,14 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
hasAttack = true
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOKMonster", { isMonster: true, name: this.parent.name, weapon: attack.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: this.parent }) })
|
||||
this.prepareMonsterRoll("monster-attack", key)
|
||||
}
|
||||
}
|
||||
if (!hasAttack) {
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKOMonster", { isMonster: true, name: this.parent.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: this.parent }) })
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1 +1 @@
|
||||
MANIFEST-000219
|
||||
MANIFEST-000223
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/21-17:09:30.765172 7f5dceffd6c0 Recovering log #217
|
||||
2025/04/21-17:09:30.774995 7f5dceffd6c0 Delete type=3 #215
|
||||
2025/04/21-17:09:30.775106 7f5dceffd6c0 Delete type=0 #217
|
||||
2025/04/21-17:40:19.481504 7f5dcd3ff6c0 Level-0 table #222: started
|
||||
2025/04/21-17:40:19.481549 7f5dcd3ff6c0 Level-0 table #222: 0 bytes OK
|
||||
2025/04/21-17:40:19.518709 7f5dcd3ff6c0 Delete type=0 #220
|
||||
2025/04/21-17:40:19.572101 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.634424 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-07:53:33.108355 7f5dcf7fe6c0 Recovering log #221
|
||||
2025/04/22-07:53:33.118876 7f5dcf7fe6c0 Delete type=3 #219
|
||||
2025/04/22-07:53:33.119001 7f5dcf7fe6c0 Delete type=0 #221
|
||||
2025/04/22-08:41:45.602694 7f5dcd3ff6c0 Level-0 table #226: started
|
||||
2025/04/22-08:41:45.602769 7f5dcd3ff6c0 Level-0 table #226: 0 bytes OK
|
||||
2025/04/22-08:41:45.608936 7f5dcd3ff6c0 Delete type=0 #224
|
||||
2025/04/22-08:41:45.629902 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-08:41:45.629976 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/17-17:21:12.564483 7f5c837fe6c0 Recovering log #213
|
||||
2025/04/17-17:21:12.575284 7f5c837fe6c0 Delete type=3 #211
|
||||
2025/04/17-17:21:12.575342 7f5c837fe6c0 Delete type=0 #213
|
||||
2025/04/17-17:34:42.493086 7f5c81bff6c0 Level-0 table #218: started
|
||||
2025/04/17-17:34:42.493111 7f5c81bff6c0 Level-0 table #218: 0 bytes OK
|
||||
2025/04/17-17:34:42.499036 7f5c81bff6c0 Delete type=0 #216
|
||||
2025/04/17-17:34:42.518959 7f5c81bff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/17-17:34:42.519032 7f5c81bff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:09:30.765172 7f5dceffd6c0 Recovering log #217
|
||||
2025/04/21-17:09:30.774995 7f5dceffd6c0 Delete type=3 #215
|
||||
2025/04/21-17:09:30.775106 7f5dceffd6c0 Delete type=0 #217
|
||||
2025/04/21-17:40:19.481504 7f5dcd3ff6c0 Level-0 table #222: started
|
||||
2025/04/21-17:40:19.481549 7f5dcd3ff6c0 Level-0 table #222: 0 bytes OK
|
||||
2025/04/21-17:40:19.518709 7f5dcd3ff6c0 Delete type=0 #220
|
||||
2025/04/21-17:40:19.572101 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.634424 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!znm6T1ef4qQI8BX7' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000218
|
||||
MANIFEST-000222
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/21-17:09:30.778463 7f5dcdffb6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.789411 7f5dcdffb6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.789468 7f5dcdffb6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.406720 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.406774 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.446347 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.572073 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.572119 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-07:53:33.123478 7f5dceffd6c0 Recovering log #220
|
||||
2025/04/22-07:53:33.137098 7f5dceffd6c0 Delete type=3 #218
|
||||
2025/04/22-07:53:33.137188 7f5dceffd6c0 Delete type=0 #220
|
||||
2025/04/22-08:41:45.623210 7f5dcd3ff6c0 Level-0 table #225: started
|
||||
2025/04/22-08:41:45.623299 7f5dcd3ff6c0 Level-0 table #225: 0 bytes OK
|
||||
2025/04/22-08:41:45.629704 7f5dcd3ff6c0 Delete type=0 #223
|
||||
2025/04/22-08:41:45.629962 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-08:41:45.630021 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/17-17:21:12.578876 7f5c82ffd6c0 Recovering log #212
|
||||
2025/04/17-17:21:12.589060 7f5c82ffd6c0 Delete type=3 #210
|
||||
2025/04/17-17:21:12.589120 7f5c82ffd6c0 Delete type=0 #212
|
||||
2025/04/17-17:34:42.486913 7f5c81bff6c0 Level-0 table #217: started
|
||||
2025/04/17-17:34:42.486964 7f5c81bff6c0 Level-0 table #217: 0 bytes OK
|
||||
2025/04/17-17:34:42.492952 7f5c81bff6c0 Delete type=0 #215
|
||||
2025/04/17-17:34:42.518936 7f5c81bff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/17-17:34:42.519016 7f5c81bff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:09:30.778463 7f5dcdffb6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.789411 7f5dcdffb6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.789468 7f5dcdffb6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.406720 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.406774 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.446347 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.572073 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.572119 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs-system/lf-gifts/MANIFEST-000222
Normal file
BIN
packs-system/lf-gifts/MANIFEST-000222
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000218
|
||||
MANIFEST-000222
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/21-17:09:30.749204 7f5dce7fc6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.759893 7f5dce7fc6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.760044 7f5dce7fc6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.292988 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.293026 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.329102 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.406586 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.406620 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-07:53:33.091484 7f5dce7fc6c0 Recovering log #220
|
||||
2025/04/22-07:53:33.102983 7f5dce7fc6c0 Delete type=3 #218
|
||||
2025/04/22-07:53:33.103111 7f5dce7fc6c0 Delete type=0 #220
|
||||
2025/04/22-08:41:45.609074 7f5dcd3ff6c0 Level-0 table #225: started
|
||||
2025/04/22-08:41:45.609111 7f5dcd3ff6c0 Level-0 table #225: 0 bytes OK
|
||||
2025/04/22-08:41:45.615192 7f5dcd3ff6c0 Delete type=0 #223
|
||||
2025/04/22-08:41:45.629926 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-08:41:45.629989 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/17-17:21:12.549824 7f5c827fc6c0 Recovering log #212
|
||||
2025/04/17-17:21:12.560061 7f5c827fc6c0 Delete type=3 #210
|
||||
2025/04/17-17:21:12.560203 7f5c827fc6c0 Delete type=0 #212
|
||||
2025/04/17-17:34:42.505447 7f5c81bff6c0 Level-0 table #217: started
|
||||
2025/04/17-17:34:42.505471 7f5c81bff6c0 Level-0 table #217: 0 bytes OK
|
||||
2025/04/17-17:34:42.518767 7f5c81bff6c0 Delete type=0 #215
|
||||
2025/04/17-17:34:42.518998 7f5c81bff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/17-17:34:42.519066 7f5c81bff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:09:30.749204 7f5dce7fc6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.759893 7f5dce7fc6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.760044 7f5dce7fc6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.292988 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.293026 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.329102 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.406586 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.406620 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs-system/lf-skills/MANIFEST-000222
Normal file
BIN
packs-system/lf-skills/MANIFEST-000222
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000218
|
||||
MANIFEST-000222
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/21-17:09:30.792733 7f5dcf7fe6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.802787 7f5dcf7fe6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.802873 7f5dcf7fe6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.329256 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.329290 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.360850 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.406600 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.406634 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-07:53:33.143404 7f5dcdffb6c0 Recovering log #220
|
||||
2025/04/22-07:53:33.157266 7f5dcdffb6c0 Delete type=3 #218
|
||||
2025/04/22-07:53:33.157351 7f5dcdffb6c0 Delete type=0 #220
|
||||
2025/04/22-08:41:45.615323 7f5dcd3ff6c0 Level-0 table #225: started
|
||||
2025/04/22-08:41:45.615360 7f5dcd3ff6c0 Level-0 table #225: 0 bytes OK
|
||||
2025/04/22-08:41:45.622976 7f5dcd3ff6c0 Delete type=0 #223
|
||||
2025/04/22-08:41:45.629946 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/22-08:41:45.630005 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2025/04/17-17:21:12.592168 7f5c83fff6c0 Recovering log #212
|
||||
2025/04/17-17:21:12.602692 7f5c83fff6c0 Delete type=3 #210
|
||||
2025/04/17-17:21:12.602743 7f5c83fff6c0 Delete type=0 #212
|
||||
2025/04/17-17:34:42.499156 7f5c81bff6c0 Level-0 table #217: started
|
||||
2025/04/17-17:34:42.499188 7f5c81bff6c0 Level-0 table #217: 0 bytes OK
|
||||
2025/04/17-17:34:42.505329 7f5c81bff6c0 Delete type=0 #215
|
||||
2025/04/17-17:34:42.518977 7f5c81bff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/17-17:34:42.519047 7f5c81bff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:09:30.792733 7f5dcf7fe6c0 Recovering log #216
|
||||
2025/04/21-17:09:30.802787 7f5dcf7fe6c0 Delete type=3 #214
|
||||
2025/04/21-17:09:30.802873 7f5dcf7fe6c0 Delete type=0 #216
|
||||
2025/04/21-17:40:19.329256 7f5dcd3ff6c0 Level-0 table #221: started
|
||||
2025/04/21-17:40:19.329290 7f5dcd3ff6c0 Level-0 table #221: 0 bytes OK
|
||||
2025/04/21-17:40:19.360850 7f5dcd3ff6c0 Delete type=0 #219
|
||||
2025/04/21-17:40:19.406600 7f5dcd3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
2025/04/21-17:40:19.406634 7f5dcd3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
<div class="lethalfantasy-combat-action-dialog">
|
||||
|
||||
<fieldSet class="">
|
||||
<legend>{{localize "LETHALFANTASY.Label.combatAction"}}</legend>
|
||||
<legend>{{localize "LETHALFANTASY.Label.combatAction"}} for {{actorName}}</legend>
|
||||
|
||||
{{#if currentAction}}
|
||||
<label>{{localize "LETHALFANTASY.Label.currentAction"}} : {{currentAction.name}}</label>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div class="lethalfantasy-roll-dialog">
|
||||
|
||||
<fieldSet class="">
|
||||
<legend>{{localize (concat "LETHALFANTASY.Label." rollType)}}</legend>
|
||||
<legend>{{localize (concat "LETHALFANTASY.Label." rollType)}} - {{actorName}}</legend>
|
||||
|
||||
{{#if (match rollType "attack")}}
|
||||
<div class="dialog-save">Attack roll !</div>
|
||||
@ -19,7 +19,7 @@
|
||||
<div class="dialog-save">{{localize "LETHALFANTASY.Label.baseModifier"}} : {{rollTarget.charModifier}}</div>
|
||||
<div class="dialog-save">{{localize "LETHALFANTASY.Label.weapon"}} : {{rollTarget.weapon.name}}</div>
|
||||
<div class="dialog-save">{{localize "LETHALFANTASY.Label.skill"}} : {{rollTarget.name}}</div>
|
||||
<div class="dialog-save">{{localize "LETHALFANTASY.Label.skillBonus"}} : {{rollTarget.weaponSkillModifier}}</div>
|
||||
<div class="dialog-save">{{localize "LETHALFANTASY.Label.skillBonus"}} : {{rollTarget.weaponSkillModifier}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (match rollType "attack")}}
|
||||
@ -29,16 +29,16 @@
|
||||
{{/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}}
|
||||
|
||||
{{#if rollTarget.staticModifier}}
|
||||
{{#if rollTarget.staticModifier}}
|
||||
<div class="dialog-save">Static modifier : +{{rollTarget.staticModifier}}</div>
|
||||
{{/if}}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user