Fix: cas d'un objet est un conteneur fantôme
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à.
This commit is contained in:
parent
70e42ea631
commit
538058ecc6
12
changelog.md
12
changelog.md
@ -1,5 +1,15 @@
|
|||||||
# 12.0
|
# 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
|
- Fix: restaurer la compatibilité Foundry 11
|
||||||
|
|
||||||
## 12.0.5 - Les mauvais jours d'Astrobazzarh
|
## 12.0.5 - Les mauvais jours d'Astrobazzarh
|
||||||
|
@ -557,15 +557,15 @@ export class RdDBaseActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** Ajoute un item dans un conteneur, sur la base de leurs ID */
|
/** Ajoute un item dans un conteneur, sur la base de leurs ID */
|
||||||
async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) {
|
async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) {
|
||||||
if (!conteneur) {
|
if (conteneur?.isConteneur()) {
|
||||||
// TODO: afficher
|
|
||||||
item.estContenu = false;
|
|
||||||
}
|
|
||||||
else if (conteneur.isConteneur()) {
|
|
||||||
item.estContenu = true;
|
item.estContenu = true;
|
||||||
const nouveauContenu = [...conteneur.system.contenu, item.id];
|
const nouveauContenu = [...conteneur.system.contenu, item.id];
|
||||||
await conteneur.update({ 'system.contenu': nouveauContenu });
|
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,9 +583,14 @@ export class RdDBaseActor extends Actor {
|
|||||||
if (item.estContenu) {
|
if (item.estContenu) {
|
||||||
item.estContenu = undefined;
|
item.estContenu = undefined;
|
||||||
}
|
}
|
||||||
if (item.type == 'conteneur' && item.system.contenu.length > 0) {
|
if (item.system.contenu != undefined) {
|
||||||
|
if (item.type == 'conteneur') {
|
||||||
corrections.push({ _id: item.id, 'system.contenu': [] });
|
corrections.push({ _id: item.id, 'system.contenu': [] });
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
corrections.push({ _id: item.id, 'system.-=contenu': undefined });
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (corrections.length > 0) {
|
if (corrections.length > 0) {
|
||||||
await this.updateEmbeddedDocuments('Item', corrections);
|
await this.updateEmbeddedDocuments('Item', corrections);
|
||||||
@ -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) {
|
async enleverDeConteneur(item, conteneur, onEnleverDeConteneur) {
|
||||||
if (conteneur?.isConteneur()) {
|
if (conteneur) {
|
||||||
item.estContenu = false;
|
if (conteneur.isConteneur()) {
|
||||||
const contenu = conteneur.system.contenu.filter(id => id != item.id);
|
const contenu = conteneur.system.contenu.filter(id => id != item.id);
|
||||||
await conteneur.update({ 'system.contenu': contenu });
|
await conteneur.update({ 'system.contenu': contenu });
|
||||||
onEnleverDeConteneur();
|
onEnleverDeConteneur();
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
await conteneur.update({ 'system.-=contenu': undefined })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item.estContenu = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -358,16 +358,18 @@ export class RdDUtility {
|
|||||||
let objetVersConteneur = {};
|
let objetVersConteneur = {};
|
||||||
// Attribution des objets aux conteneurs
|
// Attribution des objets aux conteneurs
|
||||||
for (let conteneur of conteneurs) {
|
for (let conteneur of conteneurs) {
|
||||||
|
if (conteneur.isConteneur()) {
|
||||||
conteneur.subItems = [];
|
conteneur.subItems = [];
|
||||||
for (let id of conteneur.system.contenu ?? []) {
|
for (let id of conteneur.system.contenu ?? []) {
|
||||||
let objet = inventaires.find(objet => (id == objet._id));
|
let objet = inventaires.find(objet => (id == objet._id));
|
||||||
if (objet) {
|
if (objet) {
|
||||||
objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template
|
objet.estContenu = true;
|
||||||
objetVersConteneur[id] = conteneur._id;
|
objetVersConteneur[id] = conteneur._id;
|
||||||
conteneur.subItems.push(objet);
|
conteneur.subItems.push(objet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (let conteneur of conteneurs) {
|
for (let conteneur of conteneurs) {
|
||||||
conteneur.system.encTotal = RdDUtility.calculEncContenu(conteneur, inventaires);
|
conteneur.system.encTotal = RdDUtility.calculEncContenu(conteneur, inventaires);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user