From 508d352b0b6059d014fbb22b39b84115710a7c2e Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 10 Dec 2021 01:18:59 +0100 Subject: [PATCH] Fix vente/don de conteneur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pour passer par le tchat, le conteneur doit ĂȘtre vide. Correction du calcul de quantitĂ© pour les conteneurs. --- module/actor.js | 2 +- module/dialog-item-vente.js | 7 ++++--- module/item-sheet.js | 3 +-- module/item.js | 18 +++++++++++++++--- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/module/actor.js b/module/actor.js index a3b8b0ec..e786e985 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3711,7 +3711,7 @@ export class RdDActor extends Actor { } const itemVendu = Misc.data(vendeur?.getObjet(itemId)); if (itemVendu) { - if (isItemEmpilable ? itemVendu.data.quantite < achat.quantiteTotal : achat.choix.nombreLots != 1) { + if (isItemEmpilable ? (itemVendu.data.quantite < achat.quantiteTotal) : (achat.choix.nombreLots != 1)) { await acheteur?.ajouterDeniers(coutDeniers); ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a plus assez de ${vente.item.name} !`); return; diff --git a/module/dialog-item-vente.js b/module/dialog-item-vente.js index a0a5dcf4..b0802171 100644 --- a/module/dialog-item-vente.js +++ b/module/dialog-item-vente.js @@ -5,6 +5,7 @@ export class DialogItemVente extends Dialog { static async create(item, callback) { const itemData = Misc.data(item); + const quantite = item.isConteneur() ? 1 : itemData.data.quantite; const venteData = { item: itemData, alias: item.actor?.name ?? game.user.name, @@ -13,9 +14,9 @@ export class DialogItemVente extends Dialog { prixUnitaire: itemData.data.cout, prixLot: itemData.data.cout, tailleLot: 1, - quantiteNbLots: itemData.data.quantite, - quantiteMaxLots: itemData.data.quantite, - quantiteMax: itemData.data.quantite, + quantiteNbLots: quantite, + quantiteMaxLots: quantite, + quantiteMax: quantite , quantiteIllimite: !item.isOwned, isOwned: item.isOwned, }; diff --git a/module/item-sheet.js b/module/item-sheet.js index 2863e30c..d46a8a83 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -30,10 +30,9 @@ export class RdDItemSheet extends ItemSheet { /* -------------------------------------------- */ _getHeaderButtons() { let buttons = super._getHeaderButtons(); - const videSiConteneur = this.object.isConteneur() ? this.object.isVide() : true; // Add "Post to chat" button // We previously restricted this to GM and editable items only. If you ever find this comment because it broke something: eh, sorry! - if ("cout" in Misc.templateData(this.object) && videSiConteneur) { + if ("cout" in Misc.templateData(this.object) && this.object.isVideOuNonConteneur()) { buttons.unshift({ class: "post", icon: "fas fa-comments-dollar", diff --git a/module/item.js b/module/item.js index 679f21b6..f6fc38d9 100644 --- a/module/item.js +++ b/module/item.js @@ -63,8 +63,16 @@ export class RdDItem extends Item { return Misc.data(this).type == 'conteneur'; } - isVide() { - return this.isConteneur() && (Misc.templateData(this).contenu ?? []).length == 0; + isConteneurNonVide() { + return this.isConteneur() && (Misc.templateData(this).contenu?.length ?? 0) > 0; + } + + isConteneurVide() { + return this.isConteneur() && (Misc.templateData(this).contenu?.length ?? 0) == 0; + } + + isVideOuNonConteneur() { + return !this.isConteneur() || (Misc.templateData(this).contenu?.length ?? 0) == 0; } isAlcool() { @@ -143,7 +151,7 @@ export class RdDItem extends Item { getActionPrincipale(options = { warnIfNot: true }) { const itemData = Misc.data(this); - if (itemData.type != 'conteneur' && (itemData.data.quantite ?? 0) <= 0) { + if (!this.isConteneur() && (itemData.data.quantite ?? 0) <= 0) { if (options.warnIfNot) { ui.notifications.warn(`Vous n'avez plus de ${itemData.name}.`); } @@ -217,6 +225,10 @@ export class RdDItem extends Item { async proposerVente() { console.log(this); + if (this.isConteneurNonVide()) { + ui.notifications.warn(`Votre ${this.name} n'est pas vide, pas possible de le donner ou le vendre`); + return; + } const dialog = await DialogItemVente.create(this, (vente) => this._onProposerVente(vente)) dialog.render(true); }