Alcool triste #74
Remise de jet_moral=false quand l'éthylisme disparait En cas de deux échecs successifs au jet de moral d'éthylisme, le personnage a l'alcool triste, et perd un point de moral p162: Le nombre de doses revient à 0 en cas de nouveau degré d'éthylisme. fix: Aucyn ethylisme = 1 ne modifie pas les jets Affichage du nombre de dose sans effet
This commit is contained in:
parent
a53e53bcbb
commit
d4968eaddb
@ -437,6 +437,10 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
this.actor.updateCompteurValue( fieldName, parseInt(event.target.value) );
|
this.actor.updateCompteurValue( fieldName, parseInt(event.target.value) );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
html.find('#ethylisme').change((event) => {
|
||||||
|
this.actor.setEthylisme(parseInt(event.target.value) );
|
||||||
|
} );
|
||||||
|
|
||||||
// Dialog d'archetype
|
// Dialog d'archetype
|
||||||
html.find("#affiche-archetype").click((event) => {
|
html.find("#affiche-archetype").click((event) => {
|
||||||
this.afficheResumeArchetype()
|
this.afficheResumeArchetype()
|
||||||
|
109
module/actor.js
109
module/actor.js
@ -323,8 +323,8 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
await this.update( {"data.blessures": blessures } );
|
await this.update( {"data.blessures": blessures } );
|
||||||
}
|
}
|
||||||
await this.update({ "data.compteurs.ethylisme.value": 1 });
|
await this.setEthylisme(1);
|
||||||
await this.update({ "data.compteurs.ethylisme.nb_doses": 0 });
|
|
||||||
await this.santeIncDec("vie", this.data.data.sante.vie.max - this.data.data.sante.vie.value);
|
await this.santeIncDec("vie", this.data.data.sante.vie.max - this.data.data.sante.vie.value);
|
||||||
await this.santeIncDec("endurance", this.data.data.sante.endurance.max - this.data.data.sante.endurance.value);
|
await this.santeIncDec("endurance", this.data.data.sante.endurance.max - this.data.data.sante.endurance.value);
|
||||||
if (this.data.data.sante.fatigue){
|
if (this.data.data.sante.fatigue){
|
||||||
@ -354,15 +354,16 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
async _recupererEthylisme(message) {
|
async _recupererEthylisme(message) {
|
||||||
let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
|
let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
|
||||||
|
ethylisme.nb_doses = 0;
|
||||||
|
ethylisme.jet_moral = false;
|
||||||
if (ethylisme.value < 1)
|
if (ethylisme.value < 1)
|
||||||
{
|
{
|
||||||
ethylisme.value = Math.min(ethylisme.value + 1, 1);
|
ethylisme.value = Math.min(ethylisme.value + 1, 1);
|
||||||
ethylisme.nb_doses = 0;
|
|
||||||
await this.update({ "data.compteurs.ethylisme": ethylisme });
|
|
||||||
if (ethylisme.value <= 0) {
|
if (ethylisme.value <= 0) {
|
||||||
message.content += `<br>Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)})`;
|
message.content += `<br>Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)})`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
await this.update({ "data.compteurs.ethylisme": ethylisme });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1025,29 +1026,38 @@ export class RdDActor extends Actor {
|
|||||||
async jetDeMoral(situation) {
|
async jetDeMoral(situation) {
|
||||||
let jetMoral = new Roll("1d20").roll();
|
let jetMoral = new Roll("1d20").roll();
|
||||||
RdDDice.show(jetMoral);
|
RdDDice.show(jetMoral);
|
||||||
let compteurs = duplicate(this.data.data.compteurs);
|
let moralActuel = Misc.toInt(this.data.data.compteurs.moral.value);
|
||||||
compteurs.moral.value = Misc.toInt(compteurs.moral.value);
|
const difficulte = 10 + moralActuel;
|
||||||
const difficulte = 10 + compteurs.moral.value;
|
|
||||||
const succes = jetMoral.total <= difficulte;
|
const succes = jetMoral.total <= difficulte;
|
||||||
let ajustementMoral = this._calculAjustementMoral(succes, compteurs.moral.value, situation);
|
|
||||||
if (ajustementMoral != 0) {
|
let ajustementMoral = this._calculAjustementMoral(succes, moralActuel, situation);
|
||||||
compteurs.moral.value += ajustementMoral;
|
|
||||||
if (compteurs.moral.value>3) {
|
await this.moralIncDec(ajustementMoral);
|
||||||
// exaltation
|
|
||||||
compteurs.moral.value --;
|
|
||||||
compteurs.exaltation.value = Misc.toInt(compteurs.exaltation.value) + 1;
|
|
||||||
}
|
|
||||||
if (compteurs.moral.value<-3) {
|
|
||||||
// dissolution
|
|
||||||
compteurs.moral.value ++;
|
|
||||||
compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1;
|
|
||||||
}
|
|
||||||
await this.update( { 'data.compteurs': compteurs} );
|
|
||||||
}
|
|
||||||
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: `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"}`
|
||||||
});
|
});
|
||||||
|
return ajustementMoral;
|
||||||
|
}
|
||||||
|
|
||||||
|
async moralIncDec(ajustementMoral) {
|
||||||
|
let compteurs = duplicate(this.data.data.compteurs);
|
||||||
|
compteurs.moral.value = Misc.toInt(compteurs.moral.value);;
|
||||||
|
|
||||||
|
if (ajustementMoral != 0) {
|
||||||
|
compteurs.moral.value += ajustementMoral;
|
||||||
|
if (compteurs.moral.value > 3) {
|
||||||
|
// exaltation
|
||||||
|
compteurs.moral.value--;
|
||||||
|
compteurs.exaltation.value = Misc.toInt(compteurs.exaltation.value) + 1;
|
||||||
|
}
|
||||||
|
if (compteurs.moral.value < -3) {
|
||||||
|
// dissolution
|
||||||
|
compteurs.moral.value++;
|
||||||
|
compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1;
|
||||||
|
}
|
||||||
|
await this.update({ 'data.compteurs': compteurs });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1062,13 +1072,22 @@ export class RdDActor extends Actor {
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
async setEthylisme(degre) {
|
||||||
|
let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
|
||||||
|
ethylisme.value = degre;
|
||||||
|
ethylisme.nb_doses = 0;
|
||||||
|
if (degre == 1) {
|
||||||
|
ethylisme.jet_moral = false;
|
||||||
|
}
|
||||||
|
await this.update({ "data.compteurs.ethylisme": ethylisme});
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async ethylismeTest() {
|
async ethylismeTest() {
|
||||||
let rollData = {
|
let rollData = {
|
||||||
vieValue: this.data.data.sante.vie.value,
|
vieValue: this.data.data.sante.vie.value,
|
||||||
etat: this.data.data.compteurs.etat.value - this.data.data.compteurs.etat.value, // Pour les jets d'Ethylisme, on ignore le degré d'éthylisme (p.162)
|
etat: this.data.data.compteurs.etat.value - Math.min(0, this.data.data.compteurs.ethylisme.value), // Pour les jets d'Ethylisme, on ignore le degré d'éthylisme (p.162)
|
||||||
niveauEthylisme: this.data.data.compteurs.ethylisme.value,
|
diffNbDoses: -Number(this.data.data.compteurs.ethylisme.nb_doses || 0),
|
||||||
nbDoses: this.data.data.compteurs.ethylisme.nb_doses || 0,
|
|
||||||
finalLevel: 0,
|
finalLevel: 0,
|
||||||
diffConditions: 0,
|
diffConditions: 0,
|
||||||
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
||||||
@ -1086,10 +1105,11 @@ export class RdDActor extends Actor {
|
|||||||
let rollEthylisme = await RdDResolutionTable.roll( rollData.vieValue, rollData.finalLevel);
|
let rollEthylisme = await RdDResolutionTable.roll( rollData.vieValue, rollData.finalLevel);
|
||||||
let msgText = RdDResolutionTable.explain(rollEthylisme) + "<br>";
|
let msgText = RdDResolutionTable.explain(rollEthylisme) + "<br>";
|
||||||
if (rollEthylisme.isSuccess ) {
|
if (rollEthylisme.isSuccess ) {
|
||||||
ethylisme.nb_doses = ethylisme.nb_doses + 1;
|
ethylisme.nb_doses ++;
|
||||||
msgText += `Vous avez réussi votre jet d'éthylisme, vous avez consommé ${ethylisme.nb_doses} doses sans effet.`;
|
msgText += `Vous avez réussi votre jet d'éthylisme, vous avez consommé ${ethylisme.nb_doses} doses sans effet.`;
|
||||||
} else {
|
} else {
|
||||||
ethylisme.value = Math.max(ethylisme.value -1, -7);
|
ethylisme.value = Math.max(ethylisme.value -1, -7);
|
||||||
|
ethylisme.nb_doses = 0;
|
||||||
|
|
||||||
let enduranceLost = new Roll("1d6").roll().total;
|
let enduranceLost = new Roll("1d6").roll().total;
|
||||||
await this.santeIncDec("endurance", -enduranceLost);
|
await this.santeIncDec("endurance", -enduranceLost);
|
||||||
@ -1101,25 +1121,42 @@ export class RdDActor extends Actor {
|
|||||||
msgText += "Qui a bu boira : " +(rollVolonte.isSuccess
|
msgText += "Qui a bu boira : " +(rollVolonte.isSuccess
|
||||||
? "vous êtes libre de continuer à boire ou pas."
|
? "vous êtes libre de continuer à boire ou pas."
|
||||||
: "vous avez une envie irrépréssible de reprendre un verre.");
|
: "vous avez une envie irrépréssible de reprendre un verre.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
ChatMessage.create({
|
||||||
await this.update( { 'data.compteurs.ethylisme': ethylisme} );
|
content: msgText,
|
||||||
const message = {
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||||
content: msgText,
|
});
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name).concat(ChatMessage.getWhisperRecipients("GM") )
|
|
||||||
};
|
|
||||||
ChatMessage.create(message);
|
|
||||||
|
|
||||||
if (rollEthylisme.isEchec && ethylisme.value == 0) {
|
if (rollEthylisme.isEchec) {
|
||||||
await this.jetDeMoral('heureuse'); // note: en, théorie, un deuxième jet de moral peut avoir lieu le même jour si lme premier est manqué, qui fait perdre du moral si raté...
|
await this._jetDeMoralEthylique(ethylisme);
|
||||||
|
}
|
||||||
|
await this.update( { 'data.compteurs.ethylisme': ethylisme} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async _jetDeMoralEthylique(ethylisme) {
|
||||||
|
if (ethylisme.value >= -1 && !ethylisme.jet_moral) {
|
||||||
|
let adjust = await this.jetDeMoral('heureuse');
|
||||||
|
if (adjust > 0 || ethylisme.value == -1) {
|
||||||
|
ethylisme.jet_moral = true;
|
||||||
}
|
}
|
||||||
|
if (ethylisme.value == -1 && adjust <= 0) {
|
||||||
|
// alcool triste
|
||||||
|
ChatMessage.create({
|
||||||
|
content: "Décidément, vous avez l'alcool triste, vous perdez finalement un point de moral!",
|
||||||
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||||
|
});
|
||||||
|
this.moralIncDec(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async stressTest() {
|
async stressTest() {
|
||||||
const message = {
|
const message = {
|
||||||
content: "",
|
content: "",
|
||||||
whisper: ChatMessage.getWhisperRecipients(game.user.name).concat(ChatMessage.getWhisperRecipients("GM") )
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||||
};
|
};
|
||||||
await this.transformerStress(message);
|
await this.transformerStress(message);
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ export class RdDRollDialogEthylisme extends Dialog {
|
|||||||
constructor(html, rollData, actor) {
|
constructor(html, rollData, actor) {
|
||||||
|
|
||||||
let myButtons = {
|
let myButtons = {
|
||||||
rollButton: { label: "Lancer", callback: html => this.actor.performEthylisme(this.rollData) }
|
rollButton: { label: "Test d'éthylisme", callback: html => this.actor.performEthylisme(this.rollData) }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Common conf
|
// Common conf
|
||||||
@ -33,13 +33,13 @@ export class RdDRollDialogEthylisme extends Dialog {
|
|||||||
var rollData = this.rollData;
|
var rollData = this.rollData;
|
||||||
|
|
||||||
function updateRollResult(rollData) {
|
function updateRollResult(rollData) {
|
||||||
let rollLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + Number(rollData.niveauEthylisme) - Number(rollData.nbDoses);
|
|
||||||
rollData.finalLevel = rollLevel;
|
rollData.finalLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + rollData.diffNbDoses;
|
||||||
|
|
||||||
// Mise à jour valeurs
|
// Mise à jour valeurs
|
||||||
$("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel));
|
$("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel));
|
||||||
$(".table-resolution").remove();
|
$(".table-resolution").remove();
|
||||||
$("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollLevel));
|
$("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollData.finalLevel));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup everything onload
|
// Setup everything onload
|
||||||
|
@ -501,7 +501,8 @@
|
|||||||
"value": 1,
|
"value": 1,
|
||||||
"label": "Ethylisme",
|
"label": "Ethylisme",
|
||||||
"isInput": true,
|
"isInput": true,
|
||||||
"nb_doses": 0
|
"nb_doses": 0,
|
||||||
|
"jet_moral": "false"
|
||||||
},
|
},
|
||||||
"stress": {
|
"stress": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<form class="dialog-roll-sort">
|
<form class="dialog-roll-sort">
|
||||||
<h2 class="compdialog" id="ethylisme-dialog"></h2>
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="categorie">Vie : {{vieValue}}</label>
|
<label for="categorie">Vie : {{vieValue}}</label>
|
||||||
<label for="categorie">Etat Général : {{etat}}</label>
|
<label for="categorie">Etat général : {{etat}}</label>
|
||||||
|
<label for="categorie">Déjà bu : {{diffNbDoses}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group" id="div-sort-difficulte">
|
<div class="form-group" id="div-sort-difficulte">
|
||||||
@ -13,12 +13,12 @@
|
|||||||
{{#each ajustementsConditions as |key|}}
|
{{#each ajustementsConditions as |key|}}
|
||||||
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Ajustement final : </label><label id="roll-param">10 / 0</label> <label name="addon-message" id="addon-message"></label>
|
<label>Ajustement final : <label id="roll-param">10 / 0</label> <label name="addon-message" id="addon-message"></label></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="resolutionTable">
|
<div id="resolutionTable">
|
||||||
|
Loading…
Reference in New Issue
Block a user