From 7dc1724ab7a97ee8ab716cbc51ad82f2c056956f Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 18:43:32 +0200
Subject: [PATCH 01/10] Auto format
---
module/actor.js | 132 ++++++++++++++++++++++++------------------------
module/item.js | 2 +
2 files changed, 69 insertions(+), 65 deletions(-)
diff --git a/module/actor.js b/module/actor.js
index 9de3911d..915ba800 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -310,22 +310,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.categorie.toLowerCase().includes('enchante'));
+ 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 +380,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 +404,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`;
@@ -2320,7 +2320,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 +3187,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 +3195,70 @@ 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;
if (potionData.data.categorie.includes('Enchante')) {
- potionData.pointsGuerison = RdDHerbes.calculePointsGuerison( potionData.data);
+ potionData.pointsGuerison = RdDHerbes.calculePointsGuerison(potionData.data);
potionData.enchanteTexte = "enchantée";
potionData.isEnchante = true;
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.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;
}
}
@@ -3268,27 +3268,27 @@ export class RdDActor extends Actor {
potionData.alias = this.name;
if (potionData.data.categorie.includes('Enchante')) {
- potionData.casesRepos = RdDHerbes.calculePointsRepos( potionData.data);
+ potionData.casesRepos = RdDHerbes.calculePointsRepos(potionData.data);
potionData.enchanteTexte = "enchantée";
potionData.isEnchante = true;
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.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,62 +3296,64 @@ 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(potionData) {
let newPotion = {
name: `Potion de ${potionData.data.categorie} (${potionData.name})`, type: 'potion',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp",
- data: { quantite: 1, valeur_deniers: 1, encombrement: 0.01,
+ data: {
+ quantite: 1, valeur_deniers: 1, encombrement: 0.01,
categorie: potionData.data.categorie,
- herbe: potionData.name,
+ herbe: potionData.name,
rarete: potionData.data.rarete,
herbebrins: potionData.nbBrins,
- description: "" }
+ description: ""
+ }
}
- await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
+ await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true });
let newQuantite = potionData.data.quantite - potionData.nbBrins;
let messageData = {
alias: this.name,
- categorie: potionData.data.categorie,
- herbe: potionData.name,
- nbBrinsPotion: potionData.nbBrins,
+ categorie: potionData.data.categorie,
+ herbe: potionData.name,
+ nbBrinsPotion: potionData.nbBrins,
nbBrinsReste: newQuantite
}
- if (newQuantite == 0 ) {
- await this.deleteEmbeddedDocuments('Item', [ potionData._id ] );
+ if (newQuantite == 0) {
+ await this.deleteEmbeddedDocuments('Item', [potionData._id]);
} else {
- let update = { _id: potionData._id, 'data.quantite': newQuantite};
+ let update = { _id: potionData._id, 'data.quantite': newQuantite };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
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 consommerPotionGenerique( potionData ) {
+ async consommerPotionGenerique(potionData) {
potionData.alias = this.name;
if (potionData.data.categorie.includes('Enchante')) {
@@ -3363,22 +3365,22 @@ export class RdDActor extends Actor {
}
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 ] );
+ await this.deleteEmbeddedDocuments('Item', [potion.id]);
}
/* -------------------------------------------- */
diff --git a/module/item.js b/module/item.js
index 5c94099f..7a3c52c9 100644
--- a/module/item.js
+++ b/module/item.js
@@ -9,9 +9,11 @@ export class RdDItem extends Item {
static getTypeObjetsEquipement() {
return typesObjetsEquipement;
}
+
static getTypesOeuvres() {
return typesObjetsOeuvres;
}
+
prepareDerivedData() {
super.prepareDerivedData();
const itemData = this.data;
From 6b31e81c72c4ee0e4e13a022ad7eb554d3c56532 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 18:47:00 +0200
Subject: [PATCH 02/10] =?UTF-8?q?Possibilit=C3=A9=20de=20poster=20de=20la?=
=?UTF-8?q?=20nourriture?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
+ utilisation de l'Item de l'actor plutôt qu'une copie
+ extraction fonction pour diminuer la quantité d'un item
---
module/item-sheet.js | 2 +-
module/item.js | 260 ++++++++++++++++++++++-----------------
templates/post-item.html | 40 +++---
3 files changed, 167 insertions(+), 135 deletions(-)
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 7a3c52c9..ab7f8ec3 100644
--- a/module/item.js
+++ b/module/item.js
@@ -16,15 +16,14 @@ export class RdDItem extends Item {
prepareDerivedData() {
super.prepareDerivedData();
- const itemData = this.data;
- if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) {
- this._calculsEquipement(itemData);
+ if (RdDItem.getTypeObjetsEquipement().includes(Misc.data(this).type)) {
+ this._calculsEquipement();
}
}
-
- _calculsEquipement(itemData) {
- const tplData = itemData.data;
- const quantite = itemData.type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
+
+ _calculsEquipement() {
+ const tplData = Misc.templateData(this);
+ const quantite = Misc.data(this).type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
if (tplData.encombrement != undefined) {
tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite;
}
@@ -33,12 +32,25 @@ export class RdDItem extends Item {
}
}
+
+ async diminuerQuantite(nombre, options = { diminuerQuantite: true }) {
+ if (!options.diminuerQuantite) return;
+ const itemData = Misc.data(this);
+ const quantite = itemData.data.quantite;
+ if (quantite != undefined) {
+ const reste = Math.max(quantite - nombre, 0);
+ 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
@@ -47,8 +59,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:
@@ -68,7 +79,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())])
}
},
}
@@ -76,28 +87,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);
@@ -112,7 +124,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 => {
@@ -121,219 +133,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/templates/post-item.html b/templates/post-item.html
index d508d769..a569f947 100644
--- a/templates/post-item.html
+++ b/templates/post-item.html
@@ -3,26 +3,28 @@
{{#if img}}
{{/if}}
-
- {{{data.description}}}
-
- {{#each properties as |property p|}}
- {{{property}}}
- {{/each}}
-
- {{#if postPrice}}
-
Prix: {{postPrice}} Sols
- {{/if}}
- {{#if postQuantity}}
+
+
{{{data.description}}}
+
+ {{#each properties as |property p|}}
+ {{{property}}}
+ {{/each}}
+ {{#if (or postQuantity postPrice)}}
+
+ {{#if postQuantity}}
Quantité: {{postQuantity}}
- {{/if}}
-
-
- {{#if finalPrice}}
-
- Prix Total: {{finalPrice}} Sols
-
- {{/if}}
+ {{/if}}
+ {{#if postPrice}}
+ Prix: {{postPrice}} Sols
+ {{/if}}
+
+ {{/if}}
+ {{#if finalPrice}}
+
+ Prix Total: {{finalPrice}} Sols
+
+ {{/if}}
+
{{#if hasPrice}}
From 3d8453dc2da016a5b6d25ea1ee0939a0f9b4c7ec Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 23:01:10 +0200
Subject: [PATCH 03/10] Consommer nourriture, suite #168
---
module/actor-sheet.js | 2 +-
module/actor.js | 87 +++++++---
module/dialog-consommer.js | 153 +++++++-----------
module/item.js | 25 +++
module/misc.js | 6 +-
.../consommer/dialog-nourritureboisson.html | 36 +++++
templates/dialog-consommer-nourriture.html | 39 -----
7 files changed, 189 insertions(+), 159 deletions(-)
create mode 100644 templates/consommer/dialog-nourritureboisson.html
delete mode 100644 templates/dialog-consommer-nourriture.html
diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 2cf90ea1..576f4c9f 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -261,7 +261,7 @@ export class RdDActorSheet extends ActorSheet {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("item-id");
const item = this.actor.getObjet(itemId);
- this.actor.consommer(item);
+ this.actor.consommerDialog(item);
});
html.find('.subacteur-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
diff --git a/module/actor.js b/module/actor.js
index 915ba800..a3efca07 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -1610,25 +1610,70 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async consommer(item) {
- DialogConsommer.create(this, item, {
- html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-consommer-nourriture.html',
- }, []);
+ async consommerDialog(item) {
+ if (!item.isConsommable()) return;
+ const dialog = await DialogConsommer.create(this, item);
+ dialog.render(true)
}
- async manger(sust) {
+ /* -------------------------------------------- */
+ 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.isConsommable()) 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.isConsommable()) 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 +1688,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 +2149,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 ?? '' }
diff --git a/module/dialog-consommer.js b/module/dialog-consommer.js
index 13ea1387..37584bd5 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':
+ buttonName.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.js b/module/item.js
index ab7f8ec3..190483c8 100644
--- a/module/item.js
+++ b/module/item.js
@@ -33,6 +33,31 @@ export class RdDItem extends Item {
}
+ isConsommable(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 false;
+ }
+
+ switch (itemData.type) {
+ case 'nourritureboisson':
+ case 'potion':
+ return true;
+ }
+ if (options.warnIfNot) {
+ ui.notifications.warn(`Impossible de consommer un ${itemData.name}, ce n'est pas commestible.`);
+ }
+ return false;
+ }
+
+ isAlcool() {
+ const itemData = Misc.data(this);
+ return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise;
+ }
+
async diminuerQuantite(nombre, options = { diminuerQuantite: true }) {
if (!options.diminuerQuantite) return;
const itemData = Misc.data(this);
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/templates/consommer/dialog-nourritureboisson.html b/templates/consommer/dialog-nourritureboisson.html
new file mode 100644
index 00000000..91a4f15f
--- /dev/null
+++ b/templates/consommer/dialog-nourritureboisson.html
@@ -0,0 +1,36 @@
+
\ No newline at end of file
diff --git a/templates/dialog-consommer-nourriture.html b/templates/dialog-consommer-nourriture.html
deleted file mode 100644
index 58d50d98..00000000
--- a/templates/dialog-consommer-nourriture.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
\ No newline at end of file
From df45c4bbbbfd61d040a94339195ca41174a4fdee Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 23:01:35 +0200
Subject: [PATCH 04/10] Simplification inventaire
---
templates/actor-inventaire-conteneur.html | 3 +++
templates/actor-sheet.html | 21 ++++-----------------
2 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html
index 628f8bc8..b925a479 100644
--- a/templates/actor-inventaire-conteneur.html
+++ b/templates/actor-inventaire-conteneur.html
@@ -9,6 +9,9 @@
{{item.data.quantite}}
{{numberFormat item.data.encTotal decimals=2}}
+ {{#unless item.estContenu}}
+
{{#if item.data.equipe}} {{else}} {{/if}}
+ {{/unless}}
{{#if (eq item.type 'nourritureboisson')}}
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index 916dd344..6d5b703f 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -754,26 +754,13 @@
{{#each objets as |item id|}}
{{#unless item.estContenu}}
{{#if (ne item.type 'conteneur')}}
-
-
- {{item.name}}
- {{item.data.quantite}}
- {{numberFormat item.data.encTotal decimals=2}}
-
- {{#if item.data.equipe}} {{else}} {{/if}}
-
-
- {{#if (and (eq item.type 'nourritureboisson') item.data.quantite)}}
- Consommer
- {{/if}}
-
-
+ {{> "systems/foundryvtt-reve-de-dragon/templates/actor-inventaire-conteneur.html" item=item }}
{{/if}}
{{/unless}}
- {{/each}}
- {{#each conteneurs as |conteneur id|}}
+ {{/each}}
+ {{#each conteneurs as |conteneur id|}}
{{buildConteneur this}}
- {{/each}}
+ {{/each}}
Montures
From a13b9f9c56745cda0e8dd6fe888dcbe309e7a0d9 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 23:01:57 +0200
Subject: [PATCH 05/10] Fix encombrement herbes
---
module/item.js | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/module/item.js b/module/item.js
index 190483c8..38b04f82 100644
--- a/module/item.js
+++ b/module/item.js
@@ -3,6 +3,7 @@ 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 {
@@ -24,14 +25,24 @@ export class RdDItem extends Item {
_calculsEquipement() {
const tplData = Misc.templateData(this);
const quantite = Misc.data(this).type == 'conteneur' ? 1 : (tplData.quantite ?? 0);
- if (tplData.encombrement != undefined) {
- tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite;
+ 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
+ }
isConsommable(options = { warnIfNot: true }) {
const itemData = Misc.data(this);
From b27ff16857803e687c8a70ef77b20bbe1bc3e7e2 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 12:05:06 +0200
Subject: [PATCH 06/10] =?UTF-8?q?Utiliser=20class=20plut=C3=B4t=20que=20id?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module/actor-entite-sheet.js | 2 +-
module/actor-sheet.js | 14 +++++++-------
templates/actor-creature-sheet.html | 2 +-
templates/actor-entite-sheet.html | 2 +-
templates/actor-sheet.html | 14 +++++++-------
5 files changed, 17 insertions(+), 17 deletions(-)
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 576f4c9f..a8bc4f28 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -268,7 +268,7 @@ export class RdDActorSheet extends ActorSheet {
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/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 @@
diff --git a/templates/actor-entite-sheet.html b/templates/actor-entite-sheet.html
index 365a0e3d..bd83477c 100644
--- a/templates/actor-entite-sheet.html
+++ b/templates/actor-entite-sheet.html
@@ -9,7 +9,7 @@
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index 6d5b703f..70145c11 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -55,14 +55,14 @@
-
+
-
-
+
+
{{#if data.attributs.hautrevant.value}}
-
-
-
+
+
+
{{/if}}
@@ -84,7 +84,7 @@
{{/each}}
{{#if options.isGM}}
-
(enlever tout)
+
(enlever tout)
{{/if}}
{{else}}
Aucun effet actif
From 893f2aa835787b77f4585cf6ff9bbc05cc6bd821 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 23:02:53 +0200
Subject: [PATCH 07/10] Minor cleanup ActiveEffect
---
module/actor.js | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/module/actor.js b/module/actor.js
index a3efca07..18ba9bb0 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -3502,7 +3502,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);
+ }
}
/* -------------------------------------------- */
@@ -3521,8 +3523,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]);
}
From a39e2a3256cea071d47ceb47b0e1942f3b10e5da Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 23:03:55 +0200
Subject: [PATCH 08/10] Rename herbeData (creer potion d'herbe)
---
module/actor.js | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/module/actor.js b/module/actor.js
index 18ba9bb0..22b5f7d9 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -3363,33 +3363,34 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- 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,
+ categorie: herbeData.data.categorie,
+ herbe: herbeData.name,
+ rarete: herbeData.data.rarete,
+ herbebrins: herbeData.nbBrins,
description: ""
}
}
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
}
+ // TODO:
if (newQuantite == 0) {
- await this.deleteEmbeddedDocuments('Item', [potionData._id]);
+ await this.deleteEmbeddedDocuments('Item', [herbeData._id]);
} else {
- let update = { _id: potionData._id, 'data.quantite': newQuantite };
+ let update = { _id: herbeData._id, 'data.quantite': newQuantite };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
ChatMessage.create({
From b1f0d5483760078f7db727f855b33cd973c0b6b2 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Mon, 12 Apr 2021 00:16:23 +0200
Subject: [PATCH 09/10] Boire une potion de soin
---
module/actor-sheet.js | 4 +-
module/actor.js | 48 +++++--------------
module/dialog-consommer.js | 2 +-
module/item.js | 38 ++++++++++-----
module/rdd-herbes.js | 10 ----
templates/actor-inventaire-conteneur.html | 4 +-
.../chat-consommer-potion-generique.html | 4 +-
templates/chat-consommer-potion-repos.html | 6 +--
templates/chat-consommer-potion-soin.html | 6 +--
templates/consommer/dialog-potion.html | 14 ++++++
templates/item-potion-sheet.html | 4 +-
11 files changed, 67 insertions(+), 73 deletions(-)
create mode 100644 templates/consommer/dialog-potion.html
diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index a8bc4f28..15f9adf5 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -257,11 +257,11 @@ 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.consommerDialog(item);
+ this.actor.actionItem(item);
});
html.find('.subacteur-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
diff --git a/module/actor.js b/module/actor.js
index 22b5f7d9..a1c03135 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";
@@ -313,7 +312,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async verifierPotionsEnchantees() {
- let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante'));
+ let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante);
for (let potion of potionsEnchantees) {
if (!potion.prpermanent) {
console.log(potion);
@@ -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,8 +1607,8 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async consommerDialog(item) {
- if (!item.isConsommable()) return;
+ async actionItem(item) {
+ if (!item.getActionPrincipale()) return;
const dialog = await DialogConsommer.create(this, item);
dialog.render(true)
}
@@ -1648,7 +1645,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async manger(item, doses, options = { diminuerQuantite: true }) {
- if (!item.isConsommable()) return;
+ if (!item.getActionPrincipale()) return;
await this.apprecierCuisine(item);
const sust = Misc.templateData(item).sust;
if (sust > 0) {
@@ -1656,10 +1653,10 @@ export class RdDActor extends Actor {
}
await item.diminuerQuantite(doses, options);
}
-
+
/* -------------------------------------------- */
async boire(item, doses, options = { diminuerQuantite: true }) {
- if (!item.isConsommable()) return;
+ if (!item.getActionPrincipale()) return;
const tplData = Misc.templateData(item);
const desaltere = tplData.desaltere;
if (desaltere > 0) {
@@ -3278,10 +3275,7 @@ export class RdDActor extends Actor {
async consommerPotionSoin(potionData) {
potionData.alias = this.name;
- 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)
@@ -3291,7 +3285,7 @@ export class RdDActor extends Actor {
potionData.reussiteReve = false;
if (!rolled.isSuccess) {
await this.reveActuelIncDec(-1);
- potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison);
+ potionData.guerisonData = await this.buildPotionGuerisonList(potionData.data.puissance);
potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5;
potionData.reussiteReve = true;
}
@@ -3300,8 +3294,6 @@ export class RdDActor extends Actor {
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)
@@ -3314,10 +3306,7 @@ export class RdDActor extends Actor {
async consommerPotionRepos(potionData) {
potionData.alias = this.name;
- 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)
@@ -3328,7 +3317,7 @@ export class RdDActor extends Actor {
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.reussiteReve = true;
@@ -3346,8 +3335,6 @@ export class RdDActor extends Actor {
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)
@@ -3386,13 +3373,7 @@ export class RdDActor extends Actor {
nbBrinsPotion: herbeData.nbBrins,
nbBrinsReste: newQuantite
}
- // TODO:
- if (newQuantite == 0) {
- await this.deleteEmbeddedDocuments('Item', [herbeData._id]);
- } else {
- let update = { _id: herbeData._id, 'data.quantite': newQuantite };
- await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
- }
+ this.getObjet(herbeData._id).diminuerQuantite(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)
@@ -3404,13 +3385,6 @@ export class RdDActor extends Actor {
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)
diff --git a/module/dialog-consommer.js b/module/dialog-consommer.js
index 37584bd5..d0bc81c5 100644
--- a/module/dialog-consommer.js
+++ b/module/dialog-consommer.js
@@ -48,7 +48,7 @@ export class DialogConsommer extends Dialog {
consommerData.buttonName = itemData.data.boisson ? "Boire" : "Manger";
break;
case 'potion':
- buttonName.title = `${itemData.name}: boire la potion`;
+ consommerData.title = `${itemData.name}: boire la potion`;
consommerData.buttonName = "Boire";
break;
}
diff --git a/module/item.js b/module/item.js
index 38b04f82..e41bbabb 100644
--- a/module/item.js
+++ b/module/item.js
@@ -1,3 +1,4 @@
+import { Grammar } from "./grammar.js";
import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";
@@ -17,9 +18,26 @@ export class RdDItem extends Item {
prepareDerivedData() {
super.prepareDerivedData();
- if (RdDItem.getTypeObjetsEquipement().includes(Misc.data(this).type)) {
+ const itemData = Misc.data(this);
+ if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) {
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() {
@@ -36,32 +54,30 @@ export class RdDItem extends Item {
getEnc() {
const itemData = Misc.data(this);
- switch (itemData.type)
- {
+ switch (itemData.type) {
case 'herbe':
return encBrin;
}
return itemData.data.encombrement
}
- isConsommable(options = { warnIfNot: true }) {
+ 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 false;
+ return undefined;
}
-
switch (itemData.type) {
- case 'nourritureboisson':
- case 'potion':
- return true;
+ case 'nourritureboisson': return itemData.data.boisson ? 'Boire' : 'Manger';
+ case 'potion': return 'Boire';
}
if (options.warnIfNot) {
- ui.notifications.warn(`Impossible de consommer un ${itemData.name}, ce n'est pas commestible.`);
+ ui.notifications.warn(`Impossible d'utilise un ${itemData.name}, aucune action associée définie.`);
}
- return false;
+
+ return undefined;
}
isAlcool() {
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/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html
index b925a479..da3789c0 100644
--- a/templates/actor-inventaire-conteneur.html
+++ b/templates/actor-inventaire-conteneur.html
@@ -14,8 +14,8 @@
{{/unless}}
- {{#if (eq item.type 'nourritureboisson')}}
- Consommer
+ {{#if item.data.actionPrincipale}}
+ {{item.data.actionPrincipale}}
{{/if}}
diff --git a/templates/chat-consommer-potion-generique.html b/templates/chat-consommer-potion-generique.html
index 23c1946b..8f2b5838 100644
--- a/templates/chat-consommer-potion-generique.html
+++ b/templates/chat-consommer-potion-generique.html
@@ -1,9 +1,9 @@
- {{alias}} consomme sa Potion {{enchanteTexte}} de {{name}}.
+ {{alias}} consomme sa Potion {{#if data.isEnchante}}enchantée{{/if}} de {{name}}.
- Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if 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.isEnchante}} 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 0d1bf631..a51e11f9 100644
--- a/templates/chat-consommer-potion-repos.html
+++ b/templates/chat-consommer-potion-repos.html
@@ -1,11 +1,11 @@
- {{alias}} consomme sa Potion de Repos {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
+ {{alias}} consomme sa Potion de Repos {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
- {{#if casesRepos}}
- Elle permet de récupérer jusqu'à {{casesRepos}} cases de repos.
+ {{#if data.isEnchante}}
+ 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).
La potion a également été supprimée de l'équipement.
diff --git a/templates/chat-consommer-potion-soin.html b/templates/chat-consommer-potion-soin.html
index 459428d3..61a400b6 100644
--- a/templates/chat-consommer-potion-soin.html
+++ b/templates/chat-consommer-potion-soin.html
@@ -1,11 +1,11 @@
- {{alias}} consomme sa Potion de Soins {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
+ {{alias}} consomme sa Potion de soins {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).
- {{#if pointsGuerison}}
- Elle permet de guérir {{pointsGuerison}} Points de Guérison.
+ {{#if data.isEnchante}}
+ 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).
La potion a également été supprimée de l'équipement.
diff --git a/templates/consommer/dialog-potion.html b/templates/consommer/dialog-potion.html
new file mode 100644
index 00000000..ae07e9eb
--- /dev/null
+++ b/templates/consommer/dialog-potion.html
@@ -0,0 +1,14 @@
+
\ No newline at end of file
diff --git a/templates/item-potion-sheet.html b/templates/item-potion-sheet.html
index 5f4aa541..628a6064 100644
--- a/templates/item-potion-sheet.html
+++ b/templates/item-potion-sheet.html
@@ -5,7 +5,7 @@
{{#if isOwned}}
{{/if}}
@@ -77,7 +77,7 @@
{{/if}}
- {{#if isEnchante}}
+ {{#if data.isEnchante}}