diff --git a/module/actor.js b/module/actor.js index 60a1467a..5d425962 100644 --- a/module/actor.js +++ b/module/actor.js @@ -30,6 +30,7 @@ import { Monnaie } from "./item-monnaie.js"; import { DialogConsommer } from "./dialog-item-consommer.js"; import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js"; import { RollDataAjustements } from "./rolldata-ajustements.js"; +import { DialogItemAchat } from "./dialog-item-achat.js"; /* -------------------------------------------- */ @@ -3511,61 +3512,61 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async achatVente(vendeurId, acheteurId, venteData, chatMessageIdVente) { - if (vendeurId == acheteurId) { + async achatVente(achat) { + if (achat.vendeurId == achat.acheteurId) { ui.notifications.info("Inutile de se vendre à soi-même"); return; } if (!Misc.isElectedUser()) { RdDActor.remoteActorCall({ - actorId: vendeurId ?? acheteurId, - method: 'achatVente', args: [vendeurId, acheteurId, venteData, chatMessageIdVente] + actorId: achat.vendeurId ?? achat.acheteurId, + method: 'achatVente', args: [achat] }); return; } - const acheteur = acheteurId ? game.actors.get(acheteurId) : undefined; - const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined; - const itemId = venteData.item._id; + const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined; + const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined; + const messageVente = game.messages.get(achat.chatMessageIdVente); + const html = await messageVente.getHTML(); + const buttonAcheter = html.find(".button-acheter")[0]; + const vente = DialogItemAchat.prepareVenteData(buttonAcheter, achat.vendeurId, vendeur, acheteur); + const itemId = vente.item._id; - const coutDeniers = Math.floor((venteData.prixTotal ?? 0) * 100); - venteData.quantiteTotal = (venteData.nombreLots ?? 1) * (venteData.tailleLot); + const coutDeniers = Math.floor((achat.prixTotal ?? 0) * 100); + achat.quantiteTotal = (achat.nombreLots ?? 1) * (vente.tailleLot); if (acheteur) { let resteAcheteur = await acheteur.depenser(coutDeniers); if (resteAcheteur < 0) { - ui.notifications.warn(`Vous n'avez pas assez d'argent pour payer ${venteData.prixTotal} sols !`); + ui.notifications.warn(`Vous n'avez pas assez d'argent pour payer ${vente.prixTotal} sols !`); return; } } if (vendeur) { - let itemData = Misc.data(vendeur.getObjet(itemId)); - // diminuer QuantiteVendeur - if ("quantite" in itemData.data ? - itemData.data.quantite < venteData.quantiteTotal : venteData.nombreLots != 1) { - // pas assez de quantite + let itemVenduData = Misc.data(vendeur.getObjet(itemId)); + if ("quantite" in itemVenduData.data ? itemVenduData.data.quantite < achat.quantiteTotal : achat.nombreLots != 1) { await acheteur?.ajouterDeniers(coutDeniers); - ui.notifications.warn(`Le vendeur n'a plus assez de ${venteData.item.name} !`); + ui.notifications.warn(`Le vendeur n'a plus assez de ${vente.item.name} !`); return; } vendeur.ajouterDeniers(coutDeniers); - let qtReste = (itemData.data.quantite ?? 1) - venteData.quantiteTotal; - if (qtReste == 0) { + let resteQuantite = (itemVenduData.data.quantite ?? 1) - achat.quantiteTotal; + if (resteQuantite == 0) { vendeur.deleteEmbeddedDocuments("Item", itemId); } else { - vendeur.updateEmbeddedDocuments("Item", [{ _id: itemId, 'data.quantite': qtReste }]); + vendeur.updateEmbeddedDocuments("Item", [{ _id: itemId, 'data.quantite': resteQuantite }]); } } - if (acheteur) { - const achat = { - type: venteData.item.type, - img: venteData.item.img, - name: venteData.item.name, - data: venteData.item.data + const achatData = { + type: vente.item.type, + img: vente.item.img, + name: vente.item.name, + data: vente.item.data } - achat.data.quantite = venteData.quantiteTotal; - await acheteur.createEmbeddedDocuments("Item", [achat]); + achatData.data.quantite = achat.quantiteTotal; + await acheteur.createEmbeddedDocuments("Item", [achatData]); } if (coutDeniers > 0) { RdDAudio.PlayContextAudio("argent"); @@ -3573,19 +3574,16 @@ export class RdDActor extends Actor { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), - content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', venteData) + content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', vente) }); - if (!venteData.quantiteIllimite) { - if (venteData.quantiteNbLots <= venteData.nombreLots) { + if (!vente.quantiteIllimite) { + if (vente.quantiteNbLots <= achat.nombreLots) { ChatUtility.removeChatMessageId(chatMessageIdVente); } else { - venteData.quantiteNbLots -= venteData.nombreLots; - venteData.jsondata = JSON.stringify(venteData.item); - let newMessageVente = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', venteData); - const messageVente = game.messages.get(chatMessageIdVente); - messageVente.update({ content: newMessageVente }); + vente.quantiteNbLots -= achat.nombreLots; + messageVente.update({ content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente) }); messageVente.render(true); } } diff --git a/module/dialog-item-achat.js b/module/dialog-item-achat.js index 855c84a1..7a7079cf 100644 --- a/module/dialog-item-achat.js +++ b/module/dialog-item-achat.js @@ -1,17 +1,18 @@ -import { RdDActor } from "./actor.js"; -import { HtmlUtility } from "./html-utility.js"; + import { Misc } from "./misc.js"; import { RdDUtility } from "./rdd-utility.js"; export class DialogItemAchat extends Dialog { static async onButtonAcheter(event) { - let jsondata = event.currentTarget.attributes['data-jsondata']?.value; - if (!jsondata) { + const buttonAcheter = event.currentTarget; + if (!buttonAcheter.attributes['data-jsondata']?.value) { ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes") return; } - const vendeurId = event.currentTarget.attributes['data-vendeurId']?.value; + const chatMessageIdVente = RdDUtility.findChatMessageId(buttonAcheter); + + const vendeurId = buttonAcheter.attributes['data-vendeurId']?.value; const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined; const acheteur = RdDUtility.getSelectedActor(); @@ -20,22 +21,7 @@ export class DialogItemAchat extends Dialog { return; } - const chatMessageIdVente = RdDUtility.findChatMessageId(event.currentTarget); - const itemData = JSON.parse(jsondata); - const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0; - let venteData = { - item: itemData, - vendeurId: vendeurId, - vendeur: Misc.data(vendeur), - acheteur: Misc.data(acheteur), - tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1, - quantiteIllimite : event.currentTarget.attributes['data-quantiteIllimite']?.value == 'true', - quantiteNbLots: event.currentTarget.attributes['data-quantiteNbLots']?.value, - nombreLots: 1, - prixLot: prixLot, - prixTotal: prixLot, - isVente: prixLot > 0 - }; + let venteData = DialogItemAchat.prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur); const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData); const dialog = new DialogItemAchat(html, vendeur, acheteur, venteData, chatMessageIdVente); dialog.render(true); @@ -63,14 +49,34 @@ export class DialogItemAchat extends Dialog { this.venteData = venteData; } + static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) { + const jsondata = buttonAcheter.attributes['data-jsondata']?.value; + const prixLot = buttonAcheter.attributes['data-prixLot']?.value ?? 0; + let venteData = { + item: JSON.parse(jsondata), + vendeurId: vendeurId, + vendeur: Misc.data(vendeur), + acheteur: Misc.data(acheteur), + tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1), + quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true', + quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value), + nombreLots: 1, + prixLot: prixLot, + prixTotal: prixLot, + isVente: prixLot > 0 + }; + return venteData; + } + async onAchat() { await $(".nombreLots").change(); - (this.vendeur ?? this.acheteur).achatVente( - this.vendeur?.id, - this.acheteur?.id, - this.venteData, - this.chatMessageIdVente - ); + (this.vendeur ?? this.acheteur).achatVente({ + vendeurId: this.vendeur?.id, + acheteurId: this.acheteur?.id, + nombreLots: this.venteData.nombreLots, + prixTotal: this.venteData.prixTotal, + chatMessageIdVente: this.chatMessageIdVente + }); } /* -------------------------------------------- */