Gestion des signes draconiques #455
@ -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é <strong>${sumDenier} Deniers</strong>, 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 += `<br>Et l'objet <strong>${dataObj.payload.name}</strong> a été ajouté à votre inventaire.`;
|
||||
msg += `<br>L'objet <strong>${dataObj.payload.name}</strong> 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é <strong>${depense} Deniers</strong>${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 += `<br>Et l'objet <strong>${dataObj.payload.name}</strong> 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 <strong>${gain} Deniers</strong> ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés de votre argent.`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async monnaieIncDec(id, value) {
|
||||
let monnaie = this.getMonnaie(id);
|
||||
|
@ -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]
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user