diff --git a/module/actor.js b/module/actor.js
index af6f9760..fc90154b 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -3110,54 +3110,68 @@ export class RdDActor extends Actor {
return;
}
/* -------------------------------------------- */
- async optimizeArgent(sumDenier, monnaies) {
+ getFortune() {
+ let monnaies = Monnaie.filtrerMonnaies(this.data.items);
+ if (monnaies.length < 4) {
+ ui.notifications.error("Problème de monnaies manquantes, impossible de payer correctement!")
+ return 0;
+ }
+ return monnaies.map(m => Misc.templateData(m))
+ .map(tpl => tpl.valeur_deniers * Number(tpl.quantite))
+ .reduce(Misc.sum(), 0);
+ }
+ /* -------------------------------------------- */
+ async optimizeArgent(fortuneTotale) {
+ let monnaies = Monnaie.filtrerMonnaies(this.data.items);
let parValeur = Misc.classifyFirst(monnaies, it => Misc.templateData(it).valeur_deniers);
- let fortune = {
- 1000: Math.floor(sumDenier / 1000), // or
- 100: Math.floor(sumDenier / 100) % 10, // argent
- 10: Math.floor(sumDenier / 10) % 10, // bronze
- 1: sumDenier % 10 // étain
+ let nouvelleFortune = {
+ 1000: Math.floor(fortuneTotale / 1000), // or
+ 100: Math.floor(fortuneTotale / 100) % 10, // argent
+ 10: Math.floor(fortuneTotale / 10) % 10, // bronze
+ 1: fortuneTotale % 10 // étain
}
let updates = []
- for (const [valeur, nombre] of Object.entries(fortune)) {
+ for (const [valeur, nombre] of Object.entries(nouvelleFortune)) {
updates.push({ _id: parValeur[valeur]._id, 'data.quantite': nombre });
}
await this.updateEmbeddedDocuments('Item', updates);
}
/* -------------------------------------------- */
- async payerDenier(sumDenier, dataObj = undefined, quantite = 1) {
- let monnaies = Monnaie.filtrerMonnaies(this.data.items);
- if (monnaies.length < 4) {
- ui.notifications.warn("Problème de monnaies manquantes, impossible de payer correctement!")
- return;
- }
-
- sumDenier = Number(sumDenier);
- let denierDisponible = 0;
-
- for (let pieceData of monnaies.map(m => Misc.data(m))) {
- denierDisponible += pieceData.data.valeur_deniers * Number(pieceData.data.quantite);
- }
- console.log("DENIER", game.user.character, sumDenier, denierDisponible);
-
+ async depenserDeniers(depense, dataObj = undefined, quantite = 1, toActorId) {
+ depense = Number(depense);
+ let fortune = this.getFortune();
+ console.log("depenserDeniers", game.user.character, depense, fortune);
let msg = "";
- let isPayed = false;
- if (denierDisponible >= sumDenier) {
- denierDisponible -= sumDenier;
- this.optimizeArgent(denierDisponible, monnaies);
- msg = `Vous avez payé ${sumDenier} Deniers, qui ont été soustraits de votre argent.`;
- RdDAudio.PlayContextAudio("argent"); // Petit son
- isPayed = true;
+ if (depense == 0) {
if (dataObj) {
- dataObj.payload.data.cout = sumDenier / 100; // Mise à jour du prix en sols , avec le prix acheté
+ dataObj.payload.data.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
dataObj.payload.data.quantite = quantite;
await this.createEmbeddedDocuments('Item', [dataObj.payload]);
- msg += `
Et l'objet ${dataObj.payload.name} a été ajouté à votre inventaire.`;
+ msg += `
L'objet ${dataObj.payload.name} a été ajouté gratuitement à votre inventaire.`;
+ }
+ }
+ else {
+ if (fortune >= depense) {
+ fortune -= depense;
+ const toActor = game.actors.get(toActorId)
+ if (toActor) {
+ toActor.ajouterDeniers(depense, this.id);
+ }
+ await this.optimizeArgent(fortune);
+ msg = `Vous avez payé ${depense} Deniers${toActor ? " à " + toActor.name : ''}, qui ont été soustraits de votre argent.`;
+ RdDAudio.PlayContextAudio("argent"); // Petit son
+
+ if (dataObj) {
+ dataObj.payload.data.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
+ dataObj.payload.data.quantite = quantite;
+ await this.createEmbeddedDocuments('Item', [dataObj.payload]);
+ msg += `
Et l'objet ${dataObj.payload.name} a été ajouté à votre inventaire.`;
+ }
+ } else {
+ msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
}
- } else {
- msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
}
let message = {
@@ -3167,6 +3181,24 @@ export class RdDActor extends Actor {
ChatMessage.create(message);
}
+ async ajouterDeniers(gain, fromActorId = undefined) {
+ if (fromActorId && !game.user.isGM) {
+ RdDActor.remoteActorCall(this.id, 'ajouterDeniers', gain, fromActorId);
+ }
+ else {
+ const fromActor = game.actors.get(fromActorId)
+ let fortune = this.getFortune();
+ fortune += Number(gain);
+ await this.optimizeArgent(fortune);
+
+ RdDAudio.PlayContextAudio("argent"); // Petit son
+ ChatMessage.create({
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
+ content: `Vous avez reçu ${gain} Deniers ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés de votre argent.`
+ });
+ }
+ }
+
/* -------------------------------------------- */
async monnaieIncDec(id, value) {
let monnaie = this.getMonnaie(id);
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index a2fb6c2c..d1dd170a 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -529,8 +529,9 @@ export class RdDUtility {
});
// Gestion du bouton payer
html.on("click", '.payer-button', event => {
- let sumdenier = event.currentTarget.attributes['data-somme-denier'].value;
+ let sumdenier = event.currentTarget.attributes['data-somme-denier']?.value ?? 0;
let quantite = event.currentTarget.attributes['data-quantite']?.value ?? 1;
+ let fromActorId = event.currentTarget.attributes['data-actor-id']?.value;
let jsondata = event.currentTarget.attributes['data-jsondata']
let objData
if (jsondata) {
@@ -538,7 +539,11 @@ export class RdDUtility {
}
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
if (actor) {
- actor.payerDenier(sumdenier, objData, quantite);
+ actor.depenserDeniers(sumdenier, objData, quantite, fromActorId);
+ // TODO: diminuer la quantité ou supprimer le message
+ // message: => document.querySelector("#chat-log > li:nth-child(61) > div > div > span > a")
+ // => ../../../..[@data-message-id]
+
}
});
}