Merge branch 'roll-carac' into 'dev_1.1'

Roll carac

See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!60
This commit is contained in:
Leratier Bretonnien 2020-12-07 07:58:39 +00:00
commit e18bb4c832
7 changed files with 287 additions and 243 deletions

View File

@ -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;

View File

@ -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";

View File

@ -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));

View File

@ -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);

View File

@ -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);
}
} }
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -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;
} }

View File

@ -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": "",