forked from public/foundryvtt-reve-de-dragon
Gestion des monnaies de valeur 0
Ajout d'un message d'erreur quand on met la valeur d'une monnaie à 0. Ajout d'une notification quand on détecte des monnaies de valeur 0 Pour les pièces en bois, les créer comme objets, si on ne veut pas de messages d'avertissement.
This commit is contained in:
@ -23,6 +23,7 @@ const MONNAIE_OR = {
|
||||
};
|
||||
|
||||
const MONNAIES_STANDARD = [MONNAIE_ETAIN, MONNAIE_BRONZE, MONNAIE_ARGENT, MONNAIE_OR];
|
||||
const VALEUR_DENIERS = sols => Math.max(Math.floor((sols ?? 0) * 100), 0);
|
||||
|
||||
export class Monnaie {
|
||||
|
||||
@ -40,15 +41,11 @@ export class Monnaie {
|
||||
}
|
||||
|
||||
static deValeur(monnaie, valeur) {
|
||||
return Monnaie.valEntiere(valeur) == Monnaie.valEntiere(monnaie.system.cout)
|
||||
}
|
||||
|
||||
static valEntiere(sols) {
|
||||
return Math.max(Math.floor((sols??0)*100), 0);
|
||||
return VALEUR_DENIERS(valeur) == VALEUR_DENIERS(monnaie.system.cout)
|
||||
}
|
||||
|
||||
static triValeurEntiere() {
|
||||
return Misc.ascending(item => Monnaie.valEntiere(item.system.cout))
|
||||
return Misc.ascending(item => VALEUR_DENIERS(item.system.cout))
|
||||
}
|
||||
|
||||
static async creerMonnaiesStandard(actor) {
|
||||
@ -65,29 +62,49 @@ export class Monnaie {
|
||||
return deniers;
|
||||
}
|
||||
|
||||
static getFortune(actor) {
|
||||
if (actor) {
|
||||
Monnaie.validerMonnaies(actor);
|
||||
return actor.itemTypes['monnaie']
|
||||
.map(m => Number(m.system.cout) * Number(m.system.quantite))
|
||||
.reduce(Misc.sum(), 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static async optimiserFortune(actor, fortune) {
|
||||
let resteEnDeniers = Math.round(fortune*100);
|
||||
let resteEnDeniers = Math.round(fortune * 100);
|
||||
let monnaies = actor.itemTypes['monnaie'];
|
||||
let updates = [];
|
||||
let parValeur = Misc.classifyFirst(monnaies, it => Monnaie.valEntiere(it.system.cout));
|
||||
for (let valeurDeniers of [1000, 100, 10, 1]) {
|
||||
Monnaie.validerMonnaies(actor);
|
||||
|
||||
let parValeur = Misc.classifyFirst(monnaies, it => VALEUR_DENIERS(it.system.cout));
|
||||
for (let valeurDeniers of [1000, 100, 10, 1]) {
|
||||
const itemPiece = parValeur[valeurDeniers];
|
||||
if (itemPiece) {
|
||||
const quantite = Math.floor(resteEnDeniers / valeurDeniers);
|
||||
if (quantite != itemPiece.system.quantite) {
|
||||
updates.push({ _id: parValeur[valeurDeniers].id, 'system.quantite': quantite });
|
||||
}
|
||||
resteEnDeniers -= quantite*valeurDeniers;
|
||||
resteEnDeniers -= quantite * valeurDeniers;
|
||||
}
|
||||
}
|
||||
console.log('Monnaie.optimiserFortune', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', resteEnDeniers);
|
||||
if (updates.length > 0) {
|
||||
await actor.updateEmbeddedDocuments('Item', updates);
|
||||
}
|
||||
if (resteEnDeniers > 0){
|
||||
if (resteEnDeniers > 0) {
|
||||
// créer le reste en deniers fortune en deniers
|
||||
await Monnaie.creerMonnaiesDeniers(actor, resteEnDeniers);
|
||||
}
|
||||
}
|
||||
|
||||
static validerMonnaies(actor) {
|
||||
actor.itemTypes['monnaie'].filter(it => VALEUR_DENIERS(it.system.cout) == 0)
|
||||
.map(it => `La monnaie ${it.name} de l'acteur ${actor.name} a une valeur de 0!`)
|
||||
.forEach(message => {
|
||||
ui.notifications.warn(message);
|
||||
console.warn(message);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user