Merge branch 'v1.4-fatigue' into 'v1.4'

Option pour ne pas utiliser la fatigue

See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!232
This commit is contained in:
Leratier Bretonnien 2021-05-09 14:49:10 +00:00
commit 5f314497d4
12 changed files with 98 additions and 88 deletions

View File

@ -13,6 +13,7 @@ import { RdDCombatManager } from "./rdd-combat.js";
import { RdDCarac } from "./rdd-carac.js"; import { RdDCarac } from "./rdd-carac.js";
import { RdDItem } from "./item.js"; import { RdDItem } from "./item.js";
import { DialogSplitItem } from "./dialog-split-item.js"; import { DialogSplitItem } from "./dialog-split-item.js";
import { ReglesOptionelles } from "./regles-optionelles.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDActorSheet extends ActorSheet { export class RdDActorSheet extends ActorSheet {
@ -68,10 +69,7 @@ export class RdDActorSheet extends ActorSheet {
encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(), encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(),
prixTotalEquipement: this.actor.computePrixTotalEquipement(), prixTotalEquipement: this.actor.computePrixTotalEquipement(),
surprise: RdDBonus.find(this.actor.getSurprise(false)).descr, surprise: RdDBonus.find(this.actor.getSurprise(false)).descr,
fatigue: { fatigue: RdDUtility.calculFatigueHtml(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(formData.data.sante.fatigue.value, formData.data.sante.endurance.max).html() + "</table>"
},
resumeBlessures: this.actor.computeResumeBlessure(formData.data.blessures), resumeBlessures: this.actor.computeResumeBlessure(formData.data.blessures),
}; };
formData.calc.surEncombrementMessage = (formData.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : ""; formData.calc.surEncombrementMessage = (formData.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
@ -99,12 +97,6 @@ export class RdDActorSheet extends ActorSheet {
formData.ajustementsConditions = CONFIG.RDD.ajustementsConditions; formData.ajustementsConditions = CONFIG.RDD.ajustementsConditions;
formData.difficultesLibres = CONFIG.RDD.difficultesLibres; formData.difficultesLibres = CONFIG.RDD.difficultesLibres;
// low is normal, this the base used to compute the grid.
formData.fatigue = {
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(formData.data.sante.fatigue.value, formData.data.sante.endurance.max).html() + "</table>"
}
formData.hautreve = { formData.hautreve = {
sortsReserve: formData.data.reve.reserve.list, sortsReserve: formData.data.reve.reserve.list,
rencontres: duplicate(formData.data.reve.rencontre.list), rencontres: duplicate(formData.data.reve.rencontre.list),
@ -211,6 +203,7 @@ export class RdDActorSheet extends ActorSheet {
super.activateListeners(html); super.activateListeners(html);
HtmlUtility._showControlWhen($(".gm-only"), game.user.isGM); HtmlUtility._showControlWhen($(".gm-only"), game.user.isGM);
HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
html.find('#show-hide-competences').click((event) => { html.find('#show-hide-competences').click((event) => {
this.options.showCompNiveauBase = !this.options.showCompNiveauBase; this.options.showCompNiveauBase = !this.options.showCompNiveauBase;

View File

@ -196,10 +196,10 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getFatigueActuelle() { getFatigueActuelle() {
if (!this.isPersonnage()) { if (ReglesOptionelles.isUsing("appliquer-fatigue") && this.isPersonnage()) {
return 0; return Misc.toInt(Misc.templateData(this).sante.fatigue?.value);
} }
return Misc.toInt(Misc.templateData(this).sante.fatigue?.value); return 0;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getFatigueMax() { getFatigueMax() {
@ -544,7 +544,7 @@ export class RdDActor extends Actor {
await this.santeIncDec("vie", actorData.data.sante.vie.max - actorData.data.sante.vie.value); await this.santeIncDec("vie", actorData.data.sante.vie.max - actorData.data.sante.vie.value);
await this.santeIncDec("endurance", actorData.data.sante.endurance.max - actorData.data.sante.endurance.value); await this.santeIncDec("endurance", actorData.data.sante.endurance.max - actorData.data.sante.endurance.value);
if (actorData.data.sante.fatigue) { if (ReglesOptionelles.isUsing("appliquer-fatigue") && actorData.data.sante.fatigue) {
await this.update({ "data.sante.fatigue.value": 0 }); await this.update({ "data.sante.fatigue.value": 0 });
} }
} }
@ -594,17 +594,18 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async recupererFatigue(message) { async recupererFatigue(message) {
let fatigue = Misc.templateData(this).sante.fatigue.value; if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
const fatigueMin = this._computeFatigueMin(); let fatigue = Misc.templateData(this).sante.fatigue.value;
if (fatigue <= fatigueMin) { const fatigueMin = this._computeFatigueMin();
message.content += "Vous êtes déjà reposé. "; if (fatigue <= fatigueMin) {
return; message.content += "Vous êtes déjà reposé. ";
} return;
fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue)); }
console.log("recupererFatigue", fatigue) fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue));
await this.update({ "data.sante.fatigue.value": fatigue }); await this.update({ "data.sante.fatigue.value": fatigue });
if (fatigue == 0) { if (fatigue == 0) {
message.content += "Vous êtes complêtement reposé. "; message.content += "Vous êtes complêtement reposé. ";
}
} }
} }
@ -1157,8 +1158,7 @@ export class RdDActor extends Actor {
} }
// Pour les autres // Pour les autres
let state = - (actorData.data.sante.vie.max - actorData.data.sante.vie.value); let state = - (actorData.data.sante.vie.max - actorData.data.sante.vie.value);
if (actorData.data.sante.fatigue) { if (ReglesOptionelles.isUsing("appliquer-fatigue") && actorData.data.sante.fatigue) {
// Creatures n'ont pas de fatigue
state += RdDUtility.currentFatigueMalus(actorData.data.sante.fatigue.value, actorData.data.sante.endurance.max); state += RdDUtility.currentFatigueMalus(actorData.data.sante.fatigue.value, actorData.data.sante.endurance.max);
} }
// Ajout de l'éthylisme // Ajout de l'éthylisme
@ -1471,7 +1471,9 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async santeIncDec(name, inc, options = { isCritique: false, ethylisme: false }) { async santeIncDec(name, inc, options = { isCritique: false, ethylisme: false }) {
if (name=='fatigue' && !ReglesOptionelles.isUsing("appliquer-fatigue")) {
return;
}
const sante = duplicate(Misc.templateData(this).sante); const sante = duplicate(Misc.templateData(this).sante);
let compteur = sante[name]; let compteur = sante[name];
if (!compteur) { if (!compteur) {
@ -1511,7 +1513,7 @@ export class RdDActor extends Actor {
compteur.value = result.newValue; compteur.value = result.newValue;
//console.log(name, inc, data.value, result.newValue, minValue, data.max); //console.log(name, inc, data.value, result.newValue, minValue, data.max);
// If endurance lost, then the same amount of fatigue cannot be recovered // If endurance lost, then the same amount of fatigue cannot be recovered
if (sante.fatigue && fatigue > 0) { if (ReglesOptionelles.isUsing("appliquer-fatigue") && sante.fatigue && fatigue > 0) {
sante.fatigue.value = Math.max(sante.fatigue.value + fatigue, this._computeFatigueMin()); sante.fatigue.value = Math.max(sante.fatigue.value + fatigue, this._computeFatigueMin());
} }
await this.update({ "data.sante": sante }); await this.update({ "data.sante": sante });
@ -2342,6 +2344,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async _tacheResult(rollData) { async _tacheResult(rollData) {
// Mise à jour de la tache // Mise à jour de la tache
rollData.appliquerFatigue = ReglesOptionelles.isUsing("appliquer-fatigue");
rollData.tache = duplicate(rollData.tache); rollData.tache = duplicate(rollData.tache);
rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache; rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache;
if (rollData.rolled.isETotal) { if (rollData.rolled.isETotal) {
@ -2800,10 +2803,7 @@ export class RdDActor extends Actor {
const endurance = actorData.data.sante.endurance.max; const endurance = actorData.data.sante.endurance.max;
let tmrFormData = { let tmrFormData = {
mode: mode, mode: mode,
fatigue: { fatigue: RdDUtility.calculFatigueHtml(fatigue, endurance),
malus: RdDUtility.calculMalusFatigue(fatigue, endurance),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "</table>"
},
draconic: this.getDraconicList(), draconic: this.getDraconicList(),
sort: this.getSortList(), sort: this.getSortList(),
caracReve: actorData.data.carac.reve.value, caracReve: actorData.data.carac.reve.value,

View File

@ -171,6 +171,7 @@ Hooks.once("init", async function () {
CONFIG.Combat.documentClass = RdDCombatManager; CONFIG.Combat.documentClass = RdDCombatManager;
// préparation des différents modules // préparation des différents modules
ReglesOptionelles.init();
RdDUtility.init(); RdDUtility.init();
RdDDice.init(); RdDDice.init();
RdDCommands.init(); RdDCommands.init();
@ -179,7 +180,6 @@ Hooks.once("init", async function () {
RdDTokenHud.init(); RdDTokenHud.init();
RdDActor.init(); RdDActor.init();
RddCompendiumOrganiser.init(); RddCompendiumOrganiser.init();
ReglesOptionelles.init();
EffetsDraconiques.init() EffetsDraconiques.init()
TMRUtility.init(); TMRUtility.init();
TMRRencontres.init(); TMRRencontres.init();

View File

@ -10,8 +10,9 @@ import { Poetique } from "./poetique.js";
import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
import { PixiTMR } from "./tmr/pixi-tmr.js"; import { PixiTMR } from "./tmr/pixi-tmr.js";
import { Draconique } from "./tmr/draconique.js"; import { Draconique } from "./tmr/draconique.js";
import { Grammar } from "./grammar.js";
import { Misc } from "./misc.js"; import { Misc } from "./misc.js";
import { HtmlUtility } from "./html-utility.js";
import { ReglesOptionelles } from "./regles-optionelles.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDTMRDialog extends Dialog { export class RdDTMRDialog extends Dialog {
@ -49,7 +50,7 @@ export class RdDTMRDialog extends Dialog {
this.actor = actor; this.actor = actor;
this.actor.tmrApp = this; // reference this app in the actor structure this.actor.tmrApp = this; // reference this app in the actor structure
this.viewOnly = tmrData.mode == "visu" this.viewOnly = tmrData.mode == "visu"
this.fatigueParCase = this.viewOnly ? 0 : this.actor.getTMRFatigue(); this.fatigueParCase = this.viewOnly || !ReglesOptionelles.isUsing("appliquer-fatigue") ? 0 : this.actor.getTMRFatigue();
this.cumulFatigue = 0; this.cumulFatigue = 0;
this.loadRencontres(); this.loadRencontres();
this.loadSortsReserve(); this.loadSortsReserve();
@ -177,6 +178,7 @@ export class RdDTMRDialog extends Dialog {
async activateListeners(html) { async activateListeners(html) {
super.activateListeners(html); super.activateListeners(html);
HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue"));
document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view); document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view);
if (this.viewOnly) { if (this.viewOnly) {
@ -214,7 +216,9 @@ export class RdDTMRDialog extends Dialog {
// Gestion du cout de montée en points de rêve // Gestion du cout de montée en points de rêve
let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse(); let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse();
this.cumulFatigue += this.fatigueParCase; if (ReglesOptionelles.isUsing("appliquer-fatigue")){
this.cumulFatigue += this.fatigueParCase;
}
await this.actor.reveActuelIncDec(reveCout); await this.actor.reveActuelIncDec(reveCout);
// Le reste... // Le reste...
@ -245,9 +249,11 @@ export class RdDTMRDialog extends Dialog {
let refoulement = document.getElementById("tmr-refoulement-value"); let refoulement = document.getElementById("tmr-refoulement-value");
refoulement.innerHTML = actorData.data.reve.refoulement.value; refoulement.innerHTML = actorData.data.reve.refoulement.value;
let fatigueItem = document.getElementById("tmr-fatigue-table"); if (ReglesOptionelles.isUsing("appliquer-fatigue")){
//console.log("Refresh : ", actorData.data.sante.fatigue.value); let fatigueItem = document.getElementById("tmr-fatigue-table");
fatigueItem.innerHTML = "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(actorData.data.sante.fatigue.value, actorData.data.sante.endurance.max).html() + "</table>"; //console.log("Refresh : ", actorData.data.sante.fatigue.value);
fatigueItem.innerHTML = "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(actorData.data.sante.fatigue.value, actorData.data.sante.endurance.max).html() + "</table>";
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -333,7 +339,7 @@ export class RdDTMRDialog extends Dialog {
return true; return true;
} }
const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.cumulFatigue; const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.cumulFatigue;
if (resteAvantInconscience <= 0) { if (ReglesOptionelles.isUsing("appliquer-fatigue") && resteAvantInconscience <= 0) {
this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !"); this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !");
this.quitterLesTMRInconscient(); this.quitterLesTMRInconscient();
return true; return true;
@ -408,7 +414,9 @@ export class RdDTMRDialog extends Dialog {
else if (rencData.rolled.isEchec && rencData.rencontre.isPersistant) { else if (rencData.rolled.isEchec && rencData.rencontre.isPersistant) {
setTimeout(() => { setTimeout(() => {
rencData.nbRounds++; rencData.nbRounds++;
this.cumulFatigue += this.fatigueParCase; if (ReglesOptionelles.isUsing("appliquer-fatigue")){
this.cumulFatigue += this.fatigueParCase;
}
this._tentativeMaitrise(rencData); this._tentativeMaitrise(rencData);
this._deleteTmrMessages(rencData.actor, rencData.nbRounds); this._deleteTmrMessages(rencData.actor, rencData.nbRounds);
}, 2000); }, 2000);
@ -916,7 +924,9 @@ export class RdDTMRDialog extends Dialog {
await this.actor.updateCoordTMR(tmr.coord); await this.actor.updateCoordTMR(tmr.coord);
this._updateDemiReve(); this._updateDemiReve();
this.cumulFatigue += this.fatigueParCase; if (ReglesOptionelles.isUsing("appliquer-fatigue")){
this.cumulFatigue += this.fatigueParCase;
}
this.updateValuesDisplay(); this.updateValuesDisplay();
game.socket.emit("system.foundryvtt-reve-de-dragon", { game.socket.emit("system.foundryvtt-reve-de-dragon", {
msg: "msg_tmr_move", data: { msg: "msg_tmr_move", data: {

View File

@ -6,6 +6,7 @@ import { Misc } from "./misc.js";
import { Grammar } from "./grammar.js"; import { Grammar } from "./grammar.js";
import { TMRUtility } from "./tmr-utility.js"; import { TMRUtility } from "./tmr-utility.js";
import { DialogItemAchat } from "./dialog-item-achat.js"; import { DialogItemAchat } from "./dialog-item-achat.js";
import { ReglesOptionelles } from "./regles-optionelles.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
// This table starts at 0 -> niveau -10 // This table starts at 0 -> niveau -10
@ -388,6 +389,14 @@ export class RdDUtility {
} }
return -7; return -7;
} }
static calculFatigueHtml(fatigue, endurance) {
return ReglesOptionelles.isUsing("appliquer-fatigue") ? {
malus: RdDUtility.calculMalusFatigue(fatigue, endurance),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "</table>"
} : { malus:0, html:''};
}
/* -------------------------------------------- */ /* -------------------------------------------- */
// Build the nice (?) html table used to manage fatigue. // Build the nice (?) html table used to manage fatigue.
// max should be the endurance max value // max should be the endurance max value
@ -475,18 +484,21 @@ export class RdDUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static currentFatigueMalus(value, max) { static currentFatigueMalus(value, max) {
max = Math.max(1, Math.min(max, 60)); if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
value = Math.min(max * 2, Math.max(0, value)); max = Math.max(1, Math.min(max, 60));
value = Math.min(max * 2, Math.max(0, value));
let fatigueTab = fatigueMatrix[max];
let fatigueRem = value; let fatigueTab = fatigueMatrix[max];
for (let idx = 0; idx < fatigueTab.length; idx++) { let fatigueRem = value;
fatigueRem -= fatigueTab[idx]; for (let idx = 0; idx < fatigueTab.length; idx++) {
if (fatigueRem <= 0) { fatigueRem -= fatigueTab[idx];
return fatigueMalus[idx]; if (fatigueRem <= 0) {
return fatigueMalus[idx];
}
} }
return -7; // This is the max !
} }
return -7; // This is the max ! return 0;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -1,13 +1,15 @@
import { Misc } from "./misc.js";
const listeReglesOptionelles = [ const listeReglesOptionelles = [
{ name: 'recul', group: 'combat', descr: "Appliquer le recul en cas de particulière en force ou de charge" }, { name: 'recul', group: 'Règles de combat', descr: "Appliquer le recul en cas de particulière en force ou de charge" },
{ name: 'resistanceArmeParade', group: 'combat', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" }, { name: 'resistanceArmeParade', group: 'Règles de combat', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" },
{ name: 'deteriorationArmure', group: 'combat', descr: "Tenir compte de la détérioration des armures" }, { name: 'deteriorationArmure', group: 'Règles de combat', descr: "Tenir compte de la détérioration des armures" },
{ name: 'defenseurDesarme', group: '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: '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: 'combat', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" }, { 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: '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: '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: 'generale', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true }, { 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: 'generale', descr: "Afficher le prix de l'équipement des joueurs", 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 },
]; ];
export class ReglesOptionelles extends FormApplication { export class ReglesOptionelles extends FormApplication {
@ -39,25 +41,27 @@ export class ReglesOptionelles extends FormApplication {
static get defaultOptions() { static get defaultOptions() {
const options = super.defaultOptions; const options = super.defaultOptions;
mergeObject(options, { mergeObject(options, {
id: "combat-settings", id: "optional-settings",
template: "systems/foundryvtt-reve-de-dragon/templates/regles-optionelles.html", template: "systems/foundryvtt-reve-de-dragon/templates/regles-optionelles.html",
height: 600, height: 600,
width: 350, width: 350,
minimizable: false, minimizable: false,
closeOnSubmit: true, closeOnSubmit: true,
title: "Options de combat" title: "Règles optionnelles"
}); });
return options; return options;
} }
getData() { getData() {
let formData = super.getData(); let formData = super.getData();
formData.regles = listeReglesOptionelles.map(it => { const regles = listeReglesOptionelles.map(it => {
let r = duplicate(it); it = duplicate(it);
r.id = ReglesOptionelles._getIdRegle(r.name); it.id = ReglesOptionelles._getIdRegle(it.name);
r.active = ReglesOptionelles.isUsing(r.name); it.active = ReglesOptionelles.isUsing(it.name);
return r; return it;
}) });
formData.regles = regles;
formData.groups = Misc.classify(regles, it => it.group);
return formData; return formData;
} }

View File

@ -23,7 +23,6 @@
{"_id":"JcTX8qMS0z8bmdVt","name":"Idée fixe : Boulimie. Manger au moins un point de sust. par heure","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Prend effet imm&eacute;diatement et dure jusqu'&agrave; la <strong>fin de l'heure du Ch&acirc;teau Dormant </strong>du <strong>lendemain.<br /></strong>Si pass&eacute; ce d&eacute;lai, l'occasion de la manifester ne s'est pas pr&eacute;sent&eacute;e, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","refoulement":1},"flags":{},"img":"boulimie.png","effects":[]} {"_id":"JcTX8qMS0z8bmdVt","name":"Idée fixe : Boulimie. Manger au moins un point de sust. par heure","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Prend effet imm&eacute;diatement et dure jusqu'&agrave; la <strong>fin de l'heure du Ch&acirc;teau Dormant </strong>du <strong>lendemain.<br /></strong>Si pass&eacute; ce d&eacute;lai, l'occasion de la manifester ne s'est pas pr&eacute;sent&eacute;e, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","refoulement":1},"flags":{},"img":"boulimie.png","effects":[]}
{"_id":"LlELEB0FhymLx6VM","name":"Désir lancinant : Passer une nuit sur une échelle","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l'exercice en cas de particuli&egrave;re et d'ajustement final n&eacute;gatif.<br />Les points d'exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>","refoulement":1},"flags":{},"img":"nuit_echelle.png","effects":[]} {"_id":"LlELEB0FhymLx6VM","name":"Désir lancinant : Passer une nuit sur une échelle","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l'exercice en cas de particuli&egrave;re et d'ajustement final n&eacute;gatif.<br />Les points d'exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>","refoulement":1},"flags":{},"img":"nuit_echelle.png","effects":[]}
{"_id":"Ltgqj86rYQr8D8LW","name":"Désir lancinant","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Tirer [[/r 1d20]] sur la table des @Compendium[foundryvtt-reve-de-dragon.tables-diverses.sVWhyr4wPnieuPP8]{D&eacute;sirs lancinants}. Les d&eacute;sirs lancinants durent jusqu&rsquo;&agrave; ce qu&rsquo;ils soient satisfaits ou refoul&eacute;s. Tant que satisfaction n&rsquo;est pas obtenue, aucun point d&rsquo;exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l&rsquo;exercice en cas de particuli&egrave;re et d&rsquo;ajustement final n&eacute;gatif. Les points d&rsquo;exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>\n<p>&nbsp;</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]} {"_id":"Ltgqj86rYQr8D8LW","name":"Désir lancinant","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Tirer [[/r 1d20]] sur la table des @Compendium[foundryvtt-reve-de-dragon.tables-diverses.sVWhyr4wPnieuPP8]{D&eacute;sirs lancinants}. Les d&eacute;sirs lancinants durent jusqu&rsquo;&agrave; ce qu&rsquo;ils soient satisfaits ou refoul&eacute;s. Tant que satisfaction n&rsquo;est pas obtenue, aucun point d&rsquo;exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l&rsquo;exercice en cas de particuli&egrave;re et d&rsquo;ajustement final n&eacute;gatif. Les points d&rsquo;exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>\n<p>&nbsp;</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]}
{"_id":"NF4E7jTty1QGjaNj","name":"Pélerinage","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Avant de pouvoir à nouveau faire usage du haut-rêve, y compris déclencher volontairement un sort mis en réserve, le haut-rêvant doit se rendre dans une certaine case des TMR déterminée aléatoirement. Un Passeur peut ly téléporter, mais un Messager ne peut sy rendre à sa place. Dès que la case est atteinte, le pèlerinage est accompli.</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp"}
{"_id":"NpTDqICR7ZuToQrg","name":"Idée fixe : Refuser de monter dans les TMR","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Prend effet imm&eacute;diatement et dure jusqu'&agrave; la <strong>fin de l'heure du Ch&acirc;teau Dormant </strong>du <strong>lendemain.<br /></strong>Si pass&eacute; ce d&eacute;lai, l'occasion de la manifester ne s'est pas pr&eacute;sent&eacute;e, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","refoulement":1},"flags":{},"img":"refuser_tmr.png","effects":[]} {"_id":"NpTDqICR7ZuToQrg","name":"Idée fixe : Refuser de monter dans les TMR","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Prend effet imm&eacute;diatement et dure jusqu'&agrave; la <strong>fin de l'heure du Ch&acirc;teau Dormant </strong>du <strong>lendemain.<br /></strong>Si pass&eacute; ce d&eacute;lai, l'occasion de la manifester ne s'est pas pr&eacute;sent&eacute;e, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","refoulement":1},"flags":{},"img":"refuser_tmr.png","effects":[]}
{"_id":"NzJJNK0YMAbobu0p","name":"Désir lancinant : Masochisme. Perdre 3 points dendurance minimum en 1 round","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l'exercice en cas de particuli&egrave;re et d'ajustement final n&eacute;gatif.<br />Les points d'exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>","refoulement":1},"flags":{},"img":"masochisme.png","effects":[]} {"_id":"NzJJNK0YMAbobu0p","name":"Désir lancinant : Masochisme. Perdre 3 points dendurance minimum en 1 round","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"queue","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'exp&eacute;rience ne peut plus &ecirc;tre gagn&eacute; par l'exercice en cas de particuli&egrave;re et d'ajustement final n&eacute;gatif.<br />Les points d'exp&eacute;rience dus au stress ne sont pas affect&eacute;s.</p>","refoulement":1},"flags":{},"img":"masochisme.png","effects":[]}
{"_id":"OSV2b7bVWv2SCfUY","name":"Urgence draconique","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Le haut-rêvant est pris du besoin irrésistible de déclencher immédiatement son plus proche sort en réserve. À équidistance, prendre dans le sens des aiguilles dune montre en commençant par le haut. En cas de rencontre dans les TMR, se dérober équivaut à refouler la queue de Dragon. Si aucun sort nest en réserve, ou si il y a impossibilité de pratiquer la magie à cause dune autre queue ou dun souffle, tirer à la place une idée fixe.</p>","refoulement":2},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]} {"_id":"OSV2b7bVWv2SCfUY","name":"Urgence draconique","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Le haut-rêvant est pris du besoin irrésistible de déclencher immédiatement son plus proche sort en réserve. À équidistance, prendre dans le sens des aiguilles dune montre en commençant par le haut. En cas de rencontre dans les TMR, se dérober équivaut à refouler la queue de Dragon. Si aucun sort nest en réserve, ou si il y a impossibilité de pratiquer la magie à cause dune autre queue ou dun souffle, tirer à la place une idée fixe.</p>","refoulement":2},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]}

File diff suppressed because one or more lines are too long

View File

@ -28,7 +28,7 @@
</label> </label>
</li> </li>
<li> <li>
<label class="ctn-fatigue tooltip"> <label class="appliquerFatigue ctn-fatigue tooltip">
<span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span> <span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span>
Fatigue Fatigue
<a id="fatigue-moins">-</a> <a id="fatigue-moins">-</a>
@ -66,7 +66,7 @@
{{/if}} {{/if}}
</div> </div>
<div class="flexrow"> <div class="flexrow">
<span class="tooltip tooltip-dotted">Malus de fatigue : {{calc.fatigue.malus}} <span class="appliquerFatigue tooltip tooltip-dotted">Malus de fatigue : {{calc.fatigue.malus}}
<span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span> <span class="tooltiptext ttt-fatigue">{{{calc.fatigue.html}}}</span>
</span> </span>
<span>{{calc.resumeBlessures}}</span> <span>{{calc.resumeBlessures}}</span>

View File

@ -8,7 +8,7 @@
<div> <div>
Après {{tache.data.periodicite}} vous avez obtenu {{rolled.ptTache}} point{{~#if (gt rolled.ptTache 1)}}s{{/if}} de tâche, Après {{tache.data.periodicite}} vous avez obtenu {{rolled.ptTache}} point{{~#if (gt rolled.ptTache 1)}}s{{/if}} de tâche,
votre avancement est de <span class="rdd-roll-{{#if (gt tache.data.points_de_tache_courant 0)}}norm{{else}}etotal{{/if}}">{{tache.data.points_de_tache_courant}} sur {{tache.data.points_de_tache}}</span> point{{~#if (gt tache.data.points_de_tache_courant 1)}}s{{/if}} de tâche. votre avancement est de <span class="rdd-roll-{{#if (gt tache.data.points_de_tache_courant 0)}}norm{{else}}etotal{{/if}}">{{tache.data.points_de_tache_courant}} sur {{tache.data.points_de_tache}}</span> point{{~#if (gt tache.data.points_de_tache_courant 1)}}s{{/if}} de tâche.
{{#if tache.data.fatigue}}<br><span>Vous vous êtes fatigué de {{tache.data.fatigue}} case{{~#if (gt tache.data.fatigue 1)}}s{{/if}}.</span>{{/if}} {{#if (and tache.data.fatigue appliquerFatigue)}}<br><span>Vous vous êtes fatigué de {{tache.data.fatigue}} case{{~#if (gt tache.data.fatigue 1)}}s{{/if}}.</span>{{/if}}
{{#if rolled.isETotal}}<br><span>Votre échec total augmente de 1 la difficulté de la tâche!</span>{{/if~}} {{#if rolled.isETotal}}<br><span>Votre échec total augmente de 1 la difficulté de la tâche!</span>{{/if~}}
{{> "systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html"}} {{> "systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html"}}
</div> </div>

View File

@ -33,7 +33,7 @@
<div class="flex-group-center"> <div class="flex-group-center">
<label>Refoulement : </label><span id="tmr-refoulement-value">0</span> <label>Refoulement : </label><span id="tmr-refoulement-value">0</span>
</div> </div>
<div class="flex-group-center flex-actions-bar"> <div class="flex-group-center flex-actions-bar appliquerFatigue">
Fatigue Fatigue
<span id="tmr-fatigue-table">{{{fatigue.html}}}</span> <span id="tmr-fatigue-table">{{{fatigue.html}}}</span>
</div> </div>

View File

@ -1,21 +1,13 @@
<form autocomplete="off" onsubmit="event.preventDefault();"> <form autocomplete="off" onsubmit="event.preventDefault();">
<h3>Règles de combat</h3> {{#each groups as |group key|}}
<h3>{{key}}</h3>
<ul> <ul>
{{#each regles as |regle key|}} {{#each group as |regle r|}}
{{#if (eq regle.group 'combat')}}
<li> <li>
<input class="select-option" type="checkbox" name="{{regle.id}}" {{#if regle.active}}checked{{/if}}/> <input class="select-option" type="checkbox" name="{{regle.id}}" {{#if regle.active}}checked{{/if}}/>
<label>{{regle.descr}}</label> <label>{{regle.descr}}</label>
</li> </li>
{{/if}} {{/each}}
{{/each}} </ul>
<h3>Autres règles</h3>
{{#each regles as |regle key|}}
{{#if (eq regle.group 'generale')}}
<li>
<input class="select-option" type="checkbox" name="{{regle.id}}" {{#if regle.active}}checked{{/if}}/>
<label>{{regle.descr}}</label>
</li>
{{/if}}
{{/each}} {{/each}}
</form> </form>