8 Commits

Author SHA1 Message Date
d462d22a0a Manye enhancements for combat
All checks were successful
Release Creation / build (release) Successful in 42s
2025-09-18 17:26:02 +02:00
710ee54531 Manye enhancements for combat 2025-09-18 17:24:42 +02:00
7994aa7db4 Fix savoir lors de la creation de perso
All checks were successful
Release Creation / build (release) Successful in 1m30s
2025-09-08 23:47:19 +02:00
5176b4ce87 Amelioration histoire creation de perso, CSS bouton et genre de la providence
All checks were successful
Release Creation / build (release) Successful in 56s
2025-07-20 11:21:08 +02:00
3d6f195fc2 Educcation fix + CSS v13
All checks were successful
Release Creation / build (release) Successful in 43s
2025-07-02 23:08:34 +02:00
3693d68c24 Correction sur les compétences de base
All checks were successful
Release Creation / build (release) Successful in 1m0s
2025-06-04 15:29:32 +02:00
16ccd2f3e1 Foundry v13 migration 2025-05-09 10:28:22 +02:00
631eb280ca Foundry v13 migration
All checks were successful
Release Creation / build (release) Successful in 55s
2025-05-09 10:26:29 +02:00
100 changed files with 922 additions and 544 deletions

View File

@@ -1,3 +1,7 @@
# 13.0.0
- Support de Foundry v13
# 12.0.23 # 12.0.23
- Correction sur les jets réussie en tir - Correction sur les jets réussie en tir

BIN
images/icons/xpplus1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -6,7 +6,7 @@
import { TeDeumUtility } from "../common/tedeum-utility.js"; import { TeDeumUtility } from "../common/tedeum-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class TeDeumActorPJSheet extends ActorSheet { export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
@@ -56,10 +56,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(), nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(),
santeModifier: this.actor.getSanteModifier(), santeModifier: this.actor.getSanteModifier(),
educations: this.actor.getEducations(), educations: this.actor.getEducations(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
equipmentfree: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }), equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }), histoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.histoire, { async: true }),
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
@@ -67,7 +67,6 @@ export class TeDeumActorPJSheet extends ActorSheet {
} }
this.formData = formData; this.formData = formData;
console.log("PC : ", formData, this.object);
return formData; return formData;
} }
@@ -100,6 +99,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
let dataType = $(ev.currentTarget).data("type") let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true }) this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true })
}) })
html.find('.blessure-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { typeBlessure: "estafilade", localisation: "corps", value: 0, appliquee: true, description: "" } }], { renderSheet: true })
})
html.find('.competence-add').click(ev => { html.find('.competence-add').click(ev => {
let dataType = $(ev.currentTarget).data("type") let dataType = $(ev.currentTarget).data("type")
let caracKey = $(ev.currentTarget).data("carac-key") let caracKey = $(ev.currentTarget).data("carac-key")

View File

@@ -65,9 +65,13 @@ export class TeDeumActor extends Actor {
super._preUpdate(changed, options, user); super._preUpdate(changed, options, user);
} }
/* -------------------------------------------- */
getCompetenceScore(compName) { getCompetenceScore(compName) {
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) { if (competence) {
if (competence.system.isBase) {
return this.system.caracteristiques[competence.system.caracteristique].value
}
return competence.system.score return competence.system.score
} }
return 0 return 0
@@ -155,6 +159,24 @@ export class TeDeumActor extends Actor {
return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value] return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value]
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getAttaqueBonusDegats(rollData = undefined) {
let base = game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value].value
let additionalBonus = 0
if (rollData) {
// Spécificité armes naturelle avec gantelet
if (rollData?.arme?.system.specificites?.poing?.hasSpec && this.items.find(item => item.type == "armure" && item.name.toLowerCase() == "gantelet" && item.system.equipe)) {
additionalBonus += 1
rollData.gantelet = true
}
if (rollData.isChargeAPied) {
additionalBonus += this.getCompetenceScore("course")
} else if (rollData.isChargeACheval) {
additionalBonus += this.getCompetenceScore("equitation")
}
}
return base + additionalBonus
}
/* -------------------------------------------- */
getNbArmures() { getNbArmures() {
return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value] return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value]
} }
@@ -266,41 +288,105 @@ export class TeDeumActor extends Actor {
modTotal += blessDef.modifier modTotal += blessDef.modifier
} }
// Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire // Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance") let enduranceScore = this.getCompetenceScore("endurance")
if (blessures.length > endurance.system.score) { if (blessures.length > enduranceScore) {
modTotal += -1 modTotal += -1
} }
return modTotal return modTotal
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async appliquerDegats(rollData) { async appliquerBlessure(blessureId, locId, comment = "") {
let combat = this.prepareCombat() let blessure = game.system.tedeum.config.blessures[blessureId]
rollData.defenderName = this.name if (!blessure) {
let touche = combat[rollData.loc.id].touche ui.notifications.warn("Type de blessure inconnu : " + blessureId)
if (rollData.degats > 0 && rollData.degats > touche) { console.error("Type de blessure inconnu : " + blessureId)
let diff = rollData.degats - touche return
for (let bId in game.system.tedeum.config.blessures) { }
let blessure = game.system.tedeum.config.blessures[bId]
if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) {
// Create a new blessure object // Create a new blessure object
let blessureObj = { let blessureObj = {
name: blessure.label, name: blessure.label,
type: "blessure", type: "blessure",
system: { system: {
typeBlessure: bId, typeBlessure: blessureId,
localisation: locId || "maindroite",
value: blessure.value,
appliquee: true,
description: comment,
}
}
this.createEmbeddedDocuments('Item', [blessureObj]);
}
/* -------------------------------------------- */
getArmorDegatsModifier(rollData, combat) {
let loc = combat[rollData.loc.id]
// Sans armure
if (loc.armures.length == 0) {
return rollData.arme.system.degatsArmure.sansarmure
}
// Avec armure de cuir
if (loc.armures.find(a => a.system.typeArmure == "cuir")) {
return rollData.arme.system.degatsArmure.cuir
}
// Avec armure de maille
if (loc.armures.find(a => a.system.typeArmure == "maille")) {
return rollData.arme.system.degatsArmure.mailles
}
// Avec armure de plate
if (loc.armures.find(a => a.system.typeArmure == "plate")) {
return rollData.arme.system.degatsArmure.plates
}
return 0
}
/* -------------------------------------------- */
async appliquerDegats(rollData) {
let combat = this.prepareCombat()
rollData.defenderName = this.name
let touche = combat[rollData.loc.id].touche
let armorDegatModifier = this.getArmorDegatsModifier(rollData, combat)
rollData.degats += armorDegatModifier
rollData.armorDegatModifier = armorDegatModifier
let blessureId = "indemne"
if (rollData.degats > 0 && rollData.degats > touche) {
let diff = rollData.degats - touche
for (let bId in game.system.tedeum.config.blessures) {
let blessure = game.system.tedeum.config.blessures[bId]
if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) {
if (rollData.isReussiteCritique) {
bId = game.system.tedeum.config.blessuresOrder[blessure.value + 1]
}
blessureId = bId
break
}
}
}
if (rollData.isReussiteCritique && blessureId == "indemne") { // Critical success without degats => lightest blessure
blessureId = "estafilade"
}
console.log("Appliquer dégats", rollData, combat, blessureId)
if (blessureId != "indemne") {
let blessure = game.system.tedeum.config.blessures[blessureId]
// Create a new blessure object
let blessureObj = {
name: blessure.label,
type: "blessure",
system: {
typeBlessure: blessureId,
localisation: rollData.loc.id, localisation: rollData.loc.id,
value: blessure.value,
appliquee: true, appliquee: true,
description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias, description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias,
} }
} }
rollData.blessure = blessureObj rollData.blessure = blessureObj
rollData.touche = touche
this.createEmbeddedDocuments('Item', [blessureObj]); this.createEmbeddedDocuments('Item', [blessureObj]);
} }
}
}
// Display the relevant chat message // Display the relevant chat message
let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, { let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData) content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData)
}) })
await msg.setFlag("world", "te-deum-rolldata", rollData) await msg.setFlag("world", "te-deum-rolldata", rollData)
} }
@@ -334,7 +420,7 @@ export class TeDeumActor extends Actor {
let providence = foundry.utils.deepClone(this.system.providence) let providence = foundry.utils.deepClone(this.system.providence)
providence.name = "Providence" providence.name = "Providence"
if (this.system.genre.toLowerCase() == "homme") { if (this.system.genre.toLowerCase() == "homme") {
providence.qualite = game.system.tedeum.config.providence[providence.value].labelH providence.qualite = game.system.tedeum.config.providence[providence.value].labelM
} else { } else {
providence.qualite = game.system.tedeum.config.providence[providence.value].labelF providence.qualite = game.system.tedeum.config.providence[providence.value].labelF
} }
@@ -382,6 +468,7 @@ export class TeDeumActor extends Actor {
xp = Math.max(xp + value, 0) xp = Math.max(xp + value, 0)
await this.update({ [`system.caracteristiques.${key}.experience`]: xp }) await this.update({ [`system.caracteristiques.${key}.experience`]: xp })
this.sheet?.render(true) this.sheet?.render(true)
ui.notifications.info(`+${value} XP en ${game.system.tedeum.config.caracteristiques[key].label}`)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -530,6 +617,15 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getInitiativeScore() { getInitiativeScore() {
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative") let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative")
initiative = foundry.utils.duplicate(initiative)
// Vérifie les armes avec bonus d'initiative
let armes = this.getArmes()
for (let arme of armes) {
if (arme.system.equipe && arme.system.bonusInitiative != 0) {
ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.bonusInitiative)
initiative.system.score += 1
}
}
if (initiative) { if (initiative) {
return initiative.system.score return initiative.system.score
} }
@@ -595,6 +691,7 @@ export class TeDeumActor extends Actor {
let rollData = this.getCommonCompetence(compId) let rollData = this.getCommonCompetence(compId)
rollData.mode = "competence" rollData.mode = "competence"
rollData.title = rollData.competence.name rollData.title = rollData.competence.name
rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score
this.startRoll(rollData).catch("Error on startRoll") this.startRoll(rollData).catch("Error on startRoll")
} }
@@ -653,9 +750,14 @@ export class TeDeumActor extends Actor {
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) { if (competence) {
rollData.competence = competence rollData.competence = competence
rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique]) let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
this.updateCarac(c, competence.system.caracteristique) this.updateCarac(c, competence.system.caracteristique)
rollData.carac = c rollData.carac = c
rollData.allongeLabel = game.system.tedeum.config.armeAllonges[weapon.system.allonge].label
rollData.allongeId = "courte"
rollData.allonges = foundry.utils.duplicate(game.system.tedeum.config.allonges[weapon.system.allonge])
} else { } else {
ui.notifications.warn("Impossible de trouver la compétence " + compName) ui.notifications.warn("Impossible de trouver la compétence " + compName)
return return

View File

@@ -6,13 +6,14 @@ export class TeDeumCharacterCreator {
async init() { async init() {
this.stages = {} this.stages = {}
this.currentStage = "origineSociale" this.currentStage = "origineSociale"
this.sex = undefined this.sexe = undefined
this.origineSociale = undefined this.origineSociale = undefined
this.religion = undefined this.religion = undefined
this.caracBonus = {} this.caracBonus = {}
this.competenceBonus = {} this.competenceBonus = {}
this.suiviReponses = [] this.suiviReponses = []
this.competences = TeDeumUtility.getCompetencesForDropDown() this.competences = TeDeumUtility.getCompetencesForDropDown()
this.choiceSummary = {}
for (let k in game.system.tedeum.config.caracteristiques) { for (let k in game.system.tedeum.config.caracteristiques) {
this.caracBonus[k] = { value: 0 } this.caracBonus[k] = { value: 0 }
@@ -39,6 +40,7 @@ export class TeDeumCharacterCreator {
} else { } else {
this.competenceBonus[compName].value += 1 this.competenceBonus[compName].value += 1
} }
this.choiceSummary[this.currentStage].competences[compName] = 1
} }
/*--------------------------------------------*/ /*--------------------------------------------*/
@@ -69,7 +71,7 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/ /*--------------------------------------------*/
async askStageName(context) { async askStageName(context) {
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
classes: ["fvtt-te-deum"], classes: ["fvtt-te-deum"],
@@ -116,6 +118,7 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/ /*--------------------------------------------*/
async askQuestionnaire(stage, context) { async askQuestionnaire(stage, context) {
context.subtitle = "Questionnaire" context.subtitle = "Questionnaire"
this.choiceSummary[this.currentStage].questionnaire = {}
for (let key in stage.system.questionnaire) { for (let key in stage.system.questionnaire) {
let question = stage.system.questionnaire[key] let question = stage.system.questionnaire[key]
@@ -127,7 +130,7 @@ export class TeDeumCharacterCreator {
context.competences = {} context.competences = {}
context.responseKey = "reponse1" // By default context.responseKey = "reponse1" // By default
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
classes: ["fvtt-te-deum"], classes: ["fvtt-te-deum"],
@@ -170,13 +173,14 @@ export class TeDeumCharacterCreator {
let compName = context.competences[context.responseKey] || selectedResponse.compName let compName = context.competences[context.responseKey] || selectedResponse.compName
this.increaseCompetence(compName) this.increaseCompetence(compName)
this.suiviReponses.push({ etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName }) this.suiviReponses.push({ key: this.currentStage, etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName })
} }
} }
/*------------- -------------------------------*/ /*------------- -------------------------------*/
async askCompetences(stage, context) { async askCompetences(stage, context) {
context.subtitle = "Choix des Compétences" context.subtitle = "Choix des Compétences"
this.choiceSummary[this.currentStage].competences = {}
context.fixedCompetences = {} context.fixedCompetences = {}
context.selectCompetences = {} context.selectCompetences = {}
@@ -192,7 +196,7 @@ export class TeDeumCharacterCreator {
} }
} }
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
classes: ["fvtt-te-deum"], classes: ["fvtt-te-deum"],
@@ -236,7 +240,7 @@ export class TeDeumCharacterCreator {
} }
} }
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
classes: ["fvtt-te-deum"], classes: ["fvtt-te-deum"],
@@ -273,6 +277,10 @@ export class TeDeumCharacterCreator {
/*------------- -------------------------------*/ /*------------- -------------------------------*/
async askCarac(stage, context) { async askCarac(stage, context) {
context.subtitle = "Choix des Caractéristiques" context.subtitle = "Choix des Caractéristiques"
this.choiceSummary[this.currentStage] = {
caracBonus : {},
competences : {}
}
let selected = [] let selected = []
for (let i = 0; i < stage.system.nbChoixCarac; i++) { for (let i = 0; i < stage.system.nbChoixCarac; i++) {
@@ -283,7 +291,7 @@ export class TeDeumCharacterCreator {
context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId]) context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId])
} }
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
classes: ["fvtt-te-deum"], classes: ["fvtt-te-deum"],
@@ -312,6 +320,7 @@ export class TeDeumCharacterCreator {
} }
this.caracBonus[choiceResult.carac].value += 1 this.caracBonus[choiceResult.carac].value += 1
selected.push(choiceResult.carac) selected.push(choiceResult.carac)
this.choiceSummary[this.currentStage].caracBonus[choiceResult.carac] = 1
} }
} }
@@ -325,7 +334,7 @@ export class TeDeumCharacterCreator {
origineChoice: game.system.tedeum.config.origineSociale origineChoice: game.system.tedeum.config.origineSociale
} }
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context)
const label = "Valider le choix de l'Origine Sociale" const label = "Valider le choix de l'Origine Sociale"
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },
@@ -360,6 +369,12 @@ export class TeDeumCharacterCreator {
for (let key in this.origineSociale.caracteristiques) { for (let key in this.origineSociale.caracteristiques) {
this.caracBonus[key].value += this.origineSociale.caracteristiques[key] this.caracBonus[key].value += this.origineSociale.caracteristiques[key]
} }
this.choiceSummary['origineSociale'] = {
sexe: this.sexe,
religion: this.religion,
origineSociale: this.origineSociale.label,
caracBonus: this.caracBonus,
}
this.currentStage = "pouponniere" this.currentStage = "pouponniere"
} }
@@ -388,6 +403,7 @@ export class TeDeumCharacterCreator {
this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem)) this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem))
context.title = `La Pouponnière - ${this.pouponniere.name}` context.title = `La Pouponnière - ${this.pouponniere.name}`
TeDeumUtility.prepareEducationContent(this.pouponniere); TeDeumUtility.prepareEducationContent(this.pouponniere);
this.choiceSummary['pouponniere'] = {}
context.label = "Valider l'augmentation de caracteristique" context.label = "Valider l'augmentation de caracteristique"
await this.askCarac(this.pouponniere, context) await this.askCarac(this.pouponniere, context)
@@ -581,8 +597,36 @@ export class TeDeumCharacterCreator {
await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent}) await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent})
let histoire = "" let histoire = ""
for (let reponse of this.suiviReponses) { for ( let key in this.choiceSummary) {
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>` let stageSummary = this.choiceSummary[key]
if (stageSummary.sexe) {
histoire += `<h3>Origine Sociale</h3>`
histoire += `<p>${stageSummary.sexe} - ${stageSummary.religion} - ${stageSummary.origineSociale}</p>`
} else {
histoire += `<h3>${game.system.tedeum.config.etapesEducation[key].label}</h3>`
}
if (stageSummary.caracBonus) {
histoire += `<p><strong>Caractéristiques : </strong><ul>`
for (let caracKey in stageSummary.caracBonus) {
histoire += `<li>${TeDeumUtility.upperFirst(caracKey)} +1</li>`
}
histoire += `</ul></p>`
}
if (stageSummary.competences) {
histoire += `<p><strong>Compétences : </strong><ul>`
for (let compName in stageSummary.competences) {
histoire += `<li>${TeDeumUtility.upperFirst(compName)} +1</li>`
}
histoire += `</ul></p>`
}
let questions = this.suiviReponses.filter( r => r.key === key)
if (questions.length > 0) {
histoire += `<p><strong>Réponses au questionnaire : </strong><ul>`
for (let question of questions) {
histoire += `<li>${question.question} : <i>${question.reponse}</i> (${TeDeumUtility.upperFirst(question.compName)}+1)</li>`
}
histoire += `</ul></p>`
}
} }
await actor.update({ "system.histoire": histoire}) await actor.update({ "system.histoire": histoire})
actor.render(true) actor.render(true)
@@ -596,7 +640,7 @@ export class TeDeumCharacterCreator {
"adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" }, "adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" },
} }
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
const label = "Terminer" const label = "Terminer"
const choiceResult = await foundry.applications.api.DialogV2.wait({ const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title }, window: { title: context.title },

View File

@@ -15,19 +15,35 @@ export const TEDEUM_CONFIG = {
{ value: 10 }, { value: 30 }, { value: 50 }], { value: 10 }, { value: 30 }, { value: 50 }],
LOCALISATION: { LOCALISATION: {
"pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } }, "pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", categorie: "pied", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } },
"jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } }, "jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", categorie: "jambe", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } },
"jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } }, "jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", categorie: "jambe", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } },
"piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } }, "piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", categorie: "pied", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } },
"maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } }, "maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", categorie: "main", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } },
"maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } }, "maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", categorie: "main", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } },
"brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } }, "brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", categorie: "bras", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } },
"brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } }, "brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", categorie: "bras", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } },
"corps": { label: "Corps", value: 1, id: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } }, "corps": { label: "Corps", value: 1, id: "corps", categorie: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } },
"tete": { label: "Tête", value: 1, id: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } }, "tete": { label: "Tête", value: 1, id: "tete", categorie: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } },
},
ATTAQUE_CIBLEES: {
"aucune": { label: "Aucune", id: "aucune", locMod: 0, description: "Attaque non ciblée" },
"pieddroit": { label: "Pied Droit", id: "pieddroit", locMod: 0, description: "Attaque ciblée sur le pied droit" },
"jambedroite": { label: "Jambe Droite", id: "jambedroite", locMod: -1, description: "Attaque ciblée sur la jambe droite" },
"jambegauche": { label: "Jambe Gauche", id: "jambegauche", locMod: -1, description: "Attaque ciblée sur la jambe gauche" },
"piedgauche": { label: "Pied Gauche", id: "piedgauche", locMod: 0, description: "Attaque ciblée sur le pied gauche" },
"maindroite": { label: "Main Droite", id: "maindroite", locMod: 0, description: "Attaque ciblée sur la main droite" },
"maingauche": { label: "Main Gauche", id: "maingauche", locMod: 0, description: "Attaque ciblée sur la main gauche" },
"brasdroit": { label: "Bras Droit", id: "brasdroit", locMod: -1, description: "Attaque ciblée sur le bras droit" },
"brasgauche": { label: "Bras Gauche", id: "brasgauche", locMod: -1, description: "Attaque ciblée sur le bras gauche" },
"corps": { label: "Corps", id: "corps", locMod: -2, description: "Attaque ciblée sur le corps" },
"tete": { label: "Tête", id: "tete", locMod: -2, description: "Attaque ciblée sur la tête" },
}, },
ARME_SPECIFICITE: { ARME_SPECIFICITE: {
"poing": { label: "Poings", id: "poing", melee: true, tir: false },
"pied": { label: "Pieds", id: "pied", melee: true, tir: false },
"encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true }, "encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true },
"maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false }, "maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false },
"coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false }, "coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false },
@@ -102,10 +118,10 @@ export const TEDEUM_CONFIG = {
adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." }, adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." },
}, },
allonges: { allonges: {
courte: { courte: { malus: 0 }, moyenne: { malus: -1 }, longue: { malus: -2 }, treslongue: { malus: 0, esquive: 2 } }, courte: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (-2)", malus: -2 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } },
moyenne: { courte: { malus: 0 }, moyenne: { malus: 0 }, longue: { malus: -1 }, treslongue: { malus: 0, esquive: 2 } }, moyenne: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (0)", malus: 0 }, longue: { label: "Longue (-1)", malus: -1 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } },
longue: { courte: { malus: -2 }, moyenne: { malus: -1 }, longue: { malus: 0 }, treslongue: { malus: -1, esquive: 1 } }, longue: { courte: { label: "Courte (-2)", malus: -2 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (0)", malus: 0 }, treslongue: { label: "Très longue (-1, 2 Esquives)", malus: -1, esquive: 1 } },
treslongue: { courte: { malus: 0, esquive: 2 }, moyenne: { malus: 0, esquive: 2 }, longue: { malus: 0, esquive: 1 }, treslongue: { malus: 0 } }, treslongue: { courte: { label: "Courte (0, 2 Esquives)", malus: 0, esquive: 2 }, moyenne: { label: "Moyenne (0, 2 Esquives)", malus: 0, esquive: 2 }, longue: { label: "Longue (0, 1 Esquive)", malus: 0, esquive: 1 }, treslongue: { label: "Très longue (0)", malus: 0 } },
}, },
providence: [ providence: [
{ labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" }, { labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" },
@@ -195,13 +211,14 @@ export const TEDEUM_CONFIG = {
{ value: "1", label: "+1 niveau" }, { value: "1", label: "+1 niveau" },
{ value: "2", label: "+2 niveaux" } { value: "2", label: "+2 niveaux" }
], ],
blessuresOrder: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet", "tuenet", "tuenet", "tuenet", "tuenet"],
blessures: { blessures: {
indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 }, indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 },
estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 }, estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 },
plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 }, plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 },
plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 }, plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 },
plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 }, plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 },
tunenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -12 } tuenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -100 }
}, },
virulence: { virulence: {
aucune: { label: "Aucune", value: "aucune", modifier: 0 }, aucune: { label: "Aucune", value: "aucune", modifier: 0 },

View File

@@ -18,13 +18,14 @@ export class TeDeumUtility {
Hooks.on("renderActorDirectory", (app, html, data) => { Hooks.on("renderActorDirectory", (app, html, data) => {
if (game.user.can('ACTOR_CREATE')) { if (game.user.can('ACTOR_CREATE')) {
const button = document.createElement('button'); const button = document.createElement('button');
button.style.width = '90%'; button.style.width = '60%';
button.classList.add('tedeum-create-character');
button.innerHTML = 'Créer un Personnage' button.innerHTML = 'Créer un Personnage'
button.addEventListener('click', () => { button.addEventListener('click', () => {
let cr = new game.system.tedeum.TeDeumCharacterCreator(); let cr = new game.system.tedeum.TeDeumCharacterCreator();
cr.init() cr.init()
}) })
html.find('.header-actions').after(button) $(html).find('.header-actions').after(button)
} }
}) })
//Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options)); //Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options));
@@ -211,7 +212,7 @@ export class TeDeumUtility {
let isAttackWinner = true let isAttackWinner = true
let rWinner = this.currentOpposition let rWinner = this.currentOpposition
let rLooser = rollData let rLooser = rollData
if (rWinner.total < rLooser.total) { if (rWinner.total <= rLooser.total) {
rWinner = rollData rWinner = rollData
rLooser = this.currentOpposition rLooser = this.currentOpposition
isAttackWinner = false isAttackWinner = false
@@ -221,17 +222,33 @@ export class TeDeumUtility {
winner: rWinner, winner: rWinner,
looser: rLooser looser: rLooser
} }
// Update difficulty
rWinner.difficulty = rLooser.total
rLooser.difficulty = rWinner.total
await this.computeResults(rWinner)
await this.computeResults(rLooser)
// Auto XP management when opposed
if (rWinner.isReussiteCritique) {
let actor = this.getActorFromRollData(rWinner)
actor.modifyXP(rWinner.carac.key, 1)
}
if (rLooser.isEchecCritique) {
let actor = this.getActorFromRollData(rLooser)
actor.modifyXP(rLooser.carac.key, 1)
}
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData) content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
}) })
await msg.setFlag("world", "te-deum-rolldata", rollData) await msg.setFlag("world", "te-deum-rolldata", rollData)
// Si le gagnant est l'attaquant, appliquer les dégats sur la victime // Si le gagnant est l'attaquant, appliquer les dégats sur la victime
if (isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) { if (isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) {
this.appliquerDegats(rWinner) await this.appliquerDegats(rWinner)
} }
console.log("Rolldata result", rollData)
console.log("Opposition result", rollData, isAttackWinner, oppositionData)
} }
} }
@@ -242,6 +259,12 @@ export class TeDeumUtility {
if (defenderToken) { if (defenderToken) {
let actor = defenderToken.actor let actor = defenderToken.actor
await actor.appliquerDegats(rollData) await actor.appliquerDegats(rollData)
// Attaque naturelle avec dégats inférieur à -2
if ((rollData?.arme?.system.specificites?.poing?.hasSpec || rollData?.arme?.system.specificites?.pied?.hasSpec) && rollData.degats < -2) {
let attacker = this.getActorFromRollData(rollData)
attacker.appliquerBlessure("estafilade", "maindroite", "Contusion suite à une attaque naturelle")
ui.notifications.info(`${attacker.name} subit 1 contusion en infligeant ${rollData.degats} dégâts à mains nues`)
}
} else { } else {
ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué") ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué")
} }
@@ -250,7 +273,7 @@ export class TeDeumUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */ /* -------------------------------------------- */ /* -------------------------------------------- */
static async chatListeners(html) { static async chatListeners(html) {
html.on("click", '.chat-command-opposition', event => { $(html).on("click", '.chat-command-opposition', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata") let rollData = message.getFlag("world", "te-deum-rolldata")
@@ -258,7 +281,7 @@ export class TeDeumUtility {
TeDeumUtility.manageOpposition(rollData, messageId) TeDeumUtility.manageOpposition(rollData, messageId)
} }
}) })
html.on("click", '.chat-command-appliquer-degats', event => { $(html).on("click", '.chat-command-appliquer-degats', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata") let rollData = message.getFlag("world", "te-deum-rolldata")
@@ -266,6 +289,17 @@ export class TeDeumUtility {
TeDeumUtility.appliquerDegats(rollData, messageId) TeDeumUtility.appliquerDegats(rollData, messageId)
} }
}) })
$(html).on("click", '.chat-command-gain-xp', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata")
if (rollData) {
let actor = TeDeumUtility.getActorFromRollData(rollData)
actor.modifyXP(rollData.carac.key, 1)
// Hide this button
event.currentTarget.style.display = 'none';
}
})
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -277,7 +311,7 @@ export class TeDeumUtility {
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs', 'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs' 'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs'
] ]
return loadTemplates(templatePaths); return foundry.applications.handlebars.loadTemplates(templatePaths);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -354,7 +388,7 @@ export class TeDeumUtility {
let rollData = msg.data.rollData let rollData = msg.data.rollData
if (game.user.isGM) { if (game.user.isGM) {
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", { let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
content: await renderTemplate(msg.data.template, rollData), content: await foundry.applications.handlebars.renderTemplate(msg.data.template, rollData),
whisper: game.user.id whisper: game.user.id
}) })
chatMsg.setFlag("world", "tedeum-rolldata", rollData) chatMsg.setFlag("world", "tedeum-rolldata", rollData)
@@ -476,9 +510,18 @@ export class TeDeumUtility {
if (rollData.isMouvement) { if (rollData.isMouvement) {
localModifier -= 1 localModifier -= 1
} }
if (rollData.arme && rollData.allongeId) {
localModifier += rollData.allonges[rollData.allongeId].malus
rollData.allongeMalus = rollData.allonges[rollData.allongeId].malus
rollData.nbEsquives = rollData.allonges[rollData.allongeId]?.esquive || 0
}
if (rollData.attaqueCiblee && rollData.attaqueCiblee != "aucune") {
localModifier -= 1
rollData.loc = foundry.utils.duplicate(game.system.tedeum.config.LOCALISATION[rollData.attaqueCiblee])
}
let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier) let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier)
if (!diceBase) return; if (!diceBase) return;
diceFormula = diceBase + "x + " + rollData.competence.system.score diceFormula = diceBase + "x + " + rollData.compScore
} }
if (rollData.enableProvidence) { if (rollData.enableProvidence) {
diceFormula += " + " + rollData.providence.dice diceFormula += " + " + rollData.providence.dice
@@ -488,9 +531,12 @@ export class TeDeumUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async getLocalisation(rollData) { static async getLocalisation(rollData) {
let locRoll = await new Roll("1d20").roll() let locRoll
if (rollData.loc) {
locRoll = await new Roll(String(rollData.loc.score.min)).roll()
} else {
locRoll = await new Roll("1d20").roll()
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
rollData.locRoll = foundry.utils.duplicate(locRoll)
for (let key in game.system.tedeum.config.LOCALISATION) { for (let key in game.system.tedeum.config.LOCALISATION) {
let loc = game.system.tedeum.config.LOCALISATION[key] let loc = game.system.tedeum.config.LOCALISATION[key]
if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) { if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) {
@@ -499,13 +545,16 @@ export class TeDeumUtility {
} }
} }
} }
rollData.locRoll = foundry.utils.duplicate(locRoll)
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async processAttaqueMelee(rollData) { static async processAttaqueMelee(rollData) {
await this.getLocalisation(rollData) await this.getLocalisation(rollData)
let actor = game.actors.get(rollData.actorId) let actor = game.actors.get(rollData.actorId)
let bDegats = actor.getBonusDegats() let bDegats = actor.getAttaqueBonusDegats(rollData)
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll() rollData.degatsFormula = rollData.arme.system.degats + "+" + bDegats
let degatsRoll = await new Roll(rollData.degatsFormula).roll()
await this.showDiceSoNice(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
@@ -521,7 +570,7 @@ 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.locRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(rollData.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
} }
@@ -536,6 +585,14 @@ 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
if (rollData.competence) {
if (rollData.competence.system.isBase) {
rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value
} else {
rollData.compScore = rollData.competence.system.score
}
}
let diceFormula = this.computeRollFormula(rollData, actor) let diceFormula = this.computeRollFormula(rollData, actor)
if (!diceFormula) return; if (!diceFormula) return;
console.log("RollData", rollData, diceFormula) console.log("RollData", rollData, diceFormula)
@@ -553,7 +610,7 @@ export class TeDeumUtility {
await this.processAttaqueDistance(rollData) await this.processAttaqueDistance(rollData)
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await 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)
}) })
await msg.setFlag("world", "te-deum-rolldata", rollData) await msg.setFlag("world", "te-deum-rolldata", rollData)
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
@@ -562,10 +619,6 @@ export class TeDeumUtility {
if (rollData.enableProvidence) { if (rollData.enableProvidence) {
actor.modifyProvidence(-1) actor.modifyProvidence(-1)
} }
// Manage XP
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
actor.modifyXP(rollData.carac.key, 1)
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@@ -5,6 +5,7 @@ export class TeDeumBlessureSchema extends foundry.abstract.TypeDataModel {
const schema = {}; const schema = {};
schema.typeBlessure = new fields.StringField({ required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade" }); schema.typeBlessure = new fields.StringField({ required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade" });
schema.value = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.localisation = new fields.StringField({ required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps" }); schema.localisation = new fields.StringField({ required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps" });
schema.description = new fields.HTMLField({ required: true, blank: true }); schema.description = new fields.HTMLField({ required: true, blank: true });

View File

@@ -51,7 +51,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
reponse: new fields.StringField({ required: true, blank: true, initial: "" }), reponse: new fields.StringField({ required: true, blank: true, initial: "" }),
compName: new fields.StringField({ required: true, blank: true, initial: "" }), compName: new fields.StringField({ required: true, blank: true, initial: "" }),
toSelect: new fields.BooleanField({ initial: false }), toSelect: new fields.BooleanField({ initial: false }),
compList: new fields.SchemaField(Array.fromRange(10, 1).reduce((comps, i) => { compList: new fields.SchemaField(Array.fromRange(16, 1).reduce((comps, i) => {
comps[`comp${i}`] = new fields.SchemaField({ comps[`comp${i}`] = new fields.SchemaField({
compName: new fields.StringField({ required: true, blank: true, initial: "" }), compName: new fields.StringField({ required: true, blank: true, initial: "" }),
}); });

View File

@@ -60,9 +60,15 @@ export class TeDeumRollDialog extends Dialog {
html.find('#bonusMalusPerso').change((event) => { html.find('#bonusMalusPerso').change((event) => {
this.rollData.bonusMalusPerso = Number(event.currentTarget.value) this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
}) })
html.find('#roll-allonge').change((event) => {
this.rollData.allongeId = event.currentTarget.value
})
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"
}) })
html.find('#roll-attaque-ciblee').change((event) => {
this.rollData.attaqueCiblee = event.currentTarget.value || "0"
})
html.find('#roll-bonus-malus').change((event) => { html.find('#roll-bonus-malus').change((event) => {
this.rollData.bonusMalus = event.currentTarget.value || "0" this.rollData.bonusMalus = event.currentTarget.value || "0"
}) })
@@ -80,6 +86,12 @@ export class TeDeumRollDialog extends Dialog {
html.find('#roll-tir-mouvement').change((event) => { html.find('#roll-tir-mouvement').change((event) => {
this.rollData.isMouvement = event.currentTarget.checked this.rollData.isMouvement = event.currentTarget.checked
}) })
html.find('#roll-charge-a-pied').change((event) => {
this.rollData.isChargeAPied = event.currentTarget.checked
})
html.find('#roll-charge-a-cheval').change((event) => {
this.rollData.isChargeACheval = event.currentTarget.checked
})

View File

@@ -4,7 +4,7 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
* Extend the basic ItemSheet with some very simple modifications * Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet} * @extends {ItemSheet}
*/ */
export class TeDeumItemSheet extends ItemSheet { export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
@@ -49,8 +49,8 @@ export class TeDeumItemSheet extends ItemSheet {
limited: this.object.limited, limited: this.object.limited,
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
isGM: game.user.isGM isGM: game.user.isGM
} }
@@ -59,7 +59,6 @@ export class TeDeumItemSheet extends ItemSheet {
} }
this.options.editable = !(this.object.origin == "embeddedItem"); this.options.editable = !(this.object.origin == "embeddedItem");
console.log("ITEM DATA", formData, this);
return formData; return formData;
} }

View File

@@ -82,12 +82,12 @@ Hooks.once("init", async function () {
console.log("TeDeum RPG | Ready"); console.log("TeDeum RPG | Ready");
Actors.unregisterSheet("core", ActorSheet); foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true }); foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true }); foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
Items.unregisterSheet("core", ItemSheet); foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
TeDeumUtility.init() TeDeumUtility.init()
}); });
@@ -134,4 +134,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
} }
return true; return true;
}); });

Binary file not shown.

BIN
packs/aides/000136.ldb Normal file

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000095 MANIFEST-000137

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:48.041836 7fa413fff6c0 Recovering log #93 2025/09/18-17:25:25.945688 7f7f2affd6c0 Recovering log #134
2025/04/20-09:24:48.069770 7fa413fff6c0 Delete type=3 #91 2025/09/18-17:25:25.962577 7f7f2affd6c0 Delete type=3 #132
2025/04/20-09:24:48.069934 7fa413fff6c0 Delete type=0 #93 2025/09/18-17:25:25.962629 7f7f2affd6c0 Delete type=0 #134
2025/04/20-09:25:06.962777 7fa4127fc6c0 Level-0 table #98: started 2025/09/18-17:25:58.096205 7f7f29bff6c0 Level-0 table #140: started
2025/04/20-09:25:06.962842 7fa4127fc6c0 Level-0 table #98: 0 bytes OK 2025/09/18-17:25:58.096281 7f7f29bff6c0 Level-0 table #140: 0 bytes OK
2025/04/20-09:25:06.970328 7fa4127fc6c0 Delete type=0 #96 2025/09/18-17:25:58.103314 7f7f29bff6c0 Delete type=0 #138
2025/04/20-09:25:06.988174 7fa4127fc6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,7 +1,11 @@
2025/04/11-23:06:48.405694 7f6df09f96c0 Recovering log #89 2025/09/18-11:50:45.746719 7f7f2bfff6c0 Delete type=3 #1
2025/04/11-23:06:48.416695 7f6df09f96c0 Delete type=3 #87 2025/09/18-17:24:09.744265 7f7f29bff6c0 Level-0 table #135: started
2025/04/11-23:06:48.416810 7f6df09f96c0 Delete type=0 #89 2025/09/18-17:24:09.744308 7f7f29bff6c0 Level-0 table #135: 0 bytes OK
2025/04/12-00:18:27.794309 7f6deabff6c0 Level-0 table #94: started 2025/09/18-17:24:09.802551 7f7f29bff6c0 Delete type=0 #133
2025/04/12-00:18:27.794331 7f6deabff6c0 Level-0 table #94: 0 bytes OK 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/04/12-00:18:27.828514 7f6deabff6c0 Delete type=0 #92 2025/09/18-17:24:09.802780 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.828757 7f6deabff6c0 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.830358 7f7f29bff6c0 Generated table #136@0: 5 keys, 3728 bytes
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)

Binary file not shown.

BIN
packs/aides/MANIFEST-000137 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/armes/000239.ldb Normal file

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000198 MANIFEST-000240

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.881295 7fa412ffd6c0 Recovering log #195 2025/09/18-17:25:25.808742 7f7f2bfff6c0 Recovering log #237
2025/04/20-09:24:47.897306 7fa412ffd6c0 Delete type=3 #193 2025/09/18-17:25:25.826162 7f7f2bfff6c0 Delete type=3 #235
2025/04/20-09:24:47.897426 7fa412ffd6c0 Delete type=0 #195 2025/09/18-17:25:25.826217 7f7f2bfff6c0 Delete type=0 #237
2025/04/20-09:25:06.915266 7fa4127fc6c0 Level-0 table #201: started 2025/09/18-17:25:58.034192 7f7f29bff6c0 Level-0 table #243: started
2025/04/20-09:25:06.915317 7fa4127fc6c0 Level-0 table #201: 0 bytes OK 2025/09/18-17:25:58.034230 7f7f29bff6c0 Level-0 table #243: 0 bytes OK
2025/04/20-09:25:06.922256 7fa4127fc6c0 Delete type=0 #199 2025/09/18-17:25:58.040524 7f7f29bff6c0 Delete type=0 #241
2025/04/20-09:25:06.929081 7fa4127fc6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,14 +1,11 @@
2025/04/11-23:06:48.304335 7f6df11fa6c0 Recovering log #191 2025/09/18-11:50:45.598190 7f7f2a7fc6c0 Delete type=3 #1
2025/04/11-23:06:48.314473 7f6df11fa6c0 Delete type=3 #189 2025/09/18-17:24:08.419689 7f7f29bff6c0 Level-0 table #238: started
2025/04/11-23:06:48.314529 7f6df11fa6c0 Delete type=0 #191 2025/09/18-17:24:08.419727 7f7f29bff6c0 Level-0 table #238: 0 bytes OK
2025/04/12-00:18:27.071344 7f6deabff6c0 Level-0 table #196: started 2025/09/18-17:24:08.484925 7f7f29bff6c0 Delete type=0 #236
2025/04/12-00:18:27.085927 7f6deabff6c0 Level-0 table #196: 1371 bytes OK 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/04/12-00:18:27.118250 7f6deabff6c0 Delete type=0 #194 2025/09/18-17:24:08.766704 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.311443 7f6deabff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at '!items!GZ3Q17VzRvdlrtdF' @ 40 : 1 2025/09/18-17:24:08.800723 7f7f29bff6c0 Generated table #239@0: 38 keys, 31247 bytes
2025/04/12-00:18:27.311451 7f6deabff6c0 Compacting 1@0 + 1@1 files 2025/09/18-17:24:08.800756 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 31247 bytes
2025/04/12-00:18:27.331173 7f6deabff6c0 Generated table #197@0: 38 keys, 31023 bytes 2025/09/18-17:24:08.859553 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/04/12-00:18:27.331200 7f6deabff6c0 Compacted 1@0 + 1@1 files => 31023 bytes 2025/09/18-17:24:08.859745 7f7f29bff6c0 Delete type=2 #206
2025/04/12-00:18:27.373984 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 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)
2025/04/12-00:18:27.374177 7f6deabff6c0 Delete type=2 #174
2025/04/12-00:18:27.374459 7f6deabff6c0 Delete type=2 #196
2025/04/12-00:18:27.426656 7f6deabff6c0 Manual compaction at level-0 from '!items!GZ3Q17VzRvdlrtdF' @ 40 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armes/MANIFEST-000240 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/armures/000238.ldb Normal file

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000197 MANIFEST-000239

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.903860 7fa413fff6c0 Recovering log #195 2025/09/18-17:25:25.829687 7f7f2a7fc6c0 Recovering log #236
2025/04/20-09:24:47.919442 7fa413fff6c0 Delete type=3 #193 2025/09/18-17:25:25.846790 7f7f2a7fc6c0 Delete type=3 #234
2025/04/20-09:24:47.919592 7fa413fff6c0 Delete type=0 #195 2025/09/18-17:25:25.846846 7f7f2a7fc6c0 Delete type=0 #236
2025/04/20-09:25:06.908159 7fa4127fc6c0 Level-0 table #200: started 2025/09/18-17:25:58.026302 7f7f29bff6c0 Level-0 table #242: started
2025/04/20-09:25:06.908228 7fa4127fc6c0 Level-0 table #200: 0 bytes OK 2025/09/18-17:25:58.026357 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
2025/04/20-09:25:06.915011 7fa4127fc6c0 Delete type=0 #198 2025/09/18-17:25:58.034035 7f7f29bff6c0 Delete type=0 #240
2025/04/20-09:25:06.929064 7fa4127fc6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,7 +1,11 @@
2025/04/11-23:06:48.318150 7f6df09f96c0 Recovering log #191 2025/09/18-11:50:45.617997 7f7f2a7fc6c0 Delete type=3 #1
2025/04/11-23:06:48.328364 7f6df09f96c0 Delete type=3 #189 2025/09/18-17:24:08.294497 7f7f29bff6c0 Level-0 table #237: started
2025/04/11-23:06:48.328522 7f6df09f96c0 Delete type=0 #191 2025/09/18-17:24:08.294539 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
2025/04/12-00:18:27.192248 7f6deabff6c0 Level-0 table #196: started 2025/09/18-17:24:08.351872 7f7f29bff6c0 Delete type=0 #235
2025/04/12-00:18:27.192320 7f6deabff6c0 Level-0 table #196: 0 bytes OK 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/04/12-00:18:27.261480 7f6deabff6c0 Delete type=0 #194 2025/09/18-17:24:08.582154 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.426624 7f6deabff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) 2025/09/18-17:24:08.616167 7f7f29bff6c0 Generated table #238@0: 29 keys, 12111 bytes
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000194 MANIFEST-000238

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.857871 7fa4137fe6c0 Recovering log #192 2025/09/18-17:25:25.789090 7f7f2b7fe6c0 Recovering log #235
2025/04/20-09:24:47.873833 7fa4137fe6c0 Delete type=3 #190 2025/09/18-17:25:25.805571 7f7f2b7fe6c0 Delete type=3 #233
2025/04/20-09:24:47.873948 7fa4137fe6c0 Delete type=0 #192 2025/09/18-17:25:25.805686 7f7f2b7fe6c0 Delete type=0 #235
2025/04/20-09:25:06.901277 7fa4127fc6c0 Level-0 table #197: started 2025/09/18-17:25:58.040659 7f7f29bff6c0 Level-0 table #241: started
2025/04/20-09:25:06.901384 7fa4127fc6c0 Level-0 table #197: 0 bytes OK 2025/09/18-17:25:58.040687 7f7f29bff6c0 Level-0 table #241: 0 bytes OK
2025/04/20-09:25:06.907939 7fa4127fc6c0 Delete type=0 #195 2025/09/18-17:25:58.047473 7f7f29bff6c0 Delete type=0 #239
2025/04/20-09:25:06.929038 7fa4127fc6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,7 +1,11 @@
2025/04/11-23:06:48.289349 7f6debfff6c0 Recovering log #188 2025/09/18-11:50:45.576078 7f7f2affd6c0 Delete type=3 #1
2025/04/11-23:06:48.299353 7f6debfff6c0 Delete type=3 #186 2025/09/18-17:24:08.352040 7f7f29bff6c0 Level-0 table #236: started
2025/04/11-23:06:48.299496 7f6debfff6c0 Delete type=0 #188 2025/09/18-17:24:08.352081 7f7f29bff6c0 Level-0 table #236: 0 bytes OK
2025/04/12-00:18:27.261661 7f6deabff6c0 Level-0 table #193: started 2025/09/18-17:24:08.419524 7f7f29bff6c0 Delete type=0 #234
2025/04/12-00:18:27.261699 7f6deabff6c0 Level-0 table #193: 0 bytes OK 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/04/12-00:18:27.311309 7f6deabff6c0 Delete type=0 #191 2025/09/18-17:24:08.672498 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.426641 7f6deabff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) 2025/09/18-17:24:08.706074 7f7f29bff6c0 Generated table #237@0: 115 keys, 38139 bytes
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)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000206 MANIFEST-000249

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.923568 7fa418ffa6c0 Recovering log #203 2025/09/18-17:25:25.849643 7f7f2affd6c0 Recovering log #246
2025/04/20-09:24:47.940475 7fa418ffa6c0 Delete type=3 #201 2025/09/18-17:25:25.865539 7f7f2affd6c0 Delete type=3 #244
2025/04/20-09:24:47.940632 7fa418ffa6c0 Delete type=0 #203 2025/09/18-17:25:25.865600 7f7f2affd6c0 Delete type=0 #246
2025/04/20-09:25:06.922414 7fa4127fc6c0 Level-0 table #209: started 2025/09/18-17:25:58.061760 7f7f29bff6c0 Level-0 table #252: started
2025/04/20-09:25:06.922447 7fa4127fc6c0 Level-0 table #209: 0 bytes OK 2025/09/18-17:25:58.061807 7f7f29bff6c0 Level-0 table #252: 0 bytes OK
2025/04/20-09:25:06.928838 7fa4127fc6c0 Delete type=0 #207 2025/09/18-17:25:58.069452 7f7f29bff6c0 Delete type=0 #250
2025/04/20-09:25:06.929095 7fa4127fc6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,14 +1,11 @@
2025/04/11-23:06:48.331428 7f6deb7fe6c0 Recovering log #199 2025/09/18-11:50:45.638850 7f7f2bfff6c0 Delete type=3 #1
2025/04/11-23:06:48.343033 7f6deb7fe6c0 Delete type=3 #197 2025/09/18-17:24:08.232941 7f7f29bff6c0 Level-0 table #247: started
2025/04/11-23:06:48.343104 7f6deb7fe6c0 Delete type=0 #199 2025/09/18-17:24:08.233014 7f7f29bff6c0 Level-0 table #247: 0 bytes OK
2025/04/12-00:18:27.118439 7f6deabff6c0 Level-0 table #204: started 2025/09/18-17:24:08.294274 7f7f29bff6c0 Delete type=0 #245
2025/04/12-00:18:27.137069 7f6deabff6c0 Level-0 table #204: 6892 bytes OK 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/04/12-00:18:27.191998 7f6deabff6c0 Delete type=0 #202 2025/09/18-17:24:08.485093 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.374641 7f6deabff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!eILBnECWQOFfkxIL' @ 443 : 1 2025/09/18-17:24:08.521894 7f7f29bff6c0 Generated table #248@0: 71 keys, 264331 bytes
2025/04/12-00:18:27.374657 7f6deabff6c0 Compacting 1@0 + 1@1 files 2025/09/18-17:24:08.521971 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 264331 bytes
2025/04/12-00:18:27.393149 7f6deabff6c0 Generated table #205@0: 71 keys, 263379 bytes 2025/09/18-17:24:08.581818 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/04/12-00:18:27.393180 7f6deabff6c0 Compacted 1@0 + 1@1 files => 263379 bytes 2025/09/18-17:24:08.581947 7f7f29bff6c0 Delete type=2 #231
2025/04/12-00:18:27.425988 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 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)
2025/04/12-00:18:27.426166 7f6deabff6c0 Delete type=2 #186
2025/04/12-00:18:27.426484 7f6deabff6c0 Delete type=2 #204
2025/04/12-00:18:27.426669 7f6deabff6c0 Manual compaction at level-0 from '!items!eILBnECWQOFfkxIL' @ 443 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

Binary file not shown.

BIN
packs/graces/000238.ldb Normal file

Binary file not shown.

0
packs/graces/000241.log Normal file
View File

View File

@@ -1 +1 @@
MANIFEST-000197 MANIFEST-000239

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.948681 7fa4137fe6c0 Recovering log #194 2025/09/18-17:25:25.869600 7f7f2b7fe6c0 Recovering log #236
2025/04/20-09:24:47.965382 7fa4137fe6c0 Delete type=3 #192 2025/09/18-17:25:25.884627 7f7f2b7fe6c0 Delete type=3 #234
2025/04/20-09:24:47.965487 7fa4137fe6c0 Delete type=0 #194 2025/09/18-17:25:25.884728 7f7f2b7fe6c0 Delete type=0 #236
2025/04/20-09:25:06.935620 7fa4127fc6c0 Level-0 table #200: started 2025/09/18-17:25:58.019852 7f7f29bff6c0 Level-0 table #242: started
2025/04/20-09:25:06.935652 7fa4127fc6c0 Level-0 table #200: 0 bytes OK 2025/09/18-17:25:58.019893 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
2025/04/20-09:25:06.942921 7fa4127fc6c0 Delete type=0 #198 2025/09/18-17:25:58.026069 7f7f29bff6c0 Delete type=0 #240
2025/04/20-09:25:06.956261 7fa4127fc6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,14 +1,11 @@
2025/04/11-23:06:48.348395 7f6debfff6c0 Recovering log #190 2025/09/18-11:50:45.661051 7f7f2b7fe6c0 Delete type=3 #1
2025/04/11-23:06:48.358966 7f6debfff6c0 Delete type=3 #188 2025/09/18-17:24:08.860133 7f7f29bff6c0 Level-0 table #237: started
2025/04/11-23:06:48.359028 7f6debfff6c0 Delete type=0 #190 2025/09/18-17:24:08.860169 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
2025/04/12-00:18:27.516559 7f6deabff6c0 Level-0 table #195: started 2025/09/18-17:24:08.917842 7f7f29bff6c0 Delete type=0 #235
2025/04/12-00:18:27.532890 7f6deabff6c0 Level-0 table #195: 2579 bytes OK 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/04/12-00:18:27.581168 7f6deabff6c0 Delete type=0 #193 2025/09/18-17:24:09.119743 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.688801 7f6deabff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at '!items!o71YhfDj6rschyQM' @ 59 : 1 2025/09/18-17:24:09.155742 7f7f29bff6c0 Generated table #238@0: 49 keys, 20052 bytes
2025/04/12-00:18:27.688816 7f6deabff6c0 Compacting 1@0 + 1@1 files 2025/09/18-17:24:09.155788 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20052 bytes
2025/04/12-00:18:27.707304 7f6deabff6c0 Generated table #196@0: 49 keys, 19688 bytes 2025/09/18-17:24:09.214820 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/04/12-00:18:27.707343 7f6deabff6c0 Compacted 1@0 + 1@1 files => 19688 bytes 2025/09/18-17:24:09.214942 7f7f29bff6c0 Delete type=2 #205
2025/04/12-00:18:27.739125 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 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)
2025/04/12-00:18:27.739315 7f6deabff6c0 Delete type=2 #173
2025/04/12-00:18:27.739599 7f6deabff6c0 Delete type=2 #195
2025/04/12-00:18:27.828729 7f6deabff6c0 Manual compaction at level-0 from '!items!o71YhfDj6rschyQM' @ 59 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

Binary file not shown.

BIN
packs/maladies/000238.ldb Normal file

Binary file not shown.

View File

View File

@@ -1 +1 @@
MANIFEST-000197 MANIFEST-000239

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.972234 7fa412ffd6c0 Recovering log #194 2025/09/18-17:25:25.887557 7f7f2a7fc6c0 Recovering log #236
2025/04/20-09:24:47.989602 7fa412ffd6c0 Delete type=3 #192 2025/09/18-17:25:25.903745 7f7f2a7fc6c0 Delete type=3 #234
2025/04/20-09:24:47.989720 7fa412ffd6c0 Delete type=0 #194 2025/09/18-17:25:25.903805 7f7f2a7fc6c0 Delete type=0 #236
2025/04/20-09:25:06.929262 7fa4127fc6c0 Level-0 table #200: started 2025/09/18-17:25:58.055681 7f7f29bff6c0 Level-0 table #242: started
2025/04/20-09:25:06.929306 7fa4127fc6c0 Level-0 table #200: 0 bytes OK 2025/09/18-17:25:58.055706 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
2025/04/20-09:25:06.935454 7fa4127fc6c0 Delete type=0 #198 2025/09/18-17:25:58.061636 7f7f29bff6c0 Delete type=0 #240
2025/04/20-09:25:06.956241 7fa4127fc6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,14 +1,11 @@
2025/04/11-23:06:48.361948 7f6df11fa6c0 Recovering log #190 2025/09/18-11:50:45.681692 7f7f2affd6c0 Delete type=3 #1
2025/04/11-23:06:48.372204 7f6df11fa6c0 Delete type=3 #188 2025/09/18-17:24:08.917988 7f7f29bff6c0 Level-0 table #237: started
2025/04/11-23:06:48.372273 7f6df11fa6c0 Delete type=0 #190 2025/09/18-17:24:08.918018 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
2025/04/12-00:18:27.468730 7f6deabff6c0 Level-0 table #195: started 2025/09/18-17:24:08.983600 7f7f29bff6c0 Delete type=0 #235
2025/04/12-00:18:27.487486 7f6deabff6c0 Level-0 table #195: 19996 bytes OK 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/04/12-00:18:27.516404 7f6deabff6c0 Delete type=0 #193 2025/09/18-17:24:09.215131 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.626078 7f6deabff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at '!items!ysGehYm1VkMWrI22' @ 47 : 1 2025/09/18-17:24:09.251613 7f7f29bff6c0 Generated table #238@0: 17 keys, 11517 bytes
2025/04/12-00:18:27.626091 7f6deabff6c0 Compacting 1@0 + 1@1 files 2025/09/18-17:24:09.251694 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 11517 bytes
2025/04/12-00:18:27.644729 7f6deabff6c0 Generated table #196@0: 17 keys, 11448 bytes 2025/09/18-17:24:09.305026 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/04/12-00:18:27.644759 7f6deabff6c0 Compacted 1@0 + 1@1 files => 11448 bytes 2025/09/18-17:24:09.305314 7f7f29bff6c0 Delete type=2 #205
2025/04/12-00:18:27.688168 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 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)
2025/04/12-00:18:27.688361 7f6deabff6c0 Delete type=2 #173
2025/04/12-00:18:27.688608 7f6deabff6c0 Delete type=2 #195
2025/04/12-00:18:27.828710 7f6deabff6c0 Manual compaction at level-0 from '!items!ysGehYm1VkMWrI22' @ 47 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

0
packs/scenes/000178.log Normal file
View File

View File

@@ -1 +1 @@
MANIFEST-000134 MANIFEST-000176

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:48.018535 7fa418ffa6c0 Recovering log #132 2025/09/18-17:25:25.926154 7f7f2b7fe6c0 Recovering log #173
2025/04/20-09:24:48.034352 7fa418ffa6c0 Delete type=3 #130 2025/09/18-17:25:25.941736 7f7f2b7fe6c0 Delete type=3 #171
2025/04/20-09:24:48.034446 7fa418ffa6c0 Delete type=0 #132 2025/09/18-17:25:25.941811 7f7f2b7fe6c0 Delete type=0 #173
2025/04/20-09:25:06.943076 7fa4127fc6c0 Level-0 table #137: started 2025/09/18-17:25:58.069595 7f7f29bff6c0 Level-0 table #179: started
2025/04/20-09:25:06.943110 7fa4127fc6c0 Level-0 table #137: 0 bytes OK 2025/09/18-17:25:58.069627 7f7f29bff6c0 Level-0 table #179: 0 bytes OK
2025/04/20-09:25:06.949678 7fa4127fc6c0 Delete type=0 #135 2025/09/18-17:25:58.075769 7f7f29bff6c0 Delete type=0 #177
2025/04/20-09:25:06.956277 7fa4127fc6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,7 +1,11 @@
2025/04/11-23:06:48.390538 7f6deb7fe6c0 Recovering log #128 2025/09/18-11:50:45.725670 7f7f2a7fc6c0 Delete type=3 #1
2025/04/11-23:06:48.400234 7f6deb7fe6c0 Delete type=3 #126 2025/09/18-17:24:09.049574 7f7f29bff6c0 Level-0 table #174: started
2025/04/11-23:06:48.400355 7f6deb7fe6c0 Delete type=0 #128 2025/09/18-17:24:09.049607 7f7f29bff6c0 Level-0 table #174: 0 bytes OK
2025/04/12-00:18:27.426850 7f6deabff6c0 Level-0 table #133: started 2025/09/18-17:24:09.119551 7f7f29bff6c0 Delete type=0 #172
2025/04/12-00:18:27.426889 7f6deabff6c0 Level-0 table #133: 0 bytes OK 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/04/12-00:18:27.468595 7f6deabff6c0 Delete type=0 #131 2025/09/18-17:24:09.404524 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.626052 7f6deabff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) 2025/09/18-17:24:09.434413 7f7f29bff6c0 Generated table #175@0: 1 keys, 1344 bytes
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)

Binary file not shown.

Binary file not shown.

View File

Binary file not shown.

BIN
packs/simples/000239.ldb Normal file

Binary file not shown.

0
packs/simples/000242.log Normal file
View File

View File

@@ -1 +1 @@
MANIFEST-000197 MANIFEST-000240

View File

@@ -1,7 +1,7 @@
2025/04/20-09:24:47.993946 7fa413fff6c0 Recovering log #194 2025/09/18-17:25:25.906336 7f7f2bfff6c0 Recovering log #237
2025/04/20-09:24:48.011487 7fa413fff6c0 Delete type=3 #192 2025/09/18-17:25:25.922455 7f7f2bfff6c0 Delete type=3 #235
2025/04/20-09:24:48.011668 7fa413fff6c0 Delete type=0 #194 2025/09/18-17:25:25.922542 7f7f2bfff6c0 Delete type=0 #237
2025/04/20-09:25:06.949829 7fa4127fc6c0 Level-0 table #200: started 2025/09/18-17:25:58.047930 7f7f29bff6c0 Level-0 table #243: started
2025/04/20-09:25:06.949863 7fa4127fc6c0 Level-0 table #200: 0 bytes OK 2025/09/18-17:25:58.048063 7f7f29bff6c0 Level-0 table #243: 0 bytes OK
2025/04/20-09:25:06.956072 7fa4127fc6c0 Delete type=0 #198 2025/09/18-17:25:58.055551 7f7f29bff6c0 Delete type=0 #241
2025/04/20-09:25:06.956290 7fa4127fc6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) 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)

View File

@@ -1,14 +1,11 @@
2025/04/11-23:06:48.375560 7f6df09f96c0 Recovering log #190 2025/09/18-11:50:45.701807 7f7f2a7fc6c0 Delete type=3 #1
2025/04/11-23:06:48.386162 7f6df09f96c0 Delete type=3 #188 2025/09/18-17:24:08.983751 7f7f29bff6c0 Level-0 table #238: started
2025/04/11-23:06:48.386247 7f6df09f96c0 Delete type=0 #190 2025/09/18-17:24:08.983779 7f7f29bff6c0 Level-0 table #238: 0 bytes OK
2025/04/12-00:18:27.581367 7f6deabff6c0 Level-0 table #195: started 2025/09/18-17:24:09.049421 7f7f29bff6c0 Delete type=0 #236
2025/04/12-00:18:27.597317 7f6deabff6c0 Level-0 table #195: 4361 bytes OK 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/04/12-00:18:27.625802 7f6deabff6c0 Delete type=0 #193 2025/09/18-17:24:09.305631 7f7f29bff6c0 Compacting 1@0 + 0@1 files
2025/04/12-00:18:27.739840 7f6deabff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at '!items!yf5aoqeuNknhABWX' @ 41 : 1 2025/09/18-17:24:09.339316 7f7f29bff6c0 Generated table #239@0: 36 keys, 20892 bytes
2025/04/12-00:18:27.739867 7f6deabff6c0 Compacting 1@0 + 1@1 files 2025/09/18-17:24:09.339411 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20892 bytes
2025/04/12-00:18:27.757841 7f6deabff6c0 Generated table #196@0: 36 keys, 20777 bytes 2025/09/18-17:24:09.404093 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/04/12-00:18:27.757871 7f6deabff6c0 Compacted 1@0 + 1@1 files => 20777 bytes 2025/09/18-17:24:09.404255 7f7f29bff6c0 Delete type=2 #218
2025/04/12-00:18:27.793933 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 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)
2025/04/12-00:18:27.794075 7f6deabff6c0 Delete type=2 #173
2025/04/12-00:18:27.794233 7f6deabff6c0 Delete type=2 #195
2025/04/12-00:18:27.828743 7f6deabff6c0 Manual compaction at level-0 from '!items!yf5aoqeuNknhABWX' @ 41 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

@@ -886,16 +886,12 @@ ul, li {
border-radius: 0; border-radius: 0;
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
} }
#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400; box-shadow: 0 0 3px #ff6400;
@@ -907,7 +903,6 @@ ul, li {
box-shadow: 2px 2px 5px #000000; box-shadow: 2px 2px 5px #000000;
} }
.macro { .macro {
-o-border-image: url(img/ui/bg_control.jpg) 21 repeat;
border-image: url(img/ui/bg_control.jpg) 21 repeat; border-image: url(img/ui/bg_control.jpg) 21 repeat;
border-image-slice: 6 6 6 6 fill; border-image-slice: 6 6 6 6 fill;
border-image-width: 6px 6px 6px 6px; border-image-width: 6px 6px 6px 6px;
@@ -921,8 +916,6 @@ ul, li {
} }
} }
#players { #players {
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
@@ -933,8 +926,6 @@ ul, li {
&.nav-item { &.nav-item {
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
&.active { &.active {
@@ -946,8 +937,6 @@ ul, li {
#nav-toggle { #nav-toggle {
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
} }
@@ -955,8 +944,6 @@ ul, li {
#navigation #scene-list .scene.view, #navigation #scene-list .scene.context { #navigation #scene-list .scene.view, #navigation #scene-list .scene.context {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400; box-shadow: 0 0 3px #ff6400;
@@ -1105,6 +1092,11 @@ ul, li {
.item-field { .item-field {
margin-top: 4px; margin-top: 4px;
} }
.item-field-xp {
margin-top: 4px;
min-width: 8rem;
max-width: 8rem;
}
.item-field-label-short { .item-field-label-short {
flex-grow: 1; flex-grow: 1;
max-width: 4rem; max-width: 4rem;
@@ -1254,7 +1246,7 @@ ul, li {
} }
.fvtt-te-deum-character-creator { .fvtt-te-deum-character-creator {
background: rgba(226, 226, 222, 0.95); /*background: rgba(226, 226, 222, 0.95);*/
font-family: "GreatPrimer"; font-family: "GreatPrimer";
font-size: 0.9rem; font-size: 0.9rem;
.field-title { .field-title {
@@ -1302,3 +1294,6 @@ ul, li {
border-radius: 0 3px 0 0; border-radius: 0 3px 0 0;
background: rgba(0, 0, 0, 0.1); background: rgba(0, 0, 0, 0.1);
} }
.tedeum-create-character {
align-self: anchor-center;
}

View File

@@ -834,16 +834,12 @@ ul, li {
border-radius: 0; border-radius: 0;
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
} }
#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400; box-shadow: 0 0 3px #ff6400;
@@ -865,8 +861,6 @@ ul, li {
border: 1px solid rgba(72, 46, 28, 1); border: 1px solid rgba(72, 46, 28, 1);
} }
#players { #players {
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
@@ -874,8 +868,6 @@ ul, li {
#navigation #scene-list .scene.nav-item { #navigation #scene-list .scene.nav-item {
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px border-image-outset: 0px
} }
@@ -885,16 +877,12 @@ ul, li {
#navigation #nav-toggle { #navigation #nav-toggle {
background: rgba(30, 25, 20, 1); background: rgba(30, 25, 20, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
} }
#navigation #scene-list .scene.view, #navigation #scene-list .scene.context { #navigation #scene-list .scene.view, #navigation #scene-list .scene.context {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
border-image: url(img/ui/footer-button.png) 10 repeat;
border-image-width: 4px; border-image-width: 4px;
border-image-outset: 0px; border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400; box-shadow: 0 0 3px #ff6400;
@@ -1045,6 +1033,11 @@ ul, li {
.item-field { .item-field {
margin-top: 4px; margin-top: 4px;
} }
.item-field-xp {
margin-top: 4px;
min-width: 8rem;
max-width: 8rem;
}
.item-field-label-short { .item-field-label-short {
flex-grow: 1; flex-grow: 1;
max-width: 4rem; max-width: 4rem;
@@ -1191,7 +1184,7 @@ ul, li {
} }
.fvtt-te-deum-character-creator { .fvtt-te-deum-character-creator {
background: rgba(226, 226, 222, 0.95); /*background: rgba(226, 226, 222, 0.95);*/
font-family: "GreatPrimer"; font-family: "GreatPrimer";
font-size: 0.9rem; font-size: 0.9rem;
} }
@@ -1243,3 +1236,6 @@ ul, li {
border-radius: 0 3px 0 0; border-radius: 0 3px 0 0;
background: rgba(0, 0, 0, 0.1); background: rgba(0, 0, 0, 0.1);
} }
.tedeum-create-character {
align-self: anchor-center;
}

View File

@@ -134,22 +134,22 @@
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json",
"compatibility": { "compatibility": {
"minimum": "12", "minimum": "13",
"verified": "12" "verified": "13"
}, },
"id": "fvtt-te-deum", "id": "fvtt-te-deum",
"primaryTokenAttribute": "secondary.health", "primaryTokenAttribute": "secondary.health",
"secondaryTokenAttribute": "secondary.delirium", "secondaryTokenAttribute": "secondary.delirium",
"socket": true, "socket": true,
"styles": [ "styles": [
"styles/tedeum.css" {
"src": "styles/tedeum.css"
}
], ],
"relationships": {
},
"title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)", "title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)",
"url": "https://www.uberwald.me/gitea/public/fvtt-te-deum", "url": "https://www.uberwald.me/gitea/public/fvtt-te-deum",
"version": "12.0.17", "version": "13.0.1",
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/archive/fvtt-te-deum-v12.0.17.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.1.zip",
"background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp", "background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp",
"flags": { "flags": {
"hotReload": { "hotReload": {

View File

@@ -44,7 +44,8 @@
{{#each caracList as |char key|}} {{#each caracList as |char key|}}
<li class="item flexrow list-item carac-box"> <li class="item flexrow list-item carac-box">
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" /> <img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
<label class="item-left-pad item-field item-field-label-medium" data-tooltip="{{char.description}}">{{char.name}}</label> <label class="item-left-pad item-field item-field-label-medium"
data-tooltip="{{char.description}}">{{char.name}}</label>
<select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value" <select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value"
data-dtype="Number" /> data-dtype="Number" />
{{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}} {{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}}
@@ -64,6 +65,10 @@
<span class="item-field-title-long"> <span class="item-field-title-long">
<h3><label class="item-field-label-long">Blessures</label></h3> <h3><label class="item-field-label-long">Blessures</label></h3>
</span> </span>
<div class="item-controls item-controls-fixed">
<a class="item-control blessure-add" data-type="blessure" title="Ajouter une Blessure"><i class="fas fa-plus"></i></a>
</div>
</li> </li>
{{#each blessures as |blessure key|}} {{#each blessures as |blessure key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}">
@@ -140,7 +145,8 @@
<div> <div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow list-item carac-box"> <li class="item flexrow list-item carac-box">
<label class="item-left-pad item-field item-field-label-medium" data-tooltip="{{providence.description}}">Providence</label> <label class="item-left-pad item-field item-field-label-medium"
data-tooltip="{{providence.description}}">Providence</label>
<select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" /> <select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" />
{{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value" {{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value"
labelAttr="value"}} labelAttr="value"}}
@@ -149,16 +155,21 @@
<label class="item-field item-field-label-short">{{providence.dice}}</label> <label class="item-field item-field-label-short">{{providence.dice}}</label>
</li> </li>
<li class="item flexrow list-item carac-box"> <li class="item flexrow list-item carac-box">
<label class="item-left-pad item-field item-field-label-medium" data-tooltip=" La Bienveillance nest pas à proprement parler une compétence : il sagit de lévaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec lâge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans."> <label class="item-left-pad item-field item-field-label-medium"
data-tooltip=" La Bienveillance nest pas à proprement parler une compétence : il sagit de lévaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec lâge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans.">
Bienveillance</label> Bienveillance</label>
<input class="input-numeric-short" type="text" name="system.bienveillance.value" value="{{system.bienveillance.value}}" data-dtype="Number" /> <input class="input-numeric-short" type="text" name="system.bienveillance.value"
value="{{system.bienveillance.value}}" data-dtype="Number" />
<label class="item-left-pad item-field item-field-label-medium">Bonus dégats</label> <label class="item-left-pad item-field item-field-label-medium">Bonus dégats</label>
<input class="input-numeric-short" type="text" value="{{bonusDegats.label}}" disabled data-dtype="Number" /> <input class="input-numeric-short" type="text" value="{{bonusDegats.value}}" disabled
data-dtype="Number" />
</li> </li>
<li class="item flexrow list-item carac-box"> <li class="item flexrow list-item carac-box">
<label class="item-left-pad item-field item-field-label-medium">Armures Lourdes</label> <label class="item-left-pad item-field item-field-label-medium">Armures Lourdes</label>
<input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled data-dtype="Number" />&nbsp;/&nbsp; <input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled
<input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled data-dtype="Number" /> data-dtype="Number" />&nbsp;/&nbsp;
<input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled
data-dtype="Number" />
<label class="item-left-pad item-field item-field-label-medium">Actions/Tour</label> <label class="item-left-pad item-field item-field-label-medium">Actions/Tour</label>
<input class="input-numeric-short" type="text" value="{{nbActions.value}}" disabled data-dtype="Number" /> <input class="input-numeric-short" type="text" value="{{nbActions.value}}" disabled data-dtype="Number" />
</li> </li>
@@ -204,9 +215,10 @@
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" /> <img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
<h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3> <h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3>
<label class="item-field item-field-label-short">{{carac.value}}</label> <label class="item-field item-field-label-short">{{carac.value}}</label>
<label class="item-field ">{{carac.dice}} (xp : <label class="item-field-xp ">{{carac.dice}} (xp :
{{#if @root.isGM}} {{#if @root.isGM}}
<input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience" value="{{carac.experience}}" data-dtype="Number" /> <input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience"
value="{{carac.experience}}" data-dtype="Number" />
{{else}} {{else}}
{{carac.experience}}) {{carac.experience}})
{{/if}} {{/if}}
@@ -214,8 +226,8 @@
</label> </label>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}" title="Ajouter une Compétence"><i <a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}"
class="fas fa-plus"></i></a> title="Ajouter une Compétence"><i class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
<ul class="ul-level1 flexrow item-list"> <ul class="ul-level1 flexrow item-list">
@@ -267,11 +279,13 @@
</span> </span>
<span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span> <span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span>
<span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span> <span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span>
<span class="item-field-label-medium"><a class="roll-degats" data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span> <span class="item-field-label-medium"><a class="roll-degats"
data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed-full"> <div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"{{/unless}}> <a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"
{{/unless}}>
<i class="fas fa-shield-alt"></i> <i class="fas fa-shield-alt"></i>
</a> </a>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
@@ -297,7 +311,8 @@
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed-full"> <div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"{{/unless}}> <a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"
{{/unless}}>
<i class="fas fa-shield-alt"></i> <i class="fas fa-shield-alt"></i>
</a> </a>
<a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a>
@@ -397,8 +412,7 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="simple" title="Créer une simple"><i <a class="item-control item-add" data-type="simple" title="Créer une simple"><i class="fas fa-plus"></i></a>
class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
{{#each simples as |simple key|}} {{#each simples as |simple key|}}
@@ -438,8 +452,7 @@
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="item-name-label-medium">Age</label> <label class="item-name-label-medium">Age</label>
<input type="text" class="" name="system.age" value="{{system.age}}" <input type="text" class="" name="system.age" value="{{system.age}}" data-dtype="String" />
data-dtype="String" />
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="item-name-label-medium">Date de Naissance</label> <label class="item-name-label-medium">Date de Naissance</label>
@@ -462,8 +475,7 @@
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="item-name-label-medium">Religion</label> <label class="item-name-label-medium">Religion</label>
<input type="text" class="" name="system.religion" value="{{system.religion}}" <input type="text" class="" name="system.religion" value="{{system.religion}}" data-dtype="String" />
data-dtype="String" />
</li> </li>
</ul> </ul>
</div> </div>

View File

@@ -18,13 +18,75 @@
<div> <div>
<ul> <ul>
{{#if arme}}
<label class="chat-weapon-name">Dégats {{arme.name}} : {{degats}} ({{degatsFormula}})</label>
{{/if}}
{{#if loc}}
<li>Localisation : {{loc.label}}</li>
<li>Touché : {{touche}}</li>
{{/if}}
{{#if gantelet}}
<li>Poing avec gantelet: +1 dégat</li>
{{/if}}
{{#if isChargeAPied}}
<li>Charge à pied (+Course)</li>
{{/if}}
{{#if isChargeACheval}}
<li>Charge à cheval (+Equitation)</li>
{{/if}}
{{#if isReussiteCritique}}
<li><strong class="chat-result-success">Réussite critique : La blessure a été augmentée d'un niveau</strong></li>
{{/if}}
{{#if blessure}} {{#if blessure}}
<li>{{defenderName}} a subi une blessure!</li> <li>{{defenderName}} a subi une blessure!</li>
<li>Gravité : {{blessure.name}}</li> <li>Gravité : {{blessure.name}}</li>
<li>Localisation : {{loc.label}}</li>
{{#if (eq loc.categorie "tete")}}
{{#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
assomé</strong></li>
{{/if}}
{{/if}}
{{#if (eq loc.categorie "bras")}}
{{#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
pour l'utiliser désormais.</strong></li>
{{/if}}
{{/if}}
{{#if (eq loc.categorie "jambe")}}
{{#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
d'Endurance à chaque tour.
</strong></li>
{{/if}}
{{/if}}
{{#if (eq loc.categorie "main")}}
{{#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
pour l'utiliser désormais.</strong></li>
{{/if}}
{{/if}}
{{#if (eq loc.categorie "pied")}}
{{#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
d'Endurance à chaque tour.
</strong></li>
{{/if}}
{{/if}}
{{else}} {{else}}
<li>Aucune blessure subie par {{defenderName}}</li> <li>Aucune blessure subie par {{defenderName}}</li>
{{/if}} {{/if}}
</ul> </ul>
</div> </div>

View File

@@ -16,7 +16,22 @@
<div> <div>
<ul> <ul>
<li>Dégats de {{arme.name}}: {{formula}} </li> <li>Dégats de {{arme.name}}: {{formula}} </li>
{{#if gantelet}}
<li>Poing avec gantelet: +1 dégat</li>
{{/if}}
{{#if isChargeAPied}}
<li>Charge à pied (+Course)</li>
{{/if}}
{{#if isChargeACheval}}
<li>Charge à cheval (+Equitation)</li>
{{/if}}
<li>Dégats infligés : {{degats}}</li> <li>Dégats infligés : {{degats}}</li>
{{#if loc}}
<li>Localisation : {{loc.label}}</li>
{{/if}}
{{#if isReussiteCritique}}
<li><strong class="chat-result-success">Réussite critique : La blessure sera augmentée d'un niveau</strong></li>
{{/if}}
</ul> </ul>
</div> </div>

View File

@@ -22,7 +22,7 @@
<li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li> <li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li>
{{/if}} {{/if}}
{{#if competence}} {{#if competence}}
<li>{{competence.name}}: {{competence.system.score}} </li> <li>{{competence.name}}: {{compScore}} </li>
{{/if}} {{/if}}
{{#if bonusMalus}} {{#if bonusMalus}}
<li>Bonus/Malus: {{bonusMalus}} </li> <li>Bonus/Malus: {{bonusMalus}} </li>
@@ -39,6 +39,12 @@
{{#if isMouvement}} {{#if isMouvement}}
<li>Malus de cible petite ou en mouvement (-1 niveau)</li> <li>Malus de cible petite ou en mouvement (-1 niveau)</li>
{{/if}} {{/if}}
{{#if attaqueCiblee}}
<li>Attaque ciblée, -1 niveau</li>
{{/if}}
{{#if allongeMalus}}
<li>Malus d'allonge: {{allongeMalus}} niveau</li>
{{/if}}
<li>Dés: {{diceFormula}} </li> <li>Dés: {{diceFormula}} </li>
{{#if isTir}} {{#if isTir}}
@@ -56,35 +62,59 @@
{{#if isSuccess}} {{#if isSuccess}}
<li><strong class="chat-result-success">Succès !</strong> </li> <li><strong class="chat-result-success">Succès !</strong> </li>
{{#if isReussiteCritique}} {{#if isReussiteCritique}}
<li><strong class="chat-result-success">Réussite critique ! 1 XP gagné en {{carac.name}}.</strong> </li> <li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
<strong class="chat-result-success">Réussite critique (XP potentiel) !</strong>
</li>
{{/if}} {{/if}}
{{#if arme}} {{#if arme}}
<li><strong class="">Attaque réussie ! Faites une opposition avec la défense de la cible ou appliquez directement les dégats.</strong> </li> <li><strong class="">Attaque réussie ! Faites une opposition avec la défense de la cible ou appliquez directement
les dégats.</strong> </li>
{{/if}} {{/if}}
{{else}} {{else}}
<li><strong class="chat-result-failure">Echec !</strong> </li> <li><strong class="chat-result-failure">Echec !</strong> </li>
{{#if isEchecCritique}} {{#if isEchecCritique}}
<li><strong class="chat-result-failure">Echec critique ! 1 XP gagné en {{carac.name}}.</strong> </li> <li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
<strong class="chat-result-failure">Echec critique (XP potentiel) !</strong>
</li>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#if nbEsquives}}
<li>Rappel : vous devez réussir {{nbEsquives}} tests d'esquive pour arriver au contact (règle d'allonge des armes).
</li>
{{/if}}
{{#if loc}} {{#if loc}}
<li><strong>Attaque réussie !!</strong> </li> <li><strong>Attaque réussie !!</strong> </li>
<li>Localisation: {{loc.label}} </li> <li>Localisation: {{loc.label}} </li>
{{/if}}
{{#if degats}}
<li>Dégats: {{degats}} {{#if isReussiteCritique}}(Augmentez la gravité de la blessure d'un niveau){{/if}}</li> <li>Dégats: {{degats}} {{#if isReussiteCritique}}(Augmentez la gravité de la blessure d'un niveau){{/if}}</li>
{{/if}} {{/if}}
</ul> </ul>
<div> <div>
{{#if (or isEchecCritique isReussiteCritique)}}
<a class="chat-command-gain-xp">
<img class="chat-command-img" data-tooltip="Cliquez ici pour +1 XP en {{carac.name}} si pas d'opposition"
src="systems/fvtt-te-deum/images/icons/xpplus1.webp">
</a>
{{/if}}
<a class="chat-command-opposition"> <a class="chat-command-opposition">
<img class="chat-command-img" data-tooltip="Test en opposition" src="systems/fvtt-te-deum/images/icons/opposition.webp"> <img class="chat-command-img" data-tooltip="Test en opposition"
src="systems/fvtt-te-deum/images/icons/opposition.webp">
</a> </a>
{{#if arme}} {{#if arme}}
{{#if isSuccess}} {{#if isSuccess}}
<a class="chat-command-appliquer-degats"> <a class="chat-command-appliquer-degats">
<img class="chat-command-img" data-tooltip="Appliquer les dégats directement sans opposition" src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp"> <img class="chat-command-img" data-tooltip="Appliquer les dégats directement sans opposition"
src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp">
</a> </a>
{{/if}} {{/if}}
{{/if}} {{/if}}

View File

@@ -1,15 +1,22 @@
<div class="chat-message-header"> <div class="chat-message-header">
<img class="actor-icon" src="{{winner.actorImg}}" alt="{{winner.alias}}" /> <img class="actor-icon" src="{{winner.actorImg}}" alt="{{winner.alias}}" />
<img class="chat-command-img" data-tooltip="Test en opposition" src="systems/fvtt-te-deum/images/icons/opposition.webp"> <img class="chat-command-img" data-tooltip="Test en opposition"
src="systems/fvtt-te-deum/images/icons/opposition.webp">
<img class="actor-icon" src="{{looser.actorImg}}" alt="{{looser.alias}}" /> <img class="actor-icon" src="{{looser.actorImg}}" alt="{{looser.alias}}" />
<label class="chat-actor-name-opposition">{{winner.alias}} vs {{looser.alias}}</label> <label class="chat-actor-name-opposition">{{winner.alias}} vs {{looser.alias}}</label>
</div> </div>
<hr> <hr>
<div> <div>
<label class="chat-result-success">{{winner.alias}} ({{winner.competence.name}}, {{winner.total}}) l'emporte sur {{looser.alias}} ({{looser.competence.name}}, {{looser.total}})</label> <label class="chat-result-success">{{winner.alias}} ({{winner.competence.name}}, {{winner.total}}) l'emporte sur
{{looser.alias}} ({{looser.competence.name}}, {{looser.total}})</label>
{{#if winner.isReussiteCritique}}
<div><strong class="chat-result-success">Réussite critique ! 1 XP gagné en {{winner.carac.name}}.</strong> </div>
{{/if}}
{{#if looser.isEchecCritique}}
<div><strong class="chat-result-failure">Echec critique ! 1 XP gagné en {{looser.carac.name}}.</strong> </div>
{{/if}}
</div> </div>

View File

@@ -15,7 +15,7 @@
{{#if competence}} {{#if competence}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Compétence </span> <span class="roll-dialog-label">Compétence </span>
<span class="roll-dialog-label">{{competence.name}} ({{competence.system.score}})</span> <span class="roll-dialog-label">{{competence.name}} ({{compScore}})</span>
</div> </div>
{{/if}} {{/if}}
@@ -61,13 +61,39 @@
<input type="checkbox" id="roll-tir-mouvement" {{checked isMouvement}} /> <input type="checkbox" id="roll-tir-mouvement" {{checked isMouvement}} />
</div> </div>
{{else}} {{else}}
{{/if}}
{{else}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span> <span class="roll-dialog-label">Allonge {{allongeLabel}} : Indiquez l'allonge de votre adversaire
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="String"> ci-dessous.</span>
{{selectOptions config.difficulte selected=difficulty valueAttr="key" labelAttr="label"}} </div>
<div class="flexrow">
<span class="roll-dialog-label"
data-tooltip="Modification d'allonge selon votre arme et celle de votre adversaire">Allonge arme adversaire :
</span>
<select class="" type="text" id="roll-allonge" value="{{allongeId}}" data-dtype="String">
{{#select allongeId}}
{{#each allonges as |allonge key|}}
<option value="{{key}}">{{allonge.label}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">Charge à pied ?</span>
<input type="checkbox" id="roll-charge-a-pied" {{checked isChargeAPied}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Charge à cheval ?</span>
<input type="checkbox" id="roll-charge-a-cheval" {{checked isChargeACheval}} />
</div>
{{/if}}
<div class="flexrow">
<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 attaqueCiblee}}
{{#each config.ATTAQUE_CIBLEES as |attaque key|}}
<option value="{{key}}">{{attaque.label}}</option>
{{/each}}
{{/select}}
</select> </select>
</div> </div>
{{/if}} {{/if}}