diff --git a/module/actor-entite-sheet.js b/module/actor-entite-sheet.js
index 7b953e00..93888936 100644
--- a/module/actor-entite-sheet.js
+++ b/module/actor-entite-sheet.js
@@ -117,7 +117,7 @@ export class RdDActorEntiteSheet extends ActorSheet {
this.render(true);
});
- html.find('#encaisser-direct').click(ev => {
+ html.find('.encaisser-direct').click(ev => {
this.actor.encaisser();
});
diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 2cf90ea1..15f9adf5 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -257,18 +257,18 @@ export class RdDActorSheet extends ActorSheet {
const li = $(ev.currentTarget).parents(".item");
RdDUtility.confirmerSuppression(this, li);
});
- html.find('.item-consommer').click(ev => {
+ html.find('.item-action').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("item-id");
const item = this.actor.getObjet(itemId);
- this.actor.consommer(item);
+ this.actor.actionItem(item);
});
html.find('.subacteur-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
RdDUtility.confirmerSuppressionSubacteur(this, li);
});
- html.find('#encaisser-direct').click(ev => {
+ html.find('.encaisser-direct').click(ev => {
this.actor.encaisser();
});
@@ -416,27 +416,27 @@ export class RdDActorSheet extends ActorSheet {
}
});
// Display TMR, visuualisation
- html.find('#visu-tmr').click((event) => {
+ html.find('.visu-tmr').click((event) => {
this.actor.displayTMR("visu");
});
// Display TMR, normal
- html.find('#monte-tmr').click((event) => {
+ html.find('.monte-tmr').click((event) => {
this.actor.displayTMR("normal");
});
// Display TMR, fast
- html.find('#monte-tmr-rapide').click((event) => {
+ html.find('.monte-tmr-rapide').click((event) => {
this.actor.displayTMR("rapide");
});
- html.find('#dormir-une-heure').click((event) => {
+ html.find('.dormir-une-heure').click((event) => {
this.actor.dormir(1);
});
- html.find('#dormir-chateau-dormant').click((event) => {
+ html.find('.dormir-chateau-dormant').click((event) => {
this.actor.dormirChateauDormant();
});
- html.find('#enlever-tous-effets').click((event) => {
+ html.find('.enlever-tous-effets').click((event) => {
this.actor.enleverTousLesEffets();
});
// Display info about queue
diff --git a/module/actor.js b/module/actor.js
index 9de3911d..e98339a8 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -27,7 +27,6 @@ import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
import { Draconique } from "./tmr/draconique.js";
import { RdDCarac } from "./rdd-carac.js";
import { Monnaie } from "./item-monnaie.js";
-import { RdDHerbes } from "./rdd-herbes.js";
import { DialogConsommer } from "./dialog-consommer.js";
import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js";
@@ -310,22 +309,22 @@ export class RdDActor extends Actor {
getDemiReve() {
return Misc.templateData(this).reve.tmrpos.coord;
}
-
+
/* -------------------------------------------- */
async verifierPotionsEnchantees() {
- let potionsEnchantees = this.filterItemsData( it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante'));
- for ( let potion of potionsEnchantees) {
- if ( !potion.prpermanent) {
+ let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante);
+ for (let potion of potionsEnchantees) {
+ if (!potion.prpermanent) {
console.log(potion);
let newPr = (potion.data.pr > 0) ? potion.data.pr - 1 : 0;
- let update = { _id: potion._id, 'data.pr': newPr};
+ let update = { _id: potion._id, 'data.pr': newPr };
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
let messageData = {
- pr : newPr,
- alias : this.name,
- potionName : potion.name,
- potionImg : potion.img
+ pr: newPr,
+ alias: this.name,
+ potionName: potion.name,
+ potionImg: potion.img
}
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
@@ -380,7 +379,7 @@ export class RdDActor extends Actor {
await this._recupereChance();
await this.transformerStress();
await this.retourSeuilDeReve(message);
- this.bonusRecuperationPotion= 0; // Reset potion
+ this.bonusRecuperationPotion = 0; // Reset potion
await this.retourSust(message);
await this.verifierPotionsEnchantees();
message.content = `A la fin Chateau Dormant, ${message.content}
Un nouveau jour se lève`;
@@ -404,7 +403,7 @@ export class RdDActor extends Actor {
let definition = definitions.find(d => d.type == type);
for (let blessure of liste) {
if (blessure.jours >= definition.facteur) {
- let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets)+this.bonusRecuperationPotion, message);
+ let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets) + this.bonusRecuperationPotion, message);
blessure.soins_complets = 0;
if (rolled.isSuccess && this._retrograderBlessure(type, blessure, moindres)) {
message.content += ` -- une blessure ${type} cicatrise`;
@@ -743,7 +742,6 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async updateCreatureCompetence(compName, fieldName, compValue) {
let comp = this.getCompetence(compName);
- //console.log(comp);
if (comp) {
const update = { _id: comp.id }
if (fieldName == "niveau")
@@ -752,7 +750,6 @@ export class RdDActor extends Actor {
update['data.dommages'] = compValue;
else
update['data.carac_value'] = compValue;
- //console.log(update);
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
}
@@ -1610,25 +1607,80 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async consommer(item) {
- DialogConsommer.create(this, item, {
- html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-consommer-nourriture.html',
- }, []);
+ async actionItem(item) {
+ if (!item.getActionPrincipale()) return;
+ switch (Misc.data(item).type) {
+ case 'nourritureboisson': return await this.actionNourritureboisson(item);
+ case 'potion': return await this.actionPotion(item);
+ }
}
- async manger(sust) {
+ async actionNourritureboisson(item) {
+ const dialog = await DialogConsommer.create(this, item);
+ dialog.render(true);
+ }
+ async actionPotion(item) {
+ return await this.consommerPotion(item)
+ }
+
+ /* -------------------------------------------- */
+ async consommer(item, choix) {
+ switch (Misc.data(item).type) {
+ case 'nourritureboisson':
+ return await this.consommerNourritureboisson(item, choix);
+ case 'potion':
+ return await this.consommerPotion(item)
+ }
+ }
+
+ /* -------------------------------------------- */
+ async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false }) {
+ const itemData = Misc.data(item);
+ if (itemData.type != 'nourritureboisson') {
+ return;
+ }
+ if (choix.doses > itemData.data.quantite) {
+ ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} poour manger ${choix.doses}`)
+ return;
+ }
+ const surmonteExotisme = await this.surmonterExotisme(item, choix);
+ if (!surmonteExotisme) {
+ ui.notifications.warn(`Vous n'arrivez pas à manger de ${itemData.name}`)
+ return;
+ }
+ await this.manger(item, choix.doses, { diminuerQuantite: false });
+ await this.boire(item, choix.doses, { diminuerQuantite: false });
+ await item.diminuerQuantite(choix.doses);
+ }
+
+ /* -------------------------------------------- */
+ async manger(item, doses, options = { diminuerQuantite: true }) {
+ if (!item.getActionPrincipale()) return;
+ await this.apprecierCuisine(item);
+ const sust = Misc.templateData(item).sust;
if (sust > 0) {
- await this.updateCompteurValue('sust', Misc.templateData(this).compteurs.sust.value + sust);
+ await this.updateCompteurValue('sust', Misc.keepDecimals(Misc.templateData(this).compteurs.sust.value + sust * doses, 2));
}
+ await item.diminuerQuantite(doses, options);
}
- async boire(eau) {
- if (eau > 0) {
- await this.actor.updateCompteurValue('eau', Misc.templateData(this).eau.value + this.consommerData.data.desaltere);
+ /* -------------------------------------------- */
+ async boire(item, doses, options = { diminuerQuantite: true }) {
+ if (!item.getActionPrincipale()) return;
+ const tplData = Misc.templateData(item);
+ const desaltere = tplData.desaltere;
+ if (desaltere > 0) {
+ await this.updateCompteurValue('eau', Misc.keepDecimals(Misc.templateData(this).compteurs.eau.value + desaltere * doses, 2));
}
+ if (item.isAlcool()) {
+ for (let i = 0; i < doses; i++) {
+ await this.saouler(tplData.force);
+ }
+ }
+ await item.diminuerQuantite(doses, options);
}
- async alcool(forceAlcool) {
+ async saouler(forceAlcool) {
const actorTplData = Misc.templateData(this);
const etatGeneral = this.getEtatGeneral({ ethylisme: true });
const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0);
@@ -1643,26 +1695,28 @@ export class RdDActor extends Actor {
await this.performEthylisme(rollData);
}
- async apprecierCuisine(consommerData) {
+ async apprecierCuisine(item) {
const cuisine = Misc.data(this.getCompetence('cuisine'));
- const qualite = consommerData.data.qualite;
+ const itemData = Misc.data(item);
+ const qualite = itemData.data.qualite;
if (cuisine && qualite > 0 && qualite > cuisine.data.niveau) {
- const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: consommerData.data.boisson ? "apprécie la boisson" : "apprécie le plat" });
+ const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: itemData.data.boisson ? "apprécie la boisson" : "apprécie le plat" });
if (rolled.isSuccess) {
await this.jetDeMoral('heureux');
}
}
}
-
- async surmonterExotisme(consommerData) {
- const qualite = consommerData.data.qualite;
+
+ async surmonterExotisme(item, choix = {}) {
+ const itemData = Misc.data(item);
+ const qualite = itemData.data.qualite;
if (qualite < 0) {
- const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: "tente de surmonter l'exotisme" });
+ const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: `surmonte l'exotisme de ${itemData.name}` });
if (rolled.isEchec) {
- if (!consommerData.data.seForcer) {
+ if (!choix.seForcer) {
return false;
}
- await this.actor.jetDeMoral('malheureux');
+ await this.jetDeMoral('malheureux');
}
}
return true;
@@ -2102,7 +2156,7 @@ export class RdDActor extends Actor {
caracValue: Number(carac.value),
selectedCarac: carac,
competence: competence,
- finalLevel: (competence?.data.niveau ?? 0) + diff,
+ finalLevel: (Misc.templateData(competence)?.niveau ?? 0) + diff,
diffLibre: diff,
showDice: true,
show: { title: options?.title ?? '' }
@@ -2320,7 +2374,7 @@ export class RdDActor extends Actor {
"cout": artData.exotismeFinal < 0 ? 0 : artData.qualiteFinale * 0.01
}
};
- if (artData.ajouterEquipement){
+ if (artData.ajouterEquipement) {
await this.createEmbeddedDocuments('Item', [platCuisine]);
ui.notifications.info(`${platCuisine.data.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`);
}
@@ -3187,7 +3241,7 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async buildPotionGuerisonList( pointsGuerison) {
+ async buildPotionGuerisonList(pointsGuerison) {
let pointsGuerisonInitial = pointsGuerison;
let myData = Misc.templateData(this);
const blessures = duplicate(myData.blessures);
@@ -3195,70 +3249,66 @@ export class RdDActor extends Actor {
console.log(blessures);
for (let critique of blessures.critiques.liste) {
- if (critique.active && pointsGuerison >= 6 ) {
+ if (critique.active && pointsGuerison >= 6) {
pointsGuerison -= 6;
critique.active = false;
- guerisonData.list.push( "1 Blessure Critique (6 points)");
+ guerisonData.list.push("1 Blessure Critique (6 points)");
}
}
for (let grave of blessures.graves.liste) {
- if (grave.active && pointsGuerison >= 4 ) {
+ if (grave.active && pointsGuerison >= 4) {
pointsGuerison -= 4;
grave.active = false;
- guerisonData.list.push( "1 Blessure Grave (4 points)");
+ guerisonData.list.push("1 Blessure Grave (4 points)");
}
}
for (let legere of blessures.legeres.liste) {
- if (legere.active && pointsGuerison >= 2 ) {
+ if (legere.active && pointsGuerison >= 2) {
pointsGuerison -= 2;
legere.active = false;
- guerisonData.list.push( "1 Blessure Légère (2 points)");
+ guerisonData.list.push("1 Blessure Légère (2 points)");
}
}
await this.update({ "data.blessures": blessures });
let pvManquants = myData.sante.vie.max - myData.sante.vie.value;
- let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2 ));
- pointsGuerison -= pvSoignees*2;
- guerisonData.list.push( pvSoignees + " Points de Vie soignés");
+ let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2));
+ pointsGuerison -= pvSoignees * 2;
+ guerisonData.list.push(pvSoignees + " Points de Vie soignés");
await this.santeIncDec('vie', +pvSoignees, false);
guerisonData.pointsConsommes = pointsGuerisonInitial - pointsGuerison;
return guerisonData;
- }
+ }
/* -------------------------------------------- */
async consommerPotionSoin(potionData) {
potionData.alias = this.name;
+ potionData.supprimer = true;
- if (potionData.data.categorie.includes('Enchante')) {
- potionData.pointsGuerison = RdDHerbes.calculePointsGuerison( potionData.data);
- potionData.enchanteTexte = "enchantée";
- potionData.isEnchante = true;
+ if (potionData.data.isEnchante) {
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData )
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData)
});
// Gestion de la résistance:
- let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 );
+ let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8);
potionData.reussiteReve = false;
if (!rolled.isSuccess) {
await this.reveActuelIncDec(-1);
- potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison);
- potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5;
+ potionData.guerisonData = await this.buildPotionGuerisonList(potionData.data.puissance);
+ potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5;
potionData.reussiteReve = true;
}
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData )
- });
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData)
+ });
} else {
- potionData.enchanteTexte = "";
- potionData.isEnchante = false;
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData )
- });
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData)
+ });
this.bonusRecuperationPotion = potionData.data.herbeBonus;
}
}
@@ -3266,29 +3316,27 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async consommerPotionRepos(potionData) {
potionData.alias = this.name;
+ potionData.supprimer = true;
- if (potionData.data.categorie.includes('Enchante')) {
- potionData.casesRepos = RdDHerbes.calculePointsRepos( potionData.data);
- potionData.enchanteTexte = "enchantée";
- potionData.isEnchante = true;
+ if (potionData.data.isEnchante) {
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData )
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData)
});
// Gestion de la résistance:
- let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 );
+ let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8);
potionData.reussiteReve = false;
if (!rolled.isSuccess) {
await this.reveActuelIncDec(-1);
let fatigueActuelle = this.getFatigueActuelle();
- potionData.caseFatigueReel = (fatigueActuelle >= potionData.casesRepos) ? potionData.casesRepos : fatigueActuelle;
+ potionData.caseFatigueReel = Math.min(fatigueActuelle, potionData.data.puissance);
potionData.guerisonDureeUnite = (potionData.data.reposalchimique) ? "rounds" : "minutes";
- potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel*5;
+ potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel * 5;
potionData.reussiteReve = true;
potionData.aphasiePermanente = false;
- if ( potionData.data.reposalchimique ) {
- let chanceAphasie = new Roll("1d100").evaluate({async : false} ).total;
- if ( chanceAphasie <= potionData.data.pr ) {
+ if (potionData.data.reposalchimique) {
+ let chanceAphasie = new Roll("1d100").evaluate({ async: false }).total;
+ if (chanceAphasie <= potionData.data.pr) {
potionData.aphasiePermanente = true;
}
}
@@ -3296,89 +3344,85 @@ export class RdDActor extends Actor {
}
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData )
- });
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData)
+ });
} else {
- potionData.enchanteTexte = "";
- potionData.isEnchante = false;
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData )
- });
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData)
+ });
this.bonusRepos = potionData.data.herbeBonus;
}
}
/* -------------------------------------------- */
- dialogFabriquerPotion( herbe ) {
+ dialogFabriquerPotion(herbe) {
DialogFabriquerPotion.create(this, herbe, {
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html',
}, []);
}
/* -------------------------------------------- */
- async fabriquerPotion( potionData ) {
+ async fabriquerPotion(herbeData) {
let newPotion = {
- name: `Potion de ${potionData.data.categorie} (${potionData.name})`, type: 'potion',
+ name: `Potion de ${herbeData.data.categorie} (${herbeData.name})`, type: 'potion',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp",
- data: { quantite: 1, valeur_deniers: 1, encombrement: 0.01,
- categorie: potionData.data.categorie,
- herbe: potionData.name,
- rarete: potionData.data.rarete,
- herbebrins: potionData.nbBrins,
- description: "" }
+ data: {
+ quantite: 1, valeur_deniers: 1, encombrement: 0.01,
+ categorie: herbeData.data.categorie,
+ herbe: herbeData.name,
+ rarete: herbeData.data.rarete,
+ herbebrins: herbeData.nbBrins,
+ description: ""
+ }
}
- await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
+ await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
- let newQuantite = potionData.data.quantite - potionData.nbBrins;
+ let newQuantite = herbeData.data.quantite - herbeData.nbBrins;
let messageData = {
alias: this.name,
- categorie: potionData.data.categorie,
- herbe: potionData.name,
- nbBrinsPotion: potionData.nbBrins,
+ categorie: herbeData.data.categorie,
+ herbe: herbeData.name,
+ nbBrinsPotion: herbeData.nbBrins,
nbBrinsReste: newQuantite
}
- if (newQuantite == 0 ) {
- await this.deleteEmbeddedDocuments('Item', [ potionData._id ] );
- } else {
- let update = { _id: potionData._id, 'data.quantite': newQuantite};
- await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
- }
+ this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
+
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData )
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData)
});
- }
+ }
+
+ async diminuerQuantiteObjet(id, nb, options = { supprimerSiZero: false }) {
+ const item = this.getObjet(id);
+ if (item){
+ await item.diminuerQuantite(nb, options);
+ }
+ }
/* -------------------------------------------- */
- async consommerPotionGenerique( potionData ) {
+ async consommerPotionGenerique(potionData) {
potionData.alias = this.name;
- if (potionData.data.categorie.includes('Enchante')) {
- potionData.enchanteTexte = "enchantée";
- potionData.isEnchante = true;
- } else {
- potionData.enchanteTexte = "";
- potionData.isEnchante = false;
- }
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
- content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData )
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData)
});
-}
+ }
/* -------------------------------------------- */
- async consommerPotion( potion ) {
+ async consommerPotion(potion) {
const potionData = Misc.data(potion);
- if ( potionData.data.categorie.includes('Soin')) {
- this.consommerPotionSoin( potionData);
- } else if( potionData.data.categorie.includes('Repos')) {
+ if (potionData.data.categorie.includes('Soin')) {
+ this.consommerPotionSoin(potionData);
+ } else if (potionData.data.categorie.includes('Repos')) {
this.consommerPotionRepos(potionData);
} else {
- this.consommerPotionGenerique(potionData);
+ this.consommerPotionGenerique(potionData);
}
- await this.deleteEmbeddedDocuments('Item', [ potion.id ] );
+ this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potionData.supprimer });
}
/* -------------------------------------------- */
@@ -3453,7 +3497,9 @@ export class RdDActor extends Actor {
const ids = Array.from(this.effects?.values())
.filter(it => it.data.flags.core?.statusId == id)
.map(it => it.id);
- this.deleteEmbeddedDocuments('ActiveEffect', ids);
+ if (ids.length > 0) {
+ this.deleteEmbeddedDocuments('ActiveEffect', ids);
+ }
}
/* -------------------------------------------- */
@@ -3472,8 +3518,9 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async addStatusEffect(statusEffect) {
- const effet = duplicate(statusEffect);
+ const effet = Misc.data(statusEffect);
this.deleteStatusEffectById(effet.id);
+ effet.flags = effet.flags ?? { core: {} };
effet.flags.core.statusId = effet.id;
await this.createEmbeddedDocuments('ActiveEffect', [effet]);
}
diff --git a/module/dialog-consommer.js b/module/dialog-consommer.js
index 13ea1387..d0bc81c5 100644
--- a/module/dialog-consommer.js
+++ b/module/dialog-consommer.js
@@ -3,56 +3,24 @@ import { Misc } from "./misc.js";
export class DialogConsommer extends Dialog {
- static async create(actor, item, dialogConfig) {
- let consommerData = DialogConsommer.prepareData(actor, item);
- if (!consommerData) {
- ui.notifications.warn(`Impossible de consommer un ${consommerData.name}, ce n'est pas de la nourriture, une boisson ou une potion`);
- return;
- }
+ static async create(actor, item, template = undefined, options = {}) {
+ const consommerData = DialogConsommer.prepareData(actor, item, options);
+ const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/consommer/dialog-${Misc.data(item).type}.html`, consommerData);
+ return new DialogConsommer(actor, item, consommerData, html, options)
+ }
+
+ constructor(actor, item, consommerData, html, options = {}) {
+ mergeObject(options, { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }, { overwrite: false })
let conf = {
title: consommerData.title,
- content: await renderTemplate(dialogConfig.html, consommerData),
+ content: html,
default: consommerData.buttonName,
- };
-
-
- let options = { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 };
- mergeObject(options, dialogConfig.options ?? {}, { overwrite: true })
-
- console.log('consommer', actor, consommerData, conf, options);
- const dialog = new DialogConsommer(actor, consommerData, conf, options);
- dialog.render(true);
- return dialog;
- }
-
- static prepareData(actor, item) {
- let consommerData = duplicate(Misc.data(item));
- switch (consommerData.type) {
- default:
- return undefined;
- case 'nourritureboisson':
- consommerData.doses = 1;
- consommerData.title = consommerData.data.boisson ? `${consommerData.name}: boire une dose` : `${consommerData.name}: manger une portion`;
- consommerData.buttonName = consommerData.data.boisson ? "Boire" : "Manger";
- break;
- case 'potion':
- buttonName.title = `${consommerData.name}: boire la potion`;
- consommerData.buttonName = "Boire";
- consommerData.alchimie = Misc.data(actor.getCompetence('alchimie'));
- break;
- }
- consommerData.cuisine = Misc.data(actor.getCompetence('cuisine'));
- consommerData.seForcer = false;
- return consommerData;
- }
-
-
- constructor(actor, consommerData, conf, options) {
- conf.buttons = {
- [consommerData.buttonName]: {
- label: consommerData.buttonName, callback: it => {
- this.consommer();
+ buttons: {
+ [consommerData.buttonName]: {
+ label: consommerData.buttonName, callback: it => {
+ this.actor.consommer(this.item, this.consommerData.choix);
+ }
}
}
};
@@ -60,66 +28,55 @@ export class DialogConsommer extends Dialog {
super(conf, options);
this.actor = actor;
+ this.item = item;
this.consommerData = consommerData;
}
+ /* -------------------------------------------- */
+ static prepareData(actor, item, options) {
+ const itemData = duplicate(Misc.data(item));
+ let consommerData = {
+ item: itemData,
+ choix: {
+ doses: options.doses ?? 1,
+ seForcer: options.seForcer ?? false,
+ }
+ }
+ switch (itemData.type) {
+ case 'nourritureboisson':
+ consommerData.title = itemData.data.boisson ? `${itemData.name}: boire une dose` : `${itemData.name}: manger une portion`;
+ consommerData.buttonName = itemData.data.boisson ? "Boire" : "Manger";
+ break;
+ case 'potion':
+ consommerData.title = `${itemData.name}: boire la potion`;
+ consommerData.buttonName = "Boire";
+ break;
+ }
+ DialogConsommer.calculDoses(consommerData, consommerData.choix.doses)
+ return consommerData;
+ }
+
+ static calculDoses(consommerData) {
+ const doses = consommerData.choix.doses;
+ consommerData.totalSust = Misc.keepDecimals(doses * (consommerData.item.data.sust ?? 0), 2);
+ consommerData.totalDesaltere = consommerData.item.data.boisson
+ ? Misc.keepDecimals(doses * (consommerData.item.data.desaltere ?? 0), 2)
+ : 0;
+ }
+
+
/* -------------------------------------------- */
activateListeners(html) {
super.activateListeners(html);
-
- function updateConsommerData(rollData) {
-
- rollData.finalLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + rollData.diffNbDoses;
-
- // Mise à jour valeurs
- $("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel));
- $(".table-resolution").remove();
- $("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollData.finalLevel));
- }
-
+ html.find(".se-forcer").change(event => {
+ this.consommerData.choix.seForcer = event.currentTarget.checked;
+ });
html.find(".consommer-doses").change(event => {
- this.u
+ this.consommerData.choix.doses = Number(event.currentTarget.value);
+ DialogConsommer.calculDoses(this.consommerData);
+ $(".total-sust").text(this.consommerData.totalSust)
+ $(".total-desaltere").text(this.consommerData.totalDesaltere)
});
}
- /* -------------------------------------------- */
- async consommer() {
- switch (this.consommerData.type) {
- default:
- return undefined;
- case 'nourritureboisson':
- return await this.consommerNourritureBoisson();
- case 'potion':
- return await this.consommerPotion();
- }
- }
-
- async consommerNourritureBoisson() {
- const surmonteExotisme = await this.actor.surmonterExotisme(this.consommerData);
- if (!surmonteExotisme) {
- return;
- }
- await this.actor.apprecierCuisine(this.consommerData);
- if (this.isAlcool()) {
- await this.actor.alcool(this.consommerData.data.force);
- }
- await this.actor.manger(this.consommerData.data.sust);
- await this.actor.boire(this.consommerData.data.desaltere);
- }
-
- isAlcool() {
- return this.consommerData.data.boisson && this.consommerData.data.alcoolise;
- }
-
- async apprecierCuisine(qualite) {
- const jetGoutCuisine = await this.jetGoutCuisine();
- if (jetGoutCuisine) {
- await this.actor.jetDeMoral('heureux');
- }
- }
-
- async consommerPotion() {
- }
-
-
}
\ No newline at end of file
diff --git a/module/item-sheet.js b/module/item-sheet.js
index 00c300ec..c8d20b98 100644
--- a/module/item-sheet.js
+++ b/module/item-sheet.js
@@ -32,7 +32,7 @@ export class RdDItemSheet extends ItemSheet {
{
class: "post",
icon: "fas fa-comment",
- onclick: ev => new RdDItem(Misc.data(this.item)).postItem()
+ onclick: ev => this.item.postItem()
})
return buttons
}
diff --git a/module/item.js b/module/item.js
index 5c94099f..ffe491a8 100644
--- a/module/item.js
+++ b/module/item.js
@@ -1,42 +1,115 @@
+import { Grammar } from "./grammar.js";
import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";
const typesObjetsEquipement = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson", "monnaie"];
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"];
+const encBrin = 0.00005;
/* -------------------------------------------- */
export class RdDItem extends Item {
static getTypeObjetsEquipement() {
return typesObjetsEquipement;
}
+
static getTypesOeuvres() {
return typesObjetsOeuvres;
}
+
prepareDerivedData() {
super.prepareDerivedData();
- const itemData = this.data;
+ const itemData = Misc.data(this);
if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) {
- this._calculsEquipement(itemData);
+ this._calculsEquipement();
+ }
+ if (itemData.type == 'potion') {
+ this.prepareDataPotion()
+ }
+ itemData.data.actionPrincipale = this.getActionPrincipale({ warnIfNot: false });
+
+ }
+
+ prepareDataPotion() {
+ const tplData = Misc.templateData(this);
+ const categorie = Grammar.toLowerCaseNoAccent(tplData.categorie);
+ tplData.isEnchante = categorie.includes('enchante');
+ if (tplData.isEnchante) {
+ if (categorie.includes('soin') || categorie.includes('repos')) {
+ tplData.puissance = tplData.herbebonus * tplData.pr;
+ }
}
}
-
- _calculsEquipement(itemData) {
- const tplData = itemData.data;
- const quantite = itemData.type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
- if (tplData.encombrement != undefined) {
- tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite;
+
+ _calculsEquipement() {
+ const tplData = Misc.templateData(this);
+ const quantite = Misc.data(this).type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
+ const enc = this.getEnc();
+ if (enc != undefined) {
+ tplData.encTotal = Math.max(enc, 0) * quantite;
}
if (tplData.cout != undefined) {
tplData.prixTotal = Math.max(tplData.cout, 0) * quantite;
}
}
+ getEnc() {
+ const itemData = Misc.data(this);
+ switch (itemData.type) {
+ case 'herbe':
+ return encBrin;
+ }
+ return itemData.data.encombrement
+ }
+
+ getActionPrincipale(options = { warnIfNot: true }) {
+ const itemData = Misc.data(this);
+ if ((itemData.data.quantite ?? 0) <= 0) {
+ if (options.warnIfNot) {
+ ui.notifications.warn(`Vous n'avez plus de ${itemData.name}.`);
+ }
+ return undefined;
+ }
+ switch (itemData.type) {
+ case 'nourritureboisson': return itemData.data.boisson ? 'Boire' : 'Manger';
+ case 'potion': return 'Boire';
+ }
+ if (options.warnIfNot) {
+ ui.notifications.warn(`Impossible d'utilise un ${itemData.name}, aucune action associée définie.`);
+ }
+
+ return undefined;
+ }
+
+ isAlcool() {
+ const itemData = Misc.data(this);
+ return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise;
+ }
+
+ async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {
+ if (options.diminuerQuantite == false) return;
+ const itemData = Misc.data(this);
+ const quantite = itemData.data.quantite;
+ if (quantite != undefined) {
+ const reste = Math.max(quantite - nombre, 0);
+
+ if (options.supprimerSiZero && reste == 0) {
+ ui.notifications.notify(`${itemData.name} supprimé de votre équipement`);
+ await this.delete();
+ }
+ else {
+ ui.notifications.notify(`Quantité de ${itemData.name} réduite de ${nombre}.${reste == 0
+ ? "Il ne vous en reste plus, vous pouvez le supprimer de votre équipement, ou trouver un moyen de vous en procurer."
+ : ""}`);
+ await this.update({ "data.quantite": reste });
+ }
+ }
+ }
+
/* -------------------------------------------- */
async postItem() {
console.log(this);
- const properties = this[`_${this.data.type}ChatData`]();
- const itemData = Misc.data(this);
- let chatData = duplicate(itemData);
+ let chatData = duplicate(Misc.data(this));
+ const properties = this[`_${chatData.type}ChatData`]();
chatData["properties"] = properties
//Check if the posted item should have availability/pay buttons
@@ -45,8 +118,7 @@ export class RdDItem extends Item {
let dialogResult = [-1, -1]; // dialogResult[0] = quantité, dialogResult[1] = prix
if (chatData.hasPrice) {
- let sols = chatData.data.cout;
- chatData.data.cout_deniers = Math.floor(sols * 100);
+ chatData.data.cout_deniers = Math.floor(chatData.data.cout * 100);
dialogResult = await new Promise((resolve, reject) => {
new Dialog({
content:
@@ -66,7 +138,7 @@ export class RdDItem extends Item {
post: {
label: "Soumettre",
callback: (dlg) => {
- resolve([dlg.find('[name="quantity"]').val(), dlg.find('[name="price"]').val()])
+ resolve([Number(dlg.find('[name="quantity"]').val()), Number(dlg.find('[name="price"]').val())])
}
},
}
@@ -74,28 +146,29 @@ export class RdDItem extends Item {
})
}
- if (dialogResult[0] > 0) {
+ let quantiteEnvoi = Math.min(dialogResult[0], chatData.data.quantite);
+ const prixTotal = dialogResult[1];
+ if (quantiteEnvoi > 0) {
if (this.isOwned) {
- if (itemData.data.quantite == 0)
- dialogResult[0] = -1
- else if (itemData.data.quantite < dialogResult[0]) {
- dialogResult[0] = itemData.data.quantite;
- ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${dialogResult[0]}.`)
- this.update({ "data.quantite": 0 })
+ if (chatData.data.quantite == 0) {
+ quantiteEnvoi = -1
}
- else {
- ui.notifications.notify(`Quantité réduite par ${dialogResult[0]}.`)
- this.update({ "data.quantite": itemData.data.quantite - dialogResult[0] })
+ else if (quantiteEnvoi > chatData.data.quantite) {
+ quantiteEnvoi = chatData.data.quantite;
+ ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${quantiteEnvoi}.`)
+ }
+ if (quantiteEnvoi > 0) {
+ this.diminuerQuantite(quantiteEnvoi);
}
}
}
if (chatData.hasPrice) {
- if (dialogResult[0] > 0)
- chatData.postQuantity = Number(dialogResult[0]);
- if (dialogResult[1] > 0) {
- chatData.postPrice = dialogResult[1];
- chatData.data.cout_deniers = Math.floor(dialogResult[1] * 100); // Mise à jour cout en deniers
+ if (quantiteEnvoi > 0)
+ chatData.postQuantity = Number(quantiteEnvoi);
+ if (prixTotal > 0) {
+ chatData.postPrice = prixTotal;
+ chatData.data.cout_deniers = Math.floor(prixTotal * 100); // Mise à jour cout en deniers
}
chatData.finalPrice = Number(chatData.postPrice) * Number(chatData.postQuantity);
chatData.data.cout_deniers_total = chatData.data.cout_deniers * Number(chatData.postQuantity);
@@ -110,7 +183,7 @@ export class RdDItem extends Item {
chatData.jsondata = JSON.stringify(
{
compendium: "postedItem",
- payload: itemData,
+ payload: chatData,
});
renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-item.html', chatData).then(html => {
@@ -119,219 +192,237 @@ export class RdDItem extends Item {
});
}
+ static propertyIfDefined(name, val, condition) {
+ return condition ? [`${name}: ${val}`] : [];
+ }
+
/* -------------------------------------------- */
_objetChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Encombrement: ${rddData.encombrement}`
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
+
+ /* -------------------------------------------- */
+ _nourritureboissonChatData() {
+ const tplData = Misc.templateData(this);
+ let properties = [].concat(
+ RdDItem.propertyIfDefined('Sustentation', tplData.sust, tplData.sust > 0),
+ RdDItem.propertyIfDefined('Désaltère', tplData.desaltere, tplData.boisson),
+ RdDItem.propertyIfDefined('Force alcool', tplData.force, tplData.boisson && tplData.alcoolise),
+ RdDItem.propertyIfDefined('Exotisme', tplData.qualite, tplData.qualite < 0),
+ RdDItem.propertyIfDefined('Qualité', tplData.qualite, tplData.qualite > 0),
+ [`Encombrement: ${tplData.encombrement}`],
+ );
+ return properties;
+ }
/* -------------------------------------------- */
_armeChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Compétence: ${rddData.competence}`,
- `Dommages: ${rddData.dommages}`,
- `Force minimum: ${rddData.force}`,
- `Resistance: ${rddData.resistance}`,
- `Encombrement: ${rddData.encombrement}`
+ `Compétence: ${tplData.competence}`,
+ `Dommages: ${tplData.dommages}`,
+ `Force minimum: ${tplData.force}`,
+ `Resistance: ${tplData.resistance}`,
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_conteneurChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Capacité: ${rddData.capacite} Enc.`,
- `Encombrement: ${rddData.encombrement}`
+ `Capacité: ${tplData.capacite} Enc.`,
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_munitionChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Encombrement: ${rddData.encombrement}`
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_armureChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Protection: ${rddData.protection}`,
- `Détérioration: ${rddData.deterioration}`,
- `Malus armure: ${rddData.malus}`,
- `Encombrement: ${rddData.encombrement}`
+ `Protection: ${tplData.protection}`,
+ `Détérioration: ${tplData.deterioration}`,
+ `Malus armure: ${tplData.malus}`,
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_competenceChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Catégorie: ${rddData.categorie}`,
- `Niveau: ${rddData.niveau}`,
- `Caractéristique par défaut: ${rddData.carac_defaut}`,
- `XP: ${rddData.xp}`
+ `Catégorie: ${tplData.categorie}`,
+ `Niveau: ${tplData.niveau}`,
+ `Caractéristique par défaut: ${tplData.carac_defaut}`,
+ `XP: ${tplData.xp}`
]
return properties;
}
/* -------------------------------------------- */
_competencecreatureChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Catégorie: ${rddData.categorie}`,
- `Niveau: ${rddData.niveau}`,
- `Caractéristique: ${rddData.carac_value}`,
- `XP: ${rddData.xp}`
+ `Catégorie: ${tplData.categorie}`,
+ `Niveau: ${tplData.niveau}`,
+ `Caractéristique: ${tplData.carac_value}`,
+ `XP: ${tplData.xp}`
]
return properties;
}
/* -------------------------------------------- */
_sortChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Draconic: ${rddData.draconic}`,
- `Difficulté: ${rddData.difficulte}`,
- `Case TMR: ${rddData.caseTMR}`,
- `Points de Rêve: ${rddData.ptreve}`
+ `Draconic: ${tplData.draconic}`,
+ `Difficulté: ${tplData.difficulte}`,
+ `Case TMR: ${tplData.caseTMR}`,
+ `Points de Rêve: ${tplData.ptreve}`
]
return properties;
}
/* -------------------------------------------- */
_herbeChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Milieu: ${rddData.milieu}`,
- `Rareté: ${rddData.rarete}`,
- `Catégorie: ${rddData.categorie}`,
+ `Milieu: ${tplData.milieu}`,
+ `Rareté: ${tplData.rarete}`,
+ `Catégorie: ${tplData.categorie}`,
]
return properties;
}
/* -------------------------------------------- */
_ingredientChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Milieu: ${rddData.milieu}`,
- `Rareté: ${rddData.rarete}`,
- `Catégorie: ${rddData.categorie}`,
+ `Milieu: ${tplData.milieu}`,
+ `Rareté: ${tplData.rarete}`,
+ `Catégorie: ${tplData.categorie}`,
]
return properties;
}
/* -------------------------------------------- */
_tacheChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Caractéristique: ${rddData.carac}`,
- `Compétence: ${rddData.competence}`,
- `Périodicité: ${rddData.periodicite}`,
- `Fatigue: ${rddData.fatigue}`,
- `Difficulté: ${rddData.difficulte}`,
- `Points de Tâche: ${rddData.points_de_tache}`,
- `Points de Tâche atteints: ${rddData.points_de_tache_courant}`
+ `Caractéristique: ${tplData.carac}`,
+ `Compétence: ${tplData.competence}`,
+ `Périodicité: ${tplData.periodicite}`,
+ `Fatigue: ${tplData.fatigue}`,
+ `Difficulté: ${tplData.difficulte}`,
+ `Points de Tâche: ${tplData.points_de_tache}`,
+ `Points de Tâche atteints: ${tplData.points_de_tache_courant}`
]
return properties;
}
/* -------------------------------------------- */
_livreChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Compétence: ${rddData.competence}`,
- `Auteur: ${rddData.auteur}`,
- `Difficulté: ${rddData.difficulte}`,
- `Points de Tâche: ${rddData.points_de_tache}`,
- `Encombrement: ${rddData.encombrement}`
+ `Compétence: ${tplData.competence}`,
+ `Auteur: ${tplData.auteur}`,
+ `Difficulté: ${tplData.difficulte}`,
+ `Points de Tâche: ${tplData.points_de_tache}`,
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_potionChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Rareté: ${rddData.rarete}`,
- `Catégorie: ${rddData.categorie}`,
- `Encombrement: ${rddData.encombrement}`,
+ `Rareté: ${tplData.rarete}`,
+ `Catégorie: ${tplData.categorie}`,
+ `Encombrement: ${tplData.encombrement}`,
]
return properties;
}
/* -------------------------------------------- */
_queueChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Refoulement: ${rddData.refoulement}`
+ `Refoulement: ${tplData.refoulement}`
]
return properties;
}
/* -------------------------------------------- */
_ombreChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Refoulement: ${rddData.refoulement}`
+ `Refoulement: ${tplData.refoulement}`
]
return properties;
}
/* -------------------------------------------- */
_souffleChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [];
return properties;
}
/* -------------------------------------------- */
_teteChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [];
return properties;
}
/* -------------------------------------------- */
_tarotChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Concept: ${rddData.concept}`,
- `Aspect: ${rddData.aspect}`,
+ `Concept: ${tplData.concept}`,
+ `Aspect: ${tplData.aspect}`,
]
return properties;
}
/* -------------------------------------------- */
_nombreastralChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Valeur: ${rddData.value}`,
- `Jour: ${rddData.jourlabel}`,
+ `Valeur: ${tplData.value}`,
+ `Jour: ${tplData.jourlabel}`,
]
return properties;
}
/* -------------------------------------------- */
_monnaieChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Valeur en Deniers: ${rddData.valeur_deniers}`,
- `Encombrement: ${rddData.encombrement}`
+ `Valeur en Deniers: ${tplData.valeur_deniers}`,
+ `Encombrement: ${tplData.encombrement}`
]
return properties;
}
/* -------------------------------------------- */
_meditationChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Thème: ${rddData.theme}`,
- `Compétence: ${rddData.competence}`,
- `Support: ${rddData.support}`,
- `Heure: ${rddData.heure}`,
- `Purification: ${rddData.purification}`,
- `Vêture: ${rddData.veture}`,
- `Comportement: ${rddData.comportement}`,
- `Case TMR: ${rddData.tmr}`
+ `Thème: ${tplData.theme}`,
+ `Compétence: ${tplData.competence}`,
+ `Support: ${tplData.support}`,
+ `Heure: ${tplData.heure}`,
+ `Purification: ${tplData.purification}`,
+ `Vêture: ${tplData.veture}`,
+ `Comportement: ${tplData.comportement}`,
+ `Case TMR: ${tplData.tmr}`
]
return properties;
}
/* -------------------------------------------- */
_casetmrChatData() {
- const rddData = Misc.data(this).data;
+ const tplData = Misc.templateData(this);
let properties = [
- `Coordonnée: ${rddData.coord}`,
- `Spécificité: ${rddData.specific}`
+ `Coordonnée: ${tplData.coord}`,
+ `Spécificité: ${tplData.specific}`
]
return properties;
}
diff --git a/module/misc.js b/module/misc.js
index 0661b44b..e0a07c61 100644
--- a/module/misc.js
+++ b/module/misc.js
@@ -47,7 +47,11 @@ export class Misc {
const parsed = parseInt(value);
return isNaN(parsed) ? 0 : parsed;
}
-
+ static keepDecimals(num, decimals) {
+ if (decimals<=0 || decimals>6) return num;
+ const decimal = Math.pow(10, parseInt(decimals));
+ return Math.round(num * decimal) / decimal;
+ }
static getFractionHtml(diviseur) {
if (!diviseur || diviseur <= 1) return undefined;
switch (diviseur || 1) {
diff --git a/module/rdd-herbes.js b/module/rdd-herbes.js
index cded07e6..e1b31911 100644
--- a/module/rdd-herbes.js
+++ b/module/rdd-herbes.js
@@ -48,16 +48,6 @@ export class RdDHerbes extends Item {
formData.isRepos = true;
this.computeHerbeBonus(formData, this.herbesRepos, 7);
}
-
- if (formData.data.categorie.includes('Enchante') ) {
- formData.isEnchante = true;
- if ( formData.isHerbe) {
- formData.pointsGuerison = this.calculePointsGuerison( formData.data );
- }
- if ( formData.isRepos) {
- formData.caseRepos = formData.data.herbebonus * formData.data.pr;
- }
- }
}
/* -------------------------------------------- */
diff --git a/styles/simple.css b/styles/simple.css
index 1f8d248d..845bc07e 100644
--- a/styles/simple.css
+++ b/styles/simple.css
@@ -935,7 +935,7 @@ ul, li {
background: rgba(220,220,210,0.75);
border: 2px solid #545469;
}
-.chat-message .chat-icon {
+.chat-icon {
border: 0;
padding: 2px 6px 2px 2px;
float: left;
diff --git a/templates/actor-creature-sheet.html b/templates/actor-creature-sheet.html
index 24409eb9..8e57417c 100644
--- a/templates/actor-creature-sheet.html
+++ b/templates/actor-creature-sheet.html
@@ -9,7 +9,7 @@