Merge branch 'roll-carac' into 'dev_1.1'
Roll carac See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!60
This commit is contained in:
commit
e18bb4c832
@ -263,12 +263,12 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
this.actor.rollCarac( caracName.toLowerCase() );
|
this.actor.rollCarac( caracName.toLowerCase() );
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#chance-actuel').click((event) => {
|
html.find('#chance-actuelle').click((event) => {
|
||||||
this.actor.rollCarac( 'chance-actuel' );
|
this.actor.rollCarac( 'chance-actuelle' );
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('#chance-appel').click((event) => {
|
html.find('#chance-appel').click((event) => {
|
||||||
this.actor.appelChance();
|
this.actor.rollAppelChance();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll Skill
|
// Roll Skill
|
||||||
@ -276,10 +276,12 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
let compName = event.currentTarget.text;
|
let compName = event.currentTarget.text;
|
||||||
this.actor.rollCompetence( compName);
|
this.actor.rollCompetence( compName);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Points de reve actuel
|
// Points de reve actuel
|
||||||
html.find('.ptreve-actuel a').click((event) => {
|
html.find('.ptreve-actuel a').click((event) => {
|
||||||
this.actor.rollCarac( 'reveActuel' );
|
this.actor.rollCarac( 'reve-actuel' );
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll Weapon1
|
// Roll Weapon1
|
||||||
html.find('.arme-label a').click((event) => {
|
html.find('.arme-label a').click((event) => {
|
||||||
let armeName = event.currentTarget.text;
|
let armeName = event.currentTarget.text;
|
||||||
|
108
module/actor.js
108
module/actor.js
@ -1355,66 +1355,95 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCarac( caracName )
|
_createCallbackExperience() {
|
||||||
{
|
return {
|
||||||
let carac = this.getCaracByName(caracName);
|
condition: r => r.rolled.isPart && r.finalLevel < 0 && game.settings.get("core", "rollMode") != 'selfroll',
|
||||||
let rollData = {
|
action: r => this._appliquerAjoutExperience(r)
|
||||||
selectedCarac: carac,
|
};
|
||||||
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
|
||||||
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
|
||||||
etat: this.data.data.compteurs.etat.value,
|
|
||||||
finalLevel: 0,
|
|
||||||
diffConditions: 0,
|
|
||||||
diffLibre: 0,
|
|
||||||
malusArmureValue: (this.data.data.attributs) ? this.data.data.attributs.malusarmure.value : 0,
|
|
||||||
surencMalusFlag: (this.data.data.compteurs.surenc.value < 0),
|
|
||||||
surencMalusValue: this.data.data.compteurs.surenc.value,
|
|
||||||
surencMalusApply: false,
|
|
||||||
isNatation: false,
|
|
||||||
useEncForNatation: false
|
|
||||||
}
|
|
||||||
console.log(caracName, rollData);
|
|
||||||
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', rollData);
|
|
||||||
new RdDRollDialog("carac", html, rollData, this ).render(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
async _appliquerAjoutExperience(rollData) {
|
||||||
async appelChance( )
|
// TODO: si pas de compétence, minimum 1 pour carac
|
||||||
|
// TODO: appliquer l'expérience automatiquement
|
||||||
|
let xpmsg = RdDResolutionTable.buildXpMessage(rollData.rolled, rollData.finalLevel);
|
||||||
|
let message = ChatUtility.prepareChatMessage('gmroll', this.name);
|
||||||
|
message.content = "<strong>" + rollData.selectedCarac.label + "</strong>"
|
||||||
|
+ xpmsg;
|
||||||
|
ChatMessage.create(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async rollCarac( caracName )
|
||||||
{
|
{
|
||||||
let rollData = {
|
let rollData = { selectedCarac: this.getCaracByName(caracName) };
|
||||||
selectedCarac: this.getCaracByName('chance-actuelle'),
|
|
||||||
diffConditions: this.ajustementAstrologique()
|
const dialog = await RdDRoll.create(this, rollData,
|
||||||
}
|
{html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html'},
|
||||||
|
|
||||||
const dialog = await RdDRoll.create(
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html',
|
|
||||||
this,
|
|
||||||
rollData,
|
|
||||||
{
|
{
|
||||||
name: 'appelChance',
|
name: 'jet-'+caracName,
|
||||||
label: 'Appel à la chance',
|
label: 'Lancer : '+rollData.selectedCarac.label,
|
||||||
callbacks: [
|
callbacks: [
|
||||||
{ action: rollData => this._appelChanceResultat(rollData) }
|
this._createCallbackExperience(),
|
||||||
|
{ action: this._rollCaracResult }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
dialog.render(true);
|
dialog.render(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _rollCaracResult(rollData) {
|
||||||
|
let rolled = rollData.rolled;
|
||||||
|
|
||||||
|
let resumeCompetence = (rollData.diffLibre + rollData.diffConditions);
|
||||||
|
let explications = "<br>Points de taches : " + rolled.ptTache;
|
||||||
|
|
||||||
|
// Final chat message
|
||||||
|
let chatOptions = {
|
||||||
|
content: "<strong>Test : " + rollData.selectedCarac.label + " / " + resumeCompetence + "</strong>"
|
||||||
|
+ "<br>Difficultés <strong>libre : " + rollData.diffLibre + "</strong> / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat
|
||||||
|
+ RdDResolutionTable.explain(rolled)
|
||||||
|
+ explications
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatUtility.chatWithRollMode(chatOptions, this.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_appelChanceResultat(rollData) {
|
async rollAppelChance( )
|
||||||
|
{
|
||||||
|
let rollData = {
|
||||||
|
selectedCarac: this.getCaracByName('chance-actuelle'),
|
||||||
|
diffConditions: this.ajustementAstrologique()
|
||||||
|
}
|
||||||
|
|
||||||
|
const dialog = await RdDRoll.create(this, rollData,
|
||||||
|
{ html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html'},
|
||||||
|
{
|
||||||
|
name: 'appelChance',
|
||||||
|
label: 'Appel à la chance',
|
||||||
|
callbacks: [
|
||||||
|
this._createCallbackExperience(),
|
||||||
|
{ action: this._appelChanceResult }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
dialog.render(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
_appelChanceResult(rollData) {
|
||||||
const message = {
|
const message = {
|
||||||
user: game.user._id,
|
user: game.user._id,
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
content: this.name + " fait appel à la chance" + RdDResolutionTable.explain(rollData.rolled)
|
content: this.name + " fait appel à la chance" + RdDResolutionTable.explain(rollData.rolled)
|
||||||
};
|
};
|
||||||
if (rollData.rolled.isSuccess) {
|
if (rollData.rolled.isSuccess) {
|
||||||
message.content += "<br>Dépense d'un point de chance, l'action peut être retentée"
|
message.content += "<br>Un point de chance est dépensée, l'action peut être retentée"
|
||||||
this.chanceActuelleIncDec(-1)
|
this.chanceActuelleIncDec(-1)
|
||||||
}
|
}
|
||||||
ChatMessage.create(message);
|
ChatMessage.create(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async chanceActuelleIncDec(value) {
|
async chanceActuelleIncDec(value) {
|
||||||
let chance = duplicate(this.data.data.compteurs.chance);
|
let chance = duplicate(this.data.data.compteurs.chance);
|
||||||
@ -1432,7 +1461,7 @@ export class RdDActor extends Actor {
|
|||||||
getCaracByName(caracName) {
|
getCaracByName(caracName) {
|
||||||
switch (caracName)
|
switch (caracName)
|
||||||
{
|
{
|
||||||
case 'reveActuel':
|
case 'reve-actuel':
|
||||||
return {
|
return {
|
||||||
label: 'Rêve Actuel',
|
label: 'Rêve Actuel',
|
||||||
value: this.getReveActuel(),
|
value: this.getReveActuel(),
|
||||||
@ -1631,6 +1660,7 @@ export class RdDActor extends Actor {
|
|||||||
let degatsReel = attackerRoll.degats - armure;
|
let degatsReel = attackerRoll.degats - armure;
|
||||||
|
|
||||||
let result = RdDUtility.computeBlessuresSante(degatsReel, attackerRoll.mortalite);
|
let result = RdDUtility.computeBlessuresSante(degatsReel, attackerRoll.mortalite);
|
||||||
|
result.endurance = Math.max(result.endurance, -Number(this.data.data.sante.endurance.value));
|
||||||
await this.santeIncDec("vie", result.vie);
|
await this.santeIncDec("vie", result.vie);
|
||||||
await this.santeIncDec("endurance", result.endurance, (result.critiques > 0));
|
await this.santeIncDec("endurance", result.endurance, (result.critiques > 0));
|
||||||
result.locName = (attackerRoll.loc) ? attackerRoll.loc.label : "Corps";
|
result.locName = (attackerRoll.loc) ? attackerRoll.loc.label : "Corps";
|
||||||
|
@ -6,7 +6,10 @@ export class ChatUtility {
|
|||||||
|
|
||||||
static chatWithRollMode(chatOptions, name) {
|
static chatWithRollMode(chatOptions, name) {
|
||||||
let rollMode = game.settings.get("core", "rollMode");
|
let rollMode = game.settings.get("core", "rollMode");
|
||||||
chatOptions.user = game.user._id;
|
ChatUtility.createChatMessage(chatOptions, rollMode, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static createChatMessage( chatOptions, rollMode, name) {
|
||||||
switch (rollMode) {
|
switch (rollMode) {
|
||||||
case "blindroll": // GM only
|
case "blindroll": // GM only
|
||||||
if (!game.user.isGM) {
|
if (!game.user.isGM) {
|
||||||
@ -19,24 +22,29 @@ export class ChatUtility {
|
|||||||
chatOptions.whisper = ChatUtility.getUsers(user => user.isGM);
|
chatOptions.whisper = ChatUtility.getUsers(user => user.isGM);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "gmroll": // GM + rolling player
|
|
||||||
chatOptions.user = game.user._id;
|
|
||||||
chatOptions.whisper = ChatUtility.getWhisperRecipientsAndGMs(name);
|
|
||||||
break;
|
|
||||||
case "selfroll": // only the user
|
|
||||||
chatOptions.user = game.user._id;
|
|
||||||
chatOptions.whisper = [game.user._id];
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
case "roll": // everybody
|
chatOptions.whisper = ChatUtility.getWhisperRecipients(rollMode, name);
|
||||||
chatOptions.whisper = undefined;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("roll message", chatOptions);
|
|
||||||
ChatMessage.create(chatOptions);
|
ChatMessage.create(chatOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static prepareChatMessage( rollMode, name) {
|
||||||
|
return {
|
||||||
|
user: game.user._id,
|
||||||
|
whisper: ChatUtility.getWhisperRecipients(rollMode, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static getWhisperRecipients( rollMode, name) {
|
||||||
|
switch (rollMode) {
|
||||||
|
case "blindroll": return ChatUtility.getUsers(user => user.isGM);
|
||||||
|
case "gmroll": return ChatUtility.getWhisperRecipientsAndGMs(name);
|
||||||
|
case "selfroll": return [game.user._id];
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
static getWhisperRecipientsAndGMs(name) {
|
static getWhisperRecipientsAndGMs(name) {
|
||||||
return ChatMessage.getWhisperRecipients(name)
|
return ChatMessage.getWhisperRecipients(name)
|
||||||
.concat(this.getUsers(user => user.isGM));
|
.concat(this.getUsers(user => user.isGM));
|
||||||
|
@ -55,7 +55,7 @@ const reussites = [
|
|||||||
const reussiteSignificative = reussites.find(r => r.code == "sign");
|
const reussiteSignificative = reussites.find(r => r.code == "sign");
|
||||||
const reussiteNormale = reussites.find(r => r.code == "norm");
|
const reussiteNormale = reussites.find(r => r.code == "norm");
|
||||||
const echecNormal = reussites.find(r => r.code == "echec");
|
const echecNormal = reussites.find(r => r.code == "echec");
|
||||||
|
const caracMaximumResolution = 60;
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class RdDResolutionTable {
|
export class RdDResolutionTable {
|
||||||
static resolutionTable = this.build()
|
static resolutionTable = this.build()
|
||||||
@ -63,7 +63,7 @@ export class RdDResolutionTable {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static build() {
|
static build() {
|
||||||
let table = []
|
let table = []
|
||||||
for (var caracValue = 0; caracValue <= 60; caracValue++) {
|
for (var caracValue = 0; caracValue <= caracMaximumResolution; caracValue++) {
|
||||||
table[caracValue] = this._computeRow(caracValue);
|
table[caracValue] = this._computeRow(caracValue);
|
||||||
}
|
}
|
||||||
return table;
|
return table;
|
||||||
@ -84,7 +84,7 @@ export class RdDResolutionTable {
|
|||||||
if (rolled.caracValue != null && rolled.finalLevel!= null) {
|
if (rolled.caracValue != null && rolled.finalLevel!= null) {
|
||||||
message += "(" + rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") ";
|
message += "(" + rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") ";
|
||||||
}
|
}
|
||||||
message += rolled.quality
|
message += '<strong>' + rolled.quality + '</strong>'
|
||||||
return message;
|
return message;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -147,7 +147,6 @@ export class RdDResolutionTable {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static _computeReussite(chances, roll) {
|
static _computeReussite(chances, roll) {
|
||||||
const reussite = reussites.find(x => x.condition(chances, roll));
|
const reussite = reussites.find(x => x.condition(chances, roll));
|
||||||
@ -219,7 +218,7 @@ export class RdDResolutionTable {
|
|||||||
static _buildHTMLTable(caracValue, levelValue, minCarac, maxCarac, minLevel, maxLevel) {
|
static _buildHTMLTable(caracValue, levelValue, minCarac, maxCarac, minLevel, maxLevel) {
|
||||||
let countColonnes = maxLevel - minLevel;
|
let countColonnes = maxLevel - minLevel;
|
||||||
minCarac = Math.max(minCarac, 1);
|
minCarac = Math.max(minCarac, 1);
|
||||||
maxCarac = Math.min(maxCarac, 30);
|
maxCarac = Math.min(maxCarac, caracMaximumResolution);
|
||||||
minLevel = Math.max(minLevel, -10);
|
minLevel = Math.max(minLevel, -10);
|
||||||
maxLevel = Math.max(Math.min(maxLevel, 22), minLevel + countColonnes);
|
maxLevel = Math.max(Math.min(maxLevel, 22), minLevel + countColonnes);
|
||||||
|
|
||||||
|
@ -10,22 +10,23 @@ import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
|||||||
|
|
||||||
export class RdDRoll extends Dialog {
|
export class RdDRoll extends Dialog {
|
||||||
|
|
||||||
static async create(htmlTemplate, actor, rollData, ...actions) {
|
static async create(actor, rollData, dialogConfig, ...actions) {
|
||||||
RdDRoll._ensureCorrectActions(actions);
|
|
||||||
|
|
||||||
|
RdDRoll._ensureCorrectActions(actions);
|
||||||
RdDRoll._setDefaultOptions(actor, rollData);
|
RdDRoll._setDefaultOptions(actor, rollData);
|
||||||
|
|
||||||
const html = await renderTemplate(htmlTemplate, rollData);
|
const html = await renderTemplate(dialogConfig.html, rollData);
|
||||||
|
|
||||||
return new RdDRoll(actor, rollData, html, {
|
let options = { classes: ["rdddialog"], width: 600, height: 500, 'z-index': 99999 };
|
||||||
classes: ["rdddialog"],
|
if (dialogConfig.options) {
|
||||||
width: 600, height: 500, 'z-index': 99999
|
mergeObject(options, dialogConfig.options, { overwrite: true })
|
||||||
}, actions);
|
}
|
||||||
|
return new RdDRoll(actor, rollData, html, options, actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
static _setDefaultOptions(actor, rollData) {
|
static _setDefaultOptions(actor, rollData) {
|
||||||
|
|
||||||
mergeObject(rollData,
|
mergeObject(rollData,
|
||||||
{
|
{
|
||||||
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
|
||||||
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
difficultesLibres: CONFIG.RDD.difficultesLibres,
|
||||||
@ -33,8 +34,8 @@ export class RdDRoll extends Dialog {
|
|||||||
finalLevel: 0,
|
finalLevel: 0,
|
||||||
diffConditions: 0,
|
diffConditions: 0,
|
||||||
diffLibre: 0,
|
diffLibre: 0,
|
||||||
malusArmureValue: 0,
|
malusArmureValue: actor.data.data.attributs ? actor.data.data.attributs.malusarmure.value : 0,
|
||||||
surencMalusFlag: actor.data.data.attributs ? actor.data.data.attributs.malusarmure.value : 0,
|
surencMalusFlag: (actor.data.data.compteurs.surenc.value < 0),
|
||||||
surencMalusValue: actor.data.data.compteurs.surenc.value,
|
surencMalusValue: actor.data.data.compteurs.surenc.value,
|
||||||
surencMalusApply: false,
|
surencMalusApply: false,
|
||||||
isNatation: false,
|
isNatation: false,
|
||||||
@ -44,12 +45,12 @@ export class RdDRoll extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static _ensureCorrectActions(actions) {
|
static _ensureCorrectActions(actions) {
|
||||||
if (actions.length==0) {
|
if (actions.length == 0) {
|
||||||
throw 'No action defined';
|
throw 'No action defined';
|
||||||
}
|
}
|
||||||
actions.forEach(action => {
|
actions.forEach(action => {
|
||||||
if (action.callbacks == undefined) {
|
if (action.callbacks == undefined) {
|
||||||
action.callbacks = [{action: r => console.log(action.name, r)}];
|
action.callbacks = [{ action: r => console.log(action.name, r) }];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -74,11 +75,11 @@ export class RdDRoll extends Dialog {
|
|||||||
async onAction(action, html) {
|
async onAction(action, html) {
|
||||||
await RdDResolutionTable.rollData(this.rollData);
|
await RdDResolutionTable.rollData(this.rollData);
|
||||||
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.rolled)) {
|
if (callback.condition == undefined || callback.condition(this.rollData)) {
|
||||||
callback.action(this.rollData);
|
callback.action(this.rollData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -396,17 +396,21 @@ export class RdDUtility {
|
|||||||
{
|
{
|
||||||
let xp = 0;
|
let xp = 0;
|
||||||
for (let troncList of competenceTroncs) {
|
for (let troncList of competenceTroncs) {
|
||||||
let minNiveau = 15;
|
let minNiveau = 0;
|
||||||
for (let troncName of troncList) {
|
for (let troncName of troncList) {
|
||||||
let comp = RdDUtility.findCompetence( competenceList, troncName);
|
let comp = RdDUtility.findCompetence( competenceList, troncName);
|
||||||
minNiveau = (comp.data.niveau < minNiveau) ? comp.data.niveau : minNiveau;
|
if (comp) {
|
||||||
|
minNiveau = Math.min(comp.data.niveau, minNiveau);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( minNiveau > 0 ) minNiveau = 0; // Clamp à 0, pour le tronc commun
|
minNiveau = Math.max(minNiveau, 0); // Clamp à 0, pour le tronc commun
|
||||||
let minNiveauXP = competence_xp_par_niveau[minNiveau+10];
|
let minNiveauXP = competence_xp_par_niveau[minNiveau+10];
|
||||||
xp += minNiveauXP;
|
xp += minNiveauXP;
|
||||||
for (let troncName of troncList) {
|
for (let troncName of troncList) {
|
||||||
let comp = RdDUtility.findCompetence( competenceList, troncName);
|
let comp = RdDUtility.findCompetence( competenceList, troncName);
|
||||||
xp += competence_xp_par_niveau[comp.data.niveau+10] - minNiveauXP;
|
if (comp){
|
||||||
|
xp += competence_xp_par_niveau[comp.data.niveau+10] - minNiveauXP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return xp;
|
return xp;
|
||||||
@ -569,9 +573,9 @@ export class RdDUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeBlessuresSante( degats, mortalite="mortel" ) {
|
static computeBlessuresSante( degats, mortalite="mortel" ) {
|
||||||
let encaissement = RdDUtility.selectEncaissement(degats, mortalite)
|
let encaissement = RdDUtility.selectEncaissement(degats, mortalite)
|
||||||
let over20 = degats > 20 ? degats - 20 : 0
|
let over20 = Math.max(degats - 20, 0);
|
||||||
encaissement.endurance = - RdDUtility._evaluatePerte(encaissement.endurance, over20)
|
encaissement.endurance = - RdDUtility._evaluatePerte(encaissement.endurance, over20);
|
||||||
encaissement.vie = - RdDUtility._evaluatePerte(encaissement.vie, over20)
|
encaissement.vie = - RdDUtility._evaluatePerte(encaissement.vie, over20);
|
||||||
return encaissement;
|
return encaissement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
314
template.json
314
template.json
@ -2,11 +2,11 @@
|
|||||||
"Actor": {
|
"Actor": {
|
||||||
"types": ["personnage", "humanoide", "creature", "entite"],
|
"types": ["personnage", "humanoide", "creature", "entite"],
|
||||||
"templates": {
|
"templates": {
|
||||||
"description": {
|
"description": {
|
||||||
"description": "Description ...",
|
"description": "Description ...",
|
||||||
"notesmj": "Notes du MJ"
|
"notesmj": "Notes du MJ"
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
"biographie": "Histoire personnelle...",
|
"biographie": "Histoire personnelle...",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"notesmj": "Notes du MJ",
|
"notesmj": "Notes du MJ",
|
||||||
@ -21,31 +21,31 @@
|
|||||||
},
|
},
|
||||||
"entite": {
|
"entite": {
|
||||||
"carac": {
|
"carac": {
|
||||||
"taille": {
|
"taille": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Taille",
|
"label": "Taille",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"reve": {
|
"reve": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Rêve",
|
"label": "Rêve",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"niveau": {
|
"niveau": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Niveau",
|
"label": "Niveau",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sante": {
|
"sante": {
|
||||||
"endurance": {
|
"endurance": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 10,
|
"max": 10,
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Endurance",
|
"label": "Endurance",
|
||||||
@ -59,21 +59,21 @@
|
|||||||
"etat": {
|
"etat": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Etat général"
|
"label": "Etat général"
|
||||||
},
|
},
|
||||||
"surenc": {
|
"surenc": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Sur-encombrement"
|
"label": "Sur-encombrement"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"attributs": {
|
"attributs": {
|
||||||
"plusdom": {
|
"plusdom": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "+dom",
|
"label": "+dom",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"vitesse": {
|
"vitesse": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Vitesse",
|
"label": "Vitesse",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
@ -82,59 +82,59 @@
|
|||||||
},
|
},
|
||||||
"creature": {
|
"creature": {
|
||||||
"carac": {
|
"carac": {
|
||||||
"taille": {
|
"taille": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Taille",
|
"label": "Taille",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"constitution": {
|
"constitution": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Constitution",
|
"label": "Constitution",
|
||||||
"xp": 0,
|
|
||||||
"derivee": false
|
|
||||||
},
|
|
||||||
"force": {
|
|
||||||
"type": "number",
|
|
||||||
"value": 10,
|
|
||||||
"label": "Force",
|
|
||||||
"xp": 0,
|
|
||||||
"derivee": false
|
|
||||||
},
|
|
||||||
"perception": {
|
|
||||||
"type": "number",
|
|
||||||
"value": 10,
|
|
||||||
"label": "Perception",
|
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"volonte": {
|
"force": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Volonté",
|
"label": "Force",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"reve": {
|
"perception": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Rêve",
|
"label": "Perception",
|
||||||
|
"xp": 0,
|
||||||
|
"derivee": false
|
||||||
|
},
|
||||||
|
"volonte": {
|
||||||
|
"type": "number",
|
||||||
|
"value": 10,
|
||||||
|
"label": "Volonté",
|
||||||
|
"xp": 0,
|
||||||
|
"derivee": false
|
||||||
|
},
|
||||||
|
"reve": {
|
||||||
|
"type": "number",
|
||||||
|
"value": 10,
|
||||||
|
"label": "Rêve",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sante": {
|
"sante": {
|
||||||
"vie": {
|
"vie": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 10,
|
"max": 10,
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Vie",
|
"label": "Vie",
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"endurance": {
|
"endurance": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 10,
|
"max": 10,
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Endurance",
|
"label": "Endurance",
|
||||||
@ -150,7 +150,7 @@
|
|||||||
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
||||||
},
|
},
|
||||||
"graves": {
|
"graves": {
|
||||||
@ -161,27 +161,27 @@
|
|||||||
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"attributs": {
|
"attributs": {
|
||||||
"plusdom": {
|
"plusdom": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "+dom",
|
"label": "+dom",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"vitesse": {
|
"vitesse": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Vitesse",
|
"label": "Vitesse",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"encombrement": {
|
"encombrement": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Encombrement",
|
"label": "Encombrement",
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"protection": {
|
"protection": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Protection",
|
"label": "Protection",
|
||||||
"derivee": false
|
"derivee": false
|
||||||
@ -200,155 +200,155 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"carac": {
|
"carac": {
|
||||||
"taille": {
|
"taille": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Taille",
|
"label": "Taille",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"apparence": {
|
"apparence": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Apparence",
|
"label": "Apparence",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"constitution": {
|
"constitution": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Constitution",
|
"label": "Constitution",
|
||||||
"xp": 0,
|
|
||||||
"derivee": false
|
|
||||||
},
|
|
||||||
"force": {
|
|
||||||
"type": "number",
|
|
||||||
"value": 10,
|
|
||||||
"label": "Force",
|
|
||||||
"xp": 0,
|
|
||||||
"derivee": false
|
|
||||||
},
|
|
||||||
"agilite": {
|
|
||||||
"type": "number",
|
|
||||||
"value": 10,
|
|
||||||
"label": "Agilité",
|
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"dexterite": {
|
"force": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Dexterité",
|
"label": "Force",
|
||||||
|
"xp": 0,
|
||||||
|
"derivee": false
|
||||||
|
},
|
||||||
|
"agilite": {
|
||||||
|
"type": "number",
|
||||||
|
"value": 10,
|
||||||
|
"label": "Agilité",
|
||||||
|
"xp": 0,
|
||||||
|
"derivee": false
|
||||||
|
},
|
||||||
|
"dexterite": {
|
||||||
|
"type": "number",
|
||||||
|
"value": 10,
|
||||||
|
"label": "Dexterité",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"vue": {
|
"vue": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Vue",
|
"label": "Vue",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"ouie": {
|
"ouie": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Ouïe",
|
"label": "Ouïe",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"odoratgout": {
|
"odoratgout": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Odorat-Goût",
|
"label": "Odorat-Goût",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"volonte": {
|
"volonte": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Volonté",
|
"label": "Volonté",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"intellect": {
|
"intellect": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Intellect",
|
"label": "Intellect",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"empathie": {
|
"empathie": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Empathie",
|
"label": "Empathie",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"reve": {
|
"reve": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Rêve",
|
"label": "Rêve",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"chance": {
|
"chance": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Chance",
|
"label": "Chance",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": false
|
"derivee": false
|
||||||
},
|
},
|
||||||
"melee": {
|
"melee": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Mêlée",
|
"label": "Mêlée",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"tir": {
|
"tir": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Tir",
|
"label": "Tir",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"lancer": {
|
"lancer": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Lancer",
|
"label": "Lancer",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"derobee": {
|
"derobee": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Dérobée",
|
"label": "Dérobée",
|
||||||
"xp": 0,
|
"xp": 0,
|
||||||
"derivee": true
|
"derivee": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sante": {
|
"sante": {
|
||||||
"vie": {
|
"vie": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 10,
|
"max": 10,
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Vie",
|
"label": "Vie",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"endurance": {
|
"endurance": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 10,
|
"max": 10,
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"label": "Endurance",
|
"label": "Endurance",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"fatigue": {
|
"fatigue": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"max": 0,
|
"max": 0,
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Fatigue",
|
"label": "Fatigue",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"sonne": {
|
"sonne": {
|
||||||
"value": false,
|
"value": false,
|
||||||
"label": "Sonné"
|
"label": "Sonné"
|
||||||
@ -359,7 +359,7 @@
|
|||||||
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" },
|
||||||
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
{ "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
||||||
},
|
},
|
||||||
"graves": {
|
"graves": {
|
||||||
@ -370,33 +370,33 @@
|
|||||||
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
"liste": [ { "active": false, "premiers_soins": 0, "soins_complets": 0, "jours": 0, "localisation": "" } ]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"attributs": {
|
"attributs": {
|
||||||
"sconst": {
|
"sconst": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "S. Const",
|
"label": "S. Const",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"sust": {
|
"sust": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Sustentation",
|
"label": "Sustentation",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"plusdom": {
|
"plusdom": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "+dom",
|
"label": "+dom",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"encombrement": {
|
"encombrement": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Encombrement",
|
"label": "Encombrement",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"malusarmure": {
|
"malusarmure": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Malus Armure",
|
"label": "Malus Armure",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
@ -456,12 +456,12 @@
|
|||||||
"label": "Moral",
|
"label": "Moral",
|
||||||
"isInput": true
|
"isInput": true
|
||||||
},
|
},
|
||||||
"exaltation": {
|
"exaltation": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Exaltation",
|
"label": "Exaltation",
|
||||||
"isInput": true
|
"isInput": true
|
||||||
},
|
},
|
||||||
"dissolution": {
|
"dissolution": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Dissolution",
|
"label": "Dissolution",
|
||||||
"isInput": true
|
"isInput": true
|
||||||
@ -490,7 +490,7 @@
|
|||||||
"label": "Ethylisme",
|
"label": "Ethylisme",
|
||||||
"isInput": true,
|
"isInput": true,
|
||||||
"nb_doses": 0
|
"nb_doses": 0
|
||||||
},
|
},
|
||||||
"stress": {
|
"stress": {
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Stress",
|
"label": "Stress",
|
||||||
@ -503,8 +503,8 @@
|
|||||||
"isInput": true
|
"isInput": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"argent": {
|
"argent": {
|
||||||
"deniers": {
|
"deniers": {
|
||||||
"label": "Denier",
|
"label": "Denier",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"enc": 0
|
"enc": 0
|
||||||
@ -519,7 +519,7 @@
|
|||||||
},
|
},
|
||||||
"personnage": {
|
"personnage": {
|
||||||
"templates": [ "background", "common"]
|
"templates": [ "background", "common"]
|
||||||
},
|
},
|
||||||
"humanoide": {
|
"humanoide": {
|
||||||
"templates": [ "common", "description" ]
|
"templates": [ "common", "description" ]
|
||||||
},
|
},
|
||||||
@ -604,7 +604,7 @@
|
|||||||
},
|
},
|
||||||
"sort": {
|
"sort": {
|
||||||
"description": "",
|
"description": "",
|
||||||
"draconic": "",
|
"draconic": "",
|
||||||
"duree": "",
|
"duree": "",
|
||||||
"JR": "",
|
"JR": "",
|
||||||
"cible": "",
|
"cible": "",
|
||||||
|
Loading…
Reference in New Issue
Block a user