Gestion de jets de competences et modificateurs associés

This commit is contained in:
2024-05-31 09:23:01 +02:00
parent af65209d23
commit 6b47cd3f40
33 changed files with 326 additions and 485 deletions

View File

@ -1,5 +1,6 @@
/* -------------------------------------------- */
import { TeDeumUtility } from "../common/tedeum-utility.js";
import { TeDeumRollDialog } from "../dialogs/tedeum-roll-dialog.js";
/* -------------------------------------------- */
/* -------------------------------------------- */
@ -98,8 +99,28 @@ export class TeDeumActor extends Actor {
return comp;
}
/* -------------------------------------------- */
calculMalusBlessures() {
let modifierBlessures = 0
let nbBlessures = 0
// Cumul des malus de blessures
for (let locKey in this.system.localisation) {
let loc = this.system.localisation[locKey]
let bDef = game.system.tedeum.config.blessures[loc.blessures]
modifierBlessures += bDef.modifier
nbBlessures += bDef.count
}
// 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")
if ( nbBlessures > endurance.system.score) {
modifierBlessures += -1
}
return modifierBlessures
}
/* -------------------------------------------- */
updateCarac(c, key) {
c.key = key
c.name = game.system.tedeum.config.caracteristiques[key].label
c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
@ -124,6 +145,19 @@ export class TeDeumActor extends Actor {
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
return providence
}
/* -------------------------------------------- */
modifyProvidence(value) {
let providence = foundry.utils.duplicate(this.system.providence)
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
this.update( { "system.providence": providence } )
}
/* -------------------------------------------- */
modifyXP(key, value) {
let xp = this.system.caracteristiques[key].experience
xp = Math.max(xp + value, 0)
this.update( { [`system.caracteristiques.${key}.experience`]: xp } )
}
/* -------------------------------------------- */
filterCompetencesByCarac(key) {
@ -132,6 +166,8 @@ export class TeDeumActor extends Actor {
if (c.system.isBase) {
c.system.score = this.system.caracteristiques[c.system.caracteristique].value
}
let caracDice = game.system.tedeum.config.descriptionValeur[this.system.caracteristiques[c.system.caracteristique].value].dice
c.system.formula = caracDice + "+" + c.system.score
})
return foundry.utils.deepClone( comp || {} )
}
@ -275,26 +311,30 @@ export class TeDeumActor extends Actor {
rollData.actorImg = this.img
rollData.actorId = this.id
rollData.img = this.img
rollData.isReroll = false
rollData.providence = this.prepareProvidence()
rollData.malusBlessures = this.calculMalusBlessures()
return rollData
}
/* -------------------------------------------- */
getCommonCompetence(skillid) {
getCommonCompetence(compId) {
let rollData = this.getCommonRollData()
let competence = duplicate(this.items.find(it => it.type =="competence" && it.id == skillid))
let competence = duplicate(this.items.find(it => it.type =="competence" && it.id == compId))
rollData.competence = competence
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
this.updateCarac( c, competence.system.caracteristique)
rollData.carac = c
rollData.img = competence.img
return rollData
}
/* -------------------------------------------- */
rollCompetence(skillId) {
let rollData = this.getCommonCompetence(skillId)
rollCompetence(compId) {
let rollData = this.getCommonCompetence(compId)
rollData.mode = "competence"
rollData.title = rollData.competence.name
this.startRoll(rollData).catch("Error on startRoll")
@ -319,7 +359,8 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */
async startRoll(rollData) {
let rollDialog = await EcrymeRollDialog.create(this, rollData)
console.log("startRoll", rollData)
let rollDialog = await TeDeumRollDialog.create(this, rollData)
rollDialog.render(true)
}