e2ff813226
On pouvait saisir à la main un nombre de lots plus grand que le nombre disponible, ce qui multipliait la quantité par ce nombre de lots
117 lines
4.2 KiB
JavaScript
117 lines
4.2 KiB
JavaScript
|
|
import { Misc } from "./misc.js";
|
|
import { RdDUtility } from "./rdd-utility.js";
|
|
|
|
export class DialogItemAchat extends Dialog {
|
|
|
|
static async onButtonAcheter(event) {
|
|
const buttonAcheter = event.currentTarget;
|
|
if (!buttonAcheter.attributes['data-jsondata']?.value) {
|
|
ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
|
|
return;
|
|
}
|
|
const chatMessageIdVente = RdDUtility.findChatMessageId(buttonAcheter);
|
|
|
|
const vendeurId = buttonAcheter.attributes['data-vendeurId']?.value;
|
|
const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
|
|
const acheteur = RdDUtility.getSelectedActor();
|
|
|
|
if (!acheteur && !vendeur) {
|
|
ui.notifications.info("Pas d'acheteur ni de vendeur, aucun changement");
|
|
return;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) {
|
|
const isConsommable = venteData.item.type == 'nourritureboisson';
|
|
let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 350, 'z-index': 99999 };
|
|
|
|
const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre";
|
|
const buttons = {};
|
|
if (isConsommable) {
|
|
buttons["consommer"] = { label: venteData.item.system.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: venteData.acheteur ? venteData.acheteur.name + " - " + actionAchat : actionAchat,
|
|
content: html,
|
|
default: actionAchat,
|
|
buttons: buttons
|
|
};
|
|
|
|
super(conf, options);
|
|
|
|
this.vendeur = vendeur;
|
|
this.acheteur = acheteur;
|
|
this.chatMessageIdVente = chatMessageIdVente;
|
|
this.venteData = venteData;
|
|
}
|
|
|
|
static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) {
|
|
const jsondata = buttonAcheter.attributes['data-jsondata']?.value;
|
|
const prixLot = parseInt(buttonAcheter.attributes['data-prixLot']?.value ?? 0);
|
|
return {
|
|
item: JSON.parse(jsondata),
|
|
vendeurId: vendeurId,
|
|
vendeur: vendeur,
|
|
acheteur: acheteur,
|
|
tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1),
|
|
quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true',
|
|
quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value),
|
|
choix: {
|
|
nombreLots: 1,
|
|
seForcer: false,
|
|
supprimerSiZero: true
|
|
},
|
|
prixLot: prixLot,
|
|
prixTotal: prixLot,
|
|
isVente: prixLot > 0
|
|
};
|
|
}
|
|
|
|
async onAchat() {
|
|
await $(".nombreLots").change();
|
|
(this.vendeur ?? this.acheteur).achatVente({
|
|
userId: game.user.id,
|
|
vendeurId: this.vendeur?.id,
|
|
acheteurId: this.acheteur?.id,
|
|
prixTotal: this.venteData.prixTotal,
|
|
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) {
|
|
if (nombreLots > this.venteData.quantiteNbLots) {
|
|
ui.notifications.warn(`Seulement ${this.venteData.quantiteNbLots} lots disponibles, vous ne pouvez pas en prendre ${nombreLots}`)
|
|
}
|
|
this.venteData.choix.nombreLots = Math.min(nombreLots, this.venteData.quantiteNbLots);
|
|
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
|
$(".nombreLots").val(this.venteData.choix.nombreLots);
|
|
$(".prixTotal").text(this.venteData.prixTotal);
|
|
}
|
|
|
|
} |