Gestion des signes draconiques #455
@ -1500,12 +1500,14 @@ export class RdDActor extends Actor {
|
|||||||
if (name == "endurance" && !this.isEntiteCauchemar()) {
|
if (name == "endurance" && !this.isEntiteCauchemar()) {
|
||||||
if (result.newValue == 0 && inc < 0 && !options.isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
if (result.newValue == 0 && inc < 0 && !options.isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
||||||
sante.vie.value--;
|
sante.vie.value--;
|
||||||
|
result.perteVie = true;
|
||||||
}
|
}
|
||||||
result.newValue = Math.max(0, result.newValue);
|
result.newValue = Math.max(0, result.newValue);
|
||||||
if (inc > 0) { // le max d'endurance s'applique seulement à la récupération
|
if (inc > 0) { // le max d'endurance s'applique seulement à la récupération
|
||||||
result.newValue = Math.min(result.newValue, this._computeEnduranceMax())
|
result.newValue = Math.min(result.newValue, this._computeEnduranceMax())
|
||||||
}
|
}
|
||||||
const perte = compteur.value - result.newValue;
|
const perte = compteur.value - result.newValue;
|
||||||
|
result.perte = perte;
|
||||||
if (perte > 1 && !options.ethylisme) {
|
if (perte > 1 && !options.ethylisme) {
|
||||||
// Peut-être sonné si 2 points d'endurance perdus d'un coup
|
// Peut-être sonné si 2 points d'endurance perdus d'un coup
|
||||||
const testIsSonne = await this.testSiSonne(sante, result.newValue);
|
const testIsSonne = await this.testSiSonne(sante, result.newValue);
|
||||||
@ -1577,7 +1579,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async jetDeMoral(situation) {
|
async jetDeMoral(situation, messageReussi = undefined, messageManque = undefined) {
|
||||||
let jetMoral = new Roll("1d20").roll();
|
let jetMoral = new Roll("1d20").roll();
|
||||||
RdDDice.show(jetMoral);
|
RdDDice.show(jetMoral);
|
||||||
let moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value);
|
let moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value);
|
||||||
@ -1585,12 +1587,14 @@ export class RdDActor extends Actor {
|
|||||||
const succes = jetMoral.total <= difficulte;
|
const succes = jetMoral.total <= difficulte;
|
||||||
|
|
||||||
let ajustementMoral = this._calculAjustementMoral(succes, moralActuel, situation);
|
let ajustementMoral = this._calculAjustementMoral(succes, moralActuel, situation);
|
||||||
|
let defaultMessage = `Vous ${ajustementMoral > 0 ? "gagnez du moral" : ajustementMoral < 0 ? "perdez du moral" : "gardez votre moral"}.`;
|
||||||
await this.moralIncDec(ajustementMoral);
|
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}`;
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: `Jet de moral ${succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.total}/${difficulte}), vous ${ajustementMoral > 0 ? "gagnez du moral" : ajustementMoral < 0 ? "perdez du moral" : "gardez votre moral"}`
|
content: message
|
||||||
});
|
});
|
||||||
|
await this.moralIncDec(ajustementMoral);
|
||||||
return ajustementMoral;
|
return ajustementMoral;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1640,7 +1644,7 @@ export class RdDActor extends Actor {
|
|||||||
async jetEthylisme(forceAlcool = 0) {
|
async jetEthylisme(forceAlcool = 0) {
|
||||||
const actorData = Misc.data(this);
|
const actorData = Misc.data(this);
|
||||||
let rollData = {
|
let rollData = {
|
||||||
vieValue: actorData.data.sante.vie.value,
|
vie: actorData.data.sante.vie.max,
|
||||||
forceAlcool: forceAlcool,
|
forceAlcool: forceAlcool,
|
||||||
etat: this.getEtatGeneral({ ethylisme: true }),
|
etat: this.getEtatGeneral({ ethylisme: true }),
|
||||||
diffNbDoses: -Number(actorData.data.compteurs.ethylisme.nb_doses || 0),
|
diffNbDoses: -Number(actorData.data.compteurs.ethylisme.nb_doses || 0),
|
||||||
@ -1658,54 +1662,68 @@ export class RdDActor extends Actor {
|
|||||||
let ethylisme = duplicate(actorData.data.compteurs.ethylisme);
|
let ethylisme = duplicate(actorData.data.compteurs.ethylisme);
|
||||||
|
|
||||||
// Jet d'ethylisme
|
// Jet d'ethylisme
|
||||||
let rollEthylisme = await RdDResolutionTable.roll(rollData.vieValue, rollData.finalLevel);
|
let rollEthylisme = await RdDResolutionTable.roll(rollData.vie, rollData.finalLevel);
|
||||||
let rollDataView = {
|
let jetVieView = {
|
||||||
|
ethylismeEtape: 'Vie',
|
||||||
|
vie: rollData.vie,
|
||||||
forceAlcool: rollData.forceAlcool,
|
forceAlcool: rollData.forceAlcool,
|
||||||
rollEthylismeIsSuccess: rollEthylisme.isSuccess,
|
finalLevel: rollData.finalLevel,
|
||||||
rollEthylismeText: RdDResolutionTable.explain(rollEthylisme),
|
jetVieSuccess: rollEthylisme.isSuccess,
|
||||||
|
jetVieText: RdDResolutionTable.explain(rollEthylisme),
|
||||||
};
|
};
|
||||||
if (rollEthylisme.isSuccess) {
|
if (rollEthylisme.isSuccess) {
|
||||||
ethylisme.nb_doses++;
|
ethylisme.nb_doses++;
|
||||||
rollDataView.doses = ethylisme.nb_doses;
|
jetVieView.doses = ethylisme.nb_doses;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ethylisme.value = Math.max(ethylisme.value - 1, -7);
|
ethylisme.value = Math.max(ethylisme.value - 1, -7);
|
||||||
ethylisme.nb_doses = 0;
|
ethylisme.nb_doses = 0;
|
||||||
rollDataView.doses = ethylisme.nb_doses;
|
jetVieView.doses = ethylisme.nb_doses;
|
||||||
rollDataView.ajustementEthylique = ethylisme.value;
|
jetVieView.ajustementEthylique = ethylisme.value;
|
||||||
rollDataView.nomEthylisme = RdDUtility.getNomEthylisme(ethylisme.value);
|
jetVieView.nomEthylisme = RdDUtility.getNomEthylisme(ethylisme.value);
|
||||||
|
|
||||||
let enduranceLost = new Roll("1d6").roll().total;
|
|
||||||
rollDataView.enduranceLost = enduranceLost;
|
|
||||||
await this.santeIncDec("endurance", -enduranceLost, { ethylisme: true });
|
|
||||||
// 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);
|
|
||||||
rollDataView.rollVolonteIsSuccess = rollVolonte.isSuccess;
|
|
||||||
rollDataView.rollVolonteText = RdDResolutionTable.explain(rollVolonte);
|
|
||||||
}
|
}
|
||||||
RdDResolutionTable.displayRollData(rollDataView, this, 'chat-resultat-ethylisme.html');
|
RdDResolutionTable.displayRollData(jetVieView, this, 'chat-resultat-ethylisme.html');
|
||||||
|
|
||||||
if (rollEthylisme.isEchec) {
|
if (rollEthylisme.isEchec) {
|
||||||
await this._jetDeMoralEthylique(ethylisme);
|
let enduranceLostRoll = new Roll("1d6").roll();
|
||||||
}
|
// enduranceLostRoll.showDice = true;
|
||||||
await this.update({ 'data.compteurs.ethylisme': ethylisme });
|
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) {
|
||||||
async _jetDeMoralEthylique(ethylisme) {
|
let messageReussi = "L'alcool vous met en joie. Vous gagnez un point de moral";
|
||||||
if (ethylisme.value >= -1 && !ethylisme.jet_moral) {
|
let messageManque = "";
|
||||||
let adjust = await this.jetDeMoral('heureuse');
|
if (ethylisme.value == -1) {
|
||||||
if (adjust > 0 || ethylisme.value == -1) {
|
messageManque = "Vous avez l'alcool triste. Vous perdez un point de moral.";
|
||||||
ethylisme.jet_moral = true;
|
}
|
||||||
}
|
let adjust = await this.jetDeMoral('heureuse', messageReussi, messageManque);
|
||||||
if (ethylisme.value == -1 && adjust <= 0) {
|
if (adjust == 1) {
|
||||||
// alcool triste
|
ethylisme.jet_moral = true;
|
||||||
ChatMessage.create({
|
} else if (ethylisme.value == -1) {
|
||||||
content: "Décidément, vous avez l'alcool triste, vous perdez finalement un point de moral !",
|
ethylisme.jet_moral = true;
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
await this.moralIncDec(-1);
|
||||||
});
|
}
|
||||||
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});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -55,7 +55,7 @@ export class RdDRollDialogEthylisme extends Dialog {
|
|||||||
this.rollData.finalLevel = Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses;
|
this.rollData.finalLevel = Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses;
|
||||||
|
|
||||||
// Mise à jour valeurs
|
// Mise à jour valeurs
|
||||||
$("#roll-param").text(this.rollData.vieValue + " / " + Misc.toSignedString(this.rollData.finalLevel));
|
$("#roll-param").text(this.rollData.vie + " / " + Misc.toSignedString(this.rollData.finalLevel));
|
||||||
$(".table-resolution").remove();
|
$(".table-resolution").remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,6 +214,7 @@ export class RdDUtility {
|
|||||||
Handlebars.registerHelper('buildConteneur', (objet) => { return RdDUtility.buildConteneur(objet); });
|
Handlebars.registerHelper('buildConteneur', (objet) => { return RdDUtility.buildConteneur(objet); });
|
||||||
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
||||||
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
||||||
|
Handlebars.registerHelper('equals', (a, b) => a == b);
|
||||||
|
|
||||||
return loadTemplates(templatePaths);
|
return loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,39 @@
|
|||||||
|
{{#if (equals ethylismeEtape 'Vie')}}
|
||||||
<h4>
|
<h4>
|
||||||
{{alias}} bois un verre d'alcool de force {{forceAlcool}}
|
{{alias}} bois un verre d'alcool de force {{forceAlcool}}
|
||||||
</h4>
|
</h4>
|
||||||
<hr>
|
<hr/>
|
||||||
<div>
|
<div>
|
||||||
<span>
|
<span>
|
||||||
{{{rollEthylismeText}}}
|
{{{jetVieText}}}
|
||||||
<br/>
|
<br/>
|
||||||
{{#if rollEthylismeIsSuccess}}
|
{{#if jetVieSuccess}}
|
||||||
Vous avez réussi votre jet d'éthylisme, vous avez consommé {{doses}} doses sans effet.
|
Vous avez réussi votre jet d'éthylisme, vous avez consommé {{doses}} doses sans effet.
|
||||||
{{else}}
|
{{else}}
|
||||||
Vous avez échoué à votre jet d'éthylisme, vous êtes maintenant {{nomEthylisme}} ({{ajustementEthylique}}).
|
Vous avez échoué à votre jet d'éthylisme, vous êtes maintenant {{nomEthylisme}} ({{ajustementEthylique}}).
|
||||||
<br/>
|
|
||||||
Vous perdez {{enduranceLost}} points d'endurance.
|
|
||||||
<br/>
|
|
||||||
Qui a bu boira :
|
|
||||||
{{{rollVolonteText}}}
|
|
||||||
<br/>
|
|
||||||
{{#if rollVolonteIsSuccess}}
|
|
||||||
Vous êtes libre de continuer à boire ou pas.
|
|
||||||
{{else}}
|
|
||||||
Vous avez une envie irrépréssible de reprendre un verre
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (equals ethylismeEtape 'Endurance')}}
|
||||||
|
<div>
|
||||||
|
<span>
|
||||||
|
Vous perdez {{enduranceLost}} points d'endurance.
|
||||||
|
{{#if perteVie}}<br/>Vous tombez inconscient et perdez un point de vie{{/if}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (equals ethylismeEtape 'Volonte')}}
|
||||||
|
<div>
|
||||||
|
<span>
|
||||||
|
Qui a bu boira :
|
||||||
|
{{{jetVolonteText}}}
|
||||||
|
<br/>
|
||||||
|
{{#if jetVolonteSuccess}}
|
||||||
|
Vous êtes libre de continuer à boire ou pas.
|
||||||
|
{{else}}
|
||||||
|
Vous avez une envie irrépressible de reprendre un verre.
|
||||||
|
{{/if}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
@ -2,7 +2,7 @@
|
|||||||
<h2>Boire</h2>
|
<h2>Boire</h2>
|
||||||
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/objets/chope_gres.webp" alt="Chope d'alcool"/>
|
<img class="chat-icon" src="systems/foundryvtt-reve-de-dragon/icons/objets/chope_gres.webp" alt="Chope d'alcool"/>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<label>Vie</label><label class="flexrow"> {{vieValue}}</label>
|
<label>Vie</label><label class="flexrow"> {{vie}}</label>
|
||||||
<label>Etat général</label><label class="flexrow">{{etat}}</label>
|
<label>Etat général</label><label class="flexrow">{{etat}}</label>
|
||||||
<label>Déjà bu</label><label class="flexrow">{{diffNbDoses}}</label>
|
<label>Déjà bu</label><label class="flexrow">{{diffNbDoses}}</label>
|
||||||
<label>Force du breuvage</label>
|
<label>Force du breuvage</label>
|
||||||
|
Loading…
Reference in New Issue
Block a user