Checkbox et regles d'appel au moral
This commit is contained in:
parent
0c7a0e413d
commit
771622564a
@ -1593,7 +1593,15 @@ export class RdDActor extends Actor {
|
|||||||
action: r => this._appliquerAjoutExperience(r, game.settings.get("core", "rollMode") != 'blindroll')
|
action: r => this._appliquerAjoutExperience(r, game.settings.get("core", "rollMode") != 'blindroll')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
createCallbackAppelAuMoral() {
|
||||||
|
return {
|
||||||
|
condition: r => r.use.appelAuMoral && game.settings.get("core", "rollMode") != 'selfroll',
|
||||||
|
action: r => { console.log("createCallbackAppelAuMoral"); this.displayAppelAuMoral ; console.log(r.rolled.isEchec); this._appliquerAppelMoral(r, game.settings.get("core", "rollMode") != 'blindroll') }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async checkCaracXP(caracName) {
|
async checkCaracXP(caracName) {
|
||||||
let carac = this.data.data.carac[caracName];
|
let carac = this.data.data.carac[caracName];
|
||||||
@ -1663,6 +1671,27 @@ export class RdDActor extends Actor {
|
|||||||
if (xpResult && xpResult.xpCarac > 0 && rollData.selectedCarac) {
|
if (xpResult && xpResult.xpCarac > 0 && rollData.selectedCarac) {
|
||||||
this.checkCaracXP(rollData.selectedCarac.name);
|
this.checkCaracXP(rollData.selectedCarac.name);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async _appliquerAppelMoral(rollData, display = true) {
|
||||||
|
console.log("_appliquerAppelMoral");
|
||||||
|
console.log("_appliquerAppelMoral");
|
||||||
|
console.log("_appliquerAppelMoral");
|
||||||
|
console.log("_appliquerAppelMoral");
|
||||||
|
console.log(rollData);
|
||||||
|
console.log(this.name);
|
||||||
|
console.log(this);
|
||||||
|
if (!this.isPersonnage()) return;
|
||||||
|
if (!rollData.rolled.isEchec) return;
|
||||||
|
const waitUpdate = this.moralIncDec(-1); /* L'appel au moral a échoué. Le personnage perd un point de moral */
|
||||||
|
console.log("_appliquerAppelMoral : moral diminuer");
|
||||||
|
rollData.moralDiminuer = true;
|
||||||
|
rollData.moralActualiser = 7;
|
||||||
|
await waitUpdate;
|
||||||
|
rollData.moralActualiser = this.getMoralTotal();
|
||||||
|
console.log("rollData.moralDiminuer: "+rollData.moralDiminuer);
|
||||||
|
console.log("rollData.moralActualiser: "+rollData.moralActualiser);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1967,6 +1996,7 @@ export class RdDActor extends Actor {
|
|||||||
label: 'Jet ' + Grammar.apostrophe('de', name),
|
label: 'Jet ' + Grammar.apostrophe('de', name),
|
||||||
callbacks: [
|
callbacks: [
|
||||||
this.createCallbackExperience(),
|
this.createCallbackExperience(),
|
||||||
|
this.createCallbackAppelAuMoral(),
|
||||||
{ action: r => this._competenceResult(r) }
|
{ action: r => this._competenceResult(r) }
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -2210,7 +2240,9 @@ export class RdDActor extends Actor {
|
|||||||
async _competenceResult(rollData) {
|
async _competenceResult(rollData) {
|
||||||
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html')
|
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html')
|
||||||
}
|
}
|
||||||
|
async _moralDecrease(rollData) {
|
||||||
|
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html')
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) {
|
async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) {
|
||||||
let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' };
|
let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' };
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import { Grammar } from "./grammar.js";
|
||||||
|
|
||||||
export class RdDCarac {
|
export class RdDCarac {
|
||||||
|
|
||||||
static isAgiliteOuDerivee(selectedCarac) {
|
static isAgiliteOuDerivee(selectedCarac) {
|
||||||
@ -25,6 +27,6 @@ export class RdDCarac {
|
|||||||
* ainsi que de Perception active et volontaire.
|
* ainsi que de Perception active et volontaire.
|
||||||
*/
|
*/
|
||||||
static isActionPhysique(selectedCarac) {
|
static isActionPhysique(selectedCarac) {
|
||||||
return selectedCarac?.label.match(/(Apparence|Force|Agilité|Dextérité|Vue|Ouïe|Odorat-Goût|Empathie|Mêlée|Tir|Lancer|Dérobée)/);
|
return Grammar.toLowerCaseNoAccent(selectedCarac?.label).match(/(apparence|force|agilite|dexterite|vue|ouie|odorat|empathie|melee|tir|lancer|derobee)/);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,23 +37,26 @@ export class RdDRoll extends Dialog {
|
|||||||
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
||||||
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
||||||
etat: actor.getEtatGeneral(),
|
etat: actor.getEtatGeneral(),
|
||||||
moral: actor.getMoralTotal(),
|
moral: actor.getMoralTotal(), /* La valeur du moral pour les jets de volonté */
|
||||||
carac: actor.data.data.carac,
|
carac: actor.data.data.carac,
|
||||||
finalLevel: 0,
|
finalLevel: 0,
|
||||||
diffConditions: 0,
|
diffConditions: 0,
|
||||||
diffLibre: rollData.competence?.data.default_diffLibre ?? 0,
|
diffLibre: rollData.competence?.data.default_diffLibre ?? 0,
|
||||||
malusArmureValue: actor.getMalusArmure(),
|
malusArmureValue: actor.getMalusArmure(),
|
||||||
surencMalusFlag: actor.isPersonnage() ? (actor.data.data.compteurs.surenc.value < 0) : false,
|
surencMalusFlag: actor.isPersonnage() ? (actor.data.data.compteurs.surenc.value < 0) : false,
|
||||||
surencMalusValue: actor.getSurenc(),
|
surencMalusValue: actor.getSurenc(),
|
||||||
useMalusSurenc: false,
|
useMalusSurenc: false,
|
||||||
use: { libre:true, conditions: true, surenc: false, encTotal: false, },
|
appelAuMoralDemander :false,
|
||||||
|
use: { libre:true, conditions: true, surenc: false, encTotal: false, appelAuMoral : false },
|
||||||
isMalusEncombrementTotal: RdDItemCompetence.isMalusEncombrementTotal(rollData.competence),
|
isMalusEncombrementTotal: RdDItemCompetence.isMalusEncombrementTotal(rollData.competence),
|
||||||
useMalusEncTotal: false,
|
useMalusEncTotal: false,
|
||||||
encTotal: actor.getEncTotal(),
|
encTotal: actor.getEncTotal(),
|
||||||
ajustementAstrologique: actor.ajustementAstrologique(),
|
ajustementAstrologique: actor.ajustementAstrologique(),
|
||||||
surprise: actor.getSurprise(false),
|
surprise: actor.getSurprise(false),
|
||||||
}
|
}
|
||||||
|
console.log("defaultRollData.appelAuMoralFlag : "+defaultRollData.appelAuMoralFlag);
|
||||||
mergeObject(rollData, defaultRollData, { recursive: true, overwrite: false });
|
mergeObject(rollData, defaultRollData, { recursive: true, overwrite: false });
|
||||||
|
console.log("rollData.appelAuMoralFlag : "+rollData.appelAuMoralFlag);
|
||||||
if ( rollData.forceCarac) {
|
if ( rollData.forceCarac) {
|
||||||
rollData.carac = rollData.forceCarac;
|
rollData.carac = rollData.forceCarac;
|
||||||
}
|
}
|
||||||
@ -187,6 +190,23 @@ export class RdDRoll extends Dialog {
|
|||||||
this.rollData.useMalusEncTotal = event.currentTarget.checked;
|
this.rollData.useMalusEncTotal = event.currentTarget.checked;
|
||||||
this.updateRollResult();
|
this.updateRollResult();
|
||||||
});
|
});
|
||||||
|
html.find('#useAppelAuMoralCheckbox').change((event) => { /* l'appel au moral, qui donne un bonus de +1 */
|
||||||
|
|
||||||
|
console.log("#useAppelAuMoralCheckbox");
|
||||||
|
//console.log("surencMalusFlag : "+surencMalusFlag);
|
||||||
|
console.log("this.appelAuMoralFlag : "+this.appelAuMoralFlag);
|
||||||
|
console.log("this.rollData.moral : "+this.rollData.moral);
|
||||||
|
console.log("this.rollData.ajustements : "+this.rollData.ajustements);
|
||||||
|
console.log("this.rollData.ajustements.moral : "+this.rollData.ajustements.moral);
|
||||||
|
console.log("this.rollData.ajustements.moral.isVisible : "+this.rollData.ajustements.moral.isVisible);
|
||||||
|
console.log("event.currentTarget.checked : "+event.currentTarget.checked);
|
||||||
|
console.log("this.rollData.use.appelAuMoral : "+this.rollData.use.appelAuMoral);
|
||||||
|
this.rollData.appelAuMoralDemander = event.currentTarget.checked
|
||||||
|
// this.rollData.use.appelAuMoral = event.currentTarget.checked
|
||||||
|
console.log("this.rollData.moral : "+this.rollData.moral);
|
||||||
|
console.log("this.rollData.use.appelAuMoral : "+this.rollData.use.appelAuMoral);
|
||||||
|
this.updateRollResult();
|
||||||
|
});
|
||||||
// Section Méditation
|
// Section Méditation
|
||||||
html.find('.conditionMeditation').change((event) => {
|
html.find('.conditionMeditation').change((event) => {
|
||||||
let condition = event.currentTarget.attributes['id'].value;
|
let condition = event.currentTarget.attributes['id'].value;
|
||||||
@ -198,7 +218,7 @@ export class RdDRoll extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async updateRollResult() {
|
async updateRollResult() {
|
||||||
let rollData = this.rollData;
|
let rollData = this.rollData;
|
||||||
|
|
||||||
rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat());
|
rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat());
|
||||||
rollData.caracValue = parseInt(rollData.selectedCarac.value);
|
rollData.caracValue = parseInt(rollData.selectedCarac.value);
|
||||||
rollData.coupsNonMortels = (rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite) == 'non-mortel';
|
rollData.coupsNonMortels = (rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite) == 'non-mortel';
|
||||||
@ -211,10 +231,28 @@ export class RdDRoll extends Dialog {
|
|||||||
rollData.bonus = RdDItemSort.getCaseBonus(rollData.selectedSort, rollData.coord);
|
rollData.bonus = RdDItemSort.getCaseBonus(rollData.selectedSort, rollData.coord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ! actor.isPersonnage() || */
|
||||||
|
if ( ! RdDCarac.isActionPhysique(rollData.selectedCarac) ) {
|
||||||
|
rollData.use.appelAuMoral = false;
|
||||||
|
} else {
|
||||||
|
rollData.use.appelAuMoral = rollData.appelAuMoralDemander;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
RollDataAjustements.calcul(rollData, this.actor);
|
RollDataAjustements.calcul(rollData, this.actor);
|
||||||
rollData.finalLevel = this._computeFinalLevel(rollData);
|
rollData.finalLevel = this._computeFinalLevel(rollData);
|
||||||
|
|
||||||
|
console.log("updateRollResult");
|
||||||
|
console.log("rollData.ajustements.moralTotal.used: "+rollData.ajustements.moralTotal.used);
|
||||||
|
console.log("rollData.ajustements.moral.used: "+rollData.ajustements.moral.used);
|
||||||
|
console.log("rollData.use.appelAuMoral: "+rollData.use.appelAuMoral);
|
||||||
|
console.log("rollData.selectedCarac: ");
|
||||||
|
console.log(rollData.selectedCarac);
|
||||||
|
console.log("RdDCarac.isActionPhysique(rollData.selectedCarac): "+RdDCarac.isActionPhysique(rollData.selectedCarac));
|
||||||
|
|
||||||
HtmlUtility._showControlWhen($(".diffMoral"), rollData.ajustements.moralTotal.used);
|
HtmlUtility._showControlWhen($(".diffMoral"), rollData.ajustements.moralTotal.used);
|
||||||
|
HtmlUtility._showControlWhen($(".diffAppelAuMoral"), RdDCarac.isActionPhysique(rollData.selectedCarac) );
|
||||||
|
HtmlUtility._showControlWhen($(".diffAppelAuMoral-checker"), RdDCarac.isActionPhysique(rollData.selectedCarac) );
|
||||||
HtmlUtility._showControlWhen($("#etat-general"), !RdDCarac.isIgnoreEtatGeneral(rollData.selectedCarac, rollData.competence));
|
HtmlUtility._showControlWhen($("#etat-general"), !RdDCarac.isIgnoreEtatGeneral(rollData.selectedCarac, rollData.competence));
|
||||||
HtmlUtility._showControlWhen($("#ajust-astrologique"), RdDResolutionTable.isAjustementAstrologique(rollData));
|
HtmlUtility._showControlWhen($("#ajust-astrologique"), RdDResolutionTable.isAjustementAstrologique(rollData));
|
||||||
|
|
||||||
|
@ -246,6 +246,7 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html',
|
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html',
|
||||||
// messages tchat
|
// messages tchat
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html',
|
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html',
|
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html',
|
'systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html',
|
||||||
|
@ -74,8 +74,8 @@ export const referenceAjustements = {
|
|||||||
},
|
},
|
||||||
moral: {
|
moral: {
|
||||||
isVisible: (rollData, actor) => RdDCarac.isActionPhysique(rollData.selectedCarac),
|
isVisible: (rollData, actor) => RdDCarac.isActionPhysique(rollData.selectedCarac),
|
||||||
isUsed: (rollData, actor) => rollData.use?.moral,
|
isUsed: (rollData, actor) => rollData.use?.appelAuMoral,
|
||||||
getLabel: (rollData, actor) => 'Moral',
|
getLabel: (rollData, actor) => 'Appel au moral',
|
||||||
getValue: (rollData, actor) => 1
|
getValue: (rollData, actor) => 1
|
||||||
},
|
},
|
||||||
moralTotal: {
|
moralTotal: {
|
||||||
|
@ -812,6 +812,22 @@ ul, li {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.diffAppelAuMoral {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.diffAppelAuMoral-checker{
|
||||||
|
display: inline-block;
|
||||||
|
background-image: url('../icons/moral-neutre.svg');
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
.diffAppelAuMoral:checked + .diffAppelAuMoral-checker {
|
||||||
|
background-image: url('../icons/moral-heureux.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ======================================== */
|
/* ======================================== */
|
||||||
/* Fatigue CSS */
|
/* Fatigue CSS */
|
||||||
.table-fatigue {
|
.table-fatigue {
|
||||||
@ -1391,4 +1407,4 @@ display: inline-flex;
|
|||||||
content : url(img/logo.png);
|
content : url(img/logo.png);
|
||||||
width: 80px;
|
width: 80px;
|
||||||
height: 68px;
|
height: 68px;
|
||||||
}
|
}
|
||||||
|
4
templates/chat-info-appel-au-moral.html
Normal file
4
templates/chat-info-appel-au-moral.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{{#if use.appelAuMoral}}<div>
|
||||||
|
{{alias}} fait appel {{#if (gt moral 0)}}au moral{{else}}à l'énergie du déspoir{{/if}} {{#if moralDiminuer}}et échoue, diminuant son moral.{{else}} et réussit.{{/if}}
|
||||||
|
{{^moralDiminuer}} Son moral reste inchangé à {{moral}}.{{/moralDiminuer}}
|
||||||
|
<div>{{/if}}
|
@ -12,6 +12,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<span>{{#if rolled.ptTache}}{{rolled.ptTache}} points de tâche{{/if}}{{#if rolled.ptQualite}}{{#if rolled.ptTache}},{{/if}} ajustement Qualité {{numberFormat rolled.ptQualite decimals=0 sign=true}}{{/if}}</span>
|
<span>{{#if rolled.ptTache}}{{rolled.ptTache}} points de tâche{{/if}}{{#if rolled.ptQualite}}{{#if rolled.ptTache}},{{/if}} ajustement Qualité {{numberFormat rolled.ptQualite decimals=0 sign=true}}{{/if}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
{{> "systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html"}}
|
||||||
{{~#if show.explications}}
|
{{~#if show.explications}}
|
||||||
<div>
|
<div>
|
||||||
{{show.explications}}
|
{{show.explications}}
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
</select>
|
</select>
|
||||||
<label></label>
|
<label></label>
|
||||||
</div>
|
</div>
|
||||||
|
<input class="diffAppelAuMoral" id="useAppelAuMoralCheckbox" type="checkbox" name="appelAuMoralDemander" />
|
||||||
|
<label for="useAppelAuMoralCheckbox" class="diffAppelAuMoral-checker" id="diffAppelAuMoral-checker"></label>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{{#if attackerRoll}}
|
{{#if attackerRoll}}
|
||||||
<label for="categorie">Difficulté</label>
|
<label for="categorie">Difficulté</label>
|
||||||
|
Loading…
Reference in New Issue
Block a user