forked from public/foundryvtt-reve-de-dragon
La consommation d'alcool
est bonne pour depuis l'équipement + bug du à changement de vieValue -> vie
This commit is contained in:
194
module/actor.js
194
module/actor.js
@ -27,8 +27,9 @@ import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
||||
import { Draconique } from "./tmr/draconique.js";
|
||||
import { RdDCarac } from "./rdd-carac.js";
|
||||
import { Monnaie } from "./item-monnaie.js";
|
||||
import { DialogConsommer } from "./dialog-consommer.js";
|
||||
import { DialogConsommer } from "./dialog-item-consommer.js";
|
||||
import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js";
|
||||
import { RollDataAjustements } from "./rolldata-ajustements.js";
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1592,21 +1593,33 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async jetDeMoral(situation, messageReussi = undefined, messageManque = undefined) {
|
||||
let jetMoral = await RdDDice.roll("1d20", { showDice: true });
|
||||
let moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value);
|
||||
const difficulte = 10 + moralActuel;
|
||||
const succes = jetMoral.total <= difficulte;
|
||||
let jetMoral = await this._jetMoral(situation)
|
||||
|
||||
let ajustementMoral = this._calculAjustementMoral(succes, moralActuel, situation);
|
||||
let defaultMessage = `Vous ${ajustementMoral > 0 ? "gagnez du moral" : ajustementMoral < 0 ? "perdez du moral" : "gardez votre moral"}.`;
|
||||
let finMessage = succes ? (messageReussi != undefined ? messageReussi : defaultMessage) : (messageManque != undefined ? messageManque : defaultMessage);
|
||||
let message = `Jet de moral ${succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.total}/${difficulte}). <br/>${finMessage}`;
|
||||
let defaultMessage = `Vous ${jetMoral.ajustement > 0 ? "gagnez du moral" : jetMoral.ajustement < 0 ? "perdez du moral" : "gardez votre moral"}.`;
|
||||
let finMessage = jetMoral.succes ? (messageReussi != undefined ? messageReussi : defaultMessage) : (messageManque != undefined ? messageManque : defaultMessage);
|
||||
let message = `Jet de moral ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}). <br/>${finMessage}`;
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
content: message
|
||||
});
|
||||
await this.moralIncDec(ajustementMoral);
|
||||
return ajustementMoral;
|
||||
return jetMoral.ajustement;
|
||||
}
|
||||
|
||||
async _jetMoral(situation) {
|
||||
const moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value);
|
||||
const jet = await RdDDice.rollTotal("1d20", { showDice: true });
|
||||
const difficulte = 10 + moralActuel;
|
||||
const succes = jet <= difficulte;
|
||||
const jetMoral = {
|
||||
actuel: moralActuel,
|
||||
jet: jet,
|
||||
situation: situation,
|
||||
difficulte: difficulte,
|
||||
succes: succes,
|
||||
ajustement: this._calculAjustementMoral(succes, moralActuel, situation)
|
||||
};
|
||||
await this.moralIncDec(jetMoral.ajustement);
|
||||
return jetMoral;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1652,11 +1665,11 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async jetEthylisme(forceAlcool = 0) {
|
||||
async jetEthylisme() {
|
||||
const actorData = Misc.data(this);
|
||||
let rollData = {
|
||||
vie: actorData.data.sante.vie.max,
|
||||
forceAlcool: forceAlcool,
|
||||
forceAlcool: 0,
|
||||
etat: this.getEtatGeneral({ ethylisme: true }),
|
||||
diffNbDoses: -Number(actorData.data.compteurs.ethylisme.nb_doses || 0),
|
||||
finalLevel: 0,
|
||||
@ -1664,77 +1677,7 @@ export class RdDActor extends Actor {
|
||||
ajustementsForce: CONFIG.RDD.difficultesLibres,
|
||||
}
|
||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-ethylisme.html', rollData);
|
||||
new RdDRollDialogEthylisme(html, rollData, this, r => this.performEthylisme(r)).render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async performEthylisme(rollData) {
|
||||
const actorData = Misc.data(this);
|
||||
let ethylisme = duplicate(actorData.data.compteurs.ethylisme);
|
||||
|
||||
// Jet d'ethylisme
|
||||
let rollEthylisme = await RdDResolutionTable.roll(rollData.vie, rollData.finalLevel);
|
||||
let jetVieView = {
|
||||
ethylismeEtape: 'Vie',
|
||||
vie: rollData.vie,
|
||||
forceAlcool: rollData.forceAlcool,
|
||||
finalLevel: rollData.finalLevel,
|
||||
jetVieSuccess: rollEthylisme.isSuccess,
|
||||
jetVieText: RdDResolutionTable.explain(rollEthylisme),
|
||||
};
|
||||
if (rollEthylisme.isSuccess) {
|
||||
ethylisme.nb_doses++;
|
||||
jetVieView.doses = ethylisme.nb_doses;
|
||||
|
||||
} else {
|
||||
ethylisme.value = Math.max(ethylisme.value - 1, -7);
|
||||
ethylisme.nb_doses = 0;
|
||||
jetVieView.doses = ethylisme.nb_doses;
|
||||
jetVieView.ajustementEthylique = ethylisme.value;
|
||||
jetVieView.nomEthylisme = RdDUtility.getNomEthylisme(ethylisme.value);
|
||||
}
|
||||
RdDResolutionTable.displayRollData(jetVieView, this, 'chat-resultat-ethylisme.html');
|
||||
|
||||
if (rollEthylisme.isEchec) {
|
||||
let enduranceLostRoll = await RdDDice.roll("1d6");
|
||||
// enduranceLostRoll.showDice = true;
|
||||
RdDDice.show(enduranceLostRoll);
|
||||
let enduranceLost = enduranceLostRoll.total;
|
||||
let perteEndurance = await this.santeIncDec("endurance", -enduranceLost, { ethylisme: true });
|
||||
let jetEnduranceView = {
|
||||
ethylismeEtape: 'Endurance',
|
||||
enduranceLost: perteEndurance.perte,
|
||||
perteVie: perteEndurance.perteVie,
|
||||
};
|
||||
RdDResolutionTable.displayRollData(jetEnduranceView, this, 'chat-resultat-ethylisme.html');
|
||||
|
||||
if (!ethylisme.jet_moral) {
|
||||
let messageReussi = "L'alcool vous met en joie. Vous gagnez un point de moral";
|
||||
let messageManque = "";
|
||||
if (ethylisme.value == -1) {
|
||||
messageManque = "Vous avez l'alcool triste. Vous perdez un point de moral.";
|
||||
}
|
||||
let adjust = await this.jetDeMoral('heureuse', messageReussi, messageManque);
|
||||
if (adjust == 1) {
|
||||
ethylisme.jet_moral = true;
|
||||
} else if (ethylisme.value == -1) {
|
||||
ethylisme.jet_moral = true;
|
||||
await this.moralIncDec(-1);
|
||||
}
|
||||
}
|
||||
|
||||
// Qui a bu boira (p 164)
|
||||
let rollVolonte = await RdDResolutionTable.roll(actorData.data.carac.volonte.value,
|
||||
Math.min(ethylisme.value, 0) + actorData.data.compteurs.moral.value);
|
||||
let jetVolonteView = {
|
||||
ethylismeEtape: 'Volonte',
|
||||
jetVolonteSuccess: rollVolonte.isSuccess,
|
||||
jetVolonteText: RdDResolutionTable.explain(rollVolonte),
|
||||
};
|
||||
RdDResolutionTable.displayRollData(jetVolonteView, this, 'chat-resultat-ethylisme.html');
|
||||
}
|
||||
|
||||
await this.update({ 'data.compteurs.ethylisme': ethylisme });
|
||||
new RdDRollDialogEthylisme(html, rollData, this, r => this.saouler(r.forceAlcool)).render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1806,33 +1749,84 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async boire(item, doses, options = { diminuerQuantite: true }) {
|
||||
if (!item.getActionPrincipale()) return;
|
||||
const tplData = Misc.templateData(item);
|
||||
const desaltere = tplData.desaltere;
|
||||
const itemData = Misc.data(item);
|
||||
const desaltere = itemData.data.desaltere;
|
||||
if (desaltere > 0) {
|
||||
await this.updateCompteurValue('eau', Misc.keepDecimals(Misc.templateData(this).compteurs.eau.value + desaltere * doses, 2));
|
||||
}
|
||||
if (item.isAlcool()) {
|
||||
for (let i = 0; i < doses; i++) {
|
||||
await this.saouler(tplData.force);
|
||||
await this.saouler(itemData.data.force, item);
|
||||
}
|
||||
}
|
||||
await item.diminuerQuantite(doses, options);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async saouler(forceAlcool) {
|
||||
const actorTplData = Misc.templateData(this);
|
||||
const etatGeneral = this.getEtatGeneral({ ethylisme: true });
|
||||
const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0);
|
||||
let rollData = {
|
||||
vieValue: actorTplData.sante.vie.value,
|
||||
forceAlcool: forceAlcool,
|
||||
etat: etatGeneral,
|
||||
diffNbDoses: nbDoses,
|
||||
finalLevel: nbDoses + forceAlcool + etatGeneral,
|
||||
diffConditions: 0,
|
||||
};
|
||||
await this.performEthylisme(rollData);
|
||||
async saouler(forceAlcool, alcool = undefined) {
|
||||
const actorData = Misc.data(this);
|
||||
let ethylisme = duplicate(actorData.data.compteurs.ethylisme);
|
||||
|
||||
const etat = this.getEtatGeneral({ ethylisme: true });
|
||||
const nbDoses = Number(actorData.data.compteurs.ethylisme.nb_doses || 0);
|
||||
const ethylismeData = {
|
||||
alias: actorData.name,
|
||||
actor: actorData,
|
||||
vie: actorData.data.sante.vie.max,
|
||||
alcool: Misc.data(alcool),
|
||||
jetVie: {
|
||||
forceAlcool: forceAlcool,
|
||||
nbDoses: nbDoses,
|
||||
selectedCarac: actorData.data.carac.constitution,
|
||||
carac: actorData.data.carac,
|
||||
caracValue: actorData.data.sante.vie.max,
|
||||
finalLevel: etat + forceAlcool - nbDoses,
|
||||
showDice: true
|
||||
},
|
||||
}
|
||||
|
||||
await RdDResolutionTable.rollData(ethylismeData.jetVie);
|
||||
RollDataAjustements.calcul(ethylismeData.jetVie, this);
|
||||
if (ethylismeData.jetVie.rolled.isSuccess) {
|
||||
ethylisme.nb_doses++;
|
||||
} else {
|
||||
ethylisme.value = Math.max(ethylisme.value - 1, -7);
|
||||
ethylisme.nb_doses = 0;
|
||||
|
||||
let perte = await RdDDice.rollTotal("1d6", {showDice:true});
|
||||
ethylismeData.perteEndurance = await this.santeIncDec("endurance", -perte, { ethylisme: true });
|
||||
|
||||
if (!ethylisme.jet_moral) {
|
||||
ethylismeData.jetMoral = await this._jetMoral('heureuse');
|
||||
if (ethylismeData.jetMoral.ajustement == 1) {
|
||||
ethylismeData.moralAlcool ='heureux';
|
||||
ethylisme.jet_moral = true;
|
||||
} else if (ethylisme.value == -1) {
|
||||
ethylismeData.jetMoral.ajustement = -1;
|
||||
ethylismeData.moralAlcool ='triste';
|
||||
ethylisme.jet_moral = true;
|
||||
await this.moralIncDec(-1);
|
||||
}
|
||||
}
|
||||
if (ethylisme.value<0) {
|
||||
// Qui a bu boira (p 164)
|
||||
ethylismeData.jetVolonte = {
|
||||
selectedCarac: actorData.data.carac.volonte,
|
||||
caracValue: actorData.data.carac.volonte.value,
|
||||
ethylisme: ethylisme.value,
|
||||
finalLevel: ethylisme.value + actorData.data.compteurs.moral.value,
|
||||
showDice: true
|
||||
}
|
||||
await RdDResolutionTable.rollData(ethylismeData.jetVolonte);
|
||||
RollDataAjustements.calcul(ethylismeData.jetVolonte, this);
|
||||
}
|
||||
}
|
||||
ethylismeData.ajustementEthylique = ethylisme.value;
|
||||
ethylismeData.nomEthylisme = RdDUtility.getNomEthylisme(ethylisme.value);
|
||||
ethylismeData.doses = ethylisme.nb_doses;
|
||||
|
||||
await this.update({ 'data.compteurs.ethylisme': ethylisme });
|
||||
await RdDResolutionTable.displayRollData(ethylismeData, this, 'chat-resultat-ethylisme.html');
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -4,12 +4,12 @@ export class DialogConsommer extends Dialog {
|
||||
|
||||
static async create(actor, item, template = undefined, options = {}) {
|
||||
const consommerData = DialogConsommer.prepareData(actor, item, options);
|
||||
const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/consommer/dialog-${Misc.data(item).type}.html`, consommerData);
|
||||
const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.html`, consommerData);
|
||||
return new DialogConsommer(actor, item, consommerData, html, options)
|
||||
}
|
||||
|
||||
constructor(actor, item, consommerData, html, options = {}) {
|
||||
mergeObject(options, { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }, { overwrite: false })
|
||||
mergeObject(options, { classes: ["dialogconsommer"], width: 350, height: 450, 'z-index': 99999 }, { overwrite: false })
|
||||
|
||||
let conf = {
|
||||
title: consommerData.title,
|
@ -52,10 +52,12 @@ export class RdDCarac {
|
||||
return selectedCarac?.label?.toLowerCase()?.match(/r(e|ê)ve(( |-)actuel)?/);
|
||||
}
|
||||
|
||||
static isIgnoreEtatGeneral(selectedCarac, competence) {
|
||||
static isIgnoreEtatGeneral(rollData) {
|
||||
const selectedCarac = rollData.selectedCarac;
|
||||
return !selectedCarac ||
|
||||
rollData.ethylisme ||
|
||||
RdDCarac.isChance(selectedCarac) ||
|
||||
(RdDCarac.isReve(selectedCarac) && !competence);
|
||||
(RdDCarac.isReve(selectedCarac) && !rollData.competence);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||
import { Misc } from "./misc.js";
|
||||
|
||||
/**
|
||||
@ -52,10 +51,8 @@ export class RdDRollDialogEthylisme extends Dialog {
|
||||
}
|
||||
async updateRollResult() {
|
||||
|
||||
this.rollData.finalLevel = Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses;
|
||||
|
||||
// Mise à jour valeurs
|
||||
$("#roll-param").text(this.rollData.vie + " / " + Misc.toSignedString(this.rollData.finalLevel));
|
||||
$("#roll-param").text(this.rollData.vie + " / " + Misc.toSignedString(Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses));
|
||||
$(".table-resolution").remove();
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import { RdDItemSort } from "./item-sort.js";
|
||||
import { Misc } from "./misc.js";
|
||||
import { RdDBonus } from "./rdd-bonus.js";
|
||||
import { RdDCarac } from "./rdd-carac.js";
|
||||
import { RdDUtility } from "./rdd-utility.js";
|
||||
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||
|
||||
/**
|
||||
@ -50,9 +51,9 @@ export const referenceAjustements = {
|
||||
getValue: (rollData, actor) => RdDBonus.find(rollData.surpriseDefenseur).attaque,
|
||||
},
|
||||
etat: {
|
||||
isUsed: (rollData, actor) => !RdDCarac.isIgnoreEtatGeneral(rollData.selectedCarac, rollData.competence),
|
||||
isUsed: (rollData, actor) => !RdDCarac.isIgnoreEtatGeneral(rollData),
|
||||
getLabel: (rollData, actor) => 'Etat général',
|
||||
getValue: (rollData, actor) => actor.getEtatGeneral()
|
||||
getValue: (rollData, actor) => actor.getEtatGeneral({ ethylisme: rollData.forceAlcool != undefined })
|
||||
},
|
||||
malusArmure: {
|
||||
isVisible: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac),
|
||||
@ -120,6 +121,24 @@ export const referenceAjustements = {
|
||||
isUsed: (rollData, actor) => rollData.tmr && rollData.rencontre?.name,
|
||||
getLabel: (rollData, actor) => rollData.rencontre?.name,
|
||||
getValue: (rollData, actor) => - (rollData.rencontre?.force ?? 0)
|
||||
},
|
||||
ethylismeAlcool: {
|
||||
isVisible: (rollData, actor) => rollData.nbDoses != undefined,
|
||||
isUsed: (rollData, actor) => rollData.nbDoses != undefined,
|
||||
getLabel: (rollData, actor) => "Doses déjà bues: ",
|
||||
getValue: (rollData, actor) => - rollData.nbDoses,
|
||||
},
|
||||
ethylismeDoses: {
|
||||
isVisible: (rollData, actor) => rollData.nbDoses != undefined,
|
||||
isUsed: (rollData, actor) => rollData.nbDoses != undefined,
|
||||
getLabel: (rollData, actor) => "Force de l'alcool: ",
|
||||
getValue: (rollData, actor) => rollData.forceAlcool,
|
||||
},
|
||||
ethylisme:{
|
||||
isVisible: (rollData, actor) => rollData.ethylisme != undefined,
|
||||
isUsed: (rollData, actor) => rollData.ethylisme != undefined,
|
||||
getLabel: (rollData, actor) => "Ethylisme - " + RdDUtility.getNomEthylisme(rollData.ethylisme),
|
||||
getValue: (rollData, actor) => rollData.ethylisme,
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user