Fix commerce achat MJ sans personnage
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.
This commit is contained in:
		| @@ -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<br>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) { | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user