diff --git a/module/actor.js b/module/actor.js
index 54fe111f..892266d8 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -139,7 +139,6 @@ export class RdDActor extends Actor {
// Dynamic computing fields
this.encTotal = 0;
- this.prixTotalEquipement = 0;
// Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized.
@@ -299,11 +298,6 @@ export class RdDActor extends Actor {
return Math.floor(this.encTotal ?? 0);
}
- /* -------------------------------------------- */
- getPrixTotalEquipement() {
- return Math.floor(this.system.prixTotalEquipement ?? 0)
- }
-
/* -------------------------------------------- */
getCompetence(idOrName, options = {}) {
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
@@ -1375,11 +1369,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
computePrixTotalEquipement() {
- this.prixTotalEquipement = this.filterItems(it => it.system.prixTotal)
- .map(it => it.system.prixTotal ?? 0)
+ const deniers = this.items.filter(it => it.isEquipement())
+ .map(it => it.prixTotalDeniers())
.reduce(Misc.sum(), 0);
- // Mise à jour valeur totale de l'équipement
- return this.prixTotalEquipement;
+ return deniers / 100;
}
/* -------------------------------------------- */
diff --git a/module/item.js b/module/item.js
index 88673ec4..35204f2f 100644
--- a/module/item.js
+++ b/module/item.js
@@ -1,12 +1,27 @@
import { DialogItemVente } from "./dialog-item-vente.js";
import { Grammar } from "./grammar.js";
-import { Misc } from "./misc.js";
import { RdDHerbes } from "./rdd-herbes.js";
import { RdDUtility } from "./rdd-utility.js";
-const typesObjetsEquipement = ["objet", "arme", "armure", "gemme", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson", "monnaie"]
+const typesObjetsEquipement = [
+ "arme",
+ "armure",
+ "conteneur",
+ "gemme",
+ "herbe",
+ "ingredient",
+ "livre",
+ "monnaie",
+ "munition",
+ "nourritureboisson",
+ "objet",
+ "potion",
+]
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]
-const encBrin = 0.00005;// un brin = 1 décigramme = 1/10g = 1/10000kg = 1/20000 enc
+const encBrin = 0.00005; // un brin = 1 décigramme = 1/10g = 1/10000kg = 1/20000 enc
+const encPepin = 0.0007; /* un pépin de gemme = 1/10 cm3 = 1/1000 l = 3.5/1000 kg = 7/2000 kg = 7/1000 enc
+densité 3.5 (~2.3 à 4, parfois plus) -- https://www.juwelo.fr/guide-des-pierres/faits-et-chiffres/
+ */
export const defaultItemImg = {
competence: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp",
@@ -50,7 +65,7 @@ export class RdDItem extends Item {
super(itemData, context);
}
- static getTypeObjetsEquipement() {
+ static getTypesObjetsEquipement() {
return typesObjetsEquipement
}
@@ -62,6 +77,9 @@ export class RdDItem extends Item {
return this.type == 'competence';
}
+ isEquipement() {
+ return typesObjetsEquipement.includes(this.type)
+ }
isConteneur() {
return this.type == 'conteneur';
}
@@ -87,11 +105,6 @@ export class RdDItem extends Item {
isPotion() {
return this.type == 'potion';
}
-
- isEquipement() {
- return RdDItem.getTypeObjetsEquipement().includes(this.type)
- }
-
isCristalAlchimique() {
return this.type == 'objet' && Grammar.toLowerCaseNoAccent(this.name) == 'cristal alchimique' && this.system.quantite > 0;
}
@@ -100,22 +113,36 @@ export class RdDItem extends Item {
return this.system.magique
}
- getEncTotal() {
- return Number(this.system.encombrement ?? 0) * Number(this.system.quantite ?? 1)
+ getQuantite() {
+ return Math.round(this.isConteneur() ? 1 : (this.system.quantite ?? 0))
}
+
+ getEncTotal() {
+ return this.getEnc() * this.getQuantite();
+ }
+
getEnc() {
switch (this.type) {
case 'herbe':
return encBrin;
+ case 'gemme':
+ return encPepin * this.system.taille;
}
- return this.system.encombrement ?? 0;
+ return Math.max(this.system.encombrement ?? 0, 0);
+ }
+
+ prixTotalDeniers() {
+ return this.getQuantite() * this.valeurDeniers()
+ }
+
+ valeurDeniers() {
+ return Math.max(Math.round(this.system.cout ? (this.system.cout * 100) : (this.system.valeur_deniers ?? 0)), 0)
}
prepareDerivedData() {
super.prepareDerivedData();
if (this.isEquipement()) {
- this._calculsEquipement();
-
+ this.system.encTotal = this.getEncTotal();
if (this.isPotion()) {
this.prepareDataPotion()
}
@@ -134,17 +161,6 @@ export class RdDItem extends Item {
}
}
- _calculsEquipement() {
- const quantite = this.isConteneur() ? 1 : (this.system.quantite ?? 0);
- const enc = this.getEnc();
- if (enc != undefined) {
- this.system.encTotal = Math.max(enc, 0) * quantite;
- }
- if (this.cout != undefined) {
- this.system.prixTotal = Math.max(this.cout, 0) * quantite;
- }
- }
-
getActionPrincipale(options = { warnIfNot: true }) {
const warn = options.warnIfNot;
switch (this.type) {
@@ -202,18 +218,18 @@ export class RdDItem extends Item {
if (!other || !this.isEquipement()) return undefined;
let message = undefined;
- if (this.type != other.type) {
- message = `Impossible de regrouper ${this.type} avec ${other.type}`;
+ if (this.system.quantite == undefined) {
+ message = `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`;
+ }
+ else if (this.type != other.type) {
+ message = `Impossible de regrouper des ${this.type} avec des ${other.type}`;
}
else if (this.name != other.name) {
message = `Impossible de regrouper ${this.name} avec ${other.name}`;
}
- else if (this.system.quantite == undefined) {
- message = `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`;
- }
else {
const differences = Object.entries(this.system)
- .filter(([key, value]) => !['quantite', 'encTotal', 'prixTotal', 'cout'].includes(key) && value != other.system[key]);
+ .filter(([key, value]) => !['quantite', 'cout'].includes(key) && value != other.system[key]);
if (differences.length > 0) {
message = `Impossible de regrouper les ${this.type} ${this.name}: `;
for (const [key, value] of differences) {
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index 2d023f74..61a8c2a9 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -262,6 +262,7 @@ export class RdDUtility {
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
Handlebars.registerHelper('typeTmr-name', coord => TMRUtility.typeTmrName(coord));
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
+ Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option) );
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
.sort((a, b) => {
@@ -307,7 +308,7 @@ export class RdDUtility {
/* -------------------------------------------- */
static async selectObjetType(actorSheet) {
- let typeObjets = RdDItem.getTypeObjetsEquipement();
+ let typeObjets = RdDItem.getTypesObjetsEquipement();
let options = `Selectionnez le type d'équipement