Merge branch 'master-demi-surprise' into 'master'
Demi-surprise: Réussite normale => échec #181 See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!190
This commit is contained in:
commit
2a8ab5e1ce
@ -126,6 +126,10 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
montures: this.actor.listeMontures(),
|
montures: this.actor.listeMontures(),
|
||||||
suivants: this.actor.listeSuivants()
|
suivants: this.actor.listeSuivants()
|
||||||
}
|
}
|
||||||
|
if (this.actor.getBestDraconic().data.niveau > -11 && !this.actor.isHautRevant()) {
|
||||||
|
ui.notifications.error(`${this.actor.name} a des compétences draconiques, mais pas le don de Haut-Rêve!
|
||||||
|
<br>Ajoutez-lui la tête "Don de Haut-Rêve" pour lui permettre d'utiliser ses compétences et d'accéder aux terres médianes du rêve`);
|
||||||
|
}
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,6 +157,10 @@ export class RdDActor extends Actor {
|
|||||||
return this.data.type == 'personnage';
|
return this.data.type == 'personnage';
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
isHautRevant() {
|
||||||
|
return Misc.templateData(this).attributs.hautrevant.value != ""
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
getFatigueActuelle() {
|
getFatigueActuelle() {
|
||||||
if (!this.isPersonnage()) {
|
if (!this.isPersonnage()) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -666,7 +666,7 @@ export class RdDCombat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static isEchecTotal(rollData) {
|
static isEchecTotal(rollData) {
|
||||||
if (!rollData.attackerRoll && rollData.ajustements.surprise.used) {
|
if (!rollData.attackerRoll && rollData.ajustements.surprise.used) {
|
||||||
return rollData.rolled.isEchec;
|
return rollData.rolled.isEchec && rollData.rolled.code != 'notSign';
|
||||||
}
|
}
|
||||||
return rollData.rolled.isETotal;
|
return rollData.rolled.isETotal;
|
||||||
}
|
}
|
||||||
@ -731,7 +731,6 @@ export class RdDCombat {
|
|||||||
surpriseDefenseur: this.defender.getSurprise(true),
|
surpriseDefenseur: this.defender.getSurprise(true),
|
||||||
essais: {}
|
essais: {}
|
||||||
};
|
};
|
||||||
rollData.diviseurSignificative = this._getDiviseurSignificative(rollData);
|
|
||||||
|
|
||||||
if (this.attacker.isCreature()) {
|
if (this.attacker.isCreature()) {
|
||||||
RdDItemCompetenceCreature.setRollDataCreature(rollData);
|
RdDItemCompetenceCreature.setRollDataCreature(rollData);
|
||||||
@ -974,7 +973,6 @@ export class RdDCombat {
|
|||||||
carac: this.defender.data.data.carac,
|
carac: this.defender.data.data.carac,
|
||||||
show: {}
|
show: {}
|
||||||
};
|
};
|
||||||
defenderRoll.diviseurSignificative = this._getDiviseurSignificative(defenderRoll);
|
|
||||||
|
|
||||||
if (this.defender.isCreature()) {
|
if (this.defender.isCreature()) {
|
||||||
RdDItemCompetenceCreature.setRollDataCreature(defenderRoll);
|
RdDItemCompetenceCreature.setRollDataCreature(defenderRoll);
|
||||||
@ -983,24 +981,6 @@ export class RdDCombat {
|
|||||||
return defenderRoll;
|
return defenderRoll;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
_getDiviseurSignificative(defenderRoll) {
|
|
||||||
let facteurSign = 1;
|
|
||||||
if (defenderRoll.surprise == 'demi') {
|
|
||||||
facteurSign *= 2;
|
|
||||||
}
|
|
||||||
if (defenderRoll.needParadeSignificative) {
|
|
||||||
facteurSign *= 2;
|
|
||||||
}
|
|
||||||
if (RdDBonus.isDefenseAttaqueFinesse(defenderRoll)) {
|
|
||||||
facteurSign *= 2;
|
|
||||||
}
|
|
||||||
if (!ReglesOptionelles.isUsing('tripleSignificative')) {
|
|
||||||
facteurSign = Math.min(facteurSign, 4);
|
|
||||||
}
|
|
||||||
return facteurSign;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_onParadeParticuliere(defenderRoll) {
|
_onParadeParticuliere(defenderRoll) {
|
||||||
console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll);
|
console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll);
|
||||||
@ -1073,7 +1053,6 @@ export class RdDCombat {
|
|||||||
carac: this.defender.data.data.carac,
|
carac: this.defender.data.data.carac,
|
||||||
show: {}
|
show: {}
|
||||||
};
|
};
|
||||||
rollData.diviseurSignificative = this._getDiviseurSignificative(rollData);
|
|
||||||
|
|
||||||
if (this.defender.isCreature()) {
|
if (this.defender.isCreature()) {
|
||||||
RdDItemCompetenceCreature.setRollDataCreature(rollData);
|
RdDItemCompetenceCreature.setRollDataCreature(rollData);
|
||||||
|
@ -51,10 +51,8 @@ const reussites = [
|
|||||||
{ code: "error", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: 0, ptQualite: 0, quality: "Jet de dés invalide", condition: (target, roll) => (roll <= 0 || roll > 100) }
|
{ code: "error", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: 0, ptQualite: 0, quality: "Jet de dés invalide", condition: (target, roll) => (roll <= 0 || roll > 100) }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const reussiteInsuffisante = { code: "notSign", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: false, isETotal: false, ptTache: 0, ptQualite: -2, quality: "Réussite insuffisante", condition: (target, roll) => false }
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const reussiteSignificative = reussites.find(r => r.code == "sign");
|
|
||||||
const reussiteNormale = reussites.find(r => r.code == "norm");
|
|
||||||
const echecNormal = reussites.find(r => r.code == "echec");
|
|
||||||
const caracMaximumResolution = 60;
|
const caracMaximumResolution = 60;
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDResolutionTable {
|
export class RdDResolutionTable {
|
||||||
@ -115,7 +113,7 @@ export class RdDResolutionTable {
|
|||||||
this._updateChancesFactor(chances, diviseur);
|
this._updateChancesFactor(chances, diviseur);
|
||||||
chances.showDice = showDice;
|
chances.showDice = showDice;
|
||||||
|
|
||||||
let rolled = await this.rollChances(chances);
|
let rolled = await this.rollChances(chances, diviseur);
|
||||||
rolled.caracValue = caracValue;
|
rolled.caracValue = caracValue;
|
||||||
rolled.finalLevel = finalLevel;
|
rolled.finalLevel = finalLevel;
|
||||||
rolled.bonus = bonus;
|
rolled.bonus = bonus;
|
||||||
@ -150,12 +148,12 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async rollChances(chances) {
|
static async rollChances(chances, diviseur) {
|
||||||
let myRoll = new Roll("1d100").roll();
|
let myRoll = new Roll("1d100").roll();
|
||||||
myRoll.showDice = chances.showDice;
|
myRoll.showDice = chances.showDice;
|
||||||
await RdDDice.show(myRoll);
|
await RdDDice.show(myRoll);
|
||||||
chances.roll = myRoll.total;
|
chances.roll = myRoll.total;
|
||||||
mergeObject(chances, this.computeReussite(chances, chances.roll), { overwrite: true });
|
mergeObject(chances, this.computeReussite(chances, chances.roll, diviseur), { overwrite: true });
|
||||||
return chances;
|
return chances;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,8 +214,12 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeReussite(chances, roll) {
|
static computeReussite(chances, roll, diviseur) {
|
||||||
return reussites.find(x => x.condition(chances, roll));
|
const reussite = reussites.find(x => x.condition(chances, roll));
|
||||||
|
if (diviseur > 1 && reussite.code == 'norm') {
|
||||||
|
return reussiteInsuffisante;
|
||||||
|
}
|
||||||
|
return reussite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -7,6 +7,7 @@ import { Misc } from "./misc.js";
|
|||||||
import { RdDBonus } from "./rdd-bonus.js";
|
import { RdDBonus } from "./rdd-bonus.js";
|
||||||
import { RdDCarac } from "./rdd-carac.js";
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the base Dialog entity to select roll parameters
|
* Extend the base Dialog entity to select roll parameters
|
||||||
@ -64,13 +65,32 @@ export class RdDRoll extends Dialog {
|
|||||||
canClose: true
|
canClose: true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
mergeObject(rollData, defaultRollData, { recursive: true, overwrite: false });
|
mergeObject(rollData, defaultRollData, { recursive: true, overwrite: false });
|
||||||
if (rollData.forceCarac) {
|
if (rollData.forceCarac) {
|
||||||
rollData.carac = rollData.forceCarac;
|
rollData.carac = rollData.forceCarac;
|
||||||
}
|
}
|
||||||
|
rollData.diviseurSignificative = RdDRoll.getDiviseurSignificative(rollData);
|
||||||
|
|
||||||
RollDataAjustements.calcul(rollData, actor);
|
RollDataAjustements.calcul(rollData, actor);
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static getDiviseurSignificative(rollData) {
|
||||||
|
let facteurSign = 1;
|
||||||
|
if (rollData.surprise == 'demi') {
|
||||||
|
facteurSign *= 2;
|
||||||
|
}
|
||||||
|
if (rollData.needParadeSignificative) {
|
||||||
|
facteurSign *= 2;
|
||||||
|
}
|
||||||
|
if (RdDBonus.isDefenseAttaqueFinesse(rollData)) {
|
||||||
|
facteurSign *= 2;
|
||||||
|
}
|
||||||
|
if (!ReglesOptionelles.isUsing('tripleSignificative')) {
|
||||||
|
facteurSign = Math.min(facteurSign, 4);
|
||||||
|
}
|
||||||
|
return facteurSign;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static _ensureCorrectActions(actions) {
|
static _ensureCorrectActions(actions) {
|
||||||
@ -122,7 +142,6 @@ export class RdDRoll extends Dialog {
|
|||||||
await RdDResolutionTable.rollData(this.rollData);
|
await RdDResolutionTable.rollData(this.rollData);
|
||||||
console.log("RdDRoll -=>", this.rollData, this.rollData.rolled);
|
console.log("RdDRoll -=>", this.rollData, this.rollData.rolled);
|
||||||
this.actor.setRollWindowsOpened(false);
|
this.actor.setRollWindowsOpened(false);
|
||||||
|
|
||||||
if (action.callbacks)
|
if (action.callbacks)
|
||||||
for (let callback of action.callbacks) {
|
for (let callback of action.callbacks) {
|
||||||
if (callback.condition == undefined || callback.condition(this.rollData)) {
|
if (callback.condition == undefined || callback.condition(this.rollData)) {
|
||||||
|
@ -406,7 +406,7 @@ table {border: 1px solid #7a7971;}
|
|||||||
border-radius: 6px; padding: 3px;
|
border-radius: 6px; padding: 3px;
|
||||||
background:linear-gradient(30deg, rgba(7, 76, 0, 0.3), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.1), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.3));
|
background:linear-gradient(30deg, rgba(7, 76, 0, 0.3), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.1), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.3));
|
||||||
}
|
}
|
||||||
.rdd-roll-echec{
|
.rdd-roll-notSign, .rdd-roll-echec{
|
||||||
border-radius: 6px; padding: 3px;
|
border-radius: 6px; padding: 3px;
|
||||||
background-image: linear-gradient(150deg, rgba(255, 0, 0, 0.3), rgba(255, 200, 128, 0.05),rgba(255, 200, 128, 0.1), rgba(255,10,0,0.3));
|
background-image: linear-gradient(150deg, rgba(255, 0, 0, 0.3), rgba(255, 200, 128, 0.05),rgba(255, 200, 128, 0.1), rgba(255,10,0,0.3));
|
||||||
}
|
}
|
||||||
|
@ -557,6 +557,8 @@
|
|||||||
<div>
|
<div>
|
||||||
{{#if data.attributs.hautrevant.value}}
|
{{#if data.attributs.hautrevant.value}}
|
||||||
<h3>Haut rêvant</h3>
|
<h3>Haut rêvant</h3>
|
||||||
|
{{else}}
|
||||||
|
<h3>Vous n'avez pas le don de haut-rêve!</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
{{#if data.attributs.hautrevant.value}}
|
{{#if data.attributs.hautrevant.value}}
|
||||||
|
Loading…
Reference in New Issue
Block a user