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:
Vincent Vandemeulebrouck 2023-06-12 23:04:32 +02:00
parent d82a543860
commit fc63835a71
4 changed files with 11 additions and 11 deletions

View File

@ -38,6 +38,7 @@ import { RdDItemBlessure } from "./item/blessure.js";
import { AppAstrologie } from "./sommeil/app-astrologie.js"; import { AppAstrologie } from "./sommeil/app-astrologie.js";
import { RdDEmpoignade } from "./rdd-empoignade.js"; import { RdDEmpoignade } from "./rdd-empoignade.js";
import { ExperienceLog, XP_TOPIC } from "./actor/experience-log.js"; import { ExperienceLog, XP_TOPIC } from "./actor/experience-log.js";
import { TYPES } from "./item.js";
const POSSESSION_SANS_DRACONIC = { const POSSESSION_SANS_DRACONIC = {
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp', img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
@ -109,7 +110,7 @@ export class RdDActor extends RdDBaseActor {
canReceive(item) { canReceive(item) {
if (this.isCreature()) { if (this.isCreature()) {
return item.type == 'competencecreature' || item.isInventaire(); return item.type == TYPES.competencecreature || item.isInventaire();
} }
if (this.isEntite()) { if (this.isEntite()) {
return item.type == 'competencecreature'; return item.type == 'competencecreature';

View File

@ -248,13 +248,12 @@ export class RdDBaseActor extends Actor {
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined; const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined; const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined;
const quantite = (achat.choix.nombreLots ?? 1) * (achat.vente.tailleLot); 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) { if (!itemVendu) {
ui.notifications.warn("Erreur sur achat: rien à acheter<br>Si possible, transmettez les logs de la console aux développeurs"); ChatUtility.notifyUser(achat.userId, 'warn', vendeur ? `Le vendeur n'a pas plus de ${achat.vente.item.name} !`: `Impossible de retrouver: ${achat.vente.item.name} !`);
console.log('Erreur sur achat: rien à acheter', achat);
return; 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} !`); ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a pas assez de ${itemVendu.name} !`);
return return
} }
@ -265,7 +264,7 @@ export class RdDBaseActor extends Actor {
await this.decrementerVente(vendeur, itemVendu, quantite, cout); await this.decrementerVente(vendeur, itemVendu, quantite, cout);
if (acheteur) { if (acheteur) {
await acheteur.depenserSols(cout); 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); await acheteur.consommerNourritureAchetee(achat, achat.vente, createdItemId);
} }
if (cout > 0) { if (cout > 0) {
@ -306,9 +305,9 @@ export class RdDBaseActor extends Actor {
return this.getFortune() >= cout; return this.getFortune() >= cout;
} }
verifierQuantite(vendeur, item, quantiteTotal) { verifierQuantite(item, quantiteDemande) {
const disponible = vendeur?.getQuantiteDisponible(item); const disponible = item?.getQuantite();
return disponible == undefined || disponible >= quantiteTotal; return disponible == undefined || disponible >= quantiteDemande;
} }
async consommerNourritureAchetee(achat, vente, createdItemId) { async consommerNourritureAchetee(achat, vente, createdItemId) {

View File

@ -22,7 +22,7 @@ export class RdDCommerce extends RdDBaseActor {
} }
getQuantiteDisponible(item) { getQuantiteDisponible(item) {
return this.system.illimite || item.isService() ? undefined : item.getQuantite(); return (this.system.illimite || item?.isService()) ? undefined : item.getQuantite();
} }
verifierFortune(cout) { verifierFortune(cout) {

View File

@ -370,7 +370,7 @@ export class RdDItem extends Item {
} }
getEncTotal() { getEncTotal() {
return (this.isService() ? 0 : this.getQuantite()) * this.getEnc(); return (this.getQuantite() ?? 0) * this.getEnc();
} }
getEnc() { getEnc() {