19 Commits

Author SHA1 Message Date
84cc59c57d Fix and enhancements
All checks were successful
Release Creation / build (release) Successful in 2m23s
2025-04-05 23:15:46 +02:00
e9c0fbd818 Fix URL scheme
All checks were successful
Release Creation / build (release) Successful in 1m30s
2025-03-19 13:55:30 +01:00
aaabb7ed75 Correction sur XP, echec critique et tir réussi
All checks were successful
Release Creation / build (release) Successful in 53s
2025-03-18 20:38:30 +01:00
fee7a3a9fb Gestion opposition en combat melee 2025-03-11 20:16:26 +01:00
31517030f6 Gestion opposition en combat melee
All checks were successful
Release Creation / build (release) Successful in 39s
2025-03-11 20:10:06 +01:00
c5cbf2a6d1 Gestion du genre dans la creation de perso 2025-03-11 13:45:04 +01:00
a30f813d94 Fix genre 2025-03-10 16:56:25 +01:00
090f6be601 Fix genre 2025-03-10 16:56:10 +01:00
60db1f65e4 Prit fix sur equipement et armes d'hast 2025-03-10 15:52:37 +01:00
d532765d2b Correction sur creation PNJ
All checks were successful
Release Creation / build (release) Successful in 2m0s
2025-03-01 22:01:01 +01:00
b6016742ae Enable PNJ 2025-03-01 19:42:15 +01:00
761f95d6d9 Ajout comp libres
All checks were successful
Release Creation / build (release) Successful in 44s
2025-02-25 22:29:05 +01:00
c24f4fe502 Ajout comp libres
All checks were successful
Release Creation / build (release) Successful in 1m13s
2025-02-25 21:29:52 +01:00
caedcf5e21 Update release 2025-02-24 19:53:03 +01:00
fe0814e498 Conserve l'historique des réponses
All checks were successful
Release Creation / build (release) Successful in 1m26s
2025-02-22 22:44:00 +01:00
544f9f467a Import and fix helper pictures 2025-02-21 17:49:49 +01:00
ce5771f930 Import and fix helper pictures 2025-02-21 17:47:49 +01:00
93b8325bb9 Import and fix helper pictures
All checks were successful
Release Creation / build (release) Successful in 50s
2025-02-21 17:41:36 +01:00
48be65e7fd Add release action 2025-02-21 10:43:37 +01:00
162 changed files with 325 additions and 194 deletions

View File

@ -27,7 +27,7 @@ jobs:
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/system.json
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/latest/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum-${{github.event.release.tag_name}}.zip
# Create a zip file with all files required by the module to add to the release

View File

@ -1,10 +1,18 @@
# Système Foundry pour Te Deum pour un massacre (French RPG, Open Sesam Games, Official)
# Système Foundry pour Te Deum pour un Massacre (French RPG, Open Sesame Games, Official)
This is a base game system with functionnal character sheets for the game Te Deum pour un massacre.
# Contributions
- Original code realised by Uberwald (https://www.uberwald.me/)
Snapshot of the system :
![Alt text](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2025/02/tedeum_snapshot.webp "a title")
# Copyright mentions
Copyright 2025 Open Sesame Games
All rights reserved
@ -13,5 +21,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
Te Deum pour un massacre is a game written by Jean-Philippe Jaworski. The author retains his moral rights regarding this work in both print and digital formats.
# Requests or Problems
Please report any requests or problems you have at contact@open-sesame.games

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -0,0 +1,25 @@
# 12.0.23
- Correction sur les jets réussie en tir
- Correction sur le dés négatif pour les échecs critiques
- Correction sur l'XP et édition de l'XP en mode MJ
# 12.0.22
- Correction pour les armes d'hast
- Correction sur la zone libre d'équipement
- Bouton + pour créer un équipement à nouveau opérationnel
- Modification de la gestion des jets en combat, avec gestion opposition ou degats immédiats
- Gestion du genre dans la création de personnage
# 12.0.21
- Creation de PNJ OK
# 12.0.20
- Corrections sur la création de perso
# 12.0.19
- Initial release !

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -56,7 +56,9 @@ export class TeDeumActorPJSheet extends ActorSheet {
santeModifier: this.actor.getSanteModifier(),
educations: this.actor.getEducations(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
equipmentfree: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
@ -95,7 +97,12 @@ export class TeDeumActorPJSheet extends ActorSheet {
})
html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true })
})
html.find('.competence-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
let caracKey = $(ev.currentTarget).data("carac-key")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: {caracteristique: caracKey} }], { renderSheet: true })
})
html.find('.subactor-edit').click(ev => {

View File

@ -34,7 +34,7 @@ export class TeDeumActor extends Actor {
return actor;
}
if (data.type == 'pj') {
if (data.type == 'pj' || data.type == 'pnj') {
const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
data.items = data.items || []
for (let skill of skills) {
@ -65,6 +65,14 @@ export class TeDeumActor extends Actor {
super._preUpdate(changed, options, user);
}
getCompetenceScore(compName) {
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) {
return competence.system.score
}
return 0
}
/* -------------------------------------------- */
_onUpdate(changed, options, userId) {
let updates = []
@ -119,6 +127,8 @@ export class TeDeumActor extends Actor {
if (updates.length > 0) {
this.updateEmbeddedDocuments('Item', updates)
}
super._onUpdate(changed, options, userId);
}
/* -------------------------------------------- */
@ -352,11 +362,13 @@ export class TeDeumActor extends Actor {
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
this.update({ "system.providence": providence })
}
/* -------------------------------------------- */
modifyXP(key, value) {
async modifyXP(key, value) {
let xp = this.system.caracteristiques[key].experience
xp = Math.max(xp + value, 0)
this.update({ [`system.caracteristiques.${key}.experience`]: xp })
await this.update({ [`system.caracteristiques.${key}.experience`]: xp })
this.sheet?.render(true)
}
/* -------------------------------------------- */
@ -622,7 +634,8 @@ export class TeDeumActor extends Actor {
// Setup competence + carac
if (!compName) {
compName = weapon.system.competence
let compIdx = weapon.system.competence
compName = game.system.tedeum.config.armeCompetences[compIdx]?.label
}
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) {

View File

@ -11,6 +11,7 @@ export class TeDeumCharacterCreator {
this.religion = undefined
this.caracBonus = {}
this.competenceBonus = {}
this.suiviReponses = []
this.competences = TeDeumUtility.getCompetencesForDropDown()
for (let k in game.system.tedeum.config.caracteristiques) {
@ -168,6 +169,8 @@ export class TeDeumCharacterCreator {
let selectedResponse = question.reponses[context.responseKey]
let compName = context.competences[context.responseKey] || selectedResponse.compName
this.increaseCompetence(compName)
this.suiviReponses.push({ etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName })
}
}
@ -371,6 +374,7 @@ export class TeDeumCharacterCreator {
title: "Création de personnage - La Pouponnière",
subtitle: "Choix de la Pouponnière",
label: "Valider le choix de la Pouponnière",
hasGenre: false,
choices: pouponniereItems,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -400,11 +404,12 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/
async renderPetitsGrimauds(stage) {
// Filter available pouponniere from origineSociale
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
let context = {
title: "Les Petits Grimauds",
label: "Valider le choix des Petits Grimauds",
hasGenre: true,
choices: grimaudsItems,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -434,12 +439,13 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/
async renderRosesDeLaVie(stage) {
// Filter available pouponniere from origineSociale
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
let context = {
title: "Création de personnage - Les Roses de la Vie",
label: "Valider le choix des Roses de la Vie",
choices: rosesItems,
hasGenre: true,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -485,6 +491,7 @@ export class TeDeumCharacterCreator {
title: "Création de personnage - L'Age Viril",
label: "Valider le choix de l'Age Viril",
choices: ageVirilItems,
hasGenre: false,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
}
@ -573,8 +580,22 @@ export class TeDeumCharacterCreator {
newArgent /= this.ageViril.system.cagnotteDivider
await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent})
let histoire = ""
for (let reponse of this.suiviReponses) {
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`
}
await actor.update({ "system.histoire": histoire})
actor.render(true)
context.pointsCompetence = {
"savoir": { score: actor.getCompetenceScore("Mémoriser"), label: "Savoir" },
"sensibilite": { score: actor.getCompetenceScore("Perception"), label: "Sensibilité" },
"entregent": { score: actor.getCompetenceScore("Charme"), label: "Entregent" },
"puissance": { score: actor.getCompetenceScore("Effort"), label: "Puissance" },
"complexion": { score: actor.getCompetenceScore("Endurance"), label: "Complexion" },
"adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" },
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
const label = "Terminer"
const choiceResult = await foundry.applications.api.DialogV2.wait({

View File

@ -5,7 +5,7 @@ export class TeDeumCombat extends Combat {
/* -------------------------------------------- */
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
console.log("Roll INIT !")
//console.log("Roll INIT !")
ids = typeof ids === "string" ? [ids] : ids;
for (let cId of ids) {
const c = this.combatants.get(cId);

View File

@ -57,7 +57,7 @@ export const TEDEUM_CONFIG = {
descriptionValeurOdd: {
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
5: { valeur: 5, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
@ -71,7 +71,7 @@ export const TEDEUM_CONFIG = {
},
descriptionValeur: {
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" },
@ -117,6 +117,11 @@ export const TEDEUM_CONFIG = {
melee: { label: "Mêlée", value: "melee" },
tir: { label: "Tir", value: "tir" }
},
genreEducation: {
"homme": { label: "Homme", value: "Homme" },
"femme": { label: "Femme", value: "Femme" },
"mixte": { label: "Mixte", value: "Mixte" }
},
armeAllonges: {
courte: { label: "Courte", value: "courte" },
moyenne: { label: "Moyenne", value: "moyenne" },
@ -153,10 +158,10 @@ export const TEDEUM_CONFIG = {
livre: { label: "Livres", id: "livre", value: 100 }
},
etapesEducation: {
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: false, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, hasGenre: true, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: true, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasGenre: false, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
},
origineSociale: {
noblesseepee: { label: "Noblesse d'épée", id: "noblesseepee", caracteristiques: { entregent: 1, puissance: 1 }, cagnotte: 10, cagnotteUnit: "livres", value: 1 },

View File

@ -160,6 +160,7 @@ export class TeDeumUtility {
formData.hasMultiplier = etape.hasMultiplier;
formData.hasDebouches = etape.hasDebouches;
formData.canCompetencesOpt = etape.canCompetencesOpt;
formData.hasGenre = etape.hasGenre;
}
/*-------------------------------------------- */
@ -200,11 +201,13 @@ export class TeDeumUtility {
ui.notifications.info("Opposition démarrée avec " + rollData.alias);
} else {
// Perform the opposition
let isAttackWinner = true
let rWinner = this.currentOpposition
let rLooser = rollData
if (rWinner.total < rLooser.total) {
rWinner = rollData
rLooser = this.currentOpposition
isAttackWinner = false
}
this.currentOpposition = undefined // Reset opposition
let oppositionData = {
@ -215,14 +218,32 @@ export class TeDeumUtility {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
})
await msg.setFlag("world", "te-deum-rolldata", rollData)
// 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) {
this.appliquerDegats(rWinner)
}
console.log("Rolldata result", rollData)
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async appliquerDegats(rollData) {
await this.processAttaqueMelee(rollData)
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
if (defenderToken) {
let actor = defenderToken.actor
await actor.appliquerDegats(rollData)
} else {
ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué")
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async chatListeners(html) {
html.on("click", '.chat-command-button', event => {
html.on("click", '.chat-command-opposition', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata")
@ -230,6 +251,14 @@ export class TeDeumUtility {
TeDeumUtility.manageOpposition(rollData, messageId)
}
})
html.on("click", '.chat-command-appliquer-degats', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata")
if (rollData) {
TeDeumUtility.appliquerDegats(rollData, messageId)
}
})
}
/* -------------------------------------------- */
@ -408,10 +437,11 @@ export class TeDeumUtility {
}
}
if (rollData.diceSum == 1) {
let critiqueRoll = await new Roll(rollData.carac.negativeDice).roll()
let critiqueRoll = await new Roll(rollData.carac.negativeDice)
await critiqueRoll.evaluate()
await this.showDiceSoNice(critiqueRoll, game.settings.get("core", "rollMode"))
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
if (critiqueRoll.total > rollData.competence.score) {
if (critiqueRoll.total > rollData.competence.system.score) {
rollData.isEchecCritique = true
}
}
@ -465,18 +495,13 @@ export class TeDeumUtility {
/* -------------------------------------------- */
static async processAttaqueMelee(rollData) {
if (rollData.arme?.system.typeArme != "melee") {
return
}
if (rollData.isSuccess) {
await this.getLocalisation(rollData)
let actor = game.actors.get(rollData.actorId)
let bDegats = actor.getBonusDegats()
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
await this.getLocalisation(rollData)
let actor = game.actors.get(rollData.actorId)
let bDegats = actor.getBonusDegats()
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
/* -------------------------------------------- */
@ -489,7 +514,7 @@ export class TeDeumUtility {
await this.getLocalisation(rollData)
// Now the degats
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
await this.showDiceSoNice(rollData.locRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
@ -519,7 +544,6 @@ export class TeDeumUtility {
await this.computeResults(rollData)
await this.processAttaqueDistance(rollData)
await this.processAttaqueMelee(rollData)
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
@ -535,15 +559,6 @@ export class TeDeumUtility {
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
actor.modifyXP(rollData.carac.key, 1)
}
// gestion degats automatique
if (rollData.arme && rollData.defenderTokenId) {
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
if (defenderToken) {
let actor = defenderToken.actor
await actor.appliquerDegats(rollData)
}
}
}
/* -------------------------------------------- */

View File

@ -15,6 +15,8 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
}, {})
);
schema.genre = new fields.StringField({required: true, initial: "Homme", choices: ["masculin", "mixte", "Homme", "Femme", "Mixte"]});
schema.nbChoixCarac = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
schema.caracteristiques = new fields.SchemaField(Array.fromRange(3, 1).reduce((caracs, i) => {
caracs[`carac${i}`] = new fields.SchemaField({

View File

@ -40,17 +40,20 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel {
});
schema.description = new fields.HTMLField({required: true, blank: true});
schema.notes = new fields.HTMLField({required: true, blank: true});
schema.connaissances = new fields.HTMLField({required: true, blank: true});
schema.histoire = new fields.HTMLField({required: true, blank: true});
schema.vetements = new fields.HTMLField({required: true, blank: true});
schema.equipmentfree = new fields.HTMLField({required: true, blank: true});
schema.genre = new fields.StringField({required: true, choices: game.system.tedeum.config.genre, initial: "Femme"});
schema.age = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.charges = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.religion = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.age = new fields.StringField({ required: false, blank: true, initial: "" });
schema.datenaissance = new fields.StringField({ required: false, blank: true, initial: "" });
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: "" });
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: "" });
schema.charges = new fields.StringField({ required: false, blank: true, initial: "" });
schema.religion = new fields.StringField({ required: false, blank: true, initial: "" });
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" });
return schema;
}

Binary file not shown.

BIN
packs/aides/000072.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000006
MANIFEST-000087

View File

@ -1,8 +1,7 @@
2025/02/13-22:35:49.582184 7fcc32ffd6c0 Recovering log #4
2025/02/13-22:35:49.633338 7fcc32ffd6c0 Delete type=3 #2
2025/02/13-22:35:49.633392 7fcc32ffd6c0 Delete type=0 #4
2025/02/13-22:42:05.161388 7fcc327fc6c0 Level-0 table #9: started
2025/02/13-22:42:05.161406 7fcc327fc6c0 Level-0 table #9: 0 bytes OK
2025/02/13-22:42:05.168017 7fcc327fc6c0 Delete type=0 #7
2025/02/13-22:42:05.168186 7fcc327fc6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/02/13-22:42:05.168210 7fcc327fc6c0 Manual compaction at level-1 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/04/05-23:14:49.037668 7f9c6affd6c0 Recovering log #86
2025/04/05-23:14:49.047402 7f9c6affd6c0 Delete type=0 #86
2025/04/05-23:14:49.047473 7f9c6affd6c0 Delete type=3 #85
2025/04/05-23:15:15.842682 7f9c69bff6c0 Level-0 table #90: started
2025/04/05-23:15:15.842744 7f9c69bff6c0 Level-0 table #90: 0 bytes OK
2025/04/05-23:15:15.848975 7f9c69bff6c0 Delete type=0 #88
2025/04/05-23:15:15.860649 7f9c69bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

View File

@ -1,5 +1,3 @@
2025/02/05-20:07:00.726830 7ffae77fe6c0 Delete type=3 #1
2025/02/05-20:50:19.888688 7ffae6bff6c0 Level-0 table #5: started
2025/02/05-20:50:19.892050 7ffae6bff6c0 Level-0 table #5: 3651 bytes OK
2025/02/05-20:50:19.898356 7ffae6bff6c0 Delete type=0 #3
2025/02/05-20:50:19.924903 7ffae6bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/04/05-18:56:55.040362 7fa86b7fe6c0 Recovering log #83
2025/04/05-18:56:55.054999 7fa86b7fe6c0 Delete type=3 #81
2025/04/05-18:56:55.055109 7fa86b7fe6c0 Delete type=0 #83

Binary file not shown.

BIN
packs/aides/MANIFEST-000087 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000109
MANIFEST-000189

View File

@ -1,7 +1,7 @@
2025/02/13-22:35:49.132071 7fcc337fe6c0 Recovering log #107
2025/02/13-22:35:49.187037 7fcc337fe6c0 Delete type=3 #105
2025/02/13-22:35:49.187149 7fcc337fe6c0 Delete type=0 #107
2025/02/13-22:42:05.116041 7fcc327fc6c0 Level-0 table #112: started
2025/02/13-22:42:05.116121 7fcc327fc6c0 Level-0 table #112: 0 bytes OK
2025/02/13-22:42:05.122845 7fcc327fc6c0 Delete type=0 #110
2025/02/13-22:42:05.142173 7fcc327fc6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
2025/04/05-23:14:48.938481 7f9c6a7fc6c0 Recovering log #188
2025/04/05-23:14:48.948878 7f9c6a7fc6c0 Delete type=0 #188
2025/04/05-23:14:48.948933 7f9c6a7fc6c0 Delete type=3 #187
2025/04/05-23:15:15.775044 7f9c69bff6c0 Level-0 table #192: started
2025/04/05-23:15:15.775079 7f9c69bff6c0 Level-0 table #192: 0 bytes OK
2025/04/05-23:15:15.780958 7f9c69bff6c0 Delete type=0 #190
2025/04/05-23:15:15.800666 7f9c69bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,3 @@
2025/02/05-20:07:00.600917 7ffae7fff6c0 Recovering log #103
2025/02/05-20:07:00.611719 7ffae7fff6c0 Delete type=3 #101
2025/02/05-20:07:00.611830 7ffae7fff6c0 Delete type=0 #103
2025/02/05-20:50:19.838224 7ffae6bff6c0 Level-0 table #108: started
2025/02/05-20:50:19.838303 7ffae6bff6c0 Level-0 table #108: 0 bytes OK
2025/02/05-20:50:19.844606 7ffae6bff6c0 Delete type=0 #106
2025/02/05-20:50:19.863174 7ffae6bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
2025/04/05-18:56:54.933660 7fa86affd6c0 Recovering log #185
2025/04/05-18:56:54.943911 7fa86affd6c0 Delete type=3 #183
2025/04/05-18:56:54.943971 7fa86affd6c0 Delete type=0 #185

Binary file not shown.

BIN
packs/armes/MANIFEST-000189 Normal file

Binary file not shown.

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
packs/armures/000191.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000109
MANIFEST-000189

View File

@ -1,7 +1,7 @@
2025/02/13-22:35:49.200499 7fcc32ffd6c0 Recovering log #107
2025/02/13-22:35:49.256910 7fcc32ffd6c0 Delete type=3 #105
2025/02/13-22:35:49.256980 7fcc32ffd6c0 Delete type=0 #107
2025/02/13-22:42:05.134786 7fcc327fc6c0 Level-0 table #112: started
2025/02/13-22:42:05.134811 7fcc327fc6c0 Level-0 table #112: 0 bytes OK
2025/02/13-22:42:05.142066 7fcc327fc6c0 Delete type=0 #110
2025/02/13-22:42:05.142204 7fcc327fc6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
2025/04/05-23:14:48.952138 7f9c6affd6c0 Recovering log #188
2025/04/05-23:14:48.962116 7f9c6affd6c0 Delete type=0 #188
2025/04/05-23:14:48.962182 7f9c6affd6c0 Delete type=3 #187
2025/04/05-23:15:15.788075 7f9c69bff6c0 Level-0 table #192: started
2025/04/05-23:15:15.788095 7f9c69bff6c0 Level-0 table #192: 0 bytes OK
2025/04/05-23:15:15.794438 7f9c69bff6c0 Delete type=0 #190
2025/04/05-23:15:15.800687 7f9c69bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,3 @@
2025/02/05-20:07:00.616342 7ffaecbf96c0 Recovering log #103
2025/02/05-20:07:00.627971 7ffaecbf96c0 Delete type=3 #101
2025/02/05-20:07:00.628058 7ffaecbf96c0 Delete type=0 #103
2025/02/05-20:50:19.844802 7ffae6bff6c0 Level-0 table #108: started
2025/02/05-20:50:19.844850 7ffae6bff6c0 Level-0 table #108: 0 bytes OK
2025/02/05-20:50:19.851086 7ffae6bff6c0 Delete type=0 #106
2025/02/05-20:50:19.863187 7ffae6bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
2025/04/05-18:56:54.946918 7fa86b7fe6c0 Recovering log #185
2025/04/05-18:56:54.957003 7fa86b7fe6c0 Delete type=3 #183
2025/04/05-18:56:54.957057 7fa86b7fe6c0 Delete type=0 #185

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000186

View File

@ -1,7 +1,7 @@
2025/02/13-22:35:49.055633 7fcc38ffa6c0 Recovering log #104
2025/02/13-22:35:49.118535 7fcc38ffa6c0 Delete type=3 #102
2025/02/13-22:35:49.118612 7fcc38ffa6c0 Delete type=0 #104
2025/02/13-22:42:05.128785 7fcc327fc6c0 Level-0 table #109: started
2025/02/13-22:42:05.128812 7fcc327fc6c0 Level-0 table #109: 0 bytes OK
2025/02/13-22:42:05.134704 7fcc327fc6c0 Delete type=0 #107
2025/02/13-22:42:05.142195 7fcc327fc6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
2025/04/05-23:14:48.923788 7f9c6bfff6c0 Recovering log #185
2025/04/05-23:14:48.933992 7f9c6bfff6c0 Delete type=0 #185
2025/04/05-23:14:48.934095 7f9c6bfff6c0 Delete type=3 #184
2025/04/05-23:15:15.781052 7f9c69bff6c0 Level-0 table #189: started
2025/04/05-23:15:15.781077 7f9c69bff6c0 Level-0 table #189: 0 bytes OK
2025/04/05-23:15:15.787996 7f9c69bff6c0 Delete type=0 #187
2025/04/05-23:15:15.800677 7f9c69bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,3 @@
2025/02/05-20:07:00.587007 7ffaed3fa6c0 Recovering log #100
2025/02/05-20:07:00.596905 7ffaed3fa6c0 Delete type=3 #98
2025/02/05-20:07:00.596964 7ffaed3fa6c0 Delete type=0 #100
2025/02/05-20:50:19.857097 7ffae6bff6c0 Level-0 table #105: started
2025/02/05-20:50:19.857120 7ffae6bff6c0 Level-0 table #105: 0 bytes OK
2025/02/05-20:50:19.863064 7ffae6bff6c0 Delete type=0 #103
2025/02/05-20:50:19.863205 7ffae6bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
2025/04/05-18:56:54.918444 7fa870bfa6c0 Recovering log #182
2025/04/05-18:56:54.929675 7fa870bfa6c0 Delete type=3 #180
2025/04/05-18:56:54.929721 7fa870bfa6c0 Delete type=0 #182

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000114
MANIFEST-000197

View File

@ -1,7 +1,7 @@
2025/02/13-22:35:49.263823 7fcc33fff6c0 Recovering log #112
2025/02/13-22:35:49.318056 7fcc33fff6c0 Delete type=3 #110
2025/02/13-22:35:49.318131 7fcc33fff6c0 Delete type=0 #112
2025/02/13-22:42:05.122931 7fcc327fc6c0 Level-0 table #117: started
2025/02/13-22:42:05.122950 7fcc327fc6c0 Level-0 table #117: 0 bytes OK
2025/02/13-22:42:05.128697 7fcc327fc6c0 Delete type=0 #115
2025/02/13-22:42:05.142187 7fcc327fc6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
2025/04/05-23:14:48.965558 7f9c6b7fe6c0 Recovering log #196
2025/04/05-23:14:48.975684 7f9c6b7fe6c0 Delete type=0 #196
2025/04/05-23:14:48.975771 7f9c6b7fe6c0 Delete type=3 #195
2025/04/05-23:15:15.794548 7f9c69bff6c0 Level-0 table #200: started
2025/04/05-23:15:15.794568 7f9c69bff6c0 Level-0 table #200: 0 bytes OK
2025/04/05-23:15:15.800586 7f9c69bff6c0 Delete type=0 #198
2025/04/05-23:15:15.800695 7f9c69bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,3 @@
2025/02/05-20:07:00.631061 7ffae77fe6c0 Recovering log #108
2025/02/05-20:07:00.640688 7ffae77fe6c0 Delete type=3 #106
2025/02/05-20:07:00.640754 7ffae77fe6c0 Delete type=0 #108
2025/02/05-20:50:19.869892 7ffae6bff6c0 Level-0 table #113: started
2025/02/05-20:50:19.869921 7ffae6bff6c0 Level-0 table #113: 0 bytes OK
2025/02/05-20:50:19.876430 7ffae6bff6c0 Delete type=0 #111
2025/02/05-20:50:19.888577 7ffae6bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
2025/04/05-18:56:54.959243 7fa86bfff6c0 Recovering log #193
2025/04/05-18:56:54.969916 7fa86bfff6c0 Delete type=3 #191
2025/04/05-18:56:54.970132 7fa86bfff6c0 Delete type=0 #193

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

View File

@ -1 +1 @@
MANIFEST-000108
MANIFEST-000188

View File

@ -1,7 +1,7 @@
2025/02/13-22:35:49.333807 7fcc38ffa6c0 Recovering log #106
2025/02/13-22:35:49.390442 7fcc38ffa6c0 Delete type=3 #104
2025/02/13-22:35:49.390520 7fcc38ffa6c0 Delete type=0 #106
2025/02/13-22:42:05.142328 7fcc327fc6c0 Level-0 table #111: started
2025/02/13-22:42:05.142350 7fcc327fc6c0 Level-0 table #111: 0 bytes OK
2025/02/13-22:42:05.149259 7fcc327fc6c0 Delete type=0 #109
2025/02/13-22:42:05.168150 7fcc327fc6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
2025/04/05-23:14:48.980636 7f9c6bfff6c0 Recovering log #187
2025/04/05-23:14:48.991406 7f9c6bfff6c0 Delete type=0 #187
2025/04/05-23:14:48.991533 7f9c6bfff6c0 Delete type=3 #186
2025/04/05-23:15:15.806897 7f9c69bff6c0 Level-0 table #191: started
2025/04/05-23:15:15.806941 7f9c69bff6c0 Level-0 table #191: 0 bytes OK
2025/04/05-23:15:15.814152 7f9c69bff6c0 Delete type=0 #189
2025/04/05-23:15:15.826768 7f9c69bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

Some files were not shown because too many files have changed in this diff Show More