Gestion des signes draconiques #455
@ -3110,54 +3110,68 @@ export class RdDActor extends Actor {
|
|||||||
return;
|
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 parValeur = Misc.classifyFirst(monnaies, it => Misc.templateData(it).valeur_deniers);
|
||||||
let fortune = {
|
let nouvelleFortune = {
|
||||||
1000: Math.floor(sumDenier / 1000), // or
|
1000: Math.floor(fortuneTotale / 1000), // or
|
||||||
100: Math.floor(sumDenier / 100) % 10, // argent
|
100: Math.floor(fortuneTotale / 100) % 10, // argent
|
||||||
10: Math.floor(sumDenier / 10) % 10, // bronze
|
10: Math.floor(fortuneTotale / 10) % 10, // bronze
|
||||||
1: sumDenier % 10 // étain
|
1: fortuneTotale % 10 // étain
|
||||||
}
|
}
|
||||||
let updates = []
|
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 });
|
updates.push({ _id: parValeur[valeur]._id, 'data.quantite': nombre });
|
||||||
}
|
}
|
||||||
await this.updateEmbeddedDocuments('Item', updates);
|
await this.updateEmbeddedDocuments('Item', updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async payerDenier(sumDenier, dataObj = undefined, quantite = 1) {
|
async depenserDeniers(depense, dataObj = undefined, quantite = 1, toActorId) {
|
||||||
let monnaies = Monnaie.filtrerMonnaies(this.data.items);
|
depense = Number(depense);
|
||||||
if (monnaies.length < 4) {
|
let fortune = this.getFortune();
|
||||||
ui.notifications.warn("Problème de monnaies manquantes, impossible de payer correctement!")
|
console.log("depenserDeniers", game.user.character, depense, fortune);
|
||||||
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);
|
|
||||||
|
|
||||||
let msg = "";
|
let msg = "";
|
||||||
let isPayed = false;
|
if (depense == 0) {
|
||||||
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 (dataObj) {
|
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;
|
dataObj.payload.data.quantite = quantite;
|
||||||
await this.createEmbeddedDocuments('Item', [dataObj.payload]);
|
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 = {
|
let message = {
|
||||||
@ -3167,6 +3181,24 @@ export class RdDActor extends Actor {
|
|||||||
ChatMessage.create(message);
|
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) {
|
async monnaieIncDec(id, value) {
|
||||||
let monnaie = this.getMonnaie(id);
|
let monnaie = this.getMonnaie(id);
|
||||||
|
@ -529,8 +529,9 @@ export class RdDUtility {
|
|||||||
});
|
});
|
||||||
// Gestion du bouton payer
|
// Gestion du bouton payer
|
||||||
html.on("click", '.payer-button', event => {
|
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 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 jsondata = event.currentTarget.attributes['data-jsondata']
|
||||||
let objData
|
let objData
|
||||||
if (jsondata) {
|
if (jsondata) {
|
||||||
@ -538,7 +539,11 @@ export class RdDUtility {
|
|||||||
}
|
}
|
||||||
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
|
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
|
||||||
if (actor) {
|
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