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