diff --git a/module/actor.js b/module/actor.js
index d9af9b98..2a975124 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -1359,10 +1359,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
computePrixTotalEquipement() {
- const deniers = this.items.filter(it => it.isEquipement())
- .map(it => it.prixTotalDeniers())
+ const valeur = this.items.filter(it => it.isEquipement())
+ .map(it => it.valeurTotale())
.reduce(Misc.sum(), 0);
- return deniers / 100;
+ return valeur / 100;
}
/* -------------------------------------------- */
@@ -3586,36 +3586,20 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
- async depenserDeniers(depense, dataObj = undefined, quantite = 1, toActorId) {
+ async payerSols(depense) {
depense = Number(depense);
- let fortune = this.getFortune();
- console.log("depenserDeniers", game.user.character, depense, fortune);
- let msg = "";
if (depense == 0) {
- if (dataObj) {
- dataObj.payload.system.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
- dataObj.payload.system.quantite = quantite;
- await this.createEmbeddedDocuments('Item', [dataObj.payload]);
- msg += `
L'objet ${dataObj.payload.name} a été ajouté gratuitement à votre inventaire.`;
- }
+ return;
}
- else {
- if (fortune >= depense) {
- const toActor = game.actors.get(toActorId)
- await toActor?.ajouterDeniers(depense, this.id);
- await Monnaie.optimiser(this, fortune - depense);
- 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.system.cout = depense / 100; // Mise à jour du prix en sols , avec le prix acheté
- dataObj.payload.system.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 !";
- }
+ let fortune = this.getFortune();
+ console.log("payer", game.user.character, depense, fortune);
+ let msg = "";
+ if (fortune >= depense) {
+ await Monnaie.optimiserFortune(this, fortune - depense);
+ msg = `Vous avez payé ${depense} Sols, qui ont été soustraits de votre argent.`;
+ RdDAudio.PlayContextAudio("argent"); // Petit son
+ } else {
+ msg = "Vous n'avez pas assez d'argent pour payer cette somme !";
}
let message = {
@@ -3625,38 +3609,38 @@ export class RdDActor extends Actor {
ChatMessage.create(message);
}
- async depenser(depense) {
- let reste = this.getFortune() - Number.parseInt(depense);
+ async depenserSols(sols) {
+ let reste = this.getFortune() - Number(sols);
if (reste >= 0) {
- await Monnaie.optimiser(this, reste);
+ await Monnaie.optimiserFortune(this, reste);
}
return reste;
}
- async ajouterDeniers(gain, fromActorId = undefined) {
- gain = Number.parseInt(gain);
- if (gain < 0) {
- ui.notifications.error(`Impossible d'ajouter un gain de ${gain} <0`);
+ async ajouterSols(sols, fromActorId = undefined) {
+ sols = Number(sols);
+ if (sols == 0) {
return;
}
- if (gain == 0) {
+ if (sols < 0) {
+ ui.notifications.error(`Impossible d'ajouter un gain de ${sols} <0`);
return;
}
if (fromActorId && !game.user.isGM) {
RdDActor.remoteActorCall({
userId: Misc.connectedGMOrUser(),
actorId: this.id,
- method: 'ajouterDeniers', args: [gain, fromActorId]
+ method: 'ajouterSols', args: [sols, fromActorId]
});
}
else {
const fromActor = game.actors.get(fromActorId)
- await Monnaie.optimiser(this, gain + this.getFortune());
+ await Monnaie.optimiserFortune(this, sols + this.getFortune());
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 à votre argent.`
+ content: `Vous avez reçu ${sols} Sols ${fromActor ? " de " + fromActor.name : ''}, qui ont été ajoutés à votre argent.`
});
}
}
@@ -3690,23 +3674,23 @@ export class RdDActor extends Actor {
const itemId = vente.item._id;
const isItemEmpilable = "quantite" in vente.item.system;
- const coutDeniers = Math.floor((achat.prixTotal ?? 0) * 100);
+ const cout = Number(achat.prixTotal ?? 0);
achat.quantiteTotal = (achat.choix.nombreLots ?? 1) * (vente.tailleLot);
if (acheteur) {
- let resteAcheteur = await acheteur.depenser(coutDeniers);
+ let resteAcheteur = await acheteur.depenserSols(cout);
if (resteAcheteur < 0) {
- ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(coutDeniers / 100)} sols !`);
+ ChatUtility.notifyUser(achat.userId, 'warn', `Vous n'avez pas assez d'argent pour payer ${Math.ceil(cout / 100)} sols !`);
return;
}
}
const itemVendu = vendeur?.getObjet(itemId);
if (itemVendu) {
if (isItemEmpilable ? (itemVendu.system.quantite < achat.quantiteTotal) : (achat.choix.nombreLots != 1)) {
- await acheteur?.ajouterDeniers(coutDeniers);
+ await acheteur?.ajouterSols(cout);
ChatUtility.notifyUser(achat.userId, 'warn', `Le vendeur n'a plus assez de ${vente.item.name} !`);
return;
}
- vendeur.ajouterDeniers(coutDeniers);
+ vendeur.ajouterSols(cout);
let resteQuantite = (itemVendu.system.quantite ?? 1) - achat.quantiteTotal;
if (resteQuantite == 0) {
vendeur.deleteEmbeddedDocuments("Item", [itemId])
@@ -3729,7 +3713,7 @@ export class RdDActor extends Actor {
await acheteur.consommerNourritureboisson(items[0].id, achat.choix, vente.actingUserId);
}
}
- if (coutDeniers > 0) {
+ if (cout > 0) {
RdDAudio.PlayContextAudio("argent");
}
const chatAchatItem = duplicate(vente);
diff --git a/module/dialog-item-achat.js b/module/dialog-item-achat.js
index b137b5ab..649b1545 100644
--- a/module/dialog-item-achat.js
+++ b/module/dialog-item-achat.js
@@ -1,6 +1,5 @@
import { Monnaie } from "./item-monnaie.js";
-import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";
export class DialogItemAchat extends Dialog {
@@ -19,7 +18,7 @@ export class DialogItemAchat extends Dialog {
return undefined;
}
- const prixLot = Monnaie.arrondiDeniers(button.attributes['data-prixLot']?.value ?? 0);
+ const prixLot = Number(button.attributes['data-prixLot']?.value ?? 0);
return {
item: json ? JSON.parse(json) : undefined,
actingUserId: game.user.id,
diff --git a/module/dialog-item-vente.js b/module/dialog-item-vente.js
index 8669e365..32639eef 100644
--- a/module/dialog-item-vente.js
+++ b/module/dialog-item-vente.js
@@ -1,5 +1,4 @@
import { HtmlUtility } from "./html-utility.js";
-import { Misc } from "./misc.js";
export class DialogItemVente extends Dialog {
diff --git a/module/item-monnaie.js b/module/item-monnaie.js
index 930b79d4..7a16c258 100644
--- a/module/item-monnaie.js
+++ b/module/item-monnaie.js
@@ -4,22 +4,22 @@ import { LOG_HEAD } from "./constants.js";
const MONNAIE_ETAIN = {
name: "Etain (1 denier)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
- system: { quantite: 0, cout: 1, encombrement: 0.001, description: "" }
+ system: { quantite: 0, cout: 0.01, encombrement: 0.001, description: "" }
};
const MONNAIE_BRONZE = {
name: "Bronze (10 deniers)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp",
- system: { quantite: 0, cout: 10, encombrement: 0.002, description: "" }
+ system: { quantite: 0, cout: 0.10, encombrement: 0.002, description: "" }
};
const MONNAIE_ARGENT = {
name: "Argent (1 sol)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp",
- system: { quantite: 0, cout: 100, encombrement: 0.003, description: "" }
+ system: { quantite: 0, cout: 1, encombrement: 0.003, description: "" }
};
const MONNAIE_OR = {
name: "Or (10 sols)", type: 'monnaie',
img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp",
- system: { quantite: 0, cout: 1000, encombrement: 0.004, description: "" }
+ system: { quantite: 0, cout: 10, encombrement: 0.004, description: "" }
};
const MONNAIES_STANDARD = [MONNAIE_ETAIN, MONNAIE_BRONZE, MONNAIE_ARGENT, MONNAIE_OR];
@@ -40,15 +40,15 @@ export class Monnaie {
}
static deValeur(monnaie, valeur) {
- return valeur == monnaie.system.cout
+ return Monnaie.valEntiere(valeur) == Monnaie.valEntiere(monnaie.system.cout)
}
- static arrondiDeniers(sols) {
- return Number(sols).toFixed(2);
+ static valEntiere(sols) {
+ return Math.max(Math.floor((sols??0)*100), 0);
}
- static triValeurDenier() {
- return Misc.ascending(item => item.system.cout)
+ static triValeurEntiere() {
+ return Misc.ascending(item => Monnaie.valEntiere(item.system.cout))
}
static async creerMonnaiesStandard(actor) {
@@ -65,28 +65,28 @@ export class Monnaie {
return deniers;
}
- static async optimiser(actor, fortune) {
- let reste = fortune;
+ static async optimiserFortune(actor, fortune) {
+ let resteEnDeniers = Math.round(fortune*100);
let monnaies = actor.itemTypes['monnaie'];
let updates = [];
- let parValeur = Misc.classifyFirst(monnaies, it => it.system.cout);
- for (let valeur of [1000, 100, 10, 1]) {
- const itemPiece = parValeur[valeur];
+ let parValeur = Misc.classifyFirst(monnaies, it => Monnaie.valEntiere(it.system.cout));
+ for (let valeurDeniers of [1000, 100, 10, 1]) {
+ const itemPiece = parValeur[valeurDeniers];
if (itemPiece) {
- const quantite = Math.floor(reste / valeur);
+ const quantite = Math.floor(resteEnDeniers / valeurDeniers);
if (quantite != itemPiece.system.quantite) {
- updates.push({ _id: parValeur[valeur].id, 'system.quantite': quantite });
+ updates.push({ _id: parValeur[valeurDeniers].id, 'system.quantite': quantite });
}
- reste -= quantite*valeur;
+ resteEnDeniers -= quantite*valeurDeniers;
}
}
- console.log('Monnaie.optimiser', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', reste);
+ console.log('Monnaie.optimiserFortune', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', resteEnDeniers);
if (updates.length > 0) {
await actor.updateEmbeddedDocuments('Item', updates);
}
- if (reste > 0){
+ if (resteEnDeniers > 0){
// créer le reste en deniers fortune en deniers
- await Monnaie.creerMonnaiesDeniers(actor, reste);
+ await Monnaie.creerMonnaiesDeniers(actor, resteEnDeniers);
}
}
diff --git a/module/item.js b/module/item.js
index 8c8cda90..fd41209b 100644
--- a/module/item.js
+++ b/module/item.js
@@ -1,5 +1,6 @@
import { DialogItemVente } from "./dialog-item-vente.js";
import { Grammar } from "./grammar.js";
+import { Monnaie } from "./item-monnaie.js";
import { RdDHerbes } from "./rdd-herbes.js";
import { RdDUtility } from "./rdd-utility.js";
@@ -69,6 +70,30 @@ export class RdDItem extends Item {
return defaultItemImg[itemType];
}
+ static isEquipementFieldEditable(type, field) {
+ switch (field) {
+ case 'quantite':
+ if (['conteneur'].includes(type)) {
+ return false;
+ }
+ break;
+ case 'cout':
+ if(['monnaie'].includes(type)){
+ return game.user.isGM;
+ }
+ break;
+ }
+ return true;
+ }
+
+ static getUniteQuantite(type) {
+ switch (type) {
+ case "monnaie": return "(Pièces)"
+ case "herbe": return "(Brins)"
+ case "ingredient": return "(Pépins ou Brins)"
+ }
+ return '';
+ }
constructor(itemData, context) {
if (!itemData.img) {
@@ -167,12 +192,12 @@ export class RdDItem extends Item {
return Math.max(this.system.encombrement ?? 0, 0);
}
- prixTotalDeniers() {
- return this.getQuantite() * this.valeurDeniers()
+ valeurTotale() {
+ return this.getQuantite() * this.valeur()
}
- valeurDeniers() {
- return Math.max(Math.round(this.system.cout ? (this.system.cout * 100) : (this.system.cout ?? 0)), 0)
+ valeur() {
+ return this.system.cout ?? 0
}
prepareDerivedData() {
@@ -494,7 +519,7 @@ export class RdDItem extends Item {
/* -------------------------------------------- */
_monnaieChatData() {
return [
- `Valeur en Deniers: ${this.system.cout}`,
+ `Valeur en Sols: ${this.system.cout}`,
`Encombrement: ${this.system.encombrement}`
]
}
@@ -564,5 +589,4 @@ export class RdDItem extends Item {
]
}
-
}
diff --git a/module/migrations.js b/module/migrations.js
index 97e2ea31..ab644b77 100644
--- a/module/migrations.js
+++ b/module/migrations.js
@@ -235,8 +235,8 @@ class _10_3_0_Inventaire extends Migration {
}
_updatesMonnaies(items) {
return items
- .filter(it => ['monnaie'].includes(it.type))
- .map(it => { return { _id: it.id, 'system.cout': it.system.valeur_deniers, 'system.valeur_deniers': undefined } });
+ .filter(it => ['monnaie'].includes(it.type) && it.system.cout == undefined)
+ .map(it => { return { _id: it.id, 'system.cout': it.system.valeur_deniers / 100, 'system.valeur_deniers': undefined } });
}
}
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index 2ec4e486..ba4cdf82 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -169,6 +169,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor/liens-suivants.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/liens-vehicules.html',
//Items
+ 'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.html',
'systems/foundryvtt-reve-de-dragon/templates/header-item.html',
'systems/foundryvtt-reve-de-dragon/templates/item-competence-sheet.html',
'systems/foundryvtt-reve-de-dragon/templates/item-competencecreature-sheet.html',
@@ -323,6 +324,8 @@ export class RdDUtility {
})
);
Handlebars.registerHelper('linkCompendium', (compendium, id, name) => `@Compendium[${compendium}.${id}]{${name}}`);
+ Handlebars.registerHelper('uniteQuantite', (type) => RdDItem.getUniteQuantite(type));
+ Handlebars.registerHelper('isEquipementFieldEditable', (type, field) => RdDItem.isEquipementFieldEditable(type, field));
return loadTemplates(templatePaths);
}
@@ -459,7 +462,7 @@ export class RdDUtility {
formData.ingredients = this.arrayOrEmpty(itemTypes['ingredient']);
formData.herbes = this.arrayOrEmpty(itemTypes['herbe']);
formData.monnaie = this.arrayOrEmpty(itemTypes['monnaie']);
- formData.monnaie.sort(Monnaie.triValeurDenier());
+ formData.monnaie.sort(Monnaie.triValeurEntiere());
formData.nourritureboissons = this.arrayOrEmpty(itemTypes['nourritureboisson']);
formData.gemmes = this.arrayOrEmpty(itemTypes['gemme']);
@@ -828,17 +831,10 @@ export class RdDUtility {
// Gestion du bouton payer
html.on("click", '.payer-button', event => {
- 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) {
- objData = JSON.parse(jsondata.value)
- }
+ let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0);
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
if (actor) {
- actor.depenserDeniers(sumdenier, objData, quantite, fromActorId);
+ actor.payerSols(sommeAPayer);
ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget));
}
});
@@ -906,20 +902,20 @@ export class RdDUtility {
static afficherDemandePayer(som1, som2) {
som1 = (som1) ? som1.toLowerCase() : "0d";
som2 = (som2) ? som2.toLowerCase() : "0d";
- let regExp = /(\d+)(\w+)/g;
- let p1 = regExp.exec(som1);
- regExp = /(\d+)(\w+)/g;
- let p2 = regExp.exec(som2);
- let sumd = 0;
- let sums = 0;
- if (p1[2] == 'd') sumd += Number(p1[1]);
- if (p1[2] == 's') sums += Number(p1[1]);
- if (p2[2] == 'd') sumd += Number(p2[1]);
- if (p2[2] == 's') sums += Number(p2[1]);
+ let regExp1 = /(\d+)(\w+)/g;
+ let p1 = regExp1.exec(som1);
+ let regExp2 = /(\d+)(\w+)/g;
+ let p2 = regExp2.exec(som2);
+ let deniers = 0;
+ let sols = 0;
+ if (p1[2] == 'd') deniers += Number(p1[1]);
+ if (p1[2] == 's') sols += Number(p1[1]);
+ if (p2[2] == 'd') deniers += Number(p2[1]);
+ if (p2[2] == 's') sols += Number(p2[1]);
- let sumtotald = sumd + (sums * 100);
- let msgPayer = "La somme de " + sums + " Sols et " + sumd + " Deniers est à payer, cliquer sur le lien ci-dessous si besoin.
";
- msgPayer += "Payer"
+ let sommeAPayer = sols + deniers/100;
+ let msgPayer = `La somme de ${sols} Sols et ${deniers} Deniers est à payer
+ Payer`
ChatMessage.create({ content: msgPayer });
}
diff --git a/template.json b/template.json
index 034f13c1..4321104c 100644
--- a/template.json
+++ b/template.json
@@ -552,18 +552,6 @@
"label": "Experience",
"isInput": true
}
- },
- "argent": {
- "deniers": {
- "label": "Denier",
- "value": 0,
- "enc": 0
- },
- "sols": {
- "label": "Sol",
- "value": 0,
- "enc": 0
- }
}
}
},
diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html
index 649dab8b..8a52c2cd 100644
--- a/templates/item-arme-sheet.html
+++ b/templates/item-arme-sheet.html
@@ -46,10 +46,7 @@
{{/select}}
-