5 Commits
13.0.5 ... main

Author SHA1 Message Date
5d13500838 Fix sur combat + mains gauche
All checks were successful
Release Creation / build (release) Successful in 43s
2025-09-24 16:43:52 +02:00
d21515e1e3 Fix sur combat + mains gauche 2025-09-24 16:43:40 +02:00
78ef009465 Fix sur combat + mains gauche 2025-09-24 16:42:08 +02:00
e794611bf3 Gestion assistée pour les actions
All checks were successful
Release Creation / build (release) Successful in 46s
2025-09-24 15:11:58 +02:00
529a62045e Gestion assistée pour les actions 2025-09-24 15:09:00 +02:00
55 changed files with 346 additions and 242 deletions

View File

@@ -77,6 +77,31 @@ export class TeDeumActor extends Actor {
return 0 return 0
} }
/* -------------------------------------------- */
getMeilleureCompetenceMainGauche(comp) {
let compScore = this.getCompetenceScore(comp.name)
let mainGaucheScore = this.getCompetenceScore("main gauche")
if (mainGaucheScore < compScore) {
ui.notifications.info(`${this.name} : Utilisation de la compétence Main Gauche au lieu de ${comp.name}`)
let mainGaucheComp = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "main gauche")
if (!mainGaucheComp) {
// Create a fake competence object
mainGaucheComp = foundry.utils.duplicate(comp)
mainGaucheComp.name = "Main Gauche"
mainGaucheComp.system.isBase = false
mainGaucheComp.system.score = 0
mainGaucheComp.system.caracteristique = "adresse"
mainGaucheComp.system.description = "Compétence Main Gauche (automatique)"
mainGaucheComp.system.isMainGauche = true
return mainGaucheComp
} else {
return mainGaucheComp
}
} else {
return comp
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
_onUpdate(changed, options, userId) { _onUpdate(changed, options, userId) {
let updates = [] let updates = []
@@ -116,12 +141,6 @@ export class TeDeumActor extends Actor {
updates.push({ _id: initiative.id, "system.score": Number(newScore) }) updates.push({ _id: initiative.id, "system.score": Number(newScore) })
} }
let actionsTour = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "actions/tour")
newScore = this.getCommonBaseValue(this.system.caracteristiques.adresse.value)
if (actionsTour && actionsTour?.system.score != newScore) {
updates.push({ _id: actionsTour.id, "system.score": Number(newScore) })
}
let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort") let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort")
newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value) newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value)
if (effort && effort?.system.score != newScore) { if (effort && effort?.system.score != newScore) {
@@ -151,7 +170,7 @@ export class TeDeumActor extends Actor {
getCommonBaseValue(value) { getCommonBaseValue(value) {
return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0 return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0
} }
getInitiative() { getInitiativeValue() {
return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0 return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -616,21 +635,16 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getInitiativeScore() { getInitiativeScore() {
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative") let initiative = this.getInitiativeValue()
initiative = foundry.utils.duplicate(initiative)
// Vérifie les armes avec bonus d'initiative // Vérifie les armes avec bonus d'initiative
let armes = this.getArmes() let armes = this.getArmes()
for (let arme of armes) { for (let arme of armes) {
if (arme.system.equipe && arme.system.bonusInitiative != 0) { if (arme.system.equipe && Number(arme.system.initiativeBonus) && Number(arme.system.initiativeBonus) != 0) {
ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.bonusInitiative) ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.initiativeBonus)
initiative.system.score += 1 initiative += arme.system.initiativeBonus
} }
} }
if (initiative) { return initiative
return initiative.system.score
}
ui.notifications.warn("Impossible de trouver la compétence Initiative pour l'acteur " + this.name)
return -1;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@@ -2,20 +2,39 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class TeDeumCombat extends Combat { export class TeDeumCombat extends Combat {
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollInitiative(ids, formula = undefined, messageOptions = {} ) { async rollInitiative(ids, formula = undefined, messageOptions = {}) {
//console.log("Roll INIT !") //console.log("Roll INIT !")
ids = typeof ids === "string" ? [ids] : ids; ids = typeof ids === "string" ? [ids] : ids;
for (let cId of ids) { for (let cId of ids) {
const c = this.combatants.get(cId); const c = this.combatants.get(cId);
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, cId ) : -1; let initBonus = c.actor ? c.actor.getInitiativeScore(this.id, cId) : -1;
await this.updateEmbeddedDocuments("Combatant", [ { _id: cId, initiative: initBonus } ]); await this.updateEmbeddedDocuments("Combatant", [{ _id: cId, initiative: initBonus }]);
} }
return this; return this;
} }
/* -------------------------------------------- */
async modifyAction(combatantId, delta, isMainGauche = false) {
let combatant = this.combatants.get(combatantId)
if (!combatant) return;
let ca = combatant.getFlag("world", "available-actions")
if (!ca) {
ca = { nbActions: 1, nbActionsMainGauche: 0 }
}
if (isMainGauche) {
ca.nbActionsMainGauche += delta
} else {
ca.nbActions += delta
}
if (ca.nbActionsMainGauche < 0) ca.nbActionsMainGauche = 0
if (ca.nbActions < 0) ca.nbActions = 0
await combatant.setFlag("world", "available-actions", ca)
await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` })
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async checkTurnPosition() { static async checkTurnPosition() {
while (game.combat.turn > 0) { while (game.combat.turn > 0) {

View File

@@ -59,11 +59,11 @@ export const TEDEUM_CONFIG = {
}, },
ARME_PORTEES: { ARME_PORTEES: {
"brulepourpoint": { label: "Brûle-pourpoint", difficulty: "facile", id: "brulepourpoint" }, "brulepourpoint": { label: "Brûle-pourpoint (5)", difficulty: "facile", id: "brulepourpoint" },
"courte": { label: "Courte", difficulty: "pardefaut", id: "courte" }, "courte": { label: "Courte (7)", difficulty: "pardefaut", id: "courte" },
"moyenne": { label: "Moyenne", difficulty: "difficile", id: "moyenne" }, "moyenne": { label: "Moyenne (11)", difficulty: "difficile", id: "moyenne" },
"longue": { label: "Longue", difficulty: "perilleux", id: "longue" }, "longue": { label: "Longue (13)", difficulty: "perilleux", id: "longue" },
"extreme": { label: "Extrême", difficulty: "desespere", id: "extreme" }, "extreme": { label: "Extrême (15)", difficulty: "desespere", id: "extreme" },
}, },
genre: { genre: {
@@ -168,13 +168,13 @@ export const TEDEUM_CONFIG = {
}, },
difficulte: { difficulte: {
aucune: { label: "Aucune", key: "aucune", value: 0 }, aucune: { label: "Aucune", key: "aucune", value: 0 },
routine: { label: "Routine", key: "routine", value: 3 }, routine: { label: "Routine (3)", key: "routine", value: 3 },
facile: { label: "Facile", key: "facile", value: 5 }, facile: { label: "Facile (5)", key: "facile", value: 5 },
pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 }, pardefaut: { label: "Par Défaut (7)", key: "pardefaut", value: 7 },
malaise: { label: "Malaisé", key: "malaise", value: 9 }, malaise: { label: "Malaisé (9)", key: "malaise", value: 9 },
difficile: { label: "Difficile", key: "difficile", value: 11 }, difficile: { label: "Difficile (11)", key: "difficile", value: 11 },
perilleux: { label: "Perilleux", key: "perilleux", value: 13 }, perilleux: { label: "Perilleux (13)", key: "perilleux", value: 13 },
desespere: { label: "Désespéré", key: "desespere", value: 15 } desespere: { label: "Désespéré (15)", key: "desespere", value: 15 }
}, },
monnaie: { monnaie: {
denier: { label: "Deniers", id: "denier", value: 1 }, denier: { label: "Deniers", id: "denier", value: 1 },

View File

@@ -12,7 +12,9 @@ export class TeDeumUtility {
CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
}
static installHooks() {
Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html)); Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html));
Hooks.on("renderActorDirectory", (app, html, data) => { Hooks.on("renderActorDirectory", (app, html, data) => {
@@ -28,7 +30,45 @@ export class TeDeumUtility {
$(html).find('.header-actions').after(button) $(html).find('.header-actions').after(button)
} }
}) })
//Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options));
Hooks.on("combatStart", async (combat, updateData, options) => {
this.resetCombatActions(combat)
});
Hooks.on("combatRound", (combat, updateData, updateOptions) => {
// List all actors related to combatant
if (game.user.isGM) {
this.resetCombatActions(combat)
}
})
Hooks.on("getCombatTrackerContextOptions", (html, options) => {
console.log("Get Combat Tracker Context", html, options)
this.pushCombatOptions(html, options);
});
}
/* -------------------------------------------- */
static pushCombatOptions(html, options) {
options.push({ name: "Actions +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1); } })
options.push({ name: "Actions -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1); } })
options.push({ name: "Actions MG +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1, true); } })
options.push({ name: "Actions MG -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1, true); } })
}
/* -------------------------------------------- */
static async resetCombatActions(combat) {
for (let c of combat.combatants) {
let actor = game.actors.get(c.actorId)
if (actor) {
let nbActions = actor.getNbActions()?.value || 0
let isMainGauche = (actor.getCompetenceScore("Main gauche") > 0)
let nbActionsMainGauche = isMainGauche ? nbActions : 0
await c.setFlag("world", "available-actions", { nbActions, nbActionsMainGauche })
await c.update({ name: `${c.token.name} (${nbActions} / ${nbActionsMainGauche})` })
}
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -201,7 +241,7 @@ export class TeDeumUtility {
return actor return actor
} }
/* -------------------------------------------- */ /* -------------------------------------------- */ /* -------------------------------------------- */
static async manageOpposition(rollData) { static async manageOpposition(rollData) {
if (!this.currentOpposition) { if (!this.currentOpposition) {
// Store rollData as current GM opposition // Store rollData as current GM opposition
@@ -210,12 +250,15 @@ export class TeDeumUtility {
} else { } else {
// Perform the opposition // Perform the opposition
let isAttackWinner = true let isAttackWinner = true
let rWinner = this.currentOpposition let rWinner, rLooser
let rLooser = rollData if (this.currentOpposition.total <= rollData.total) {
if (rWinner.total <= rLooser.total) { rWinner = foundry.utils.duplicate(rollData)
rWinner = rollData rLooser = foundry.utils.duplicate(this.currentOpposition)
rLooser = this.currentOpposition
isAttackWinner = false isAttackWinner = false
} else {
rWinner = foundry.utils.duplicate(this.currentOpposition)
rLooser = foundry.utils.duplicate(rollData)
isAttackWinner = true
} }
this.currentOpposition = undefined // Reset opposition this.currentOpposition = undefined // Reset opposition
let oppositionData = { let oppositionData = {
@@ -247,7 +290,6 @@ export class TeDeumUtility {
await this.appliquerDegats(rWinner) await this.appliquerDegats(rWinner)
} }
console.log("Opposition result", rollData, isAttackWinner, oppositionData) console.log("Opposition result", rollData, isAttackWinner, oppositionData)
} }
} }
@@ -570,12 +612,40 @@ export class TeDeumUtility {
await this.getLocalisation(rollData) await this.getLocalisation(rollData)
// Now the degats // Now the degats
let degatsRoll = await new Roll(rollData.arme.system.degats).roll() let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
await this.showDiceSoNice(rollData.degatsRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll) rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total rollData.degats = degatsRoll.total
} }
} }
/* -------------------------------------------- */
static async manageCombatActions(actor, rollData) {
let combat = game.combats.active
if (!combat) return;
let combatant = combat.getCombatantByActor(actor)
if (!combatant) return;
let ca = combatant.getFlag("world", "available-actions")
if (!ca) return;
if (rollData.mode == "arme" && rollData.isMainGauche) {
if (ca.nbActionsMainGauche > 0) {
ca.nbActionsMainGauche -= 1
ca.nbActions = Math.max(ca.nbActions - 1, 0)
} else {
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles à la main gauche pour ce round`)
}
}
if (ca.nbActions > 0) {
ca.nbActions -= 1
} else {
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles pour ce round`)
}
await combatant.setFlag("world", "available-actions", ca)
await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` })
rollData.hasActions = true
rollData.remainingActions = ca.nbActions
rollData.remainingActionsMainGauche = ca.nbActionsMainGauche
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async rollTeDeum(rollData) { static async rollTeDeum(rollData) {
@@ -585,8 +655,12 @@ export class TeDeumUtility {
rollData.difficulty = "pardefaut" rollData.difficulty = "pardefaut"
} }
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
// Compute the real competence score // Compute the real competence score
if (rollData.competence) { if (rollData.competence) {
if (rollData.isMainGauche) {
rollData.competence = actor.getMeilleureCompetenceMainGauche(rollData.competence)
}
if (rollData.competence.system.isBase) { if (rollData.competence.system.isBase) {
rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value
} else { } else {
@@ -609,6 +683,8 @@ export class TeDeumUtility {
await this.processAttaqueDistance(rollData) await this.processAttaqueDistance(rollData)
await this.manageCombatActions(actor, rollData)
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData) content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
}) })

View File

@@ -1,17 +1,17 @@
export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel { export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
const requiredInteger = { required: true, nullable: false, integer: true }; const requiredInteger = { required: true, nullable: false, integer: true };
const requiredDouble = { required: true, nullable: false, integer: false }; const requiredDouble = { required: true, nullable: false, integer: false };
const schema = {}; const schema = {};
schema.typeArme = new fields.StringField({required: true, choices: ["melee", "tir"], initial: "melee"}); schema.typeArme = new fields.StringField({ required: true, choices: ["melee", "tir"], initial: "melee" });
schema.allonge = new fields.StringField({required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte"}); schema.allonge = new fields.StringField({ required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte" });
schema.specificites = new fields.SchemaField( schema.specificites = new fields.SchemaField(
Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => { Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => {
obj[spec.id] = new fields.SchemaField({ obj[spec.id] = new fields.SchemaField({
hasSpec: new fields.BooleanField({initial: false}), hasSpec: new fields.BooleanField({ initial: false }),
}); });
return obj; return obj;
}, {}) }, {})
@@ -26,35 +26,35 @@ export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
}, {}) }, {})
); );
schema.degatsArmure = new fields.SchemaField( { schema.degatsArmure = new fields.SchemaField({
sansarmure : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), sansarmure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
cuir : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), cuir: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
plates : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), plates: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
mailles : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), mailles: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
}); });
schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }); schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
schema.competenceRecharge = new fields.StringField({ required: false, choices:["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true }); schema.competenceRecharge = new fields.StringField({ required: false, choices: ["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }); schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }); schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0 });
schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" }); schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" });
schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" }); schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" });
let comp = [] let comp = []
for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) { for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) {
comp.push(key); comp.push(key);
} }
schema.competence = new fields.StringField({ required: true, choices:comp, initial: "bagarre" }); schema.competence = new fields.StringField({ required: true, choices: comp, initial: "bagarre" });
schema.competence2 = new fields.StringField({ required: false, choices:comp, initial: "", blank: true }); schema.competence2 = new fields.StringField({ required: false, choices: comp, initial: "", blank: true });
schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 }); schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 });
schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" }); schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" });
schema.equipe = new fields.BooleanField({initial: false}), schema.equipe = new fields.BooleanField({ initial: false }),
schema.description = new fields.HTMLField({ required: true, blank: true }); schema.description = new fields.HTMLField({ required: true, blank: true });
return schema; return schema;
} }

View File

@@ -63,6 +63,9 @@ export class TeDeumRollDialog extends Dialog {
html.find('#roll-allonge').change((event) => { html.find('#roll-allonge').change((event) => {
this.rollData.allongeId = event.currentTarget.value this.rollData.allongeId = event.currentTarget.value
}) })
html.find('#roll-main-gauche').change((event) => {
this.rollData.isMainGauche = event.currentTarget.checked
})
html.find('#roll-difficulty').change((event) => { html.find('#roll-difficulty').change((event) => {
this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut" this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
}) })

View File

@@ -90,6 +90,8 @@ Hooks.once("init", async function () {
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
TeDeumUtility.init() TeDeumUtility.init()
TeDeumUtility.installHooks()
}); });
@@ -98,6 +100,7 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
Hooks.once("ready", function () { Hooks.once("ready", function () {
// User warning // User warning
if (!game.user.isGM && game.user.character == undefined) { if (!game.user.isGM && game.user.character == undefined) {
ui.notifications.info("Attention ! Aucun personnage relié au joueur !"); ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
@@ -107,10 +110,10 @@ Hooks.once("ready", function () {
}); });
} }
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{ import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
console.log("ClassCounter loaded", moduleCounter) console.log("ClassCounter loaded", moduleCounter)
moduleCounter.ClassCounter.registerUsageCount() moduleCounter.ClassCounter.registerUsageCount()
}).catch(err=> }).catch(err =>
console.log("No stats available, giving up.") console.log("No stats available, giving up.")
) )
TeDeumUtility.ready(); TeDeumUtility.ready();

View File

@@ -1 +1 @@
MANIFEST-000137 MANIFEST-000165

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.945688 7f7f2affd6c0 Recovering log #134 2025/09/24-16:42:14.734893 7f7cfb7fe6c0 Recovering log #163
2025/09/18-17:25:25.962577 7f7f2affd6c0 Delete type=3 #132 2025/09/24-16:42:14.744867 7f7cfb7fe6c0 Delete type=3 #161
2025/09/18-17:25:25.962629 7f7f2affd6c0 Delete type=0 #134 2025/09/24-16:42:14.744926 7f7cfb7fe6c0 Delete type=0 #163
2025/09/18-17:25:58.096205 7f7f29bff6c0 Level-0 table #140: started 2025/09/24-16:43:46.397731 7f7cf9fff6c0 Level-0 table #168: started
2025/09/18-17:25:58.096281 7f7f29bff6c0 Level-0 table #140: 0 bytes OK 2025/09/24-16:43:46.397776 7f7cf9fff6c0 Level-0 table #168: 0 bytes OK
2025/09/18-17:25:58.103314 7f7f29bff6c0 Delete type=0 #138 2025/09/24-16:43:46.462453 7f7cf9fff6c0 Delete type=0 #166
2025/09/18-17:25:58.103571 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end) 2025/09/24-16:43:46.462659 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.746719 7f7f2bfff6c0 Delete type=3 #1 2025/09/24-16:34:06.472911 7f7cfbfff6c0 Recovering log #159
2025/09/18-17:24:09.744265 7f7f29bff6c0 Level-0 table #135: started 2025/09/24-16:34:06.482703 7f7cfbfff6c0 Delete type=3 #157
2025/09/18-17:24:09.744308 7f7f29bff6c0 Level-0 table #135: 0 bytes OK 2025/09/24-16:34:06.482774 7f7cfbfff6c0 Delete type=0 #159
2025/09/18-17:24:09.802551 7f7f29bff6c0 Delete type=0 #133 2025/09/24-16:41:30.176475 7f7cf9fff6c0 Level-0 table #164: started
2025/09/18-17:24:09.802767 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1 2025/09/24-16:41:30.176525 7f7cf9fff6c0 Level-0 table #164: 0 bytes OK
2025/09/18-17:24:09.802780 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.183000 7f7cf9fff6c0 Delete type=0 #162
2025/09/18-17:24:09.830358 7f7f29bff6c0 Generated table #136@0: 5 keys, 3728 bytes 2025/09/24-16:41:30.195641 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/09/18-17:24:09.830408 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 3728 bytes
2025/09/18-17:24:09.891222 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:09.891483 7f7f29bff6c0 Delete type=2 #103
2025/09/18-17:24:10.130709 7f7f29bff6c0 Manual compaction at level-0 from '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000240 MANIFEST-000268

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.808742 7f7f2bfff6c0 Recovering log #237 2025/09/24-16:42:14.642386 7f7d00dfa6c0 Recovering log #266
2025/09/18-17:25:25.826162 7f7f2bfff6c0 Delete type=3 #235 2025/09/24-16:42:14.651936 7f7d00dfa6c0 Delete type=3 #264
2025/09/18-17:25:25.826217 7f7f2bfff6c0 Delete type=0 #237 2025/09/24-16:42:14.652001 7f7d00dfa6c0 Delete type=0 #266
2025/09/18-17:25:58.034192 7f7f29bff6c0 Level-0 table #243: started 2025/09/24-16:43:45.840704 7f7cf9fff6c0 Level-0 table #271: started
2025/09/18-17:25:58.034230 7f7f29bff6c0 Level-0 table #243: 0 bytes OK 2025/09/24-16:43:45.840737 7f7cf9fff6c0 Level-0 table #271: 0 bytes OK
2025/09/18-17:25:58.040524 7f7f29bff6c0 Delete type=0 #241 2025/09/24-16:43:45.898655 7f7cf9fff6c0 Delete type=0 #269
2025/09/18-17:25:58.047737 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end) 2025/09/24-16:43:45.963394 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.598190 7f7f2a7fc6c0 Delete type=3 #1 2025/09/24-16:34:06.383778 7f7cfb7fe6c0 Recovering log #262
2025/09/18-17:24:08.419689 7f7f29bff6c0 Level-0 table #238: started 2025/09/24-16:34:06.393755 7f7cfb7fe6c0 Delete type=3 #260
2025/09/18-17:24:08.419727 7f7f29bff6c0 Level-0 table #238: 0 bytes OK 2025/09/24-16:34:06.393833 7f7cfb7fe6c0 Delete type=0 #262
2025/09/18-17:24:08.484925 7f7f29bff6c0 Delete type=0 #236 2025/09/24-16:41:30.118332 7f7cf9fff6c0 Level-0 table #267: started
2025/09/18-17:24:08.766692 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at '!items!wxIHkrq98eQ3cOvp' @ 73 : 1 2025/09/24-16:41:30.118371 7f7cf9fff6c0 Level-0 table #267: 0 bytes OK
2025/09/18-17:24:08.766704 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.124477 7f7cf9fff6c0 Delete type=0 #265
2025/09/18-17:24:08.800723 7f7f29bff6c0 Generated table #239@0: 38 keys, 31247 bytes 2025/09/24-16:41:30.124651 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
2025/09/18-17:24:08.800756 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 31247 bytes
2025/09/18-17:24:08.859553 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:08.859745 7f7f29bff6c0 Delete type=2 #206
2025/09/18-17:24:08.860015 7f7f29bff6c0 Manual compaction at level-0 from '!items!wxIHkrq98eQ3cOvp' @ 73 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000239 MANIFEST-000267

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.829687 7f7f2a7fc6c0 Recovering log #236 2025/09/24-16:42:14.655535 7f7cfbfff6c0 Recovering log #265
2025/09/18-17:25:25.846790 7f7f2a7fc6c0 Delete type=3 #234 2025/09/24-16:42:14.666517 7f7cfbfff6c0 Delete type=3 #263
2025/09/18-17:25:25.846846 7f7f2a7fc6c0 Delete type=0 #236 2025/09/24-16:42:14.666585 7f7cfbfff6c0 Delete type=0 #265
2025/09/18-17:25:58.026302 7f7f29bff6c0 Level-0 table #242: started 2025/09/24-16:43:45.762646 7f7cf9fff6c0 Level-0 table #270: started
2025/09/18-17:25:58.026357 7f7f29bff6c0 Level-0 table #242: 0 bytes OK 2025/09/24-16:43:45.762671 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
2025/09/18-17:25:58.034035 7f7f29bff6c0 Delete type=0 #240 2025/09/24-16:43:45.840542 7f7cf9fff6c0 Delete type=0 #268
2025/09/18-17:25:58.047715 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) 2025/09/24-16:43:45.963381 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.617997 7f7f2a7fc6c0 Delete type=3 #1 2025/09/24-16:34:06.395848 7f7d00dfa6c0 Recovering log #261
2025/09/18-17:24:08.294497 7f7f29bff6c0 Level-0 table #237: started 2025/09/24-16:34:06.405550 7f7d00dfa6c0 Delete type=3 #259
2025/09/18-17:24:08.294539 7f7f29bff6c0 Level-0 table #237: 0 bytes OK 2025/09/24-16:34:06.405604 7f7d00dfa6c0 Delete type=0 #261
2025/09/18-17:24:08.351872 7f7f29bff6c0 Delete type=0 #235 2025/09/24-16:41:30.111558 7f7cf9fff6c0 Level-0 table #266: started
2025/09/18-17:24:08.582142 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at '!items!ufvhWG5V8pX0qrtR' @ 54 : 1 2025/09/24-16:41:30.111589 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
2025/09/18-17:24:08.582154 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.118178 7f7cf9fff6c0 Delete type=0 #264
2025/09/18-17:24:08.616167 7f7f29bff6c0 Generated table #238@0: 29 keys, 12111 bytes 2025/09/24-16:41:30.124642 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
2025/09/18-17:24:08.616198 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 12111 bytes
2025/09/18-17:24:08.671918 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:08.672212 7f7f29bff6c0 Delete type=2 #205
2025/09/18-17:24:08.859972 7f7f29bff6c0 Manual compaction at level-0 from '!items!ufvhWG5V8pX0qrtR' @ 54 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000238 MANIFEST-000266

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.789090 7f7f2b7fe6c0 Recovering log #235 2025/09/24-16:42:14.629192 7f7cfaffd6c0 Recovering log #264
2025/09/18-17:25:25.805571 7f7f2b7fe6c0 Delete type=3 #233 2025/09/24-16:42:14.638946 7f7cfaffd6c0 Delete type=3 #262
2025/09/18-17:25:25.805686 7f7f2b7fe6c0 Delete type=0 #235 2025/09/24-16:42:14.639014 7f7cfaffd6c0 Delete type=0 #264
2025/09/18-17:25:58.040659 7f7f29bff6c0 Level-0 table #241: started 2025/09/24-16:43:45.706058 7f7cf9fff6c0 Level-0 table #269: started
2025/09/18-17:25:58.040687 7f7f29bff6c0 Level-0 table #241: 0 bytes OK 2025/09/24-16:43:45.706134 7f7cf9fff6c0 Level-0 table #269: 0 bytes OK
2025/09/18-17:25:58.047473 7f7f29bff6c0 Delete type=0 #239 2025/09/24-16:43:45.762523 7f7cf9fff6c0 Delete type=0 #267
2025/09/18-17:25:58.047759 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) 2025/09/24-16:43:45.963365 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.576078 7f7f2affd6c0 Delete type=3 #1 2025/09/24-16:34:06.370805 7f7cfaffd6c0 Recovering log #260
2025/09/18-17:24:08.352040 7f7f29bff6c0 Level-0 table #236: started 2025/09/24-16:34:06.381415 7f7cfaffd6c0 Delete type=3 #258
2025/09/18-17:24:08.352081 7f7f29bff6c0 Level-0 table #236: 0 bytes OK 2025/09/24-16:34:06.381482 7f7cfaffd6c0 Delete type=0 #260
2025/09/18-17:24:08.419524 7f7f29bff6c0 Delete type=0 #234 2025/09/24-16:41:30.104756 7f7cf9fff6c0 Level-0 table #265: started
2025/09/18-17:24:08.672479 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at '!items!yx4k7lQHGcom99mk' @ 237 : 1 2025/09/24-16:41:30.104801 7f7cf9fff6c0 Level-0 table #265: 0 bytes OK
2025/09/18-17:24:08.672498 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.111363 7f7cf9fff6c0 Delete type=0 #263
2025/09/18-17:24:08.706074 7f7f29bff6c0 Generated table #237@0: 115 keys, 38139 bytes 2025/09/24-16:41:30.124633 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
2025/09/18-17:24:08.706156 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 38139 bytes
2025/09/18-17:24:08.766397 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:08.766527 7f7f29bff6c0 Delete type=2 #231
2025/09/18-17:24:08.859995 7f7f29bff6c0 Manual compaction at level-0 from '!items!yx4k7lQHGcom99mk' @ 237 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000249 MANIFEST-000277

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.849643 7f7f2affd6c0 Recovering log #246 2025/09/24-16:42:14.669125 7f7cfb7fe6c0 Recovering log #275
2025/09/18-17:25:25.865539 7f7f2affd6c0 Delete type=3 #244 2025/09/24-16:42:14.678629 7f7cfb7fe6c0 Delete type=3 #273
2025/09/18-17:25:25.865600 7f7f2affd6c0 Delete type=0 #246 2025/09/24-16:42:14.678694 7f7cfb7fe6c0 Delete type=0 #275
2025/09/18-17:25:58.061760 7f7f29bff6c0 Level-0 table #252: started 2025/09/24-16:43:45.898794 7f7cf9fff6c0 Level-0 table #280: started
2025/09/18-17:25:58.061807 7f7f29bff6c0 Level-0 table #252: 0 bytes OK 2025/09/24-16:43:45.898823 7f7cf9fff6c0 Level-0 table #280: 0 bytes OK
2025/09/18-17:25:58.069452 7f7f29bff6c0 Delete type=0 #250 2025/09/24-16:43:45.963207 7f7cf9fff6c0 Delete type=0 #278
2025/09/18-17:25:58.076019 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) 2025/09/24-16:43:45.963407 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.638850 7f7f2bfff6c0 Delete type=3 #1 2025/09/24-16:34:06.407386 7f7cfaffd6c0 Recovering log #271
2025/09/18-17:24:08.232941 7f7f29bff6c0 Level-0 table #247: started 2025/09/24-16:34:06.418079 7f7cfaffd6c0 Delete type=3 #269
2025/09/18-17:24:08.233014 7f7f29bff6c0 Level-0 table #247: 0 bytes OK 2025/09/24-16:34:06.418139 7f7cfaffd6c0 Delete type=0 #271
2025/09/18-17:24:08.294274 7f7f29bff6c0 Delete type=0 #245 2025/09/24-16:41:30.124766 7f7cf9fff6c0 Level-0 table #276: started
2025/09/18-17:24:08.485079 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!zGlRtP7zSnkjuuue' @ 510 : 1 2025/09/24-16:41:30.124809 7f7cf9fff6c0 Level-0 table #276: 0 bytes OK
2025/09/18-17:24:08.485093 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.131329 7f7cf9fff6c0 Delete type=0 #274
2025/09/18-17:24:08.521894 7f7f29bff6c0 Generated table #248@0: 71 keys, 264331 bytes 2025/09/24-16:41:30.151558 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
2025/09/18-17:24:08.521971 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 264331 bytes
2025/09/18-17:24:08.581818 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:08.581947 7f7f29bff6c0 Delete type=2 #231
2025/09/18-17:24:08.859951 7f7f29bff6c0 Manual compaction at level-0 from '!items!zGlRtP7zSnkjuuue' @ 510 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000239 MANIFEST-000267

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.869600 7f7f2b7fe6c0 Recovering log #236 2025/09/24-16:42:14.682432 7f7cfaffd6c0 Recovering log #265
2025/09/18-17:25:25.884627 7f7f2b7fe6c0 Delete type=3 #234 2025/09/24-16:42:14.692809 7f7cfaffd6c0 Delete type=3 #263
2025/09/18-17:25:25.884728 7f7f2b7fe6c0 Delete type=0 #236 2025/09/24-16:42:14.692870 7f7cfaffd6c0 Delete type=0 #265
2025/09/18-17:25:58.019852 7f7f29bff6c0 Level-0 table #242: started 2025/09/24-16:43:46.011645 7f7cf9fff6c0 Level-0 table #270: started
2025/09/18-17:25:58.019893 7f7f29bff6c0 Level-0 table #242: 0 bytes OK 2025/09/24-16:43:46.011682 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
2025/09/18-17:25:58.026069 7f7f29bff6c0 Delete type=0 #240 2025/09/24-16:43:46.083954 7f7cf9fff6c0 Delete type=0 #268
2025/09/18-17:25:58.047683 7f7f29bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) 2025/09/24-16:43:46.208935 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.661051 7f7f2b7fe6c0 Delete type=3 #1 2025/09/24-16:34:06.421631 7f7d00dfa6c0 Recovering log #261
2025/09/18-17:24:08.860133 7f7f29bff6c0 Level-0 table #237: started 2025/09/24-16:34:06.432018 7f7d00dfa6c0 Delete type=3 #259
2025/09/18-17:24:08.860169 7f7f29bff6c0 Level-0 table #237: 0 bytes OK 2025/09/24-16:34:06.432112 7f7d00dfa6c0 Delete type=0 #261
2025/09/18-17:24:08.917842 7f7f29bff6c0 Delete type=0 #235 2025/09/24-16:41:30.098303 7f7cf9fff6c0 Level-0 table #266: started
2025/09/18-17:24:09.119729 7f7f29bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at '!items!zUYIVOuFpRur9aAR' @ 109 : 1 2025/09/24-16:41:30.098366 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
2025/09/18-17:24:09.119743 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.104526 7f7cf9fff6c0 Delete type=0 #264
2025/09/18-17:24:09.155742 7f7f29bff6c0 Generated table #238@0: 49 keys, 20052 bytes 2025/09/24-16:41:30.124617 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
2025/09/18-17:24:09.155788 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20052 bytes
2025/09/18-17:24:09.214820 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:09.214942 7f7f29bff6c0 Delete type=2 #205
2025/09/18-17:24:09.499501 7f7f29bff6c0 Manual compaction at level-0 from '!items!zUYIVOuFpRur9aAR' @ 109 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000239 MANIFEST-000267

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.887557 7f7f2a7fc6c0 Recovering log #236 2025/09/24-16:42:14.695212 7f7cfbfff6c0 Recovering log #265
2025/09/18-17:25:25.903745 7f7f2a7fc6c0 Delete type=3 #234 2025/09/24-16:42:14.705156 7f7cfbfff6c0 Delete type=3 #263
2025/09/18-17:25:25.903805 7f7f2a7fc6c0 Delete type=0 #236 2025/09/24-16:42:14.705234 7f7cfbfff6c0 Delete type=0 #265
2025/09/18-17:25:58.055681 7f7f29bff6c0 Level-0 table #242: started 2025/09/24-16:43:46.084105 7f7cf9fff6c0 Level-0 table #270: started
2025/09/18-17:25:58.055706 7f7f29bff6c0 Level-0 table #242: 0 bytes OK 2025/09/24-16:43:46.084138 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
2025/09/18-17:25:58.061636 7f7f29bff6c0 Delete type=0 #240 2025/09/24-16:43:46.141584 7f7cf9fff6c0 Delete type=0 #268
2025/09/18-17:25:58.076006 7f7f29bff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) 2025/09/24-16:43:46.208949 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.681692 7f7f2affd6c0 Delete type=3 #1 2025/09/24-16:34:06.434181 7f7cfb7fe6c0 Recovering log #261
2025/09/18-17:24:08.917988 7f7f29bff6c0 Level-0 table #237: started 2025/09/24-16:34:06.444000 7f7cfb7fe6c0 Delete type=3 #259
2025/09/18-17:24:08.918018 7f7f29bff6c0 Level-0 table #237: 0 bytes OK 2025/09/24-16:34:06.444067 7f7cfb7fe6c0 Delete type=0 #261
2025/09/18-17:24:08.983600 7f7f29bff6c0 Delete type=0 #235 2025/09/24-16:41:30.144559 7f7cf9fff6c0 Level-0 table #266: started
2025/09/18-17:24:09.215118 7f7f29bff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at '!items!ysGehYm1VkMWrI22' @ 71 : 1 2025/09/24-16:41:30.144589 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
2025/09/18-17:24:09.215131 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.151446 7f7cf9fff6c0 Delete type=0 #264
2025/09/18-17:24:09.251613 7f7f29bff6c0 Generated table #238@0: 17 keys, 11517 bytes 2025/09/24-16:41:30.151596 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
2025/09/18-17:24:09.251694 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 11517 bytes
2025/09/18-17:24:09.305026 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:09.305314 7f7f29bff6c0 Delete type=2 #205
2025/09/18-17:24:09.499516 7f7f29bff6c0 Manual compaction at level-0 from '!items!ysGehYm1VkMWrI22' @ 71 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000176 MANIFEST-000204

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.926154 7f7f2b7fe6c0 Recovering log #173 2025/09/24-16:42:14.720636 7f7cfaffd6c0 Recovering log #202
2025/09/18-17:25:25.941736 7f7f2b7fe6c0 Delete type=3 #171 2025/09/24-16:42:14.731231 7f7cfaffd6c0 Delete type=3 #200
2025/09/18-17:25:25.941811 7f7f2b7fe6c0 Delete type=0 #173 2025/09/24-16:42:14.731304 7f7cfaffd6c0 Delete type=0 #202
2025/09/18-17:25:58.069595 7f7f29bff6c0 Level-0 table #179: started 2025/09/24-16:43:46.141700 7f7cf9fff6c0 Level-0 table #207: started
2025/09/18-17:25:58.069627 7f7f29bff6c0 Level-0 table #179: 0 bytes OK 2025/09/24-16:43:46.141727 7f7cf9fff6c0 Level-0 table #207: 0 bytes OK
2025/09/18-17:25:58.075769 7f7f29bff6c0 Delete type=0 #177 2025/09/24-16:43:46.208754 7f7cf9fff6c0 Delete type=0 #205
2025/09/18-17:25:58.076032 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) 2025/09/24-16:43:46.208965 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.725670 7f7f2a7fc6c0 Delete type=3 #1 2025/09/24-16:34:06.459217 7f7d00dfa6c0 Recovering log #198
2025/09/18-17:24:09.049574 7f7f29bff6c0 Level-0 table #174: started 2025/09/24-16:34:06.469315 7f7d00dfa6c0 Delete type=3 #196
2025/09/18-17:24:09.049607 7f7f29bff6c0 Level-0 table #174: 0 bytes OK 2025/09/24-16:34:06.469408 7f7d00dfa6c0 Delete type=0 #198
2025/09/18-17:24:09.119551 7f7f29bff6c0 Delete type=0 #172 2025/09/24-16:41:30.137845 7f7cf9fff6c0 Level-0 table #203: started
2025/09/18-17:24:09.404507 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at '!scenes!FJXugdbkBpEJEdR6' @ 5 : 1 2025/09/24-16:41:30.137895 7f7cf9fff6c0 Level-0 table #203: 0 bytes OK
2025/09/18-17:24:09.404524 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.144438 7f7cf9fff6c0 Delete type=0 #201
2025/09/18-17:24:09.434413 7f7f29bff6c0 Generated table #175@0: 1 keys, 1344 bytes 2025/09/24-16:41:30.151581 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
2025/09/18-17:24:09.434448 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 1344 bytes
2025/09/18-17:24:09.499220 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:09.499350 7f7f29bff6c0 Delete type=2 #142
2025/09/18-17:24:09.499541 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 5 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000240 MANIFEST-000268

View File

@@ -1,7 +1,7 @@
2025/09/18-17:25:25.906336 7f7f2bfff6c0 Recovering log #237 2025/09/24-16:42:14.708014 7f7d00dfa6c0 Recovering log #266
2025/09/18-17:25:25.922455 7f7f2bfff6c0 Delete type=3 #235 2025/09/24-16:42:14.717668 7f7d00dfa6c0 Delete type=3 #264
2025/09/18-17:25:25.922542 7f7f2bfff6c0 Delete type=0 #237 2025/09/24-16:42:14.717743 7f7d00dfa6c0 Delete type=0 #266
2025/09/18-17:25:58.047930 7f7f29bff6c0 Level-0 table #243: started 2025/09/24-16:43:45.963524 7f7cf9fff6c0 Level-0 table #271: started
2025/09/18-17:25:58.048063 7f7f29bff6c0 Level-0 table #243: 0 bytes OK 2025/09/24-16:43:45.963550 7f7cf9fff6c0 Level-0 table #271: 0 bytes OK
2025/09/18-17:25:58.055551 7f7f29bff6c0 Delete type=0 #241 2025/09/24-16:43:46.011489 7f7cf9fff6c0 Delete type=0 #269
2025/09/18-17:25:58.075985 7f7f29bff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) 2025/09/24-16:43:46.208919 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,7 @@
2025/09/18-11:50:45.701807 7f7f2a7fc6c0 Delete type=3 #1 2025/09/24-16:34:06.445870 7f7cfaffd6c0 Recovering log #262
2025/09/18-17:24:08.983751 7f7f29bff6c0 Level-0 table #238: started 2025/09/24-16:34:06.456672 7f7cfaffd6c0 Delete type=3 #260
2025/09/18-17:24:08.983779 7f7f29bff6c0 Level-0 table #238: 0 bytes OK 2025/09/24-16:34:06.456727 7f7cfaffd6c0 Delete type=0 #262
2025/09/18-17:24:09.049421 7f7f29bff6c0 Delete type=0 #236 2025/09/24-16:41:30.131456 7f7cf9fff6c0 Level-0 table #267: started
2025/09/18-17:24:09.305611 7f7f29bff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at '!items!zs67k4sxCid6oTK3' @ 80 : 1 2025/09/24-16:41:30.131488 7f7cf9fff6c0 Level-0 table #267: 0 bytes OK
2025/09/18-17:24:09.305631 7f7f29bff6c0 Compacting 1@0 + 0@1 files 2025/09/24-16:41:30.137659 7f7cf9fff6c0 Delete type=0 #265
2025/09/18-17:24:09.339316 7f7f29bff6c0 Generated table #239@0: 36 keys, 20892 bytes 2025/09/24-16:41:30.151571 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
2025/09/18-17:24:09.339411 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20892 bytes
2025/09/18-17:24:09.404093 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/09/18-17:24:09.404255 7f7f29bff6c0 Delete type=2 #218
2025/09/18-17:24:09.499531 7f7f29bff6c0 Manual compaction at level-0 from '!items!zs67k4sxCid6oTK3' @ 80 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)

View File

@@ -18,8 +18,10 @@
<div> <div>
<ul> <ul>
<li><strong>{{alias}}</strong> attaque <strong>{{defenderName}}</strong></li>
{{#if arme}} {{#if arme}}
<label class="chat-weapon-name">Dégats {{arme.name}} : {{degats}} ({{degatsFormula}})</label> <li><label class="chat-weapon-name">Dégats {{arme.name}} : {{degats}} ({{degatsFormula}})</label></li>
{{/if}} {{/if}}
{{#if loc}} {{#if loc}}
<li>Localisation : {{loc.label}}</li> <li>Localisation : {{loc.label}}</li>
@@ -41,27 +43,29 @@
<li><strong class="chat-result-success">Réussite critique : La blessure a été augmentée d'un niveau</strong></li> <li><strong class="chat-result-success">Réussite critique : La blessure a été augmentée d'un niveau</strong></li>
{{/if}} {{/if}}
{{#if blessure}} {{#if blessure}}
<li>{{defenderName}} a subi une blessure!</li> <li><strong>{{defenderName}} a subi une blessure!</strong></li>
<li>Gravité : {{blessure.name}}</li> <li>Gravité : {{blessure.name}}</li>
{{#if (eq loc.categorie "tete")}} {{#if (eq loc.categorie "tete")}}
{{#if (gt blessure.system.value 0)}} {{#if (gt blessure.system.value 0)}}
<li><strong class="chat-result-warning">{{alias}} doit réussir un test d'Endurance de difficulté 7 ou être <li><strong class="chat-result-warning">{{defenderName}} doit réussir un test d'Endurance de difficulté 7 ou être
assomé</strong></li> assommé</strong></li>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#if (eq loc.categorie "bras")}} {{#if (eq loc.categorie "bras")}}
{{#if (gt blessure.system.value 2)}} {{#if (gt blessure.system.value 2)}}
<li><strong class="chat-result-warning">{{alias}} lache l'objet tenu par son bras. Il doit faire un test d'endurance <li><strong class="chat-result-warning">{{defenderName}} lache l'objet tenu par son bras. Il doit faire un test
d'endurance
pour l'utiliser désormais.</strong></li> pour l'utiliser désormais.</strong></li>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#if (eq loc.categorie "jambe")}} {{#if (eq loc.categorie "jambe")}}
{{#if (gt blessure.system.value 2)}} {{#if (gt blessure.system.value 2)}}
<li><strong class="chat-result-warning">{{alias}} tombe au sol. Pour se relever et marcher, il doit réussir un test <li><strong class="chat-result-warning">{{defenderName}} tombe au sol. Pour se relever et marcher, il doit réussir
un test
d'Endurance à chaque tour. d'Endurance à chaque tour.
</strong></li> </strong></li>
{{/if}} {{/if}}
@@ -69,14 +73,16 @@
{{#if (eq loc.categorie "main")}} {{#if (eq loc.categorie "main")}}
{{#if (gt blessure.system.value 1)}} {{#if (gt blessure.system.value 1)}}
<li><strong class="chat-result-warning">{{alias}} lache l'objet tenu par sa main. Il doit faire un test d'endurance <li><strong class="chat-result-warning">{{defenderName}} lache l'objet tenu par sa main. Il doit faire un test
d'endurance
pour l'utiliser désormais.</strong></li> pour l'utiliser désormais.</strong></li>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#if (eq loc.categorie "pied")}} {{#if (eq loc.categorie "pied")}}
{{#if (gt blessure.system.value 1)}} {{#if (gt blessure.system.value 1)}}
<li><strong class="chat-result-warning">{{alias}} tombe au sol. Pour se relever et marcher, il doit réussir un test <li><strong class="chat-result-warning">{{defenderName}} tombe au sol. Pour se relever et marcher, il doit réussir
un test
d'Endurance à chaque tour. d'Endurance à chaque tour.
</strong></li> </strong></li>
{{/if}} {{/if}}

View File

@@ -33,6 +33,13 @@
{{#if enableProvidence}} {{#if enableProvidence}}
<li>Un niveau de Providence a été utilisé !</li> <li>Un niveau de Providence a été utilisé !</li>
{{/if}} {{/if}}
{{#if hasActions}}
<li data-tooltip="Nombre d'actions restantes, avec MG = Main Gauche">Actions restantes: {{remainingActions}}
(MG:{{remainingActionsMainGauche}})</li>
{{/if}}
{{#if arme}}
{{#if isViser}} {{#if isViser}}
<li>Bonus de visée (+1 niveau)</li> <li>Bonus de visée (+1 niveau)</li>
{{/if}} {{/if}}
@@ -45,6 +52,7 @@
{{#if allongeMalus}} {{#if allongeMalus}}
<li>Malus d'allonge: {{allongeMalus}} niveau</li> <li>Malus d'allonge: {{allongeMalus}} niveau</li>
{{/if}} {{/if}}
{{/if}}
<li>Dés: {{diceFormula}} </li> <li>Dés: {{diceFormula}} </li>
{{#if isTir}} {{#if isTir}}

View File

@@ -86,6 +86,10 @@
<input type="checkbox" id="roll-charge-a-cheval" {{checked isChargeACheval}} /> <input type="checkbox" id="roll-charge-a-cheval" {{checked isChargeACheval}} />
</div> </div>
{{/if}} {{/if}}
<div class="flexrow">
<span class="roll-dialog-label">Main gauche ?</span>
<input type="checkbox" id="roll-main-gauche" {{checked isMainGauche}} />
</div>
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Attaque ciblée (-1 Niveau): </span> <span class="roll-dialog-label">Attaque ciblée (-1 Niveau): </span>
<select class="" type="text" id="roll-attaque-ciblee" value="{{attaqueCiblee}}" data-dtype="String"> <select class="" type="text" id="roll-attaque-ciblee" value="{{attaqueCiblee}}" data-dtype="String">
@@ -96,6 +100,13 @@
{{/select}} {{/select}}
</select> </select>
</div> </div>
{{else}}
<div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span>
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="String">
{{selectOptions config.difficulte selected=difficulty valueAttr="key" labelAttr="label"}}
</select>
</div>
{{/if}} {{/if}}
</div> </div>