From 9e050d3e12b64b051f14c28a83c7678bb679894e Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Mon, 12 Jun 2023 23:04:32 +0200 Subject: [PATCH] Fix commerce achat MJ sans personnage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correction sur les achats: l'objet acheté vient forcément soit d'un personnage-vendeur, soit des Items globaux. Ne pas essayer d'acheter autrement car on aurait des données d'item non structurées, et donc ça ne fonctionnerait pas. --- module/actor.js | 3 ++- module/actor/base-actor.js | 15 +++++++-------- module/actor/commerce.js | 2 +- module/item.js | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/module/actor.js b/module/actor.js index 29f089fb..205fa89e 100644 --- a/module/actor.js +++ b/module/actor.js @@ -38,6 +38,7 @@ import { RdDItemBlessure } from "./item/blessure.js"; import { AppAstrologie } from "./sommeil/app-astrologie.js"; import { RdDEmpoignade } from "./rdd-empoignade.js"; import { ExperienceLog, XP_TOPIC } from "./actor/experience-log.js"; +import { TYPES } from "./item.js"; const POSSESSION_SANS_DRACONIC = { img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp', @@ -109,7 +110,7 @@ export class RdDActor extends RdDBaseActor { canReceive(item) { if (this.isCreature()) { - return item.type == 'competencecreature' || item.isInventaire(); + return item.type == TYPES.competencecreature || item.isInventaire(); } if (this.isEntite()) { return item.type == 'competencecreature'; diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index 59b15b25..d5901382 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -248,13 +248,12 @@ export class RdDBaseActor extends Actor { const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined; const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined; const quantite = (achat.choix.nombreLots ?? 1) * (achat.vente.tailleLot); - const itemVendu = vendeur?.getItem(achat.vente.item._id) ?? game.items.get(achat.vente.item._id) ?? achat.vente.item; + const itemVendu = vendeur?.getItem(achat.vente.item._id) ?? game.items.get(achat.vente.item._id); if (!itemVendu) { - ui.notifications.warn("Erreur sur achat: rien à acheter
Si possible, transmettez les logs de la console aux développeurs"); - console.log('Erreur sur achat: rien à acheter', achat); + ChatUtility.notifyUser(achat.userId, 'warn', vendeur ? `Le vendeur n'a pas plus de ${achat.vente.item.name} !`: `Impossible de retrouver: ${achat.vente.item.name} !`); return; } - if (!this.verifierQuantite(vendeur, itemVendu, quantite)) { + if (vendeur && !this.verifierQuantite(itemVendu, quantite)) { ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a pas assez de ${itemVendu.name} !`); return } @@ -265,7 +264,7 @@ export class RdDBaseActor extends Actor { await this.decrementerVente(vendeur, itemVendu, quantite, cout); if (acheteur) { await acheteur.depenserSols(cout); - const createdItemId = await acheteur.creerQuantiteItem(achat.vente.item, quantite); + const createdItemId = await acheteur.creerQuantiteItem(itemVendu, quantite); await acheteur.consommerNourritureAchetee(achat, achat.vente, createdItemId); } if (cout > 0) { @@ -306,9 +305,9 @@ export class RdDBaseActor extends Actor { return this.getFortune() >= cout; } - verifierQuantite(vendeur, item, quantiteTotal) { - const disponible = vendeur?.getQuantiteDisponible(item); - return disponible == undefined || disponible >= quantiteTotal; + verifierQuantite(item, quantiteDemande) { + const disponible = item?.getQuantite(); + return disponible == undefined || disponible >= quantiteDemande; } async consommerNourritureAchetee(achat, vente, createdItemId) { diff --git a/module/actor/commerce.js b/module/actor/commerce.js index fffc6535..c504e950 100644 --- a/module/actor/commerce.js +++ b/module/actor/commerce.js @@ -22,7 +22,7 @@ export class RdDCommerce extends RdDBaseActor { } getQuantiteDisponible(item) { - return this.system.illimite || item.isService() ? undefined : item.getQuantite(); + return (this.system.illimite || item?.isService()) ? undefined : item.getQuantite(); } verifierFortune(cout) { diff --git a/module/item.js b/module/item.js index 32edbd39..46ba302c 100644 --- a/module/item.js +++ b/module/item.js @@ -370,7 +370,7 @@ export class RdDItem extends Item { } getEncTotal() { - return (this.isService() ? 0 : this.getQuantite()) * this.getEnc(); + return (this.getQuantite() ?? 0) * this.getEnc(); } getEnc() {