From e8f69b74c771282bd674e432e29d86c68225c01a Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 21:31:41 +0100 Subject: [PATCH 1/6] Perte d'endurance max La perte maximale est l'endurance disponible --- module/actor.js | 1 + module/rdd-utility.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/module/actor.js b/module/actor.js index 5be795d4..4ff88bf6 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1631,6 +1631,7 @@ export class RdDActor extends Actor { let degatsReel = attackerRoll.degats - armure; let result = RdDUtility.computeBlessuresSante(degatsReel, attackerRoll.mortalite); + result.endurance = Math.max(result.endurance, -Number(this.data.data.sante.endurance.value)); await this.santeIncDec("vie", result.vie); await this.santeIncDec("endurance", result.endurance, (result.critiques > 0)); result.locName = (attackerRoll.loc) ? attackerRoll.loc.label : "Corps"; diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 2273ce66..0c216f6b 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -569,9 +569,9 @@ export class RdDUtility { /* -------------------------------------------- */ static computeBlessuresSante( degats, mortalite="mortel" ) { let encaissement = RdDUtility.selectEncaissement(degats, mortalite) - let over20 = degats > 20 ? degats - 20 : 0 - encaissement.endurance = - RdDUtility._evaluatePerte(encaissement.endurance, over20) - encaissement.vie = - RdDUtility._evaluatePerte(encaissement.vie, over20) + let over20 = Math.max(degats - 20, 0); + encaissement.endurance = - RdDUtility._evaluatePerte(encaissement.endurance, over20); + encaissement.vie = - RdDUtility._evaluatePerte(encaissement.vie, over20); return encaissement; } From ce3c2f21cd095ee4b446ee8cbec40612207665c6 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 21:56:59 +0100 Subject: [PATCH 2/6] normaliser reveActuel en reve-actuel --- module/actor-sheet.js | 10 ++++++---- module/actor.js | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 88ed655f..e027cfc4 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -263,8 +263,8 @@ export class RdDActorSheet extends ActorSheet { this.actor.rollCarac( caracName.toLowerCase() ); }); - html.find('#chance-actuel').click((event) => { - this.actor.rollCarac( 'chance-actuel' ); + html.find('#chance-actuelle').click((event) => { + this.actor.rollCarac( 'chance-actuelle' ); }); html.find('#chance-appel').click((event) => { @@ -276,10 +276,12 @@ export class RdDActorSheet extends ActorSheet { let compName = event.currentTarget.text; this.actor.rollCompetence( compName); }); + // Points de reve actuel html.find('.ptreve-actuel a').click((event) => { - this.actor.rollCarac( 'reveActuel' ); - }); + this.actor.rollCarac( 'reve-actuel' ); + }); + // Roll Weapon1 html.find('.arme-label a').click((event) => { let armeName = event.currentTarget.text; diff --git a/module/actor.js b/module/actor.js index 4ff88bf6..88894768 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1432,7 +1432,7 @@ export class RdDActor extends Actor { getCaracByName(caracName) { switch (caracName) { - case 'reveActuel': + case 'reve-actuel': return { label: 'Rêve Actuel', value: this.getReveActuel(), From fc38cc25437c877220a8e466abc33d30b8d5eedb Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 21:57:41 +0100 Subject: [PATCH 3/6] Correction malus armure/enc.flag --- module/rdd-roll.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 0766b793..d9757de9 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -33,8 +33,8 @@ export class RdDRoll extends Dialog { finalLevel: 0, diffConditions: 0, diffLibre: 0, - malusArmureValue: 0, - surencMalusFlag: actor.data.data.attributs ? actor.data.data.attributs.malusarmure.value : 0, + malusArmureValue: actor.data.data.attributs ? actor.data.data.attributs.malusarmure.value : 0, + surencMalusFlag: (actor.data.data.compteurs.surenc.value < 0), surencMalusValue: actor.data.data.compteurs.surenc.value, surencMalusApply: false, isNatation: false, From 9275f61a0860b3cf77defec466c8f540ce21d291 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 22:57:37 +0100 Subject: [PATCH 4/6] space cleanup --- template.json | 314 +++++++++++++++++++++++++------------------------- 1 file changed, 157 insertions(+), 157 deletions(-) diff --git a/template.json b/template.json index 84fe1ec5..ef915574 100644 --- a/template.json +++ b/template.json @@ -2,11 +2,11 @@ "Actor": { "types": ["personnage", "humanoide", "creature", "entite"], "templates": { - "description": { + "description": { "description": "Description ...", "notesmj": "Notes du MJ" }, - "background": { + "background": { "biographie": "Histoire personnelle...", "notes": "Notes", "notesmj": "Notes du MJ", @@ -21,31 +21,31 @@ }, "entite": { "carac": { - "taille": { - "type": "number", - "value": 10, - "label": "Taille", + "taille": { + "type": "number", + "value": 10, + "label": "Taille", "xp": 0, "derivee": false }, - "reve": { - "type": "number", - "value": 10, - "label": "Rêve", + "reve": { + "type": "number", + "value": 10, + "label": "Rêve", "xp": 0, "derivee": false }, "niveau": { - "type": "number", - "value": 0, - "label": "Niveau", + "type": "number", + "value": 0, + "label": "Niveau", "xp": 0, "derivee": false } }, "sante": { "endurance": { - "type": "number", + "type": "number", "max": 10, "value": 10, "label": "Endurance", @@ -59,21 +59,21 @@ "etat": { "value": 0, "label": "Etat général" - }, + }, "surenc": { "value": 0, "label": "Sur-encombrement" } }, - "attributs": { + "attributs": { "plusdom": { - "type": "number", + "type": "number", "value": 0, "label": "+dom", "derivee": true }, "vitesse": { - "type": "string", + "type": "string", "value": 0, "label": "Vitesse", "derivee": true @@ -82,59 +82,59 @@ }, "creature": { "carac": { - "taille": { - "type": "number", - "value": 10, - "label": "Taille", + "taille": { + "type": "number", + "value": 10, + "label": "Taille", "xp": 0, "derivee": false }, - "constitution": { - "type": "number", - "value": 10, - "label": "Constitution", - "xp": 0, - "derivee": false - }, - "force": { - "type": "number", - "value": 10, - "label": "Force", - "xp": 0, - "derivee": false - }, - "perception": { - "type": "number", - "value": 10, - "label": "Perception", + "constitution": { + "type": "number", + "value": 10, + "label": "Constitution", "xp": 0, "derivee": false }, - "volonte": { - "type": "number", - "value": 10, - "label": "Volonté", + "force": { + "type": "number", + "value": 10, + "label": "Force", "xp": 0, "derivee": false }, - "reve": { - "type": "number", - "value": 10, - "label": "Rêve", + "perception": { + "type": "number", + "value": 10, + "label": "Perception", + "xp": 0, + "derivee": false + }, + "volonte": { + "type": "number", + "value": 10, + "label": "Volonté", + "xp": 0, + "derivee": false + }, + "reve": { + "type": "number", + "value": 10, + "label": "Rêve", "xp": 0, "derivee": false } }, "sante": { "vie": { - "type": "number", + "type": "number", "max": 10, "value": 10, "label": "Vie", "derivee": false }, "endurance": { - "type": "number", + "type": "number", "max": 10, "value": 10, "label": "Endurance", @@ -150,7 +150,7 @@ "liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, + { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ] }, "graves": { @@ -161,27 +161,27 @@ "liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ] } }, - "attributs": { + "attributs": { "plusdom": { - "type": "number", + "type": "number", "value": 0, "label": "+dom", "derivee": true }, "vitesse": { - "type": "string", + "type": "string", "value": 0, "label": "Vitesse", "derivee": true }, "encombrement": { - "type": "number", + "type": "number", "value": 0, "label": "Encombrement", "derivee": false }, "protection": { - "type": "number", + "type": "number", "value": 0, "label": "Protection", "derivee": false @@ -200,155 +200,155 @@ }, "common": { "carac": { - "taille": { - "type": "number", - "value": 10, - "label": "Taille", + "taille": { + "type": "number", + "value": 10, + "label": "Taille", "xp": 0, "derivee": false }, - "apparence": { - "type": "number", - "value": 10, - "label": "Apparence", + "apparence": { + "type": "number", + "value": 10, + "label": "Apparence", "xp": 0, "derivee": false }, - "constitution": { - "type": "number", - "value": 10, - "label": "Constitution", - "xp": 0, - "derivee": false - }, - "force": { - "type": "number", - "value": 10, - "label": "Force", - "xp": 0, - "derivee": false - }, - "agilite": { - "type": "number", - "value": 10, - "label": "Agilité", + "constitution": { + "type": "number", + "value": 10, + "label": "Constitution", "xp": 0, "derivee": false }, - "dexterite": { - "type": "number", - "value": 10, - "label": "Dexterité", + "force": { + "type": "number", + "value": 10, + "label": "Force", + "xp": 0, + "derivee": false + }, + "agilite": { + "type": "number", + "value": 10, + "label": "Agilité", + "xp": 0, + "derivee": false + }, + "dexterite": { + "type": "number", + "value": 10, + "label": "Dexterité", "xp": 0, "derivee": false }, - "vue": { - "type": "number", - "value": 10, - "label": "Vue", + "vue": { + "type": "number", + "value": 10, + "label": "Vue", "xp": 0, "derivee": false }, - "ouie": { - "type": "number", - "value": 10, - "label": "Ouïe", + "ouie": { + "type": "number", + "value": 10, + "label": "Ouïe", "xp": 0, "derivee": false }, - "odoratgout": { - "type": "number", - "value": 10, - "label": "Odorat-Goût", + "odoratgout": { + "type": "number", + "value": 10, + "label": "Odorat-Goût", "xp": 0, "derivee": false }, - "volonte": { - "type": "number", - "value": 10, - "label": "Volonté", + "volonte": { + "type": "number", + "value": 10, + "label": "Volonté", "xp": 0, "derivee": false }, - "intellect": { - "type": "number", - "value": 10, - "label": "Intellect", + "intellect": { + "type": "number", + "value": 10, + "label": "Intellect", "xp": 0, "derivee": false }, - "empathie": { - "type": "number", - "value": 10, - "label": "Empathie", + "empathie": { + "type": "number", + "value": 10, + "label": "Empathie", "xp": 0, "derivee": false }, - "reve": { - "type": "number", - "value": 10, - "label": "Rêve", + "reve": { + "type": "number", + "value": 10, + "label": "Rêve", "xp": 0, "derivee": false }, - "chance": { - "type": "number", - "value": 10, - "label": "Chance", - "xp": 0, + "chance": { + "type": "number", + "value": 10, + "label": "Chance", + "xp": 0, "derivee": false }, - "melee": { - "type": "number", - "value": 10, - "label": "Mêlée", - "xp": 0, + "melee": { + "type": "number", + "value": 10, + "label": "Mêlée", + "xp": 0, "derivee": true }, - "tir": { - "type": "number", - "value": 10, - "label": "Tir", - "xp": 0, + "tir": { + "type": "number", + "value": 10, + "label": "Tir", + "xp": 0, "derivee": true }, - "lancer": { - "type": "number", - "value": 10, - "label": "Lancer", - "xp": 0, + "lancer": { + "type": "number", + "value": 10, + "label": "Lancer", + "xp": 0, "derivee": true }, - "derobee": { - "type": "number", - "value": 10, - "label": "Dérobée", - "xp": 0, + "derobee": { + "type": "number", + "value": 10, + "label": "Dérobée", + "xp": 0, "derivee": true } }, "sante": { "vie": { - "type": "number", + "type": "number", "max": 10, "value": 10, "label": "Vie", "derivee": true }, "endurance": { - "type": "number", + "type": "number", "max": 10, "value": 10, "label": "Endurance", "derivee": true }, "fatigue": { - "type": "number", + "type": "number", "max": 0, "value": 0, "label": "Fatigue", "derivee": true - }, + }, "sonne": { "value": false, "label": "Sonné" @@ -359,7 +359,7 @@ "liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, - { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, + { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" }, { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ] }, "graves": { @@ -370,33 +370,33 @@ "liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ] } }, - "attributs": { + "attributs": { "sconst": { - "type": "number", + "type": "number", "value": 0, "label": "S. Const", "derivee": true }, "sust": { - "type": "number", + "type": "number", "value": 0, "label": "Sustentation", "derivee": true }, "plusdom": { - "type": "number", + "type": "number", "value": 0, "label": "+dom", "derivee": true }, "encombrement": { - "type": "number", + "type": "number", "value": 0, "label": "Encombrement", "derivee": true }, "malusarmure": { - "type": "number", + "type": "number", "value": 0, "label": "Malus Armure", "derivee": true @@ -456,12 +456,12 @@ "label": "Moral", "isInput": true }, - "exaltation": { + "exaltation": { "value": 0, "label": "Exaltation", "isInput": true }, - "dissolution": { + "dissolution": { "value": 0, "label": "Dissolution", "isInput": true @@ -490,7 +490,7 @@ "label": "Ethylisme", "isInput": true, "nb_doses": 0 - }, + }, "stress": { "value": 0, "label": "Stress", @@ -503,8 +503,8 @@ "isInput": true } }, - "argent": { - "deniers": { + "argent": { + "deniers": { "label": "Denier", "value": 0, "enc": 0 @@ -519,7 +519,7 @@ }, "personnage": { "templates": [ "background", "common"] - }, + }, "humanoide": { "templates": [ "common", "description" ] }, @@ -604,7 +604,7 @@ }, "sort": { "description": "", - "draconic": "", + "draconic": "", "duree": "", "JR": "", "cible": "", From d081dbf2309b170623142a63f131973faed733e2 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 23:31:23 +0100 Subject: [PATCH 5/6] Utilise RdDRoll pour les caracs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ajout d'un callback dédié à l'expérience limite de la table de résolution à 60 (rêve actuel jusqu'à 3x limite) --- module/actor-sheet.js | 2 +- module/actor.js | 105 +++++++++++++++++++++------------ module/chat-utility.js | 34 +++++++---- module/rdd-resolution-table.js | 9 ++- module/rdd-roll.js | 31 +++++----- 5 files changed, 109 insertions(+), 72 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index e027cfc4..062d5425 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -268,7 +268,7 @@ export class RdDActorSheet extends ActorSheet { }); html.find('#chance-appel').click((event) => { - this.actor.appelChance(); + this.actor.rollAppelChance(); }); // Roll Skill diff --git a/module/actor.js b/module/actor.js index 88894768..751ab2bf 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1355,66 +1355,95 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async rollCarac( caracName ) - { - let carac = this.getCaracByName(caracName); - let rollData = { - selectedCarac: carac, - ajustementsConditions: CONFIG.RDD.ajustementsConditions, - difficultesLibres: CONFIG.RDD.difficultesLibres, - etat: this.data.data.compteurs.etat.value, - finalLevel: 0, - diffConditions: 0, - diffLibre: 0, - malusArmureValue: (this.data.data.attributs) ? this.data.data.attributs.malusarmure.value : 0, - surencMalusFlag: (this.data.data.compteurs.surenc.value < 0), - surencMalusValue: this.data.data.compteurs.surenc.value, - surencMalusApply: false, - isNatation: false, - useEncForNatation: false - } - console.log(caracName, rollData); - let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', rollData); - new RdDRollDialog("carac", html, rollData, this ).render(true); + _createCallbackExperience() { + return { + condition: r => r.rolled.isPart && r.finalLevel < 0 && game.settings.get("core", "rollMode") != 'selfroll', + action: r => this._appliquerAjoutExperience(r) + }; } - /* -------------------------------------------- */ - async appelChance( ) + async _appliquerAjoutExperience(rollData) { + // TODO: si pas de compétence, minimum 1 pour carac + // TODO: appliquer l'expérience automatiquement + let xpmsg = RdDResolutionTable.buildXpMessage(rollData.rolled, rollData.finalLevel); + let message = ChatUtility.prepareChatMessage('gmroll', this.name); + message.content = "" + rollData.selectedCarac.label + "" + + xpmsg; + ChatMessage.create(message); + } + + /* -------------------------------------------- */ + async rollCarac( caracName ) { - let rollData = { - selectedCarac: this.getCaracByName('chance-actuelle'), - diffConditions: this.ajustementAstrologique() - } - - const dialog = await RdDRoll.create( - 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', - this, - rollData, + let rollData = { selectedCarac: this.getCaracByName(caracName) }; + + const dialog = await RdDRoll.create(this, rollData, + {html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html'}, { - name: 'appelChance', - label: 'Appel à la chance', + name: 'jet-'+caracName, + label: 'Lancer : '+rollData.selectedCarac.label, callbacks: [ - { action: rollData => this._appelChanceResultat(rollData) } + this._createCallbackExperience(), + { action: this._rollCaracResult } ] } ); dialog.render(true); } + async _rollCaracResult(rollData) { + let rolled = rollData.rolled; + + let resumeCompetence = (rollData.diffLibre + rollData.diffConditions); + let explications = "
Points de taches : " + rolled.ptTache; + + // Final chat message + let chatOptions = { + content: "Test : " + rollData.selectedCarac.label + " / " + resumeCompetence + "" + + "
Difficultés libre : " + rollData.diffLibre + " / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat + + RdDResolutionTable.explain(rolled) + + explications + } + + ChatUtility.chatWithRollMode(chatOptions, this.name) + } + + /* -------------------------------------------- */ - _appelChanceResultat(rollData) { + async rollAppelChance( ) + { + let rollData = { + selectedCarac: this.getCaracByName('chance-actuelle'), + diffConditions: this.ajustementAstrologique() + } + + const dialog = await RdDRoll.create(this, rollData, + { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html'}, + { + name: 'appelChance', + label: 'Appel à la chance', + callbacks: [ + this._createCallbackExperience(), + { action: this._appelChanceResult } + ] + } + ); + dialog.render(true); + } + + _appelChanceResult(rollData) { const message = { user: game.user._id, alias: this.name, content: this.name + " fait appel à la chance" + RdDResolutionTable.explain(rollData.rolled) }; if (rollData.rolled.isSuccess) { - message.content += "
Dépense d'un point de chance, l'action peut être retentée" + message.content += "
Un point de chance est dépensée, l'action peut être retentée" this.chanceActuelleIncDec(-1) } ChatMessage.create(message); } - + /* -------------------------------------------- */ async chanceActuelleIncDec(value) { let chance = duplicate(this.data.data.compteurs.chance); diff --git a/module/chat-utility.js b/module/chat-utility.js index 20c040c4..0a7c2b50 100644 --- a/module/chat-utility.js +++ b/module/chat-utility.js @@ -6,7 +6,10 @@ export class ChatUtility { static chatWithRollMode(chatOptions, name) { let rollMode = game.settings.get("core", "rollMode"); - chatOptions.user = game.user._id; + ChatUtility.createChatMessage(chatOptions, rollMode, name); + } + + static createChatMessage( chatOptions, rollMode, name) { switch (rollMode) { case "blindroll": // GM only if (!game.user.isGM) { @@ -19,24 +22,29 @@ export class ChatUtility { chatOptions.whisper = ChatUtility.getUsers(user => user.isGM); } break; - case "gmroll": // GM + rolling player - chatOptions.user = game.user._id; - chatOptions.whisper = ChatUtility.getWhisperRecipientsAndGMs(name); - break; - case "selfroll": // only the user - chatOptions.user = game.user._id; - chatOptions.whisper = [game.user._id]; - break; default: - case "roll": // everybody - chatOptions.whisper = undefined; + chatOptions.whisper = ChatUtility.getWhisperRecipients(rollMode, name); break; } - - console.log("roll message", chatOptions); ChatMessage.create(chatOptions); } + static prepareChatMessage( rollMode, name) { + return { + user: game.user._id, + whisper: ChatUtility.getWhisperRecipients(rollMode, name) + } + } + + static getWhisperRecipients( rollMode, name) { + switch (rollMode) { + case "blindroll": return ChatUtility.getUsers(user => user.isGM); + case "gmroll": return ChatUtility.getWhisperRecipientsAndGMs(name); + case "selfroll": return [game.user._id]; + } + return undefined; + } + static getWhisperRecipientsAndGMs(name) { return ChatMessage.getWhisperRecipients(name) .concat(this.getUsers(user => user.isGM)); diff --git a/module/rdd-resolution-table.js b/module/rdd-resolution-table.js index 9cc24b10..f72142e2 100644 --- a/module/rdd-resolution-table.js +++ b/module/rdd-resolution-table.js @@ -55,7 +55,7 @@ const reussites = [ const reussiteSignificative = reussites.find(r => r.code == "sign"); const reussiteNormale = reussites.find(r => r.code == "norm"); const echecNormal = reussites.find(r => r.code == "echec"); - +const caracMaximumResolution = 60; /* -------------------------------------------- */ export class RdDResolutionTable { static resolutionTable = this.build() @@ -63,7 +63,7 @@ export class RdDResolutionTable { /* -------------------------------------------- */ static build() { let table = [] - for (var caracValue = 0; caracValue <= 60; caracValue++) { + for (var caracValue = 0; caracValue <= caracMaximumResolution; caracValue++) { table[caracValue] = this._computeRow(caracValue); } return table; @@ -84,7 +84,7 @@ export class RdDResolutionTable { if (rolled.caracValue != null && rolled.finalLevel!= null) { message += "(" + rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") "; } - message += rolled.quality + message += '' + rolled.quality + '' return message; } @@ -147,7 +147,6 @@ export class RdDResolutionTable { return ""; } - /* -------------------------------------------- */ static _computeReussite(chances, roll) { const reussite = reussites.find(x => x.condition(chances, roll)); @@ -219,7 +218,7 @@ export class RdDResolutionTable { static _buildHTMLTable(caracValue, levelValue, minCarac, maxCarac, minLevel, maxLevel) { let countColonnes = maxLevel - minLevel; minCarac = Math.max(minCarac, 1); - maxCarac = Math.min(maxCarac, 30); + maxCarac = Math.min(maxCarac, caracMaximumResolution); minLevel = Math.max(minLevel, -10); maxLevel = Math.max(Math.min(maxLevel, 22), minLevel + countColonnes); diff --git a/module/rdd-roll.js b/module/rdd-roll.js index d9757de9..73140e5d 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -10,22 +10,23 @@ import { RdDResolutionTable } from "./rdd-resolution-table.js"; export class RdDRoll extends Dialog { - static async create(htmlTemplate, actor, rollData, ...actions) { - RdDRoll._ensureCorrectActions(actions); + static async create(actor, rollData, dialogConfig, ...actions) { + RdDRoll._ensureCorrectActions(actions); RdDRoll._setDefaultOptions(actor, rollData); - const html = await renderTemplate(htmlTemplate, rollData); + const html = await renderTemplate(dialogConfig.html, rollData); - return new RdDRoll(actor, rollData, html, { - classes: ["rdddialog"], - width: 600, height: 500, 'z-index': 99999 - }, actions); + let options = { classes: ["rdddialog"], width: 600, height: 500, 'z-index': 99999 }; + if (dialogConfig.options) { + mergeObject(options, dialogConfig.options, { overwrite: true }) + } + return new RdDRoll(actor, rollData, html, options, actions); } static _setDefaultOptions(actor, rollData) { - - mergeObject(rollData, + + mergeObject(rollData, { ajustementsConditions: CONFIG.RDD.ajustementsConditions, difficultesLibres: CONFIG.RDD.difficultesLibres, @@ -44,12 +45,12 @@ export class RdDRoll extends Dialog { } static _ensureCorrectActions(actions) { - if (actions.length==0) { + if (actions.length == 0) { throw 'No action defined'; } actions.forEach(action => { if (action.callbacks == undefined) { - action.callbacks = [{action: r => console.log(action.name, r)}]; + action.callbacks = [{ action: r => console.log(action.name, r) }]; } }); } @@ -74,11 +75,11 @@ export class RdDRoll extends Dialog { async onAction(action, html) { await RdDResolutionTable.rollData(this.rollData); if (action.callbacks) - for (let callback of action.callbacks) { - if (callback.condition == undefined || callback.condition(this.rollData.rolled)) { - callback.action(this.rollData); + for (let callback of action.callbacks) { + if (callback.condition == undefined || callback.condition(this.rollData)) { + callback.action(this.rollData); + } } - } } /* -------------------------------------------- */ From 8726ed3352d2910d6ce4bf63b8262fb08813f243 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 6 Dec 2020 23:57:08 +0100 Subject: [PATCH 6/6] =?UTF-8?q?#64=20comp=C3=A9tences=20tronc=20manquantes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix des calculs d'expérience si les compétences tronc sont manquantes --- module/rdd-utility.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 0c216f6b..f8739ae5 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -396,17 +396,21 @@ export class RdDUtility { { let xp = 0; for (let troncList of competenceTroncs) { - let minNiveau = 15; + let minNiveau = 0; for (let troncName of troncList) { let comp = RdDUtility.findCompetence( competenceList, troncName); - minNiveau = (comp.data.niveau < minNiveau) ? comp.data.niveau : minNiveau; + if (comp) { + minNiveau = Math.min(comp.data.niveau, minNiveau); + } } - if ( minNiveau > 0 ) minNiveau = 0; // Clamp à 0, pour le tronc commun + minNiveau = Math.max(minNiveau, 0); // Clamp à 0, pour le tronc commun let minNiveauXP = competence_xp_par_niveau[minNiveau+10]; xp += minNiveauXP; for (let troncName of troncList) { let comp = RdDUtility.findCompetence( competenceList, troncName); - xp += competence_xp_par_niveau[comp.data.niveau+10] - minNiveauXP; + if (comp){ + xp += competence_xp_par_niveau[comp.data.niveau+10] - minNiveauXP; + } } } return xp;