Vincent Vandemeulebrouck
c595b24aa0
Pour permettre de masquer les informations sur les PNJs secondaires, ou de dévoiler le nom de l'acteur
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js";
|
|
import { RdDItem } from "../item.js";
|
|
import { RdDUtility } from "../rdd-utility.js";
|
|
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
|
|
|
|
/**
|
|
* Extend the basic ActorSheet with some very simple modifications
|
|
* @extends {ActorSheet}
|
|
*/
|
|
export class RdDCommerceSheet extends RdDBaseActorSheet {
|
|
|
|
/** @override */
|
|
static get defaultOptions() {
|
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html",
|
|
width: 600, height: 720,
|
|
tabs: []
|
|
}, { inplace: false })
|
|
}
|
|
get title() {
|
|
if (this.actor.token && this.actor.token != this.actor.prototypeToken) {
|
|
return this.actor.token.name;
|
|
}
|
|
return super.title
|
|
}
|
|
|
|
async getData() {
|
|
const formData = await super.getData();
|
|
if (this.actor.token && this.actor.token != this.actor.prototypeToken) {
|
|
foundry.utils.mergeObject(formData,
|
|
{
|
|
title: this.actor.token.name,
|
|
token: {
|
|
img: this.actor.token.texture.src
|
|
}
|
|
},
|
|
{ overwrite: true });
|
|
|
|
}
|
|
return formData;
|
|
}
|
|
/* -------------------------------------------- */
|
|
/** @override */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
|
|
this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event)));
|
|
|
|
if (!this.options.editable) return;
|
|
|
|
this.html.find('a.item-quantite-moins').click(async event => await this.getItem(event)?.quantiteIncDec(-1, { supprimerSiZero: false }));
|
|
this.html.find('a.item-quantite-plus').click(async event => await this.getItem(event)?.quantiteIncDec(1));
|
|
this.html.find('input.item-quantite').change(async event => {
|
|
const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val()));
|
|
await this.getItem(event)?.update({ "system.quantite": newQuantite });
|
|
})
|
|
this.html.find('input.item-cout').change(async event => {
|
|
const newCout = Math.max(0, Number(this.html.find(event.currentTarget).val()));
|
|
await this.getItem(event)?.update({ "system.cout": newCout });
|
|
})
|
|
}
|
|
|
|
getTypesInventaire() {
|
|
return RdDItem.getItemTypesInventaire('all');
|
|
}
|
|
|
|
|
|
async vente(item) {
|
|
const acheteur = RdDUtility.getSelectedActor();
|
|
if (!acheteur) {
|
|
ui.notifications.warn(`Pas d'acheteur sélectionné`);
|
|
return;
|
|
}
|
|
const disponible = this.actor.getQuantiteDisponible(item)
|
|
if (disponible == 0) {
|
|
ui.notifications.warn(`${this.getAlias()} n'a plus de ${item.name} en vente`);
|
|
return;
|
|
}
|
|
|
|
await DialogItemAchat.onAcheter({
|
|
item,
|
|
vendeur: this.actor,
|
|
acheteur,
|
|
quantiteIllimite: disponible == undefined,
|
|
nbLots: disponible ?? 1,
|
|
tailleLot: 1,
|
|
prixLot: item.calculerPrixCommercant()
|
|
});
|
|
}
|
|
}
|