forked from public/foundryvtt-reve-de-dragon
		
	Fix: un conteneur peut contenir un id manquant
Parfois, un conteneur peut contenir l'id d'un objet qui a été supprimé (potion bue? objets groupés?) Dans ce cas, la feuille ne s'ouvrait plus correctement. Une méthode de cleanup permet d'éliminer ces ids incorrects.
This commit is contained in:
		| @@ -172,6 +172,7 @@ export class RdDActor extends Actor { | |||||||
|     // Initialize empty items |     // Initialize empty items | ||||||
|     RdDCarac.computeCarac(actorData.data); |     RdDCarac.computeCarac(actorData.data); | ||||||
|     this.computeIsHautRevant(); |     this.computeIsHautRevant(); | ||||||
|  |     await this.cleanupConteneurs(); | ||||||
|     await this.computeEncombrementTotalEtMalusArmure(); |     await this.computeEncombrementTotalEtMalusArmure(); | ||||||
|     this.computePrixTotalEquipement(); |     this.computePrixTotalEquipement(); | ||||||
|     this.computeEtatGeneral(); |     this.computeEtatGeneral(); | ||||||
| @@ -179,6 +180,16 @@ export class RdDActor extends Actor { | |||||||
|     await this.checkMonnaiePresence(actorData.items); |     await this.checkMonnaiePresence(actorData.items); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   async cleanupConteneurs() { | ||||||
|  |     let updates = this.listItemsData('conteneur') | ||||||
|  |       .filter(c => c.data.contenu.filter(id => this.getObjet(id) == undefined).length > 0) | ||||||
|  |       .map(c => { return { _id: c._id, 'data.contenu': c.data.contenu.filter(id => this.getObjet(id) != undefined) } }); | ||||||
|  |     if (updates.length > 0) { | ||||||
|  |       await this.updateEmbeddedDocuments("Item", updates) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async checkMonnaiePresence(items) { // Ajout opportuniste si les pièces n'existent pas. |   async checkMonnaiePresence(items) { // Ajout opportuniste si les pièces n'existent pas. | ||||||
|     if (!items) return; // Sanity check during import |     if (!items) return; // Sanity check during import | ||||||
| @@ -4060,7 +4071,7 @@ export class RdDActor extends Actor { | |||||||
|   notifyGestionTeteSouffleQueue(item, manualMessage = true) { |   notifyGestionTeteSouffleQueue(item, manualMessage = true) { | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), |       whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), | ||||||
|       content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré automatiquement. ${manualMessage ?? ''}` |       content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}` | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -357,7 +357,8 @@ export class RdDUtility { | |||||||
|   static calculEncContenu(conteneur, objets) { |   static calculEncContenu(conteneur, objets) { | ||||||
|     const itemData = Misc.data(conteneur); |     const itemData = Misc.data(conteneur); | ||||||
|     const contenuDatas = (itemData.data.contenu ?? []).filter(id => id != undefined) |     const contenuDatas = (itemData.data.contenu ?? []).filter(id => id != undefined) | ||||||
|       .map(id => Misc.data(objets.find(it => (id == it._id)))); |       .map(id => Misc.data(objets.find(it => (id == it._id)))) | ||||||
|  |       .filter(it => it); | ||||||
|     let enc = Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); |     let enc = Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); | ||||||
|     for (let itemData of contenuDatas){ |     for (let itemData of contenuDatas){ | ||||||
|       if (itemData.type == 'conteneur') { |       if (itemData.type == 'conteneur') { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user