From b808ccc7f7b87cac13cc13816764e79f3f5afd09 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Mon, 21 Jun 2021 23:37:33 +0200 Subject: [PATCH] Achat pour consommer --- module/actor.js | 18 ++++++++----- module/dialog-item-achat.js | 36 ++++++++++++++++++------- templates/dialog-item-achat.html | 45 ++++++++++++++++++++++++++++---- 3 files changed, 78 insertions(+), 21 deletions(-) diff --git a/module/actor.js b/module/actor.js index 5c921663..cf4a37c6 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1816,7 +1816,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false }) { + async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false, supprimerSiZero: false }) { const itemData = Misc.data(item); if (itemData.type != 'nourritureboisson') { return; @@ -1832,7 +1832,7 @@ export class RdDActor extends Actor { } await this.manger(item, choix.doses, { diminuerQuantite: false }); await this.boire(item, choix.doses, { diminuerQuantite: false }); - await item.diminuerQuantite(choix.doses); + await item.diminuerQuantite(choix.doses, choix); } /* -------------------------------------------- */ @@ -3549,7 +3549,7 @@ export class RdDActor extends Actor { const itemId = vente.item._id; const coutDeniers = Math.floor((achat.prixTotal ?? 0) * 100); - achat.quantiteTotal = (achat.nombreLots ?? 1) * (vente.tailleLot); + achat.quantiteTotal = (achat.choix.nombreLots ?? 1) * (vente.tailleLot); if (acheteur) { let resteAcheteur = await acheteur.depenser(coutDeniers); if (resteAcheteur < 0) { @@ -3560,7 +3560,7 @@ export class RdDActor extends Actor { const itemVendu = vendeur?.getObjet(itemId); if (itemVendu) { let itemVenduData = Misc.data(itemVendu); - if ("quantite" in itemVenduData.data ? itemVenduData.data.quantite < achat.quantiteTotal : achat.nombreLots != 1) { + if ("quantite" in itemVenduData.data ? itemVenduData.data.quantite < achat.quantiteTotal : achat.choix.nombreLots != 1) { await acheteur?.ajouterDeniers(coutDeniers); ui.notifications.warn(`Le vendeur n'a plus assez de ${vente.item.name} !`); return; @@ -3582,7 +3582,11 @@ export class RdDActor extends Actor { data: vente.item.data } achatData.data.quantite = achat.quantiteTotal; - await acheteur.createEmbeddedDocuments("Item", [achatData]); + let items = await acheteur.createEmbeddedDocuments("Item", [achatData]); + if (achat.choix.consommer && vente.item.type == 'nourritureboisson') { + achat.choix.doses = achat.choix.nombreLots; + await acheteur.consommerNourritureboisson(items[0], achat.choix); + } } if (coutDeniers > 0) { RdDAudio.PlayContextAudio("argent"); @@ -3594,12 +3598,12 @@ export class RdDActor extends Actor { }); if (!vente.quantiteIllimite) { - if (vente.quantiteNbLots <= achat.nombreLots) { + if (vente.quantiteNbLots <= achat.choix.nombreLots) { ChatUtility.removeChatMessageId(achat.chatMessageIdVente); } else { vente["properties"] = new RdDItem(vente.item).getProprietes(); - vente.quantiteNbLots -= achat.nombreLots; + vente.quantiteNbLots -= achat.choix.nombreLots; vente.jsondata = JSON.stringify(vente.item); 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 7a7079cf..8c3c20f8 100644 --- a/module/dialog-item-achat.js +++ b/module/dialog-item-achat.js @@ -28,17 +28,21 @@ export class DialogItemAchat extends Dialog { } constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) { - let options = { classes: ["dialogachat"], width: 400, height: 300, 'z-index': 99999 }; + const isConsommable = venteData.item.type == 'nourritureboisson'; + let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 300, 'z-index': 99999 }; const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre"; + const buttons = {}; + if (isConsommable) { + buttons["consommer"] = { label: venteData.item.data.boisson ? "Boire" : "Manger", callback: it => { this.onAchatConsommer(); } } + } + buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } }; + buttons["decliner"] = { label: "Décliner", callback: it => { } }; let conf = { title: actionAchat, content: html, default: actionAchat, - buttons: { - [actionAchat]: { label: actionAchat, callback: it => { this.onAchat(); } }, - "decliner": { label: "Décliner", callback: it => { } } - } + buttons: buttons }; super(conf, options); @@ -60,7 +64,11 @@ export class DialogItemAchat extends Dialog { tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1), quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true', quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value), - nombreLots: 1, + choix: { + nombreLots: 1, + seForcer: false, + supprimerSiZero: true + }, prixLot: prixLot, prixTotal: prixLot, isVente: prixLot > 0 @@ -73,21 +81,31 @@ export class DialogItemAchat extends Dialog { (this.vendeur ?? this.acheteur).achatVente({ vendeurId: this.vendeur?.id, acheteurId: this.acheteur?.id, - nombreLots: this.venteData.nombreLots, prixTotal: this.venteData.prixTotal, - chatMessageIdVente: this.chatMessageIdVente + chatMessageIdVente: this.chatMessageIdVente, + choix: this.venteData.choix }); } + + async onAchatConsommer() { + this.venteData.choix.consommer = true; + await this.onAchat(); + } /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value))); + html.find(".se-forcer").change(event => this.setSeForcer(event)); + } + + setSeForcer(event) { + this.venteData.choix.seForcer = event.currentTarget.checked; } setNombreLots(nombreLots) { - this.venteData.nombreLots = nombreLots; + this.venteData.choix.nombreLots = nombreLots; this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2); $(".prixTotal").text(this.venteData.prixTotal); } diff --git a/templates/dialog-item-achat.html b/templates/dialog-item-achat.html index 2f2ef0b9..b6c6b9e3 100644 --- a/templates/dialog-item-achat.html +++ b/templates/dialog-item-achat.html @@ -11,11 +11,11 @@ --}}

{{#if isVente}}Acheter{{else}}Prendre{{/if}} - {{#if vendeur}}à {{vendeur.name}} {{/if}}: + {{#if vendeur}}à {{vendeur.name}}{{/if}}: {{item.name}}

- - -
+
+ +
+ value="{{choix.nombreLots}}" data-dtype="Number" />
+ + {{#if (eq item.type 'nourritureboisson')}} +

+ Si vous souhaitez {{#if item.data.boisson}}boire{{else}}manger{{/if}}: +

+ + {{#if item.data.sust}} +

Cette {{#if item.data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera {{totalSust}} de sustantation.

+ {{/if}} + {{#if item.data.boisson}} +

{{#if item.data.alcoolise}} + C'est une boisson alcoolisée de force {{item.data.force}}, vous effectuerez un jet d'éthylisme. + {{/if}} + Cette boisson vous apportera {{totalDesaltere}} unités d'eau. +

+ {{/if}} + {{#if (gt item.data.qualite 0)}} + {{#if (gt item.data.qualite cuisine.data.niveau)}} +

La qualité du plat est telle qu'un jet de Goût/Cuisine à {{numberFormat item.data.qualite decimals=0 sign=true}} + vous permettra un jet de moral heureux.

+ {{/if}} + {{/if}} + + {{#if (or (lt item.data.qualite 0) (lt item.data.exotisme 0))}} +

+ Pour surmonter {{#if (lt item.data.qualite 0)}}le mauvais goût{{else}}l'exotisme{{/if}}, vous devez effectuer un jet de Volonté/Cuisine à {{numberFormat (min item.data.exotisme item.data.qualite) decimals=0 sign=true}}. +
+ + + +

+ {{/if}} + {{/if}} + {{#if isVente}}