From cdbf14b788bbd33648e9b5a9d8ec2ece06df1121 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Fri, 29 Oct 2021 22:37:27 +0200 Subject: [PATCH] Gestion des maladies/poisons --- module/actor-sheet.js | 6 ++-- module/actor.js | 32 +++++++++++++++----- module/regles-optionelles.js | 10 +++--- system.json | 4 +-- template.json | 16 +++++----- templates/actor-blessure-partial.html | 6 ++++ templates/actor-liste-blessures-partial.html | 4 ++- 7 files changed, 54 insertions(+), 24 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index b092334c..925a256b 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -246,8 +246,10 @@ export class RdDActorSheet extends ActorSheet { let pcomplets = tr.find('.blessure-soins_complets').val(); let jours = tr.find('.blessure-jours').val(); let loc = tr.find('.blessure-localisation').val(); - //console.log(btype, index, psoins, pcomplets, jours, loc); - await this.actor.setDataBlessureFromSheet(btype, index, psoins, pcomplets, jours, loc); + let psdone = tr.find('.blessure-psdone:checked').val(); + let scdone = tr.find('.blessure-scdone:checked').val(); + console.log(btype, index, psoins, pcomplets, jours, loc, psdone, scdone); + await this.actor.setDataBlessureFromSheet(btype, index, psoins, pcomplets, jours, loc, psdone, scdone); }); // Equip Inventory Item diff --git a/module/actor.js b/module/actor.js index f362adae..c764d574 100644 --- a/module/actor.js +++ b/module/actor.js @@ -536,7 +536,7 @@ export class RdDActor extends Actor { if (!retrograde) { return false; } - mergeObject(retrograde, { "active": true, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "loc": blessure.loc }); + mergeObject(retrograde, { "active": true, "psdone": blessure.psdone, "scdone": blessure.scdone, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "loc": blessure.loc }); } this._supprimerBlessure(blessure); return true; @@ -544,7 +544,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _supprimerBlessure(blessure) { - mergeObject(blessure, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "loc": "" }); + mergeObject(blessure, { "active": false, "psdone": false, "scdone": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "loc": "" }); } /* -------------------------------------------- */ @@ -1584,7 +1584,7 @@ export class RdDActor extends Actor { countBlessuresNonSoigneeByName(name) { let blessures = Misc.templateData(this).blessures[name].liste; - return blessures.filter( b => b.active && b.premiers_soins < 0).length; + return blessures.filter( b => b.active && !b.psdone).length; } /* -------------------------------------------- */ @@ -1749,9 +1749,11 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async setDataBlessureFromSheet(gravite, index, psoins, pcomplets, jours, loc) { + async setDataBlessureFromSheet(gravite, index, psoins, pcomplets, jours, loc, psdone, scdone) { let listBlessures = duplicate(Misc.templateData(this).blessures); let blessure = listBlessures[gravite + "s"].liste[index]; + blessure.psdone = psdone; + blessure.scdone = scdone; blessure.premiers_soins = psoins; blessure.soins_complets = pcomplets; blessure.jours = jours; @@ -3289,7 +3291,23 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async jetEncaissement(rollData) { - const roll = await RdDDice.roll("2d10", { showDice: true }); + let formula = "2d10"; + + // Chaque dé fait au minmum la difficulté libre + if (ReglesOptionelles.isUsing('degat-minimum-malus-libre')) { + if ( rollData.diffLibre < 0 ) { + let valeurMin = Math.abs(rollData.diffLibre); + formula += "min"+valeurMin; + } + } + // Chaque dé fait au minmum la difficulté libre + if (ReglesOptionelles.isUsing('degat-ajout-malus-libre')) { + if ( rollData.diffLibre < 0 ) { + let valeurMin = Math.abs(rollData.diffLibre); + formula += "+"+valeurMin; + } + } + let roll = await RdDDice.roll(formula, { showDice: true }); const armure = await this.computeArmure(rollData); const jetTotal = roll.total + rollData.dmg.total - armure; @@ -3382,8 +3400,8 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _setBlessure(blessure, encaissement) { blessure.active = true; - blessure.premiers_soins = -1; - blessure.soins_complets = -1; + blessure.psdone = false; + blessure.scdone = false; blessure.loc = encaissement.locName; } diff --git a/module/regles-optionelles.js b/module/regles-optionelles.js index b09a8016..ba5ba12e 100644 --- a/module/regles-optionelles.js +++ b/module/regles-optionelles.js @@ -7,10 +7,12 @@ const listeReglesOptionelles = [ { name: 'defenseurDesarme', group: 'Règles de combat', descr: "Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier" }, { name: 'categorieParade', group: 'Règles de combat', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" }, { name: 'tripleSignificative', group: 'Règles de combat', descr: "En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès" }, - { name: 'astrologie', group: 'Règles de générales', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true }, - { name: 'afficher-prix-joueurs', group: 'Règles de générales', descr: "Afficher le prix de l'équipement des joueurs", default: true }, - { name: 'appliquer-fatigue', group: 'Règles de générales', descr: "Appliquer les règles de fatigue", default: true }, - { name: 'afficher-colonnes-reussite', group: 'Règles de générales', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false }, + { name: 'degat-minimum-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false }, + { name: 'degat-ajout-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false }, + { name: 'astrologie', group: 'Règles générales', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true }, + { name: 'afficher-prix-joueurs', group: 'Règles générales', descr: "Afficher le prix de l'équipement des joueurs", default: true }, + { name: 'appliquer-fatigue', group: 'Règles générales', descr: "Appliquer les règles de fatigue", default: true }, + { name: 'afficher-colonnes-reussite', group: 'Règles générales', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false }, ]; export class ReglesOptionelles extends FormApplication { diff --git a/system.json b/system.json index ed5956dd..e2d092d6 100644 --- a/system.json +++ b/system.json @@ -2,11 +2,11 @@ "name": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", "description": "Rêve de Dragon RPG for FoundryVTT", - "version": "1.5.17", + "version": "1.5.19", "manifestPlusVersion": "1.0.0", "minimumCoreVersion": "0.8.0", "compatibleCoreVersion": "0.8.9", - "templateVersion": 123, + "templateVersion": 124, "author": "LeRatierBretonnien", "authors": [ { diff --git a/template.json b/template.json index b7f30eea..9f8617bf 100644 --- a/template.json +++ b/template.json @@ -169,18 +169,18 @@ }, "blessures": { "legeres": { - "liste": [ { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" } ] + "liste": [ { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" }, + { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" }, + { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" }, + { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" }, + { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" } ] }, "graves": { - "liste": [ { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" } ] + "liste": [ { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" }, + { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" } ] }, "critiques": { - "liste": [ { "active": false, "premiers_soins": -1, "soins_complets": -1, "jours": 0, "localisation": "" } ] + "liste": [ { "active": false, "psdone": false, "premiers_soins": -1, "scdone": false, "soins_complets": -1, "jours": 0, "localisation": "" } ] } }, "attributs": { diff --git a/templates/actor-blessure-partial.html b/templates/actor-blessure-partial.html index cd639c59..57ee004f 100644 --- a/templates/actor-blessure-partial.html +++ b/templates/actor-blessure-partial.html @@ -12,9 +12,15 @@ + + + + + + diff --git a/templates/actor-liste-blessures-partial.html b/templates/actor-liste-blessures-partial.html index 16465ca7..aad6f25d 100644 --- a/templates/actor-liste-blessures-partial.html +++ b/templates/actor-liste-blessures-partial.html @@ -3,9 +3,11 @@ - Localisation + Loc. Premiers soins + P.S. OK? Soins complets + S.C. OK? Age (jours)