Récupération de fatigue

This commit is contained in:
2020-11-17 13:08:52 +01:00
parent 59be07b3e9
commit a5ead0c77a
3 changed files with 126 additions and 74 deletions

View File

@ -329,38 +329,76 @@ export class RdDActor extends Actor {
}
async dormir(heures=1) {
let message = { title : "Récupération", content :"Vous dormez " + heures + " heure" + (heures > 1 ? "s": "") };
this.recupereEndurance(message);
for (let i=0; i<heures; i++) {
console.log("recuperationReve", this.data.data);
/**
* TODO: récupérer les segment de fatigue
*/
this.recuperationReve();
await this.recupererFatigueUneHeure(message);
this.recuperationReve(message);
}
ChatMessage.create( message );
}
recupereEndurance(message) {
const avant = this.data.data.sante.endurance.value;
this.santeIncDec("endurance", this.data.data.sante.endurance.max - avant);
const recupere = this.data.data.sante.endurance.value - avant;
if (recupere>0) {
message.content += "<br>Vous récuperez " + recupere + " points d'endurance";
}
}
async recuperationReve() {
const seuil = this.data.data.reve.seuil.value;
const reve = this.getReveActuel();
console.log("recuperationReve", this.data.data);
let message = { title : "Récupération" }
if (reve > seuil) {
message.content = "Vous avez déjà récupéré suffisament (seuil " + seuil + ", rêve actuel "+reve+")";
}
else {
let deRecuperation = await RdDDice.deDraconique();
console.log("recuperationReve", deRecuperation);
if (deRecuperation>=7)
{
// Rêve de Dragon !
message.content = "Vous faites un <strong>Rêve de Dragon</strong> de " + deRecuperation + " Points de rêve";
message.content += await this.combattreReveDeDragon(deRecuperation);
}
else{
message.content = "Vous récupérez " + deRecuperation + " Points de rêve";
await this.updatePointsDeReve(deRecuperation);
async recupererFatigueUneHeure(message) {
let fatigue = duplicate(this.data.data.sante.fatigue)
if (fatigue.value == 0) {
message.content += "<br>Vous êtes déjà reposé";
return;
}
const segments = RdDUtility.getSegmentsFatigue(this.data.data.sante.endurance.max);
let cumul = 0;
console.log("recupererFatigue", segments);
let i;
for (i=0; i <11; i++) {
cumul += segments[i];
let diff = cumul - fatigue.value ;
if (diff >= 0)
{
const limit2Segments = Math.floor(segments[i] / 2);
if (diff > limit2Segments && i > 0) {
cumul -= segments[i-1]; // le segment est à moins de la moitié, il est récupéré
}
cumul -= segments[i];
break;
}
ChatMessage.create( message );
}
fatigue.value = cumul;
await this.update( {"data.sante.fatigue": fatigue } );
if (fatigue.value == 0)
{
message.content += "<br>Vous êtes bien reposé";
}
}
recuperationReve(message) {
const seuil = this.data.data.reve.seuil.value;
const reve = this.getReveActuel();
if (reve >= seuil) {
message.content += "<br>Vous avez suffisament rêvé (seuil " + seuil + ", rêve actuel "+reve+")";
}
else {
let deRecuperation = RdDDice.deDraconique();
console.log("recuperationReve", deRecuperation);
if (deRecuperation>=7)
{
// Rêve de Dragon !
message.content += "<br>Vous faites un <strong>Rêve de Dragon</strong> de " + deRecuperation + " Points de rêve";
message.content += this.combattreReveDeDragon(deRecuperation);
}
else{
message.content += "<br>Vous récupérez " + deRecuperation + " Points de rêve";
this.updatePointsDeReve(deRecuperation);
}
}
}
combattreReveDeDragon(force){
@ -370,6 +408,7 @@ export class RdDActor extends Actor {
let difficulte = niveau - etat - force;
let reveActuel = this.getReveActuel();
let rolled = RdDResolutionTable.roll(reveActuel, difficulte);
// TODO: xp particulière
consome.log("combattreReveDeDragon", rolled );
return this.appliquerReveDeDragon(rolled, force);
}