diff --git a/module/actor-creature-sheet.js b/module/actor-creature-sheet.js index beef2d47..6e817b2d 100644 --- a/module/actor-creature-sheet.js +++ b/module/actor-creature-sheet.js @@ -37,7 +37,8 @@ export class RdDActorCreatureSheet extends RdDActorSheet { formData.calc.surEncombrementMessage = (formData.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : ""; RdDUtility.filterItemsPerTypeForSheet(formData); - RdDUtility.buildArbreDeConteneur(this, formData); + this.objetVersConteneur = RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.objets); + formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); console.log("Creature : ", this.objetVersConteneur, formData); diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 4b5b3512..49b6e088 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -112,7 +112,9 @@ export class RdDActorSheet extends ActorSheet { cacheTMR: this.actor.isTMRCache() } - RdDUtility.buildArbreDeConteneur(this, formData); + this.objetVersConteneur = RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.objets); + formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); + formData.subacteurs = { vehicules: this.actor.listeVehicules(), montures: this.actor.listeMontures(), @@ -130,10 +132,17 @@ export class RdDActorSheet extends ActorSheet { } /* -------------------------------------------- */ - async _onDrop(event) { - let toSuper = await this.actor.processItemDropEvent(event, this.objetVersConteneur); - if (toSuper) { - super._onDrop(event); + async _onDropActor(event, dragData) { + console.log("DRAG", this.actor.id, dragData); + this.actor.addSubacteur(dragData.id || dragData.data._id); + super._onDropActor(event, dragData); + } + + /* -------------------------------------------- */ + async _onDropItem(event, dragData) { + const callSuper = await this.actor.processDropItem(event, dragData, this.objetVersConteneur); + if (callSuper) { + await super._onDropItem(event, dragData) } } @@ -221,14 +230,11 @@ export class RdDActorSheet extends ActorSheet { const item = this.actor.items.get(li.data("item-id")); item.sheet.render(true); }); - // Update Inventory Item html.find('.rencontre-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); const rencontreKey = li.data("item-id"); this.actor.deleteTMRRencontre(rencontreKey); }); - - // Delete Inventory Item html.find('.item-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); RdDUtility.confirmerSuppression(this, li); @@ -623,11 +629,10 @@ export class RdDActorSheet extends ActorSheet { } async _onSplitItem(item, split) { - const itemData = Misc.data(item); - if (split >= 1 && split < itemData.data.quantite) { + if (split >= 1 && split < Misc.data(item).data.quantite) { await item.diminuerQuantite(split); + const itemData = duplicate( Misc.data(item)); itemData.data.quantite = split; - itemData.id = undefined; await this.actor.createEmbeddedDocuments('Item', [itemData]) } } diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index 13ac3c1e..21c90ea5 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -52,7 +52,8 @@ export class RdDActorVehiculeSheet extends ActorSheet { }; RdDUtility.filterItemsPerTypeForSheet(formData); - RdDUtility.buildArbreDeConteneur(this, formData); + this.objetVersConteneur = RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.objets); + formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); formData.options.isGM = game.user.isGM; @@ -67,10 +68,10 @@ export class RdDActorVehiculeSheet extends ActorSheet { } /* -------------------------------------------- */ - async _onDrop(event) { - let toSuper = await this.actor.processItemDropEvent(event, this.objetVersConteneur); - if ( toSuper) { - super._onDrop(event); + async _onDropItem(event, dragData) { + const callSuper = await this.actor.processDropItem(event, dragData, this.objetVersConteneur); + if (callSuper) { + await super._onDropItem(event, dragData) } } diff --git a/module/actor.js b/module/actor.js index c3503f82..5132b08e 100644 --- a/module/actor.js +++ b/module/actor.js @@ -349,7 +349,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async verifierPotionsEnchantees() { - let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante); + let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.magique); for (let potion of potionsEnchantees) { if (!potion.prpermanent) { console.log(potion); @@ -920,28 +920,29 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ /** Supprime un item d'un conteneur, sur la base * de leurs ID */ - async enleverDeConteneur(itemId, conteneur) { - if (conteneur?.isConteneur()) { // Si présent + async enleverDeConteneur(item, conteneur, objetVersConteneur) { + if (conteneur?.isConteneur()) { let data2use = duplicate(Misc.data(conteneur)); - //console.log("Suppression du conteneur1", conteneurId, itemId, data2use.data.contenu); let contenu = data2use.data.contenu; - let index = contenu.indexOf(itemId); + let index = contenu.indexOf(item.id); while (index >= 0) { // Force cleanup, itemId is unique contenu.splice(index, 1); - index = contenu.indexOf(itemId); + index = contenu.indexOf(item.id); } await this.updateEmbeddedDocuments('Item', [data2use]); + delete objetVersConteneur[item.id]; } } /* -------------------------------------------- */ /** Ajoute un item dans un conteneur, sur la base * de leurs ID */ - async ajouterDansConteneur(itemId, conteneur) { + async ajouterDansConteneur(item, conteneur, objetVersConteneur) { if (conteneur?.isConteneur()) { let data2use = duplicate(Misc.data(conteneur)); - data2use.data.contenu.push(itemId); + data2use.data.contenu.push(item.id); await this.updateEmbeddedDocuments('Item', [data2use]); + objetVersConteneur[item.id] = conteneur.id; } } @@ -959,54 +960,52 @@ export class RdDActor extends Actor { await this.updateEmbeddedDocuments('Item', conteneurFixedList); } - /* -------------------------------------------- */ - async processItemDropEvent(event, objetVersConteneur) { - let dragData = JSON.parse(event.dataTransfer.getData("text/plain")); + async processDropItem(event, dragData, objetVersConteneur) { console.log("DRAG", this.id, dragData); - let itemId = dragData.id || dragData.data._id; - if (dragData.type == 'Item') { - if (dragData.actorId && dragData.actorId != this.id) { - console.log("Moving objects", dragData); - this.moveItemsBetweenActors(itemId, dragData.actorId); - return false; - } + const droppedItemId = dragData.id || dragData.data._id; + if (dragData.actorId && dragData.actorId != this.id) { + console.log("Moving objects", dragData); + this.moveItemsBetweenActors(droppedItemId, dragData.actorId); + return false; + } + + let result = true; + const destId = $(event.target).parents(".item").attr("data-item-id"); + const itemId = dragData.id || dragData.data._id; + const item = this.getObjet(itemId); + if (item.isEquipement()) { if (dragData.actorId == this.id) { // rangement - const destId = $(event.target).parents(".item").attr("data-item-id"); const srcId = objetVersConteneur[itemId]; if (srcId != destId && itemId != destId) { // déplacement de l'objet - const item = this.getObjet(itemId); const dest = this.getObjet(destId); const src = this.getObjet(srcId); - if (!dest) { - // on peut toujours vider son sac - await this.enleverDeConteneur(itemId, src); + if (dest?.isConteneur()) { + if (this.conteneurPeutContenir(dest, item)) { + await this.enleverDeConteneur(item, src, objetVersConteneur); + await this.ajouterDansConteneur(item, dest, objetVersConteneur); + } } - else if (!dest.isConteneur()) { - // regrouper? - await this.regrouperEquipementsSimilaires(item, dest); - } - else if (this.conteneurPeutContenir(dest, item)) { - // déplacer? - await this.enleverDeConteneur(itemId, src); - await this.ajouterDansConteneur(itemId, dest); + else { + if (src?.isConteneur() && !item?.isConteneur()) { + await this.enleverDeConteneur(item, src, objetVersConteneur); + // simuler la re-création + dragData.actorId = null; + await this.deleteEmbeddedDocuments('Item', [item.id]); + } + else if (dest?.isEquipementSimilaire(item)) { + await this.regrouperEquipementsSimilaires(item, dest); + } } } } - this.computeEncombrementTotalEtMalusArmure(); + await this.computeEncombrementTotalEtMalusArmure(); } - if (dragData.type == "Actor") { - this.addSubacteur(itemId); - } - return true; + return result; } - + /* -------------------------------------------- */ conteneurPeutContenir(dest, item) { const destData = Misc.data(dest); - if (destData?.type != 'conteneur') { - ui.notifications.warn(`Impossible de déplacer un objet (${item.name}) vers un ${destData.type} qui n'est pas un conteneur (${dest.name}) !`); - return false; - } if (this._isConteneurContenu(item, dest)) { ui.notifications.warn(`Impossible de déplacer un conteneur parent (${item.name}) dans un de ses contenus ${destData.name} !`); return false; // Loop detected ! @@ -1061,10 +1060,8 @@ export class RdDActor extends Actor { } async regrouperEquipementsSimilaires(item, dest) { - if (item.isEquipementSimilaire(dest)) { - await dest.quantiteIncDec(Misc.templateData(item).quantite); - await this.deleteEmbeddedDocuments('Item', [item.id]); - } + await dest.quantiteIncDec(Misc.templateData(item).quantite); + await this.deleteEmbeddedDocuments('Item', [item.id]); } /* -------------------------------------------- */ @@ -1474,7 +1471,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async santeIncDec(name, inc, isCritique = false) { + async santeIncDec(name, inc, options = {isCritique: false, ethylisme: false}) { const sante = duplicate(Misc.templateData(this).sante); let compteur = sante[name]; @@ -1491,7 +1488,7 @@ export class RdDActor extends Actor { //console.log("New value ", inc, minValue, result.newValue); let fatigue = 0; if (name == "endurance" && !this.isEntiteCauchemar()) { - if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie + if (result.newValue == 0 && inc < 0 && !options.isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie sante.vie.value--; } result.newValue = Math.max(0, result.newValue); @@ -1499,7 +1496,7 @@ export class RdDActor extends Actor { result.newValue = Math.min(result.newValue, this._computeEnduranceMax()) } const perte = compteur.value - result.newValue; - if (perte > 1) { + if (perte > 1 && !options.ethylisme) { // Peut-être sonné si 2 points d'endurance perdus d'un coup const testIsSonne = await this.testSiSonne(sante, result.newValue); result.sonne = testIsSonne.sonne; @@ -1669,7 +1666,7 @@ export class RdDActor extends Actor { let enduranceLost = new Roll("1d6").roll().total; rollDataView.enduranceLost = enduranceLost; - await this.santeIncDec("endurance", -enduranceLost, false); + await this.santeIncDec("endurance", -enduranceLost, {ethylisme:true}); // Qui a bu boira (p 164) let rollVolonte = await RdDResolutionTable.roll(actorData.data.carac.volonte.value, Math.min(ethylisme.value, 0) + actorData.data.compteurs.moral.value); rollDataView.rollVolonteIsSuccess = rollVolonte.isSuccess; @@ -2348,7 +2345,7 @@ export class RdDActor extends Actor { // Mise à jour de la tache rollData.tache = duplicate(rollData.tache); rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache; - if (rollData.rolled.isETotal){ + if (rollData.rolled.isETotal) { rollData.tache.data.difficulte--; } this.updateEmbeddedDocuments('Item', [rollData.tache]); @@ -2948,7 +2945,7 @@ export class RdDActor extends Actor { const perteVie = this.isEntiteCauchemar() ? { newValue: 0 } : await this.santeIncDec("vie", - encaissement.vie); - const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, (encaissement.critiques > 0)); + const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, {critiques: encaissement.critiques > 0}); this.computeEtatGeneral(); this.sheet.render(false); @@ -3444,7 +3441,7 @@ export class RdDActor extends Actor { potionData.alias = this.name; potionData.supprimer = true; - if (potionData.data.isEnchante) { + if (potionData.data.magique) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData) @@ -3476,7 +3473,7 @@ export class RdDActor extends Actor { potionData.alias = this.name; potionData.supprimer = true; - if (potionData.data.isEnchante) { + if (potionData.data.magique) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData) diff --git a/module/item-sheet.js b/module/item-sheet.js index c8d20b98..41f57438 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -5,6 +5,8 @@ import { RdDAlchimie } from "./rdd-alchimie.js"; import { RdDItemCompetence } from "./item-competence.js"; import { RdDHerbes } from "./rdd-herbes.js"; import { Misc } from "./misc.js"; +import { HtmlUtility } from "./html-utility.js"; +import { ReglesOptionelles } from "./regles-optionelles.js"; /** * Extend the basic ItemSheet with some very simple modifications @@ -62,8 +64,7 @@ export class RdDItemSheet extends ItemSheet { owner: this.document.isOwner, editable: this.isEditable, cssClass: this.isEditable ? "editable" : "locked", - isSoins: false, - isEnchante: false + isSoins: false } if ( this.actor ) { formData.isOwned = true; @@ -102,12 +103,14 @@ export class RdDItemSheet extends ItemSheet { activateListeners(html) { super.activateListeners(html); + HtmlUtility._showControlWhen($(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.object.isOwned); + // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; + // Select competence categorie - html.find(".categorie").on("click", this._onClickSelectCategorie.bind(this) ); - html.find(".categoriepotion").on("click", this.render(true) ); + html.find(".categorie").change(event => this._onSelectCategorie(event)); html.find('.sheet-competence-xp').change((event) => { if ( this.object.data.type == 'competence') { @@ -153,12 +156,14 @@ export class RdDItemSheet extends ItemSheet { } /* -------------------------------------------- */ - async _onClickSelectCategorie(event) { + async _onSelectCategorie(event) { event.preventDefault(); - - let level = RdDItemCompetence.getNiveauBase(event.currentTarget.value); - Misc.templateData(this.object).base = level; - $("#base").val( level ); + + if (this.object.isCompetence()){ + let level = RdDItemCompetence.getNiveauBase(event.currentTarget.value); + Misc.templateData(this.object).base = level; + $("#base").val(level); + } } /* -------------------------------------------- */ diff --git a/module/item.js b/module/item.js index cffc0737..2f74d075 100644 --- a/module/item.js +++ b/module/item.js @@ -17,6 +17,10 @@ export class RdDItem extends Item { return typesObjetsOeuvres; } + isCompetence() { + return Misc.data(this).type == 'competence'; + } + isConteneur() { return Misc.data(this).type == 'conteneur'; } @@ -39,6 +43,9 @@ export class RdDItem extends Item { return itemData.type == 'objet' && Grammar.toLowerCaseNoAccent(itemData.name) == 'cristal alchimique' && itemData.data.quantite > 0; } + isMagique(){ + return Misc.templateData(this.object).magique; + } getEnc() { const itemData = Misc.data(this); @@ -64,8 +71,8 @@ export class RdDItem extends Item { prepareDataPotion() { const tplData = Misc.templateData(this); const categorie = Grammar.toLowerCaseNoAccent(tplData.categorie); - tplData.isEnchante = categorie.includes('enchante'); - if (tplData.isEnchante) { + tplData.magique = categorie.includes('enchante'); + if (tplData.magique) { if (categorie.includes('soin') || categorie.includes('repos')) { tplData.puissance = tplData.herbebonus * tplData.pr; } @@ -144,7 +151,7 @@ export class RdDItem extends Item { if (tplData.quantite == undefined) return false; for (const [key, value] of Object.entries(tplData)) { - if (['quantite', 'encTotal', 'prixTotal'].includes(key)) continue; + if (['quantite', 'encTotal', 'prixTotal', 'cout'].includes(key)) continue; if (value != otherTplData[key]) return false; } return true; diff --git a/module/misc.js b/module/misc.js index 30371b8d..68269af3 100644 --- a/module/misc.js +++ b/module/misc.js @@ -63,9 +63,9 @@ export class Misc { } } - static classify(items, classifier = it => it.type, transform = it => it) { + static classify(items, classifier = it => it.type) { let itemsBy = {}; - Misc.classifyInto(itemsBy, items, classifier, transform); + Misc.classifyInto(itemsBy, items, classifier); return itemsBy; } @@ -80,7 +80,7 @@ export class Misc { return itemsBy; } - static classifyInto(itemsBy, items, classifier = it => it.type, transform = it => it) { + static classifyInto(itemsBy, items, classifier = it => it.type) { for (const item of items) { const classification = classifier(item); let list = itemsBy[classification]; @@ -88,11 +88,8 @@ export class Misc { list = []; itemsBy[classification] = list; } - list.push(transform(item)); + list.push(item); } - for (const [key, list] of Object.entries(itemsBy)) { - list.sort(); - }; } static rollOneOf(array) { diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 332be836..97c852f6 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -257,7 +257,7 @@ export class RdDUtility { } /* -------------------------------------------- */ - static filterItemsPerTypeForSheet(formData, itemsByType) { + static filterItemsPerTypeForSheet(formData) { formData.materiel = this.checkNull(formData.itemsByType['objet']); formData.conteneurs = this.checkNull(formData.itemsByType['conteneur']); formData.armes = this.checkNull(formData.itemsByType['arme']); @@ -296,30 +296,34 @@ export class RdDUtility { } /* -------------------------------------------- */ - static buildArbreDeConteneur(actorSheet, formData) { - actorSheet.objetVersConteneur = {}; // Table de hash locale pour recupération rapide du conteneur parent (si existant) + static buildArbreDeConteneurs(conteneurs, objets) { + let objetVersConteneur = {}; // Attribution des objets aux conteneurs - for (let conteneur of formData.conteneurs) { + for (let conteneur of conteneurs) { conteneur.subItems = []; - if (!conteneur.data.encTotal) conteneur.data.encTotal = 0; + if (!conteneur.data.encTotal) + conteneur.data.encTotal = 0; //conteneur.data.encTotal = ; Deja calculé if (conteneur.data.contenu) { for (let id of conteneur.data.contenu) { - let objet = formData.objets.find(objet => (id == objet._id)); + let objet = objets.find(objet => (id == objet._id)); if (objet) { - if (!objet.data.encombrement) objet.data.encombrement = 0; // Auto-fix + if (!objet.data.encombrement) + objet.data.encombrement = 0; // Auto-fix objet.estContenu = true; // Permet de filtrer ce qifui est porté dans le template - actorSheet.objetVersConteneur[id] = conteneur._id; + objetVersConteneur[id] = conteneur._id; conteneur.data.encTotal += Number(objet.data.encombrement) * Number(((objet.data.quantite) ? objet.data.quantite : 1)); conteneur.subItems.push(objet); } } } } - // Construit la liste des conteneurs de niveau 1 (c'est à dire non contenu eux-même dans un conteneur) - let newConteneurs = formData.conteneurs.filter(function (conteneur, index, arr) { return !conteneur.estContenu }); - formData.conteneurs = newConteneurs; - //console.log(newConteneurs); + return objetVersConteneur; + } + + // Construit la liste des conteneurs de niveau 1 (c'est à dire non contenu eux-même dans un conteneur) + static conteneursRacine(conteneurs) { + return conteneurs.filter( (conteneur, index, arr) => !conteneur.estContenu); } /* -------------------------------------------- */ diff --git a/module/regles-optionelles.js b/module/regles-optionelles.js index decd7b69..e2e16a4e 100644 --- a/module/regles-optionelles.js +++ b/module/regles-optionelles.js @@ -1,12 +1,13 @@ const listeReglesOptionelles = [ - {name:'recul', group:'combat', descr:"Appliquer le recul en cas de particulière en force ou de charge"}, - {name:'resistanceArmeParade', group:'combat', descr:"Faire le jet de résistance des armes lors de parades pouvant les endommager"}, - {name:'deteriorationArmure', group:'combat', descr:"Tenir compte de la détérioration des armures"}, - {name:'defenseurDesarme', group:'combat', descr:"Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier"}, - {name:'categorieParade', group:'combat', descr:"Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes"}, - {name:'tripleSignificative', group:'combat', descr:"En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès"}, - {name:'astrologie', group:'generale', descr:"Appliquer les ajustements astrologiques aux jets de chance et aux rituels"} + { name: 'recul', group: 'combat', descr: "Appliquer le recul en cas de particulière en force ou de charge" }, + { name: 'resistanceArmeParade', group: 'combat', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" }, + { name: 'deteriorationArmure', group: 'combat', descr: "Tenir compte de la détérioration des armures" }, + { name: 'defenseurDesarme', group: 'combat', descr: "Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier" }, + { name: 'categorieParade', group: 'combat', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" }, + { name: 'tripleSignificative', group: 'combat', descr: "En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès" }, + { name: 'astrologie', group: 'generale', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true }, + { name: 'afficher-prix-joueurs', group: 'generale', descr: "Afficher le prix de l'équipement des joueurs", default: true } ]; export class ReglesOptionelles extends FormApplication { @@ -14,7 +15,7 @@ export class ReglesOptionelles extends FormApplication { for (const regle of listeReglesOptionelles) { const name = regle.name; const id = ReglesOptionelles._getIdRegle(name); - game.settings.register("foundryvtt-reve-de-dragon", id, { name: id, scope: "world", config: false, default: regle.default??true, type: Boolean }); + game.settings.register("foundryvtt-reve-de-dragon", id, { name: id, scope: "world", config: false, default: regle.default == undefined ? true : regle.default, type: Boolean }); } game.settings.registerMenu("foundryvtt-reve-de-dragon", "rdd-options-regles", { @@ -54,7 +55,7 @@ export class ReglesOptionelles extends FormApplication { formData.regles = listeReglesOptionelles.map(it => { let r = duplicate(it); r.id = ReglesOptionelles._getIdRegle(r.name); - r.active = ReglesOptionelles.isUsing(r.name); + r.active = ReglesOptionelles.isUsing(r.name); return r; }) return formData; diff --git a/templates/chat-actor-turn-summary.html b/templates/chat-actor-turn-summary.html index f0f89a1e..15058a36 100644 --- a/templates/chat-actor-turn-summary.html +++ b/templates/chat-actor-turn-summary.html @@ -2,7 +2,7 @@
{{blessuresStatus}}
Son état général est de : {{etatGeneral}} {{#if isSonne}} et est sonné{{/if}}
{{#if isGrave}} -
{{alias}} souffre de Blessure(s) Grave(s) : n'oubliez pas de faire un Je de Vie toutes les SC ({{SConst}}) minutes.
+
{{alias}} souffre de Blessure(s) Grave(s) : n'oubliez pas de faire un Jet de Vie toutes les SC ({{SConst}}) minutes, et de retirer 1 point d'endurance par blessure grave.
{{/if}} {{#if isCritique}}
{{alias}} souffre d'une Blessure Critique : faites un Jet de Vie.
diff --git a/templates/chat-consommer-potion-generique.html b/templates/chat-consommer-potion-generique.html index 8f2b5838..e3d514ca 100644 --- a/templates/chat-consommer-potion-generique.html +++ b/templates/chat-consommer-potion-generique.html @@ -1,9 +1,9 @@ potion de repos

- {{alias}} consomme sa Potion {{#if data.isEnchante}}enchantée{{/if}} de {{name}}. + {{alias}} consomme sa Potion {{#if data.magique}}enchantée{{/if}} de {{name}}.


- Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if data.isEnchante}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}. + Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if data.magique}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}.
La potion a été supprimée de l'équipement.
diff --git a/templates/chat-consommer-potion-repos.html b/templates/chat-consommer-potion-repos.html index a51e11f9..37cc9f99 100644 --- a/templates/chat-consommer-potion-repos.html +++ b/templates/chat-consommer-potion-repos.html @@ -1,10 +1,10 @@ potion de repos

- {{alias}} consomme sa Potion de Repos {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins). + {{alias}} consomme sa Potion de Repos {{#if data.magique}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).


- {{#if data.isEnchante}} + {{#if data.magique}} Elle permet de récupérer jusqu'à {{data.puissance}} cases de repos. {{else}} Une fois consommée vers fin Lyre, elle vous octroie un bonus de {{data.herbebonus}} segments de fatigue récupérés en plus à la fin de Chateau Dormant (à gérer manuellement). diff --git a/templates/chat-consommer-potion-soin.html b/templates/chat-consommer-potion-soin.html index 61a400b6..0d88518a 100644 --- a/templates/chat-consommer-potion-soin.html +++ b/templates/chat-consommer-potion-soin.html @@ -1,10 +1,10 @@ potion de soin

- {{alias}} consomme sa Potion de soins {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins). + {{alias}} consomme sa Potion de soins {{#if data.magique}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).


- {{#if data.isEnchante}} + {{#if data.magique}} Elle permet de guérir {{data.puissance}} Points de Guérison. {{else}} Lors de votre prochain jet de récupération à Chateau Dormant, vous bénéficierez d'un bonus de {{data.herbebonus}} (appliqué automatiquement). diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html index b39d65e5..494f7b87 100644 --- a/templates/item-arme-sheet.html +++ b/templates/item-arme-sheet.html @@ -9,7 +9,7 @@ {{!-- Sheet Body --}}
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-
- +
+
- +
-
- +
+
-
- +
+
- +
-
+
diff --git a/templates/item-conteneur-sheet.html b/templates/item-conteneur-sheet.html index ffca355b..b6fd46ca 100644 --- a/templates/item-conteneur-sheet.html +++ b/templates/item-conteneur-sheet.html @@ -20,7 +20,7 @@
-
+
diff --git a/templates/item-herbe-sheet.html b/templates/item-herbe-sheet.html index 48227912..9d40e257 100644 --- a/templates/item-herbe-sheet.html +++ b/templates/item-herbe-sheet.html @@ -22,7 +22,7 @@
-
+
diff --git a/templates/item-ingredient-sheet.html b/templates/item-ingredient-sheet.html index 601aa2b5..94004736 100644 --- a/templates/item-ingredient-sheet.html +++ b/templates/item-ingredient-sheet.html @@ -21,7 +21,7 @@
-
+
diff --git a/templates/item-livre-sheet.html b/templates/item-livre-sheet.html index 276b7703..8230103c 100644 --- a/templates/item-livre-sheet.html +++ b/templates/item-livre-sheet.html @@ -55,7 +55,7 @@
-
+
diff --git a/templates/item-munition-sheet.html b/templates/item-munition-sheet.html index 7374f057..e438ef6f 100644 --- a/templates/item-munition-sheet.html +++ b/templates/item-munition-sheet.html @@ -20,7 +20,7 @@
-
+
diff --git a/templates/item-nourritureboisson-sheet.html b/templates/item-nourritureboisson-sheet.html index 8f0f7fa4..ee965f5e 100644 --- a/templates/item-nourritureboisson-sheet.html +++ b/templates/item-nourritureboisson-sheet.html @@ -49,7 +49,7 @@
-
+
diff --git a/templates/item-objet-sheet.html b/templates/item-objet-sheet.html index db84dffe..1ce77f5e 100644 --- a/templates/item-objet-sheet.html +++ b/templates/item-objet-sheet.html @@ -24,7 +24,7 @@
-
+
diff --git a/templates/item-potion-sheet.html b/templates/item-potion-sheet.html index 628a6064..4cb178b2 100644 --- a/templates/item-potion-sheet.html +++ b/templates/item-potion-sheet.html @@ -21,7 +21,7 @@
-
+
@@ -77,7 +77,7 @@
{{/if}} - {{#if data.isEnchante}} + {{#if data.magique}}