diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 73368005..075cbbd6 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -5,6 +5,7 @@
import { RdDUtility } from "./rdd-utility.js";
import { RdDEncaisser } from "./rdd-roll-encaisser.js";
+import { HtmlUtility } from "./html-utility.js";
/* -------------------------------------------- */
export class RdDActorSheet extends ActorSheet {
@@ -90,7 +91,6 @@ export class RdDActorSheet extends ActorSheet {
this.armesList = duplicate(data.data.combat);
data.data.carac.taille.isTaille = true; // To avoid button link;
- data.data.carac.chance.isChance = true; // Ajouter chance actuelle et utiliser;
data.data.compteurs.chance.isChance = true;
data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.blessures);
@@ -190,11 +190,7 @@ export class RdDActorSheet extends ActorSheet {
activateListeners(html) {
super.activateListeners(html);
- if (game.user.isGM) {
- $(".gm-only").show();
- } else {
- $(".gm-only").hide();
- }
+ HtmlUtility._showControlWhen(".gm-only", game.user.isGM);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
@@ -258,6 +254,10 @@ export class RdDActorSheet extends ActorSheet {
this.actor.rollCarac( caracName.toLowerCase() );
});
+ html.find('#chance-actuel').click((event) => {
+ this.actor.rollCarac( 'chance-actuel' );
+ });
+
// Roll Skill
html.find('.competence-label a').click((event) => {
let compName = event.currentTarget.text;
diff --git a/module/actor.js b/module/actor.js
index 44e2b663..02f0c1c9 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -270,7 +270,7 @@ export class RdDActor extends Actor {
this.computeRecul( rollData, encaisser );
} else { // This is the attack roll!
if (rolled.isSuccess) {
- let target = this.getTarget();
+ let target = this._getTarget();
if (await this.targetEntiteNonAccordee(target, 'avant-defense')) {
return;
}
@@ -1273,91 +1273,104 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async rollCarac( caracName )
{
- let carac;
- if ( caracName == "reveActuel") { // Fake carac for Reve Actuel
- carac = {type: "number",
- value: this.getReveActuel(),
- label: "Rêve Actuel"
- }
- } else {
- carac = this.data.data.carac[caracName];// Per default
- }
+ 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);
+ 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
}
-
- /* -------------------------------------------- */
- getSortList() {
- return this.data.items.filter(item => item.type == "sort");
- }
-
- /* -------------------------------------------- */
- getDraconicList() {
- return this.data.items.filter(item => item.data.categorie == 'draconic')
- }
-
- /* -------------------------------------------- */
- async displayTMR(mode="normal")
- {
- let isRapide= mode == "rapide"
- if (mode != "visu")
- {
- let minReveValue = (isRapide) ? 3 : 2;
- if (this.getReveActuel() < minReveValue ) {
- ChatMessage.create( {
- content: "Vous n'avez plus assez de Points de Reve pour monter dans les Terres Médianes",
- whisper: ChatMessage.getWhisperRecipients(game.user.name) } );
- return;
- }
- }
-
- // Notification au MJ
- ChatMessage.create( { content: game.user.name + " est monté dans les TMR en mode : " + mode, whisper: ChatMessage.getWhisperRecipients("GM") } );
+ 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);
+ }
- let data = {
- fatigue: {
- malus: RdDUtility.calculMalusFatigue(this.data.data.sante.fatigue.value, this.data.data.sante.endurance.max),
- html: "
" + RdDUtility.makeHTMLfatigueMatrix( this.data.data.sante.fatigue.value, this.data.data.sante.endurance.max ).html() + "
"
- },
- draconic: this.getDraconicList(),
- sort: this.getSortList(),
- caracReve: this.data.data.carac.reve.value,
- pointsReve: this.getReveActuel(),
- isRapide: isRapide
- }
- let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', data );
- this.currentTMR = new RdDTMRDialog(html, this, data, mode);
- this.currentTMR.render(true);
- }
-
- /* -------------------------------------------- */
- rollArme( armeName, competenceName=undefined )
+ getCaracByName(caracName) {
+ switch (caracName)
{
- let armeItem = this.data.items.find(item=>item.type==="arme" && (item.name === armeName));
- if (armeItem ) {
- if ( competenceName == undefined) competenceName = armeItem.data.competence;
- this.rollCompetence( competenceName, armeItem );
- } else {
- this.rollCompetence( armeName ); //Bypass mode!
- }
+ case 'reveActuel':
+ return {
+ label: 'Rêve Actuel',
+ value: this.getReveActuel(),
+ type: "number",
+ ignoreEtatGeneral: true
+ };
+ case 'chance-actuelle':
+ return {
+ type: "number",
+ value: this.getChanceActuel(),
+ label: 'Chance actuelle',
+ ignoreEtatGeneral: true
+ };
+ default:
+ return this.data.data.carac[caracName]; // Per default
+ }
+ }
+
+ /* -------------------------------------------- */
+ getSortList() {
+ return this.data.items.filter(item => item.type == "sort");
+ }
+
+ /* -------------------------------------------- */
+ getDraconicList() {
+ return this.data.items.filter(item => item.data.categorie == 'draconic')
+ }
+
+ /* -------------------------------------------- */
+ async displayTMR(mode="normal")
+ {
+ let isRapide= mode == "rapide"
+ if (mode != "visu")
+ {
+ let minReveValue = (isRapide) ? 3 : 2;
+ if (this.getReveActuel() < minReveValue ) {
+ ChatMessage.create( {
+ content: "Vous n'avez plus assez de Points de Reve pour monter dans les Terres Médianes",
+ whisper: ChatMessage.getWhisperRecipients(game.user.name) } );
+ return;
+ }
}
+ // Notification au MJ
+ ChatMessage.create( { content: game.user.name + " est monté dans les TMR en mode : " + mode, whisper: ChatMessage.getWhisperRecipients("GM") } );
+
+ let data = {
+ fatigue: {
+ malus: RdDUtility.calculMalusFatigue(this.data.data.sante.fatigue.value, this.data.data.sante.endurance.max),
+ html: "" + RdDUtility.makeHTMLfatigueMatrix( this.data.data.sante.fatigue.value, this.data.data.sante.endurance.max ).html() + "
"
+ },
+ draconic: this.getDraconicList(),
+ sort: this.getSortList(),
+ caracReve: this.data.data.carac.reve.value,
+ pointsReve: this.getReveActuel(),
+ isRapide: isRapide
+ }
+ let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', data );
+ this.currentTMR = new RdDTMRDialog(html, this, data, mode);
+ this.currentTMR.render(true);
+ }
+
+ /* -------------------------------------------- */
+ rollArme( armeName, competenceName=undefined ) {
+ let armeItem = this.data.items.find(item=>item.type==="arme" && (item.name === armeName));
+ if (armeItem ) {
+ if ( competenceName == undefined) competenceName = armeItem.data.competence;
+ this.rollCompetence( competenceName, armeItem );
+ } else {
+ this.rollCompetence( armeName ); //Bypass mode!
+ }
+ }
+
/* -------------------------------------------- */
async rollCompetence( name, armeItem=undefined, attackerRoll=undefined, attacker = undefined) {
let competence = RdDUtility.findCompetence( this.data.items, name);
@@ -1415,7 +1428,7 @@ export class RdDActor extends Actor {
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html', rollData);
if (rollData.arme) {
- if (await this.targetEntiteNonAccordee(this.getTarget(), 'avant-attaque')) {
+ if (await this.targetEntiteNonAccordee(this._getTarget(), 'avant-attaque')) {
return;
}
new RdDRollDialog("arme", html, rollData, this, attacker).render(true);
@@ -1424,8 +1437,7 @@ export class RdDActor extends Actor {
}
}
- /* -------------------------------------------- */
- getTarget() {
+ _getTarget() {
if (game.user.targets && game.user.targets.size == 1) {
for (let target of game.user.targets) {
return target;
@@ -1435,8 +1447,7 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async equiperObjet( itemID )
- {
+ async equiperObjet( itemID ) {
let item = this.getOwnedItem(itemID);
if ( item && item.data.data ) {
let update = {_id: item._id, "data.equipe": !item.data.data.equipe };
@@ -1476,7 +1487,6 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async encaisserDommages( attackerRoll, attacker = undefined ) {
-
if (attacker && !await attacker.accorder(this, 'avant-encaissement')) {
return;
}
diff --git a/module/html-utility.js b/module/html-utility.js
new file mode 100644
index 00000000..28f3551d
--- /dev/null
+++ b/module/html-utility.js
@@ -0,0 +1,10 @@
+export class HtmlUtility{
+ static _showControlWhen(control, condition) {
+ if (condition) {
+ $(control).show();
+ }
+ else {
+ $(control).hide();
+ }
+ }
+}
\ No newline at end of file
diff --git a/module/rdd-roll-dialog.js b/module/rdd-roll-dialog.js
index 71afc43b..a73607b2 100644
--- a/module/rdd-roll-dialog.js
+++ b/module/rdd-roll-dialog.js
@@ -1,3 +1,4 @@
+import { HtmlUtility } from "./html-utility.js";
import { RdDItemSort } from "./item-sort.js";
import { Misc } from "./misc.js";
import { RdDResolutionTable } from "./rdd-resolution-table.js";
@@ -72,25 +73,12 @@ export class RdDRollDialog extends Dialog {
rollData.finalLevel = rollLevel;
rollData.caracValue = caracValue
- if (RdDRollDialog._isEtatGeneralApplicable(rollData)) {
- $(".etat-general").show();
- }
- else {
- $(".etat-general").hide();
- }
+ HtmlUtility._showControlWhen(".etat-general", !RdDRollDialog._isIgnoreEtatGeneral(rollData));
// Sort management
if ( rollData.selectedSort ) {
//console.log("Toggle show/hide", rollData.selectedSort);
- if (RdDItemSort.isDifficulteVariable(rollData.selectedSort)) {
- $("#div-sort-difficulte").show();
- } else {
- $("#div-sort-difficulte").hide();
- }
- if (RdDItemSort.isCoutVariable(rollData.selectedSort)) {
- $("#div-sort-ptreve").show();
- } else {
- $("#div-sort-ptreve").hide();
- }
+ HtmlUtility._showControlWhen("#div-sort-difficulte",RdDItemSort.isDifficulteVariable(rollData.selectedSort));
+ HtmlUtility._showControlWhen("#div-sort-ptreve", RdDItemSort.isCoutVariable(rollData.selectedSort));
}
// Mise à jour valeurs
@@ -173,16 +161,13 @@ export class RdDRollDialog extends Dialog {
});
}
- static _isEtatGeneralApplicable(rollData) {
- if (rollData.selectedCarac.label == 'Chance') return false;
- if (rollData.selectedCarac.label == 'Rêve Actuel') return false;
-
- return true;
+ static _isIgnoreEtatGeneral(rollData) {
+ return rollData.selectedCarac.ignoreEtatGeneral;
}
/* -------------------------------------------- */
static _computeFinalLevel(rollData) {
- const etat = RdDRollDialog._isEtatGeneralApplicable(rollData) ? Misc.toInt(rollData.etat) : 0;
+ const etat = RdDRollDialog._isIgnoreEtatGeneral(rollData) ? 0 : Misc.toInt(rollData.etat);
const diffConditions = Misc.toInt(rollData.diffConditions);
let malusEnc = (rollData.surencMalusApply ) ? rollData.surencMalusValue : 0;
let diffLibre = Misc.toInt(rollData.diffLibre);
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index 0873ff4c..c4d02e46 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -131,7 +131,7 @@