feat: implémente 'Puiser dans ses ressources'
Règle : le joueur peut ignorer tous les malus actifs contre une case de Spleen. - roll.mjs : checkbox puiserRessources ; ignore woundMalus, modifier négatif et aspectMod négatif ; incrémente system.spleen.lvl +1 après le jet - roll-dialog.hbs : bloc rouge foncé visible si woundMalus < 0 ; preview mis à jour - chat-message.hbs : bandeau '💪 Ressources puisées' si utilisé - roll.less : .form-puiser-row, .used-info.used-puiser - lang/fr.json : Roll.puiser/puiserDesc/usedPuiser Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -55,6 +55,7 @@ export class CelestopolRoll extends Roll {
|
||||
skillValue,
|
||||
woundMalus,
|
||||
woundLabel,
|
||||
hasMalus: woundMalus < 0,
|
||||
difficultyChoices: SYSTEM.DIFFICULTY_CHOICES,
|
||||
defaultDifficulty: options.difficulty ?? "normal",
|
||||
destGaugeFull,
|
||||
@@ -95,17 +96,23 @@ export class CelestopolRoll extends Roll {
|
||||
|
||||
if (!rollContext) return null
|
||||
|
||||
const difficulty = rollContext.difficulty ?? "normal"
|
||||
const diffConfig = SYSTEM.DIFFICULTY_CHOICES[difficulty] ?? SYSTEM.DIFFICULTY_CHOICES.normal
|
||||
const modifier = parseInt(rollContext.modifier ?? 0) || 0
|
||||
const aspectMod = parseInt(rollContext.aspectModifier ?? 0) || 0
|
||||
const useDestin = destGaugeFull && (rollContext.useDestin === true || rollContext.useDestin === "true")
|
||||
const useFortune = fortuneValue > 0 && (rollContext.useFortune === true || rollContext.useFortune === "true")
|
||||
const rollMoonDie = rollContext.rollMoonDie === true || rollContext.rollMoonDie === "true"
|
||||
const difficulty = rollContext.difficulty ?? "normal"
|
||||
const diffConfig = SYSTEM.DIFFICULTY_CHOICES[difficulty] ?? SYSTEM.DIFFICULTY_CHOICES.normal
|
||||
const modifier = parseInt(rollContext.modifier ?? 0) || 0
|
||||
const aspectMod = parseInt(rollContext.aspectModifier ?? 0) || 0
|
||||
const useDestin = destGaugeFull && (rollContext.useDestin === true || rollContext.useDestin === "true")
|
||||
const useFortune = fortuneValue > 0 && (rollContext.useFortune === true || rollContext.useFortune === "true")
|
||||
const puiserRessources = rollContext.puiserRessources === true || rollContext.puiserRessources === "true"
|
||||
const rollMoonDie = rollContext.rollMoonDie === true || rollContext.rollMoonDie === "true"
|
||||
|
||||
// Puiser dans ses ressources → ignorer tous les malus
|
||||
const effectiveWoundMalus = puiserRessources ? 0 : woundMalus
|
||||
const effectiveModifier = puiserRessources ? Math.max(0, modifier) : modifier
|
||||
const effectiveAspectMod = puiserRessources ? Math.max(0, aspectMod) : aspectMod
|
||||
|
||||
// Fortune : 1d8 + 8 ; Destin : 3d8 ; sinon : 2d8
|
||||
const nbDice = useDestin ? 3 : 2
|
||||
const totalModifier = skillValue + woundMalus + aspectMod + modifier
|
||||
const totalModifier = skillValue + effectiveWoundMalus + effectiveAspectMod + effectiveModifier
|
||||
const formula = useFortune
|
||||
? buildFormula(1, totalModifier + 8)
|
||||
: buildFormula(nbDice, totalModifier)
|
||||
@@ -125,10 +132,12 @@ export class CelestopolRoll extends Roll {
|
||||
...options,
|
||||
difficulty,
|
||||
difficultyValue: diffConfig.value,
|
||||
modifier,
|
||||
aspectMod,
|
||||
modifier: effectiveModifier,
|
||||
aspectMod: effectiveAspectMod,
|
||||
woundMalus: effectiveWoundMalus,
|
||||
useDestin,
|
||||
useFortune,
|
||||
puiserRessources,
|
||||
nbDice: useFortune ? 1 : nbDice,
|
||||
formula,
|
||||
rollMode: rollContext.visibility ?? "publicroll",
|
||||
@@ -165,6 +174,19 @@ export class CelestopolRoll extends Roll {
|
||||
await actor.update({ "system.attributs.fortune.value": Math.max(0, currentFortune - 1) })
|
||||
}
|
||||
|
||||
// Puiser dans ses ressources → coche une case de spleen
|
||||
if (puiserRessources && actor) {
|
||||
const currentSpleen = actor.system.spleen.lvl ?? 0
|
||||
if (currentSpleen < 8) {
|
||||
const newLvl = currentSpleen + 1
|
||||
const key = `s${newLvl}`
|
||||
await actor.update({
|
||||
"system.spleen.lvl": newLvl,
|
||||
[`system.spleen.${key}.checked`]: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Mémoriser les préférences sur l'acteur
|
||||
if (actor) {
|
||||
await actor.update({
|
||||
@@ -260,6 +282,7 @@ export class CelestopolRoll extends Roll {
|
||||
skillValue,
|
||||
useDestin: this.options.useDestin ?? false,
|
||||
useFortune: this.options.useFortune ?? false,
|
||||
puiserRessources: this.options.puiserRessources ?? false,
|
||||
nbDice: this.options.nbDice ?? diceResults.length,
|
||||
woundMalus,
|
||||
woundLabel,
|
||||
|
||||
Reference in New Issue
Block a user