forked from public/foundryvtt-reve-de-dragon
Dialog chateau-dormant
Pour permettre de pré-remplir les infos de chateau dormant
This commit is contained in:
176
module/actor.js
176
module/actor.js
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user