Foundry: Roll#evaluate sera async
This commit is contained in:
137
module/actor.js
137
module/actor.js
@ -651,8 +651,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
else {
|
||||
const roll = new Roll("1dr").evaluate();
|
||||
let deRecuperation = roll.total;
|
||||
let deRecuperation = await RdDDice.rollTotal("1dr");
|
||||
console.log("recuperationReve", deRecuperation);
|
||||
if (deRecuperation >= 7) {
|
||||
// Rêve de Dragon !
|
||||
@ -744,7 +743,7 @@ export class RdDActor extends Actor {
|
||||
// TODO: un dialogue pour demander le type de tête?
|
||||
rollData.tete = true;
|
||||
}
|
||||
rollData.poesie = Poetique.getExtrait();
|
||||
rollData.poesie = await Poetique.getExtrait();
|
||||
|
||||
ChatMessage.create({
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||
@ -1089,7 +1088,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeIsHautRevant() {
|
||||
if (this.isPersonnage()){
|
||||
if (this.isPersonnage()) {
|
||||
Misc.templateData(this).attributs.hautrevant.value = this.hasItemNamed('tete', 'don de haut-reve')
|
||||
? "Haut rêvant"
|
||||
: "";
|
||||
@ -1191,7 +1190,7 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async ajouterRefoulement(value = 1) {
|
||||
let refoulement = Misc.templateData(this).reve.refoulement.value + value;
|
||||
let total = new Roll("1d20").evaluate({ async: false }).total;
|
||||
let total = await RdDDice.rollTotal("1d20");
|
||||
if (total <= refoulement) {
|
||||
refoulement = 0;
|
||||
await this.ajouterSouffle({ chat: true });
|
||||
@ -1273,7 +1272,7 @@ export class RdDActor extends Actor {
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||
});
|
||||
const innaccessible = this.buildTMRInnaccessible();
|
||||
let tmr = TMRUtility.getTMRAleatoire(tmr => !innaccessible.includes(tmr.coord));
|
||||
let tmr = await TMRUtility.getTMRAleatoire(tmr => !innaccessible.includes(tmr.coord));
|
||||
this.updateCoordTMR(tmr.coord);
|
||||
this.cacheTMR();
|
||||
return tmr;
|
||||
@ -1402,25 +1401,6 @@ export class RdDActor extends Actor {
|
||||
return RdDCarac.calculSConst(Misc.templateData(this).carac.constitution.value);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async testSiSonne(sante, endurance) {
|
||||
const roll = new Roll("1d20").evaluate();
|
||||
roll.showDice = true;
|
||||
RdDDice.show(roll);
|
||||
let result = {
|
||||
roll: roll,
|
||||
sonne: roll.total > endurance || roll.total == 20 // 20 is always a failure
|
||||
}
|
||||
if (roll.total == 1) {
|
||||
await this.ajoutXpConstitution(1); // +1 XP !
|
||||
ChatMessage.create({ content: `${this.name} a obenu 1 sur son Jet d'Endurance et a gagné 1 point d'Expérience en Constitution. Ce point d'XP a été ajouté automatiquement).` });
|
||||
}
|
||||
if (result.sonne) {
|
||||
await this.setSonne();
|
||||
sante.sonne.value = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
async ajoutXpConstitution(xp) {
|
||||
await this.update({ "data.carac.constitution.xp": Misc.toInt(Misc.templateData(this).carac.constitution.xp) + xp });
|
||||
@ -1435,48 +1415,71 @@ export class RdDActor extends Actor {
|
||||
return this.countBlessures(Misc.templateData(this).blessures[name].liste);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async testSiSonne(sante, endurance) {
|
||||
const result = await this._jetEndurance(endurance);
|
||||
if (result.roll.total == 1) {
|
||||
ChatMessage.create({ content: await this._gainXpConstitutionJetEndurance() });
|
||||
}
|
||||
sante.sonne.value ||= result.sonne;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async jetEndurance() {
|
||||
let myRoll = new Roll("1d20").roll();
|
||||
myRoll.showDice = true;
|
||||
await RdDDice.show(myRoll);
|
||||
|
||||
const actorData = Misc.data(this);
|
||||
let msgText = "Jet d'Endurance : " + myRoll.total + " / " + actorData.data.sante.endurance.value + "<br>";
|
||||
if (myRoll.total == 1 || (myRoll.total != 20 && myRoll.total <= actorData.data.sante.endurance.value)) {
|
||||
msgText += `${this.name} a réussi son Jet d'Endurance !`;
|
||||
if (myRoll.total == 1) {
|
||||
await this.ajoutXpConstitution();
|
||||
msgText += `et gagne 1 Point d'Experience en Constitution`;
|
||||
}
|
||||
} else {
|
||||
await this.setSonne();
|
||||
msgText += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
|
||||
}
|
||||
const endurance = actorData.data.sante.endurance.value;
|
||||
|
||||
const result = await this._jetEndurance(actorData.data.sante.endurance.value)
|
||||
const message = {
|
||||
content: msgText,
|
||||
content: "Jet d'Endurance : " + result.roll.total + " / " + endurance + "<br>",
|
||||
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||
};
|
||||
if (result.sonne) {
|
||||
message.content += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
|
||||
}
|
||||
else if (result.roll.total == 1) {
|
||||
message.content += await this._gainXpConstitutionJetEndurance();
|
||||
}
|
||||
else {
|
||||
message.content += `${this.name} a réussi son Jet d'Endurance !`;
|
||||
}
|
||||
|
||||
ChatMessage.create(message);
|
||||
}
|
||||
|
||||
async _gainXpConstitutionJetEndurance() {
|
||||
await this.ajoutXpConstitution(1); // +1 XP !
|
||||
return `${this.name} a obtenu 1 sur son Jet d'Endurance et a gagné 1 point d'Expérience en Constitution. Ce point d'XP a été ajouté automatiquement.`;
|
||||
}
|
||||
|
||||
async _jetEndurance(endurance) {
|
||||
const roll = await RdDDice.roll("1d20", { showDice: true });
|
||||
let result = {
|
||||
roll: roll,
|
||||
sonne: roll.total > endurance || roll.total == 20 // 20 is always a failure
|
||||
}
|
||||
if (result.sonne) {
|
||||
await this.setSonne();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async jetVie() {
|
||||
let myRoll = new Roll("1d20").roll();
|
||||
myRoll.showDice = true;
|
||||
await RdDDice.show(myRoll);
|
||||
|
||||
let roll = await RdDDice.roll("1d20", { showDice: true });
|
||||
const actorData = Misc.data(this);
|
||||
let msgText = "Jet de Vie : " + myRoll.total + " / " + actorData.data.sante.vie.value + "<br>";
|
||||
if (myRoll.total <= actorData.data.sante.vie.value) {
|
||||
let msgText = "Jet de Vie : " + roll.total + " / " + actorData.data.sante.vie.value + "<br>";
|
||||
if (roll.total <= actorData.data.sante.vie.value) {
|
||||
msgText += "Jet réussi, pas de perte de point de vie (prochain jet dans 1 round pour 1 critique, SC minutes pour une grave)";
|
||||
if (myRoll.total == 1) {
|
||||
if (roll.total == 1) {
|
||||
msgText += "La durée entre 2 jets de vie est multipliée par 20 (20 rounds pour une critique, SCx20 minutes pour une grave)";
|
||||
}
|
||||
} else {
|
||||
msgText += "Jet échoué, vous perdez 1 point de vie";
|
||||
await this.santeIncDec("vie", -1);
|
||||
if (myRoll.total == 20) {
|
||||
if (roll.total == 20) {
|
||||
msgText += "Votre personnage est mort !!!!!";
|
||||
}
|
||||
}
|
||||
@ -1589,8 +1592,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async jetDeMoral(situation, messageReussi = undefined, messageManque = undefined) {
|
||||
let jetMoral = new Roll("1d20").roll();
|
||||
RdDDice.show(jetMoral);
|
||||
let jetMoral = await RdDDice.roll("1d20", { showDice: true });
|
||||
let moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value);
|
||||
const difficulte = 10 + moralActuel;
|
||||
const succes = jetMoral.total <= difficulte;
|
||||
@ -1694,7 +1696,7 @@ export class RdDActor extends Actor {
|
||||
RdDResolutionTable.displayRollData(jetVieView, this, 'chat-resultat-ethylisme.html');
|
||||
|
||||
if (rollEthylisme.isEchec) {
|
||||
let enduranceLostRoll = new Roll("1d6").roll();
|
||||
let enduranceLostRoll = await RdDDice.roll("1d6");
|
||||
// enduranceLostRoll.showDice = true;
|
||||
RdDDice.show(enduranceLostRoll);
|
||||
let enduranceLost = enduranceLostRoll.total;
|
||||
@ -2326,7 +2328,7 @@ export class RdDActor extends Actor {
|
||||
});
|
||||
dialog.render(true);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _competenceResult(rollData) {
|
||||
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html')
|
||||
@ -2973,14 +2975,14 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeArmure(attackerRoll) {
|
||||
async computeArmure(attackerRoll) {
|
||||
let dmg = (attackerRoll.dmg.dmgArme ?? 0) + (attackerRoll.dmg.dmgActor ?? 0);
|
||||
let armeData = attackerRoll.arme;
|
||||
let protection = 0;
|
||||
const armures = this.items.map(it => Misc.data(it))
|
||||
.filter(it => it.type == "armure" && it.data.equipe);
|
||||
for (const itemData of armures) {
|
||||
protection += new Roll(itemData.data.protection.toString()).roll().total;
|
||||
protection += await RdDDice.rollTotal(itemData.data.protection.toString());
|
||||
if (dmg > 0) {
|
||||
this._deteriorerArmure(itemData, dmg);
|
||||
dmg = 0;
|
||||
@ -3041,7 +3043,7 @@ export class RdDActor extends Actor {
|
||||
console.log("encaisserDommages", rollData)
|
||||
|
||||
let santeOrig = duplicate(Misc.templateData(this).sante);
|
||||
let encaissement = this.jetEncaissement(rollData);
|
||||
let encaissement = await this.jetEncaissement(rollData);
|
||||
|
||||
this.ajouterBlessure(encaissement); // Will upate the result table
|
||||
const perteVie = this.isEntiteCauchemar()
|
||||
@ -3080,29 +3082,34 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
jetEncaissement(rollData) {
|
||||
const roll = new Roll("2d10").roll();
|
||||
roll.showDice = true;
|
||||
RdDDice.show(roll, game.settings.get("core", "rollMode"));
|
||||
async jetEncaissement(rollData) {
|
||||
const roll = await RdDDice.roll("2d10", { showDice: true });
|
||||
|
||||
const armure = this.computeArmure(rollData);
|
||||
const armure = await this.computeArmure(rollData);
|
||||
const jetTotal = roll.total + rollData.dmg.total - armure;
|
||||
|
||||
let encaissement = RdDUtility.selectEncaissement(jetTotal, rollData.dmg.mortalite)
|
||||
let over20 = Math.max(jetTotal - 20, 0);
|
||||
encaissement.dmg = rollData.dmg;
|
||||
encaissement.dmg.loc = rollData.dmg.loc ?? RdDUtility.getLocalisation(this.data.type);
|
||||
encaissement.dmg.loc = rollData.dmg.loc ?? await RdDUtility.getLocalisation(this.data.type);
|
||||
encaissement.dmg.loc.label = encaissement.dmg.loc.label ?? 'Corps;'
|
||||
encaissement.roll = roll;
|
||||
encaissement.armure = armure;
|
||||
encaissement.total = jetTotal;
|
||||
encaissement.vie = RdDUtility._evaluatePerte(encaissement.vie, over20);
|
||||
encaissement.endurance = RdDUtility._evaluatePerte(encaissement.endurance, over20);
|
||||
encaissement.vie = await RdDActor._evaluatePerte(encaissement.vie, over20);
|
||||
encaissement.endurance = await RdDActor._evaluatePerte(encaissement.endurance, over20);
|
||||
encaissement.penetration = rollData.arme?.data.penetration ?? 0;
|
||||
|
||||
return encaissement;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async _evaluatePerte(formula, over20) {
|
||||
let perte = new Roll(formula, { over20: over20 });
|
||||
await perte.evaluate({ async: true });
|
||||
return perte.total;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
ajouterBlessure(encaissement) {
|
||||
const actorData = Misc.data(this);
|
||||
@ -3684,7 +3691,7 @@ export class RdDActor extends Actor {
|
||||
potionData.reussiteReve = true;
|
||||
potionData.aphasiePermanente = false;
|
||||
if (potionData.data.reposalchimique) {
|
||||
let chanceAphasie = new Roll("1d100").evaluate({ async: false }).total;
|
||||
let chanceAphasie = await RdDDice.rollTotal("1d100");
|
||||
if (chanceAphasie <= potionData.data.pr) {
|
||||
potionData.aphasiePermanente = true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user