Dialog chateau-dormant

Pour permettre de pré-remplir les infos de chateau dormant
This commit is contained in:
2023-02-07 18:06:45 +01:00
parent 07d0d92f57
commit c70b6c9d5f
17 changed files with 467 additions and 167 deletions

View File

@ -32,7 +32,7 @@ import { RdDConfirm } from "./rdd-confirm.js";
import { DialogValidationEncaissement } from "./dialog-validation-encaissement.js";
import { RdDRencontre } from "./item/rencontre.js";
import { Targets } from "./targets.js";
import { DialogRepos } from "./dialog-repos.js";
import { DialogRepos } from "./sommeil/dialog-repos.js";
import { RdDBaseActor } from "./actor/base-actor.js";
import { RdDTimestamp } from "./rdd-timestamp.js";
import { RdDItemTache } from "./item-tache.js";
@ -208,6 +208,7 @@ export class RdDActor extends RdDBaseActor {
}
return etatGeneral
}
/* -------------------------------------------- */
getActivePoisons() {
return duplicate(this.items.filter(item => item.type == 'poison' && item.system.active))
@ -359,6 +360,33 @@ export class RdDActor extends RdDBaseActor {
dialog.render(true);
}
async prepareChateauDormant(finChateauDormant, consignes) {
if (consignes.ignorer) {
return;
}
if (consignes.stress.valeur > 0) {
await this.distribuerStress('stress', consignes.stress.valeur, consignes.stress.motif);
}
if (!consignes.sommeil?.insomnie) {
await this.update({
"system.sommeil": {
nouveaujour: true,
date: finChateauDormant,
moral: consignes.sommeil?.moral ?? 'neutre',
heures: consignes.sommeil?.heures ?? 4
}
})
}
}
async onTimeChanging(oldTimestamp, newTimestamp) {
await super.onTimeChanging(oldTimestamp, newTimestamp);
const insomnie = EffetsDraconiques.isSujetInsomnie(this);
if (!this.system.sommeil || this.system.sommeil.insomnie || insomnie) {
await this.update({ 'system.sommeil.insomnie': insomnie });
}
}
async repos() {
await DialogRepos.create(this);
}
@ -370,7 +398,7 @@ export class RdDActor extends RdDBaseActor {
content: `${nGrisReve} jours de gris rêve sont passés. `
};
for (let i = 0; i < nGrisReve; i++) {
await this.dormir(6, { grisReve: true });
await this.dormir(4, { grisReve: true });
await this._recuperationSante(message);
const moralActuel = Misc.toInt(this.system.compteurs.moral.value);
@ -381,6 +409,14 @@ export class RdDActor extends RdDBaseActor {
await this.transformerStress();
this.bonusRecuperationPotion = 0; // Reset potion
}
await this.update({
"system.sommeil": {
nouveaujour: false,
moral: "neutre",
heures: 0
}
})
ChatMessage.create(message);
this.sheet.render(true);
}
@ -424,25 +460,35 @@ export class RdDActor extends RdDBaseActor {
/* -------------------------------------------- */
async dormirChateauDormant() {
let message = {
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
content: ""
};
if (!ReglesOptionelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil?.nouveaujour) {
const message = {
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
content: ""
};
const blessures = duplicate(this.system.blessures)
await this._recuperationSante(message)
await this._jetDeMoralChateauDormant(message);
await this._recupereChance();
await this.transformerStress();
await this.retourSeuilDeReve(message);
this.bonusRecuperationPotion = 0; // Reset potion
await this.retourSust(message);
await this.verifierPotionsEnchantees();
if (message.content != "") {
message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
ChatMessage.create(message);
await this._recuperationSante(message)
await this._jetDeMoralChateauDormant(message);
await this._recupereChance();
if (!this.system.sommeil?.insomnie) {
await this.transformerStress();
}
await this.retourSeuilDeReve(message);
this.bonusRecuperationPotion = 0; // Reset potion
await this.retourSust(message);
await this.verifierPotionsEnchantees();
if (message.content != "") {
message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
ChatMessage.create(message);
}
await this.update({
"system.sommeil": {
nouveaujour: false,
moral: "neutre",
heures: 0
}
});
this.sheet.render(true);
}
this.sheet.render(true);
}
/* -------------------------------------------- */
@ -456,9 +502,11 @@ export class RdDActor extends RdDBaseActor {
}
async _jetDeMoralChateauDormant(message) {
const jetMoral = await this._jetDeMoral('neutre');
message.content += ' -- le moral ' + this._messageAjustementMoral(jetMoral.ajustement);
const etatMoral = this.system.sommeil?.moral ?? 'neutre';
const jetMoral = await this._jetDeMoral(etatMoral);
message.content += ` -- le jet de moral est ${etatMoral}, le moral ` + this._messageAjustementMoral(jetMoral.ajustement);
}
_messageAjustementMoral(ajustement) {
switch (Math.sign(ajustement)) {
case 1:
@ -591,59 +639,70 @@ export class RdDActor extends RdDBaseActor {
}
/* -------------------------------------------- */
async dormir(heures, options = { grisReve: false }) {
let message = {
async dormir(sommeilHeures, options = { grisReve: false, chateauDormant: false }) {
const sommeil = !this.system.sommeil?.insomnie || options.grisReve;
const message = {
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
content: ""
};
await this.recupereEndurance(message);
let sep = ""
let recuperationReve = "";
let i = 0;
for (; i < heures; i++) {
let heuresDormies = 0;
for (; heuresDormies < sommeilHeures; heuresDormies++) {
await this._recupererEthylisme(message);
await this.recupererFatigue(message);
if (!options.grisReve) {
let r = await this.recuperationReve(message);
if (r >= 0) {
recuperationReve += sep + r;
sep = "+";
}
if (sommeil) {
await this.recupererFatigue(message);
if (!options.grisReve) {
if (sommeil) {
let r = await this.recuperationReve(message);
if (r >= 0) {
recuperationReve += sep + r;
sep = "+";
}
if (r >= 0 && EffetsDraconiques.isDonDoubleReve(this)) {
r = await this.recuperationReve(message);
if (r >= 0) {
recuperationReve += sep + r;
if (r >= 0 && EffetsDraconiques.isDonDoubleReve(this)) {
r = await this.recuperationReve(message);
if (r >= 0) {
recuperationReve += sep + r;
}
}
if (r < 0) {
heuresDormies++;// rêve de dragon pendant l'heure en cours
break;
}
}
}
if (r < 0) {
i++;// rêve de dragon pendant l'heure en cours
break;
}
}
}
if (!options.grisReve) {
message.content = `${this.name}: Vous dormez ${i == 0 ? 'une' : i} heure${i == 1 ? '' : 's'}. `
const repos = this.system.sommeil?.insomnie ? "vous reposez" : "dormez"
message.content = `${this.name}: Vous ${repos} ${heuresDormies <= 1 ? 'une heure' : (heuresDormies + ' heures')}. `
+ (recuperationReve == "" ? "" : `Vous récupérez ${recuperationReve} Points de rêve. `)
+ message.content;
ChatMessage.create(message);
}
this.sheet.render(true);
return i;
if (options.chateauDormant && heuresDormies == sommeilHeures) {
await this.dormirChateauDormant();
}
else {
this.sheet.render(true);
}
}
/* -------------------------------------------- */
async _recupererEthylisme(message) {
let ethylisme = duplicate(this.system.compteurs.ethylisme);
ethylisme.nb_doses = 0;
ethylisme.jet_moral = false;
if (ethylisme.value < 1) {
ethylisme.value = Math.min(ethylisme.value + 1, 1);
if (ethylisme.value <= 0) {
message.content += `Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)}). `;
}
let value = Math.min(Number.parseInt(this.system.compteurs.ethylisme.value) + 1, 1);
if (value <= 0) {
message.content += `Vous dégrisez un peu (${RdDUtility.getNomEthylisme(value)}). `;
}
await this.update({ "system.compteurs.ethylisme": ethylisme });
await this.update({
"system.compteurs.ethylisme": {
nb_doses: 0,
jet_moral: false,
value: value
}
});
}
/* -------------------------------------------- */
@ -651,7 +710,7 @@ export class RdDActor extends RdDBaseActor {
const manquant = this._computeEnduranceMax() - this.system.sante.endurance.value;
if (manquant > 0) {
await this.santeIncDec("endurance", manquant);
message.content += "Vous récuperez " + manquant + " points d'endurance. ";
message.content += `Vous récuperez ${manquant} points d'endurance. `;
}
}
@ -1012,12 +1071,12 @@ export class RdDActor extends RdDBaseActor {
}
/* -------------------------------------------- */
distribuerStress(compteur, stress, motif) {
async distribuerStress(compteur, stress, motif) {
if (game.user.isGM && this.hasPlayerOwner && this.isPersonnage()) {
switch (compteur) {
case 'stress': case 'experience':
await this.addCompteurValue(compteur, stress, motif);
const message = `${this.name} a reçu ${stress} points ${compteur == 'stress' ? "de stress" : "d'expérience"} (raison : ${motif})`;
this.addCompteurValue(compteur, stress, motif);
ui.notifications.info(message);
game.users.players.filter(player => player.active && player.character?.id == this.id)
.forEach(player => ChatUtility.notifyUser(player.id, 'info', message));
@ -3779,9 +3838,10 @@ export class RdDActor extends RdDBaseActor {
if (Misc.isUniqueConnectedGM()) {
let draconique = Draconique.all().find(it => it.match(item));
if (draconique) {
draconique.onActorCreateOwned(this, item)
await draconique.onActorCreateOwned(this, item)
this.notifyGestionTeteSouffleQueue(item, draconique.manualMessage());
}
await this.update({ 'system.sommeil.insomnie': EffetsDraconiques.isSujetInsomnie(this) });
}
}
@ -3790,7 +3850,7 @@ export class RdDActor extends RdDBaseActor {
if (Misc.isUniqueConnectedGM()) {
let draconique = Draconique.all().find(it => it.match(item));
if (draconique) {
draconique.onActorDeleteOwned(this, item)
await draconique.onActorDeleteOwned(this, item)
}
}
}
@ -3800,7 +3860,7 @@ export class RdDActor extends RdDBaseActor {
if (Misc.isUniqueConnectedGM()) {
let draconique = Draconique.all().find(it => it.isCase(item));
if (draconique) {
draconique.onActorDeleteCaseTmr(this, item)
await draconique.onActorDeleteCaseTmr(this, item)
}
}
}