Achat pour consommer
This commit is contained in:
parent
7cd5f0eef9
commit
b808ccc7f7
@ -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);
|
const itemData = Misc.data(item);
|
||||||
if (itemData.type != 'nourritureboisson') {
|
if (itemData.type != 'nourritureboisson') {
|
||||||
return;
|
return;
|
||||||
@ -1832,7 +1832,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
await this.manger(item, choix.doses, { diminuerQuantite: false });
|
await this.manger(item, choix.doses, { diminuerQuantite: false });
|
||||||
await this.boire(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 itemId = vente.item._id;
|
||||||
|
|
||||||
const coutDeniers = Math.floor((achat.prixTotal ?? 0) * 100);
|
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) {
|
if (acheteur) {
|
||||||
let resteAcheteur = await acheteur.depenser(coutDeniers);
|
let resteAcheteur = await acheteur.depenser(coutDeniers);
|
||||||
if (resteAcheteur < 0) {
|
if (resteAcheteur < 0) {
|
||||||
@ -3560,7 +3560,7 @@ export class RdDActor extends Actor {
|
|||||||
const itemVendu = vendeur?.getObjet(itemId);
|
const itemVendu = vendeur?.getObjet(itemId);
|
||||||
if (itemVendu) {
|
if (itemVendu) {
|
||||||
let itemVenduData = Misc.data(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);
|
await acheteur?.ajouterDeniers(coutDeniers);
|
||||||
ui.notifications.warn(`Le vendeur n'a plus assez de ${vente.item.name} !`);
|
ui.notifications.warn(`Le vendeur n'a plus assez de ${vente.item.name} !`);
|
||||||
return;
|
return;
|
||||||
@ -3582,7 +3582,11 @@ export class RdDActor extends Actor {
|
|||||||
data: vente.item.data
|
data: vente.item.data
|
||||||
}
|
}
|
||||||
achatData.data.quantite = achat.quantiteTotal;
|
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) {
|
if (coutDeniers > 0) {
|
||||||
RdDAudio.PlayContextAudio("argent");
|
RdDAudio.PlayContextAudio("argent");
|
||||||
@ -3594,12 +3598,12 @@ export class RdDActor extends Actor {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!vente.quantiteIllimite) {
|
if (!vente.quantiteIllimite) {
|
||||||
if (vente.quantiteNbLots <= achat.nombreLots) {
|
if (vente.quantiteNbLots <= achat.choix.nombreLots) {
|
||||||
ChatUtility.removeChatMessageId(achat.chatMessageIdVente);
|
ChatUtility.removeChatMessageId(achat.chatMessageIdVente);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
vente["properties"] = new RdDItem(vente.item).getProprietes();
|
vente["properties"] = new RdDItem(vente.item).getProprietes();
|
||||||
vente.quantiteNbLots -= achat.nombreLots;
|
vente.quantiteNbLots -= achat.choix.nombreLots;
|
||||||
vente.jsondata = JSON.stringify(vente.item);
|
vente.jsondata = JSON.stringify(vente.item);
|
||||||
messageVente.update({ content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente) });
|
messageVente.update({ content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente) });
|
||||||
messageVente.render(true);
|
messageVente.render(true);
|
||||||
|
@ -28,17 +28,21 @@ export class DialogItemAchat extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) {
|
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 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 = {
|
let conf = {
|
||||||
title: actionAchat,
|
title: actionAchat,
|
||||||
content: html,
|
content: html,
|
||||||
default: actionAchat,
|
default: actionAchat,
|
||||||
buttons: {
|
buttons: buttons
|
||||||
[actionAchat]: { label: actionAchat, callback: it => { this.onAchat(); } },
|
|
||||||
"decliner": { label: "Décliner", callback: it => { } }
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
super(conf, options);
|
super(conf, options);
|
||||||
@ -60,7 +64,11 @@ export class DialogItemAchat extends Dialog {
|
|||||||
tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1),
|
tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1),
|
||||||
quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true',
|
quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true',
|
||||||
quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value),
|
quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value),
|
||||||
|
choix: {
|
||||||
nombreLots: 1,
|
nombreLots: 1,
|
||||||
|
seForcer: false,
|
||||||
|
supprimerSiZero: true
|
||||||
|
},
|
||||||
prixLot: prixLot,
|
prixLot: prixLot,
|
||||||
prixTotal: prixLot,
|
prixTotal: prixLot,
|
||||||
isVente: prixLot > 0
|
isVente: prixLot > 0
|
||||||
@ -73,21 +81,31 @@ export class DialogItemAchat extends Dialog {
|
|||||||
(this.vendeur ?? this.acheteur).achatVente({
|
(this.vendeur ?? this.acheteur).achatVente({
|
||||||
vendeurId: this.vendeur?.id,
|
vendeurId: this.vendeur?.id,
|
||||||
acheteurId: this.acheteur?.id,
|
acheteurId: this.acheteur?.id,
|
||||||
nombreLots: this.venteData.nombreLots,
|
|
||||||
prixTotal: this.venteData.prixTotal,
|
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) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
|
||||||
html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value)));
|
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) {
|
setNombreLots(nombreLots) {
|
||||||
this.venteData.nombreLots = nombreLots;
|
this.venteData.choix.nombreLots = nombreLots;
|
||||||
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
||||||
$(".prixTotal").text(this.venteData.prixTotal);
|
$(".prixTotal").text(this.venteData.prixTotal);
|
||||||
}
|
}
|
||||||
|
@ -31,9 +31,44 @@
|
|||||||
</label>
|
</label>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<input name="nombreLots" class="nombreLots flex-shrink" type="number" min="1" max="{{quantiteNbLots}}"
|
<input name="nombreLots" class="nombreLots flex-shrink" type="number" min="1" max="{{quantiteNbLots}}"
|
||||||
value="{{nombreLots}}" data-dtype="Number" />
|
value="{{choix.nombreLots}}" data-dtype="Number" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{#if (eq item.type 'nourritureboisson')}}
|
||||||
|
<p>
|
||||||
|
Si vous souhaitez {{#if item.data.boisson}}boire{{else}}manger{{/if}}:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{#if item.data.sust}}
|
||||||
|
<p>Cette {{#if item.data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera <span
|
||||||
|
class="total-sust">{{totalSust}}</span> de sustantation.</p>
|
||||||
|
{{/if}}
|
||||||
|
{{#if item.data.boisson}}
|
||||||
|
<p>{{#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 <span class="total-desaltere">{{totalDesaltere}}</span> unités d'eau.
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (gt item.data.qualite 0)}}
|
||||||
|
{{#if (gt item.data.qualite cuisine.data.niveau)}}
|
||||||
|
<p>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.</p>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (or (lt item.data.qualite 0) (lt item.data.exotisme 0))}}
|
||||||
|
<p>
|
||||||
|
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}}.
|
||||||
|
<br/>
|
||||||
|
<input class="attribute-value se-forcer" type="checkbox" name="se-forcer" {{#if choix.seForcer}}checked{{/if}}>
|
||||||
|
<label for="se-forcer">En cas d'échec, voulez-vous vous forcer à manger (et subir un jet de moral en situation malheureuse)?</label>
|
||||||
|
</input>
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if isVente}}
|
{{#if isVente}}
|
||||||
<div class="flexrow flex-group-left">
|
<div class="flexrow flex-group-left">
|
||||||
<label>Prix {{#if (gt tailleLot 1)}}du lot{{else}}unitaire{{/if}}</label>
|
<label>Prix {{#if (gt tailleLot 1)}}du lot{{else}}unitaire{{/if}}</label>
|
||||||
|
Loading…
Reference in New Issue
Block a user