diff --git a/module/actor.js b/module/actor.js
index f1496e1f..b4bfe9c4 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -200,7 +200,6 @@ export class RdDActor extends Actor {
async checkMonnaiePresence() { // Ajout opportuniste si les pièces n'existent pas.
if (!this.items) return; // Sanity check during import
let manquantes = Monnaie.monnaiesManquantes(this.itemTypes['monnaie']);
- //console.log("Manque : ", manquantes);
if (manquantes.length > 0) {
await this.createEmbeddedDocuments('Item', manquantes, { renderSheet: false });
}
@@ -929,26 +928,27 @@ export class RdDActor extends Actor {
if (!competence) {
return;
}
+ const stress = this.system.compteurs.experience.value;
const niveau = Number(competence.system.niveau);
- const stressTransforme = this.system.compteurs.experience.value;
- const xpRequis = RdDItemCompetence.getCompetenceNextXp(niveau) - competence.system.xp;
- if (stressTransforme <= 0 || niveau >= competence.system.niveau_archetype || xpRequis <= 0) {
+ const xpSuivant = RdDItemCompetence.getCompetenceNextXp(niveau);
+ const xpRequis = xpSuivant - competence.system.xp;
+ if (stress <= 0 || niveau >= competence.system.niveau_archetype) {
ui.notifications.info(`La compétence ne peut pas augmenter!
- stress disponible: ${stressTransforme}
+ stress disponible: ${stress}
expérience requise: ${xpRequis}
niveau : ${niveau}
archétype : ${competence.system.niveau_archetype}`);
return;
}
- const xpUtilise = Math.min(stressTransforme, xpRequis);
- const gainNiveau = xpUtilise >= xpRequis ? 1 : 0;
+ const xpUtilise = Math.max(0, Math.min(stress, xpRequis));
+ const gainNiveau = (xpUtilise >= xpRequis || xpRequis <=0) ? 1 : 0;
const nouveauNiveau = niveau + gainNiveau;
- const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpRequis, 0) : (competence.system.xp + xpUtilise);
+ const nouveauXp = gainNiveau > 0 ? Math.max(competence.system.xp - xpSuivant, 0) : (competence.system.xp + xpUtilise);
await competence.update({
"system.xp": nouveauXp,
"system.niveau": nouveauNiveau,
});
- const stressTransformeRestant = Math.max(0, stressTransforme - xpUtilise);
+ const stressTransformeRestant = Math.max(0, stress - xpUtilise);
await this.update({ "system.compteurs.experience.value": stressTransformeRestant });
this.updateExperienceLog('Dépense stress', xpUtilise, `Stress en ${competence.name} ${gainNiveau ? "pour passer à " + nouveauNiveau : ""}`);
}
diff --git a/module/item-monnaie.js b/module/item-monnaie.js
index bff8385c..077d4d2a 100644
--- a/module/item-monnaie.js
+++ b/module/item-monnaie.js
@@ -22,12 +22,19 @@ const MONNAIES_STANDARD = [
system: { quantite: 0, valeur_deniers: 1000, encombrement: 0.004, description: "" }
}
]
+const VALEURS_STANDARDS = MONNAIES_STANDARD.map(it =>it.system.valeur_deniers);
export class Monnaie {
- static isSystemMonnaie(item) {
- let present = MONNAIES_STANDARD.find(monnaie => monnaie.system.valeur_deniers == item?.system?.valeur_deniers);
- return present;
+ static isSystemMonnaie(item, items) {
+ if (item.type == 'monnaie') {
+ const valeur = item.system.valeur_deniers;
+ if (VALEURS_STANDARDS.includes(valeur)) {
+ const monnaiesDeValeur = items.filter(it => it.type == 'monnaie' && it.system.valeur_deniers == valeur)
+ return monnaiesDeValeur.length<=1;
+ }
+ }
+ return false;
}
static monnaiesData() {
@@ -40,10 +47,10 @@ export class Monnaie {
static monnaiesManquantes(disponibles) {
const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.valeur_deniers)));
- if (manquantes.length>0) {
+ if (manquantes.length > 0) {
console.error('monnaiesManquantes', manquantes, ' avec monnaies', disponibles, MONNAIES_STANDARD);
}
- return []; //manquantes;
+ return manquantes;
}
static deValeur(monnaie, valeur) {
diff --git a/module/rdd-sheet-utility.js b/module/rdd-sheet-utility.js
index 1289aef1..9f52b7b6 100644
--- a/module/rdd-sheet-utility.js
+++ b/module/rdd-sheet-utility.js
@@ -26,7 +26,7 @@ export class RdDSheetUtility {
destId: destItemId,
targetActorId: actorId,
itemId: item.id,
- sourceActorId: item.actor.id,
+ sourceActorId: item.actor?.id,
srcId: objetVersConteneur[item.id],
onEnleverConteneur: () => { delete objetVersConteneur[item.id]; },
onAjouterDansConteneur: (itemId, conteneurId) => { objetVersConteneur[itemId] = conteneurId; }
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index 991c7506..04bcb0c9 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -130,6 +130,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-liens-vehicules.html',
'systems/foundryvtt-reve-de-dragon/templates/actor-sheet-editor-notes-mj.html',
//Items
+ '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',
'systems/foundryvtt-reve-de-dragon/templates/item-arme-sheet.html',
@@ -860,7 +861,7 @@ export class RdDUtility {
let itemId = li.data("item-id");
let objet = actorSheet.actor.getObjet(itemId);
- if (objet.type == 'monnaie' && Monnaie.isSystemMonnaie(objet)) {
+ if (Monnaie.isSystemMonnaie(objet, actorSheet.actor.items)) {
ui.notifications.warn("Suppression des monnaies de base impossible");
return;
}
diff --git a/templates/header-item.html b/templates/header-item.html
new file mode 100644
index 00000000..3638564a
--- /dev/null
+++ b/templates/header-item.html
@@ -0,0 +1,6 @@
+