Gestion des signes draconiques #455

Closed
vincent.vandeme wants to merge 233 commits from v1.4-signes-draconiques into master
13 changed files with 110 additions and 89 deletions
Showing only changes of commit e1f0d199c1 - Show all commits

View File

@ -71,7 +71,7 @@ export class RdDActorEntiteSheet extends ActorSheet {
// Update Inventory Item // Update Inventory Item
html.find('.item-edit').click(ev => { html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
const item = this.actor.getEmbeddedDocuments('Item', li.data("itemId")); const item = this.actor.getEmbeddedDocument('Item', li.data("itemId"));
item.sheet.render(true); item.sheet.render(true);
}); });

View File

@ -173,16 +173,16 @@ export class RdDActorSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async creerObjet() { async creerObjet() {
let itemType = $("#creer-equipement").val(); let itemType = $(".item-type").val();
await this.createItem('Nouveau ' + itemType, itemType); await this.createItem('Nouveau ' + itemType, itemType);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async selectObjetType() { async selectObjetType() {
let itemType = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "monnaie"]; let typeObjets = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "monnaie"];
let options = '<span class="competence-label">Selectionnez le type d\'équipement</span><select id="creer-equipement">'; let options = `<span class="competence-label">Selectionnez le type d'équipement</span><select class="item-type">`;
for (let typeName of itemType) { for (let typeName of typeObjets) {
options += '<option value="' + typeName + '">' + typeName + '</option>' options += `<option value="${typeName}">${typeName}</option>`
} }
options += '</select>'; options += '</select>';
let d = new Dialog({ let d = new Dialog({
@ -198,7 +198,28 @@ export class RdDActorSheet extends ActorSheet {
}); });
d.render(true); d.render(true);
} }
/* -------------------------------------------- */
async selectTypeOeuvre() {
let typeOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu" ];
let options = `<span class="competence-label">Selectionnez le type d'oeuvre</span><select class="item-type">`;
for (let typeName of typeOeuvres) {
options += `<option value="${typeName}">${typeName}</option>`
}
options += '</select>';
let d = new Dialog({
title: "Créer une oeuvre",
content: options,
buttons: {
one: {
icon: '<i class="fas fa-check"></i>',
label: "Créer l'oeuvre",
callback: () => this.creerObjet()
}
}
});
d.render(true);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ /** @override */
activateListeners(html) { activateListeners(html) {
@ -246,12 +267,15 @@ export class RdDActorSheet extends ActorSheet {
ev.preventDefault(); ev.preventDefault();
} }
}); });
html.find('#creer-tache').click(ev => { html.find('.creer-tache').click(ev => {
this.createEmptyTache(); this.createEmptyTache();
}); });
html.find('#creer-un-objet').click(ev => { html.find('.creer-un-objet').click(ev => {
this.selectObjetType(); this.selectObjetType();
}); });
html.find('.creer-une-oeuvre').click(ev => {
this.selectTypeOeuvre();
});
html.find('#nettoyer-conteneurs').click(ev => { html.find('#nettoyer-conteneurs').click(ev => {
this.actor.nettoyerConteneurs(); this.actor.nettoyerConteneurs();
}); });
@ -407,19 +431,19 @@ export class RdDActorSheet extends ActorSheet {
// Display info about queue // Display info about queue
html.find('.queuesouffle-label a').click((event) => { html.find('.queuesouffle-label a').click((event) => {
let myID = event.currentTarget.attributes['data-item-id'].value; let myID = event.currentTarget.attributes['data-item-id'].value;
const item = this.actor.getEmbeddedDocuments('Item', myID); const item = this.actor.getEmbeddedDocument('Item', myID);
item.sheet.render(true); item.sheet.render(true);
}); });
// Info sort // Info sort
html.find('.sort-label a').click((event) => { html.find('.sort-label a').click((event) => {
let myID = event.currentTarget.attributes['data-id'].value; let myID = event.currentTarget.attributes['data-id'].value;
const item = this.actor.getEmbeddedDocuments('Item', myID); const item = this.actor.getEmbeddedDocument('Item', myID);
item.sheet.render(true); item.sheet.render(true);
}); });
// Info sort // Info sort
html.find('.case-label a').click((event) => { html.find('.case-label a').click((event) => {
let myID = event.currentTarget.attributes['data-id'].value; let myID = event.currentTarget.attributes['data-id'].value;
const item = this.actor.getEmbeddedDocuments('Item', myID); const item = this.actor.getEmbeddedDocument('Item', myID);
item.sheet.render(true); item.sheet.render(true);
}); });

View File

@ -87,7 +87,7 @@ export class RdDActorVehiculeSheet extends ActorSheet {
// Update Inventory Item // Update Inventory Item
html.find('.item-edit').click(ev => { html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
const item = this.actor.getEmbeddedDocuments('Item', li.data("itemId")); const item = this.actor.getEmbeddedDocument('Item', li.data("itemId"));
item.sheet.render(true); item.sheet.render(true);
}); });
// Delete Inventory Item // Delete Inventory Item

View File

@ -343,13 +343,11 @@ export class RdDActor extends Actor {
async _recupereChance() { async _recupereChance() {
// On ne récupère un point de chance que si aucun appel à la chance dans la journée // On ne récupère un point de chance que si aucun appel à la chance dans la journée
if (this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance')) { if (this.getChanceActuel() < this.getChance() && !this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance')) {
// Nouveau jour, suppression du flag await this.chanceActuelleIncDec(1);
await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance');
}
else {
await this.chanceActuelleIncDec(1);
} }
// Nouveau jour, suppression du flag
await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance');
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -651,14 +649,14 @@ export class RdDActor extends Actor {
return; return;
} }
} }
const actorData = Misc.data(this); const tplData = Misc.templateData(this);
if (caracName == "reve") { if (caracName == "reve") {
if (caracValue > Misc.toInt(actorData.data.reve.seuil.value)) { if (caracValue > Misc.toInt(tplData.reve.seuil.value)) {
this.setPointsDeSeuil(caracValue); this.setPointsDeSeuil(caracValue);
} }
} }
if (caracName == "chance") { if (caracName == "chance") {
if (caracValue > Misc.toInt(actorData.data.compteurs.chance.value)) { if (caracValue > Misc.toInt(tplData.compteurs.chance.value)) {
this.setPointsDeChance(caracValue); this.setPointsDeChance(caracValue);
} }
} }
@ -1435,22 +1433,21 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async moralIncDec(ajustementMoral) { async moralIncDec(ajustementMoral) {
let actorData let tplData = Misc.templateData(this);
if (ajustementMoral != 0) { if (ajustementMoral != 0) {
actorData = Misc.data(this); let moral = Misc.toInt(tplData.compteurs.moral.value) + ajustementMoral
let moral = Misc.toInt(actorData.data.compteurs.moral.value) + ajustementMoral
if (moral > 3) { // exaltation if (moral > 3) { // exaltation
const exaltation = Misc.toInt(actorData.data.compteurs.exaltation.value) + moral - 3; const exaltation = Misc.toInt(tplData.compteurs.exaltation.value) + moral - 3;
await this.updateCompteurValue('exaltation', exaltation); await this.updateCompteurValue('exaltation', exaltation);
} }
if (moral < -3) { // dissolution if (moral < -3) { // dissolution
const dissolution = Misc.toInt(actorData.data.compteurs.dissolution.value) + 3 - moral; const dissolution = Misc.toInt(tplData.compteurs.dissolution.value) + 3 - moral;
await this.updateCompteurValue('dissolution', dissolution); await this.updateCompteurValue('dissolution', dissolution);
} }
moral = Math.max(-3, Math.min(moral, 3)); moral = Math.max(-3, Math.min(moral, 3));
await this.updateCompteurValue('moral', moral); await this.updateCompteurValue('moral', moral);
} }
return actorData.data.compteurs.moral.value; return tplData.compteurs.moral.value;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -2261,9 +2258,6 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) { async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) {
// Stocke si utilisation de la chance // Stocke si utilisation de la chance
await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance');
await this.setFlag('foundryvtt-reve-de-dragon', 'utilisationChance', true);
let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' }; let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' };
const dialog = await RdDRoll.create(this, rollData, const dialog = await RdDRoll.create(this, rollData,
{ html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html' }, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html' },
@ -2283,6 +2277,7 @@ export class RdDActor extends Actor {
async _appelChanceResult(rollData, onSuccess = () => { }, onEchec = () => { }) { async _appelChanceResult(rollData, onSuccess = () => { }, onEchec = () => { }) {
await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-appelchance.html') await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-appelchance.html')
if (rollData.rolled.isSuccess) { if (rollData.rolled.isSuccess) {
await this.setFlag('foundryvtt-reve-de-dragon', 'utilisationChance', true);
await this.chanceActuelleIncDec(-1); await this.chanceActuelleIncDec(-1);
onSuccess(); onSuccess();
} }
@ -2292,11 +2287,8 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async chanceActuelleIncDec(value, limit = true) { async chanceActuelleIncDec(value) {
chance = Math.max(Misc.templateData(this).compteurs.chance.value + value, 0); const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
if (limit) {
chance = Math.min(chance.value, this.getChance())
}
await this.updateCompteurValue("chance", chance); await this.updateCompteurValue("chance", chance);
} }
@ -2532,7 +2524,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getArmeParade(armeParadeId) { getArmeParade(armeParadeId) {
const item = armeParadeId ? this.getEmbeddedDocuments('Item', armeParadeId) : undefined; const item = armeParadeId ? this.getEmbeddedDocument('Item', armeParadeId) : undefined;
return RdDItemArme.getArmeData(item); return RdDItemArme.getArmeData(item);
} }
@ -2549,9 +2541,9 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async equiperObjet(itemID) { async equiperObjet(itemID) {
let item = this.getEmbeddedDocuments('Item', itemID); let item = this.getEmbeddedDocument('Item', itemID);
if (item?.data?.data) { let itemData = Misc.data(item);
let itemData = Misc.itemData(item); if (itemData?.data) {
const isEquipe = !itemData.data.equipe; const isEquipe = !itemData.data.equipe;
let update = { _id: item._id, "data.equipe": isEquipe }; let update = { _id: item._id, "data.equipe": isEquipe };
await this.updateEmbeddedDocuments('Item', [update]); await this.updateEmbeddedDocuments('Item', [update]);
@ -2567,7 +2559,8 @@ export class RdDActor extends Actor {
let dmg = (attackerRoll.dmg.dmgArme ?? 0) + (attackerRoll.dmg.dmgActor ?? 0); let dmg = (attackerRoll.dmg.dmgArme ?? 0) + (attackerRoll.dmg.dmgActor ?? 0);
let armeData = attackerRoll.arme; let armeData = attackerRoll.arme;
let protection = 0; let protection = 0;
const armures = this.data.items.filter(it => it.type == "armure" && it.data.equipe); const armures = this.items.map(it => Misc.data(it))
.filter(it => it.type == "armure" && it.data.equipe);
for (const itemData of armures) { for (const itemData of armures) {
protection += new Roll(itemData.data.protection.toString()).roll().total; protection += new Roll(itemData.data.protection.toString()).roll().total;
if (dmg > 0) { if (dmg > 0) {
@ -2575,7 +2568,7 @@ export class RdDActor extends Actor {
dmg = 0; dmg = 0;
} }
} }
const penetration = armeData ? Misc.toInt(armeData.data.penetration) : 0; const penetration = Misc.toInt(armeData?.data.penetration ?? 0);
protection = Math.max(protection - penetration, 0); protection = Math.max(protection - penetration, 0);
protection += this.getProtectionNaturelle(); protection += this.getProtectionNaturelle();
// Gestion des cas particuliers sur la fenêtre d'encaissement // Gestion des cas particuliers sur la fenêtre d'encaissement
@ -2865,7 +2858,7 @@ export class RdDActor extends Actor {
} }
let updates = [] let updates = []
for (const [valeur, nombre] of Object.entries(fortune)) { for (const [valeur, nombre] of Object.entries(fortune)) {
updates.push( { _id: parValeur[valeur]._id, 'data.quantite': nombre }); updates.push({ _id: parValeur[valeur]._id, 'data.quantite': nombre });
} }
await this.updateEmbeddedDocuments('Item', updates); await this.updateEmbeddedDocuments('Item', updates);
} }
@ -3149,7 +3142,7 @@ export class RdDActor extends Actor {
} }
} }
async onPreUpdateItem(item, change, options, id) { async onPreUpdateItem(item, change, options, id) {
const itemData = Misc.data(item); const itemData = Misc.data(item);
if (itemData.type == 'competence' && itemData.data.defaut_carac && itemData.data.xp) { if (itemData.type == 'competence' && itemData.data.defaut_carac && itemData.data.xp) {
await this.checkCompetenceXP(itemData.name, itemData.data.xp); await this.checkCompetenceXP(itemData.name, itemData.data.xp);

View File

@ -5,8 +5,8 @@ export class RdDItemCompetenceCreature extends Item {
/* -------------------------------------------- */ /* -------------------------------------------- */
static setRollDataCreature(rollData) { static setRollDataCreature(rollData) {
rollData.competence = Misc.data(rollData.competence);
rollData.carac = { "carac_creature": { label: rollData.competence.name, value: rollData.competence.data.carac_value } }; rollData.carac = { "carac_creature": { label: rollData.competence.name, value: rollData.competence.data.carac_value } };
rollData.competence = duplicate(rollData.competence);
rollData.competence.data.defaut_carac = "carac_creature"; rollData.competence.data.defaut_carac = "carac_creature";
rollData.competence.data.categorie = "creature"; rollData.competence.data.categorie = "creature";
rollData.selectedCarac = rollData.carac.carac_creature; rollData.selectedCarac = rollData.carac.carac_creature;

View File

@ -97,19 +97,8 @@ export class Misc {
return [...new Set(array)]; return [...new Set(array)];
} }
static actorData(actor) {
return Misc.data(actor);
}
static itemData(item) {
return Misc.data(item);
}
static data(it) { static data(it) {
if (it instanceof Item) { if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
return it.data;
}
if (it instanceof Actor) {
return it.data; return it.data;
} }
return it; return it;

View File

@ -143,18 +143,20 @@ export class RdDCombatManager extends Combat {
// Gestion des armes 1/2 mains // Gestion des armes 1/2 mains
let armesEquipe = []; let armesEquipe = [];
for (const arme of armes) { for (const arme of armes) {
if (arme.data.equipe) { let armeData = Misc.data(arme);
armesEquipe.push(arme); if (armeData.data.equipe) {
let comp = competences.find(c => c.name == arme.data.competence); let compData = competences.map(c => Misc.data(c)).find(c => c.name == armeData.data.competence);
arme.data.initiative = RdDCombatManager.calculInitiative(arme.data.niveau, carac[comp.data.defaut_carac].value);
armesEquipe.push(armeData);
armeData.data.initiative = RdDCombatManager.calculInitiative(armeData.data.niveau, carac[compData.data.defaut_carac].value);
// Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence // Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence
if (arme.data.unemain && !arme.data.deuxmains) { if (armeData.data.unemain && !armeData.data.deuxmains) {
arme.data.mainInfo = "(1m)"; armeData.data.mainInfo = "(1m)";
} else if (!arme.data.unemain && arme.data.deuxmains) { } else if (!armeData.data.unemain && armeData.data.deuxmains) {
arme.data.mainInfo = "(2m)"; armeData.data.mainInfo = "(2m)";
} else if (arme.data.unemain && arme.data.deuxmains) { } else if (armeData.data.unemain && armeData.data.deuxmains) {
arme.data.mainInfo = "(1m)"; armeData.data.mainInfo = "(1m)";
let arme2main = duplicate(arme); let arme2main = duplicate(armeData);
arme2main.data.mainInfo = "(2m)"; arme2main.data.mainInfo = "(2m)";
arme2main.data.dommages = arme2main.data.dommages.split("/")[1]; // Existence temporaire uniquement dans la liste des armes, donc OK arme2main.data.dommages = arme2main.data.dommages.split("/")[1]; // Existence temporaire uniquement dans la liste des armes, donc OK
arme2main.data.competence = arme2main.data.competence.replace(" 1 main", " 2 mains"); // Replace ! arme2main.data.competence = arme2main.data.competence.replace(" 1 main", " 2 mains"); // Replace !
@ -182,7 +184,6 @@ export class RdDCombatManager extends Combat {
} else { } else {
// Recupération des items 'arme' // Recupération des items 'arme'
let armes = items.filter(it => RdDItemArme.isArmeUtilisable(it)) let armes = items.filter(it => RdDItemArme.isArmeUtilisable(it))
.map(arme => duplicate(arme)) /* pas de changements aux armes d'origine */
.concat(RdDItemArme.mainsNues()); .concat(RdDItemArme.mainsNues());
let competences = items.filter(it => it.type == 'competence'); let competences = items.filter(it => it.type == 'competence');

View File

@ -7,17 +7,23 @@ export class RdDEncaisser extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
constructor(html, actor) { constructor(html, actor) {
// Common conf // Common conf
const buttonsCreatures = {
"mortel": { label: "mortel", callback: html => this.performEncaisser("mortel") },
"non-mortel": { label: "non-mortel", callback: html => this.performEncaisser("non-mortel") },
};
const buttonsEntitesCauchemar = {
"cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") }
};
const buttons = actor.isEntiteCauchemar() ? buttonsEntitesCauchemar : buttonsCreatures;
let dialogConf = { let dialogConf = {
title: "Jet d'Encaissement", title: "Jet d'Encaissement",
content: html, content: html,
buttons: { buttons: buttons,
"mortel": { label: "mortel", callback: html => this.performEncaisser(html, "mortel") },
"non-mortel": { label: "non-mortel", callback: html => this.performEncaisser(html, "non-mortel") },
"cauchemar": { label: "cauchemar", callback: html => this.performEncaisser(html, "cauchemar") }
},
default: "coupMortel" default: "coupMortel"
} }
let dialogOptions = { let dialogOptions = {
classes: ["rdddialog"], classes: ["rdddialog"],
width: 320, width: 320,
@ -32,13 +38,15 @@ export class RdDEncaisser extends Dialog {
this.encaisserSpecial = "aucun"; this.encaisserSpecial = "aucun";
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
performEncaisser(html, mortalite = "mortel") { performEncaisser(mortalite) {
this.actor.encaisserDommages({ this.actor.encaisserDommages({
dmg:{ dmg: {
total: Number(this.modifier), total: Number(this.modifier),
encaisserSpecial: this.encaisserSpecial, encaisserSpecial: this.encaisserSpecial,
loc: { result: 0, label: "Corps" }, loc: { result: 0, label: "" },
mortalite: mortalite mortalite: mortalite
} }
}); });

View File

@ -1,5 +1,6 @@
/* -------------------------------------------- */ /* -------------------------------------------- */
import { HtmlUtility } from "./html-utility.js"; import { HtmlUtility } from "./html-utility.js";
import { Misc } from "./misc.js";
import { RdDCombatManager } from "./rdd-combat.js"; import { RdDCombatManager } from "./rdd-combat.js";
import { RdDUtility } from "./rdd-utility.js"; import { RdDUtility } from "./rdd-utility.js";
@ -24,7 +25,7 @@ export class RdDTokenHud {
let token = canvas.tokens.get(tokenId); let token = canvas.tokens.get(tokenId);
let actor = token.actor; let actor = token.actor;
let combatant = game.combat.data.combatants.find(c => c.tokenId == token.data._id); let combatant = game.combat.combatants.find(c => Misc.data(c).tokenId == tokenId);
app.hasExtension = true; app.hasExtension = true;
let armesList = RdDCombatManager.buildListeActionsCombat(combatant) ; let armesList = RdDCombatManager.buildListeActionsCombat(combatant) ;

View File

@ -197,7 +197,7 @@
{{!-- Equipment Tab --}} {{!-- Equipment Tab --}}
<div class="tab items" data-group="primary" data-tab="items"> <div class="tab items" data-group="primary" data-tab="items">
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> - <span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.attributs.encombrement.value}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name"><a id="creer-un-objet">Créer un objet</a></span> <span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}} {{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span> <span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}} {{/if}}

View File

@ -461,6 +461,7 @@
{{!-- Connaissances Tab --}} {{!-- Connaissances Tab --}}
<div class="tab connaissances" data-group="primary" data-tab="connaissances"> <div class="tab connaissances" data-group="primary" data-tab="connaissances">
<span class="item-name"><a class="creer-une-oeuvre">Créer une oeuvre</a></span>
<h3>Oeuvres diverses :</h3> <h3>Oeuvres diverses :</h3>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
{{#each chants as |chant id|}} {{#each chants as |chant id|}}
@ -526,7 +527,7 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
<h3>Tâches</h3><a id='creer-tache'>Créer une nouvelle Tâche</a> <h3>Tâches</h3><a class='creer-tache'>Créer une nouvelle Tâche</a>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
{{#each taches as |tache id|}} {{#each taches as |tache id|}}
<li class="item flexrow list-item" data-item-id="{{tache._id}}"><span class="competence-title tache-label"><a>{{tache.name}} ({{tache.data.points_de_tache_courant}}/{{tache.data.points_de_tache}})</a></span> <li class="item flexrow list-item" data-item-id="{{tache._id}}"><span class="competence-title tache-label"><a>{{tache.name}} ({{tache.data.points_de_tache_courant}}/{{tache.data.points_de_tache}})</a></span>
@ -723,7 +724,7 @@
<span class="item-name">Estimation de l'équipement : {{numberFormat calc.prixTotalEquipement decimals=2}} Sols</span> <span class="item-name">Estimation de l'équipement : {{numberFormat calc.prixTotalEquipement decimals=2}} Sols</span>
</div> </div>
<div> <div>
<span class="item-name"><a id="creer-un-objet">Créer un objet</a></span> <span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}} {{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span> <span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}} {{/if}}

View File

@ -69,7 +69,7 @@
{{!-- Equipment Tab --}} {{!-- Equipment Tab --}}
<div class="tab items" data-group="primary" data-tab="items"> <div class="tab items" data-group="primary" data-tab="items">
<span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.capacite_encombrement}} <b>{{calc.surEncombrementMessage}}</b></span> - <span class="item-name">Encombrement total/max : {{numberFormat calc.encTotal decimals=2}} / {{data.capacite_encombrement}} <b>{{calc.surEncombrementMessage}}</b></span> -
<span class="item-name"><a id="creer-un-objet">Créer un objet</a></span> <span class="item-name"><a class="creer-un-objet">Créer un objet</a></span>
{{#if options.isGM}} {{#if options.isGM}}
<span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span> <span class="item-name"> - <a id="nettoyer-conteneurs">Vider tout les conteneurs</a></span>
{{/if}} {{/if}}

View File

@ -17,9 +17,9 @@
</h4> </h4>
<div> <div>
Je d'encaissement de {{roll.total}} Je d'encaissement de {{roll.total}}
{{#unless (eq armure 0)}}, l'armure a protègé de {{armure}} {{#unless (eq penetration 0)}}(pénétration de {{penetration}}) {{#unless (eq armure 0)}}, l'armure a protègé de {{armure}}
{{/unless}} {{~#unless (eq penetration 0)}} (pénétration de {{penetration}}){{/unless}}
{{/unless}}, total: <span class="rdd-roll-echec">{{total}}</span> {{~/unless}}, total: <span class="rdd-roll-echec">{{total}}</span>
<br> <br>
{{alias}} {{alias}}
{{#if (eq dmg.mortalite 'cauchemar')}}subit le coup {{#if (eq dmg.mortalite 'cauchemar')}}subit le coup
@ -29,10 +29,14 @@
{{else if critiques}}subit une blessure critique {{else if critiques}}subit une blessure critique
{{else if mort}}vient de mourir {{else if mort}}vient de mourir
{{else}}s'en sort sans une égratignure {{else}}s'en sort sans une égratignure
{{/if}} {{~/if~}}
({{dmg.loc.label}}) {{~#unless (eq dmg.mortalite 'cauchemar')}}
{{#if (gt endurance 0)}} {{#if dmg.loc.label}}
{{#if hasPlayerOwner}}, a perdu {{endurance}} points d'endurance {{#if (gt roll.total 0)}}({{dmg.loc.label}}){{/if}}
{{/if}}
{{/unless~}}
{{~#if (gt endurance 0)}}
{{~#if hasPlayerOwner}}, a perdu {{endurance}} points d'endurance
{{#if (ne vie 0)}}, <span class="rdd-roll-echec">{{vie}} points de vie</span>{{/if}} {{#if (ne vie 0)}}, <span class="rdd-roll-echec">{{vie}} points de vie</span>{{/if}}
{{/if}} {{/if}}
{{#if (ne dmg.mortalite 'cauchemar')}} {{#if (ne dmg.mortalite 'cauchemar')}}