From 6b31e81c72c4ee0e4e13a022ad7eb554d3c56532 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck
Date: Sun, 11 Apr 2021 18:47:00 +0200
Subject: [PATCH] =?UTF-8?q?Possibilit=C3=A9=20de=20poster=20de=20la=20nour?=
=?UTF-8?q?riture?=
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}}