From 538058ecc67dd41561b46067cf5b3251293f6370 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 1 Aug 2024 01:05:00 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Fix:=20cas=20d'un=20objet=20est=20un=20cont?= =?UTF-8?q?eneur=20fant=C3=B4me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lors d'une partie, la feuille d'un personnage a été bloquée. Après debug, il semble que l'objet a eu le flag estContenu=true sans être contenu. En regardant le json, il semble que des Item "objet" se sont retrouvés avec un champ "contenu", et que l'arbre des contenant a été cassé. Du coup: l'ajout dans un conteneur est maintenant "sécurisé" pour éviter l'accident. si on essaie d'ajouter dans un Item non conteneur, on positionne estContenu à false, et on corrige si possible le "contenu" de la cible, qui ne devrait pas être là. --- changelog.md | 12 ++++++++++- module/actor/base-actor.js | 41 ++++++++++++++++++++++++-------------- module/rdd-utility.js | 22 ++++++++++---------- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/changelog.md b/changelog.md index b8cf0948..2b3780bd 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,15 @@ # 12.0 -## 12.0.6 - Les souvenirs d'Astrobazzarh + +## 12.0.6 - Le bazar d'Astrobazzarh +- Corrections de l'inventaire en bazar: + - un problème pouvait survenir en déplaçant les objets + l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son + propre contenu, ce qui empêche d'ouvrir la feuille d'acteur. + - un objet non-conteneur pouvait dans certains cas avoir un pseudo contenu + - un objet pouvait être considéré comme contenu, sans être présent dans un + conteneur (et donc non affiché) + - vider les conteneurs supprime correctement toutes les informations liées + aux conteneurs/contenus - Fix: restaurer la compatibilité Foundry 11 ## 12.0.5 - Les mauvais jours d'Astrobazzarh diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index f2a30b12..4b35d754 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -557,15 +557,15 @@ export class RdDBaseActor extends Actor { /* -------------------------------------------- */ /** Ajoute un item dans un conteneur, sur la base de leurs ID */ async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) { - if (!conteneur) { - // TODO: afficher - item.estContenu = false; - } - else if (conteneur.isConteneur()) { + if (conteneur?.isConteneur()) { item.estContenu = true; const nouveauContenu = [...conteneur.system.contenu, item.id]; await conteneur.update({ 'system.contenu': nouveauContenu }); - onAjouterDansConteneur(item.id, conteneur.id); + onAjouterDansConteneur(item.id, conteneur.id) + } + else { + item.estContenu = false; + await conteneur?.update({ 'system.-=contenu': undefined }) } } @@ -583,8 +583,13 @@ export class RdDBaseActor extends Actor { if (item.estContenu) { item.estContenu = undefined; } - if (item.type == 'conteneur' && item.system.contenu.length > 0) { - corrections.push({ _id: item.id, 'system.contenu': [] }); + if (item.system.contenu != undefined) { + if (item.type == 'conteneur') { + corrections.push({ _id: item.id, 'system.contenu': [] }); + } + else { + corrections.push({ _id: item.id, 'system.-=contenu': undefined }); + } } } if (corrections.length > 0) { @@ -619,15 +624,21 @@ export class RdDBaseActor extends Actor { } /* -------------------------------------------- */ - /** Supprime un item d'un conteneur, sur la base - * de leurs ID */ + /** + * Supprime un item d'un conteneur, sur la base de leurs ID + */ async enleverDeConteneur(item, conteneur, onEnleverDeConteneur) { - if (conteneur?.isConteneur()) { - item.estContenu = false; - const contenu = conteneur.system.contenu.filter(id => id != item.id); - await conteneur.update({ 'system.contenu': contenu }); - onEnleverDeConteneur(); + if (conteneur) { + if (conteneur.isConteneur()) { + const contenu = conteneur.system.contenu.filter(id => id != item.id); + await conteneur.update({ 'system.contenu': contenu }); + onEnleverDeConteneur(); + } + else { + await conteneur.update({ 'system.-=contenu': undefined }) + } } + item.estContenu = false; } /* -------------------------------------------- */ diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 92cf7e6b..3b9d8855 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -304,12 +304,12 @@ export class RdDUtility { Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic)); // Handle v12 removal of this helper - Handlebars.registerHelper('select', function (selected, options) { + Handlebars.registerHelper('select', function (selected, options) { const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected)); const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']'); const html = options.fn(this); - return html.replace(rgx, "$& selected"); - }); + return html.replace(rgx, "$& selected"); + }); return loadTemplates(templatePaths); } @@ -358,13 +358,15 @@ export class RdDUtility { let objetVersConteneur = {}; // Attribution des objets aux conteneurs for (let conteneur of conteneurs) { - conteneur.subItems = []; - for (let id of conteneur.system.contenu ?? []) { - let objet = inventaires.find(objet => (id == objet._id)); - if (objet) { - objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template - objetVersConteneur[id] = conteneur._id; - conteneur.subItems.push(objet); + if (conteneur.isConteneur()) { + conteneur.subItems = []; + for (let id of conteneur.system.contenu ?? []) { + let objet = inventaires.find(objet => (id == objet._id)); + if (objet) { + objet.estContenu = true; + objetVersConteneur[id] = conteneur._id; + conteneur.subItems.push(objet); + } } } } From 4c82d85e6ad238d8b6b0bc59b60805b84c08bca5 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 1 Aug 2024 01:15:26 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Fix:=20visibilit=C3=A9=20des=20tirages=20da?= =?UTF-8?q?ns=20les=20compendium?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les macros /tirer affichaient le résultat pour tous les joueurs --- changelog.md | 2 ++ module/settings/system-compendiums.js | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 2b3780bd..4f2024f6 100644 --- a/changelog.md +++ b/changelog.md @@ -10,6 +10,8 @@ conteneur (et donc non affiché) - vider les conteneurs supprime correctement toutes les informations liées aux conteneurs/contenus +- Les messages pour les tirages dans le compendium utilisent le "roll mode" + courant pour leur visibilité - Fix: restaurer la compatibilité Foundry 11 ## 12.0.5 - Les mauvais jours d'Astrobazzarh diff --git a/module/settings/system-compendiums.js b/module/settings/system-compendiums.js index 6281bab5..bdff885f 100644 --- a/module/settings/system-compendiums.js +++ b/module/settings/system-compendiums.js @@ -1,3 +1,4 @@ +import { ChatUtility } from "../chat-utility.js"; import { HIDE_DICE, SYSTEM_RDD } from "../constants.js"; import { RdDItem } from "../item.js"; import { Misc } from "../misc.js"; @@ -290,7 +291,7 @@ export class CompendiumTableHelpers { sound: CONFIG.sounds.dice, content: flavorContent }; - ChatMessage.create(messageData, { rollMode: "gmroll" }); + await ChatUtility.createChatWithRollMode(game.user.id, messageData) } /* -------------------------------------------- */ @@ -306,7 +307,7 @@ export class CompendiumTableHelpers { whisper: game.user.id, content: flavorContent }; - ChatMessage.create(messageData, { rollMode: "gmroll" }); + await ChatUtility.createChatWithRollMode(game.user.id, messageData) } } \ No newline at end of file From e80dbc7332438d2803723a0b5ad221a1c9932328 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 1 Aug 2024 01:19:54 +0200 Subject: [PATCH 3/3] Version 12.0.6 --- system.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system.json b/system.json index dcc5d447..c4a9d00a 100644 --- a/system.json +++ b/system.json @@ -1,8 +1,8 @@ { "id": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", - "version": "12.0.5", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.5.zip", + "version": "12.0.6", + "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.6.zip", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json", "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", "compatibility": {