Fix ajout list/filterItemsData
Méthodes pour lister par type/filtrer les Item.data et retourner les Item.data
This commit is contained in:
		| @@ -57,33 +57,33 @@ export class RdDActor extends Actor { | |||||||
|    * This overrided create() function adds initial items  |    * This overrided create() function adds initial items  | ||||||
|    * Namely: Basic skills, money,  |    * Namely: Basic skills, money,  | ||||||
|    * |    * | ||||||
|    * @param {Object} data        Barebones actor data which this function adds onto. |    * @param {Object} actorData        Barebones actor data which this function adds onto. | ||||||
|    * @param {Object} options     (Unused) Additional options which customize the creation workflow. |    * @param {Object} options     (Unused) Additional options which customize the creation workflow. | ||||||
|    * |    * | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|   static async create(data, options) { |   static async create(actorData, options) { | ||||||
|     // Case of compendium global import |     // Case of compendium global import | ||||||
|     if (data instanceof Array) { |     if (actorData instanceof Array) { | ||||||
|       return super.create(data, options); |       return super.create(actorData, options); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const isPersonnage = data.type == "personnage"; |     const isPersonnage = actorData.type == "personnage"; | ||||||
|     // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic |     // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic | ||||||
|     if (data.items) { |     if (actorData.items) { | ||||||
|       let actor = super.create(data, options); |       let actor = super.create(actorData, options); | ||||||
|       if (isPersonnage) { |       if (isPersonnage) { | ||||||
|         await actor.checkMonnaiePresence(data.items); |         await actor.checkMonnaiePresence(actorData.items); | ||||||
|       } |       } | ||||||
|       return actor; |       return actor; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const competences = await RdDUtility.loadCompendium(RdDItemCompetence.actorCompendium(data.type)); |     const competences = await RdDUtility.loadCompendium(RdDItemCompetence.actorCompendium(actorData.type)); | ||||||
|     data.items = competences.map(it => Misc.data(it)); |     actorData.items = competences.map(it => Misc.data(it)); | ||||||
|     if (isPersonnage) { |     if (isPersonnage) { | ||||||
|       data.items = data.items.concat(Monnaie.monnaiesData()); |       actorData.items = actorData.items.concat(Monnaie.monnaiesData()); | ||||||
|     } |     } | ||||||
|     return super.create(data, options); |     return super.create(actorData, options); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -245,8 +245,14 @@ export class RdDActor extends Actor { | |||||||
|   getObjet(id) { |   getObjet(id) { | ||||||
|     return id ? this.data.items.find(it => it.id == id) : undefined; |     return id ? this.data.items.find(it => it.id == id) : undefined; | ||||||
|   } |   } | ||||||
|  |   listItemsData(type) { | ||||||
|  |     return this.filterItemsData(it => it.type == type); | ||||||
|  |   } | ||||||
|  |   filterItemsData(filter) { | ||||||
|  |     return this.data.items.map(it => Misc.data(it)).filter(filter); | ||||||
|  |   } | ||||||
|   getItemOfType(id, type) { |   getItemOfType(id, type) { | ||||||
|     return id ? this.data.items.find(it => it.id == id && it.type == type) : undefined; |     return id ? this.data.items.find(it => it.id == id && Misc.data(it).type == type) : undefined; | ||||||
|   } |   } | ||||||
|   getMonnaie(id) { |   getMonnaie(id) { | ||||||
|     return this.getItemOfType(id, 'monnaie'); |     return this.getItemOfType(id, 'monnaie'); | ||||||
| @@ -344,7 +350,7 @@ export class RdDActor extends Actor { | |||||||
|   async _recupereChance() { |   async _recupereChance() { | ||||||
|     // On ne récupère un point de chance que si aucun appel à la chance dans la journée |     // On ne récupère un point de chance que si aucun appel à la chance dans la journée | ||||||
|     if (this.getChanceActuel() < this.getChance() && !this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance')) { |     if (this.getChanceActuel() < this.getChance() && !this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance')) { | ||||||
|         await this.chanceActuelleIncDec(1); |       await this.chanceActuelleIncDec(1); | ||||||
|     } |     } | ||||||
|     // Nouveau jour, suppression du flag |     // Nouveau jour, suppression du flag | ||||||
|     await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); |     await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); | ||||||
| @@ -925,7 +931,7 @@ export class RdDActor extends Actor { | |||||||
|       // gestion conteneur/contenu |       // gestion conteneur/contenu | ||||||
|       if (item.conteneurId) { // l'Objet était dans un conteneur |       if (item.conteneurId) { // l'Objet était dans un conteneur | ||||||
|         let newConteneurId = itemMap[item.conteneurId]; // Get conteneur |         let newConteneurId = itemMap[item.conteneurId]; // Get conteneur | ||||||
|         let newConteneur = this.data.items.find(subItem => subItem._id == newConteneurId); |         let newConteneur = this.getObjet(newConteneurId); | ||||||
|  |  | ||||||
|         let newItemId = itemMap[item.id]; // Get newItem |         let newItemId = itemMap[item.id]; // Get newItem | ||||||
|  |  | ||||||
| @@ -955,8 +961,7 @@ export class RdDActor extends Actor { | |||||||
|   async computeEncombrementTotalEtMalusArmure() { |   async computeEncombrementTotalEtMalusArmure() { | ||||||
|     let encTotal = 0; |     let encTotal = 0; | ||||||
|     let newMalusArmure = 0; |     let newMalusArmure = 0; | ||||||
|     for (const item of this.data.items.filter(it => Misc.templateData(it).encombrement != undefined)) { |     for (const itemData of this.filterItemsData(it => it.data.encombrement)) { | ||||||
|       let itemData = item.data; // v0.8 normalization |  | ||||||
|       if (itemData.type == 'armure' && itemData.data.equipe) {  // Armure équipée, intégration du malus armure total |       if (itemData.type == 'armure' && itemData.data.equipe) {  // Armure équipée, intégration du malus armure total | ||||||
|         newMalusArmure += itemData.data.malus; |         newMalusArmure += itemData.data.malus; | ||||||
|       } |       } | ||||||
| @@ -987,14 +992,10 @@ export class RdDActor extends Actor { | |||||||
|     let prixTotalEquipement = 0; |     let prixTotalEquipement = 0; | ||||||
|  |  | ||||||
|     // prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité. |     // prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité. | ||||||
|     for (const item of this.data.items) { |     for (const itemData of this.filterItemsData(it => it?.data.cout)) { | ||||||
|       let itemData = item.data; // v0.8 normalization |       const cout = Math.min(Number(itemData.data.cout) ?? 0, 0); | ||||||
|       if (itemData.data && itemData.data.cout != undefined) { |       const quantite = Math.min(Number(itemData.data.quantite) ?? 1, 1); | ||||||
|         if (!Number(itemData.data.cout)) itemData.data.cout = 0; // Auto-fix |       prixTotalEquipement += cout * quantite; | ||||||
|         if (itemData.data.quantite == undefined) itemData.data.quantite = 1; // Auto-fix |  | ||||||
|         if (itemData.data.cout < 0) itemData.data.cout = 0; // Auto-fix |  | ||||||
|         prixTotalEquipement += Number(itemData.data.cout) * Number(itemData.data.quantite); |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|     // Mise à jour valeur totale de l'équipement |     // Mise à jour valeur totale de l'équipement | ||||||
|     this.prixTotalEquipement = prixTotalEquipement; |     this.prixTotalEquipement = prixTotalEquipement; | ||||||
| @@ -1113,7 +1114,7 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   buildTMRInnaccessible() { |   buildTMRInnaccessible() { | ||||||
|     const tmrInnaccessibles = this.data.items.filter(it => Draconique.isCaseTMR(it) && |     const tmrInnaccessibles = this.filterItemsData(it => Draconique.isCaseTMR(it) && | ||||||
|       EffetsDraconiques.isInnaccessible(it)); |       EffetsDraconiques.isInnaccessible(it)); | ||||||
|     return tmrInnaccessibles.map(it => it.data.coord); |     return tmrInnaccessibles.map(it => it.data.coord); | ||||||
|   } |   } | ||||||
| @@ -1664,7 +1665,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async checkCompetenceXP(compName, newXP = undefined) { |   async checkCompetenceXP(compName, newXP = undefined) { | ||||||
|     let competence = RdDItemCompetence.findCompetence(this.data.items, compName); |     let competence = this.getCompetence(compName); | ||||||
|     if (competence && newXP && newXP == competence.data.xp) { // Si édition, mais sans changement XP |     if (competence && newXP && newXP == competence.data.xp) { // Si édition, mais sans changement XP | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| @@ -1831,7 +1832,7 @@ export class RdDActor extends Actor { | |||||||
|     let addMsg = ""; |     let addMsg = ""; | ||||||
|     let rencSpecial = this.data.items.find(item => EffetsDraconiques.isMauvaiseRencontre(item)); |     let rencSpecial = this.data.items.find(item => EffetsDraconiques.isMauvaiseRencontre(item)); | ||||||
|     if (rencSpecial) { |     if (rencSpecial) { | ||||||
|       rencSpecial = duplicate(rencSpecial); // To keep it |       rencSpecial = Misc.data(rencSpecial); // To keep it | ||||||
|       if (rencSpecial.type != 'souffle') { |       if (rencSpecial.type != 'souffle') { | ||||||
|         this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues |         this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues | ||||||
|         addMsg = " La queue a été supprimée de votre fiche automatiquement"; |         addMsg = " La queue a été supprimée de votre fiche automatiquement"; | ||||||
| @@ -2318,7 +2319,8 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   checkDesirLancinant() { |   checkDesirLancinant() { | ||||||
|     let queue = this.data.items.filter((item) => item.name.toLowerCase().includes('lancinant')); |     let queue = this.filterItemsData(it => it.type == 'queue' || it.type == 'ombre') | ||||||
|  |       .filter(it => Grammar.toLowerCaseNoAccent(it.name).includes('desir lancinant')); | ||||||
|     return (queue.length > 0); |     return (queue.length > 0); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -2368,7 +2370,7 @@ export class RdDActor extends Actor { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async ajouteNombreAstral(data) { |   async ajouteNombreAstral(data) { | ||||||
|     // Gestion expérience (si existante) |     // Gestion expérience (si existante) | ||||||
|     data.competence = RdDItemCompetence.findCompetence(this.data.items, "astrologie"); |     data.competence = this.getCompetence("astrologie"); | ||||||
|     data.selectedCarac = Misc.templateData(this).carac["vue"]; |     data.selectedCarac = Misc.templateData(this).carac["vue"]; | ||||||
|     this._appliquerAjoutExperience(data); |     this._appliquerAjoutExperience(data); | ||||||
|  |  | ||||||
| @@ -2380,7 +2382,7 @@ export class RdDActor extends Actor { | |||||||
|     await this.createEmbeddedDocuments("Item", [item]); |     await this.createEmbeddedDocuments("Item", [item]); | ||||||
|  |  | ||||||
|     // Suppression des anciens nombres astraux |     // Suppression des anciens nombres astraux | ||||||
|     let toDelete = this.data.items.filter(it => it.data.jourindex < game.system.rdd.calendrier.getCurrentDayIndex()); |     let toDelete = this.listItemsData('nombreastral').filter(it => it.data.jourindex < game.system.rdd.calendrier.getCurrentDayIndex()); | ||||||
|     const deletions = toDelete.map(it => it._id); |     const deletions = toDelete.map(it => it._id); | ||||||
|     await this.deleteEmbeddedDocuments("Item", deletions); |     await this.deleteEmbeddedDocuments("Item", deletions); | ||||||
|  |  | ||||||
| @@ -2443,12 +2445,12 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   getSortList() { |   getSortList() { | ||||||
|     return this.data.items.filter(it => it.data.type == "sort"); |     return this.listItemsData("sort"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente |   countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente | ||||||
|     let countMonteeLaborieuse = this.data.items.filter(it => EffetsDraconiques.isMonteeLaborieuse(it)).length; |     let countMonteeLaborieuse = this.filterItemsData(it => EffetsDraconiques.isMonteeLaborieuse(it)).length; | ||||||
|     if (countMonteeLaborieuse > 0) { |     if (countMonteeLaborieuse > 0) { | ||||||
|       ChatMessage.create({ |       ChatMessage.create({ | ||||||
|         content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`, |         content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`, | ||||||
| @@ -2502,7 +2504,7 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   rollArme(compName, armeName = undefined) { |   rollArme(compName, armeName = undefined) { | ||||||
|     let arme = armeName ? this.data.items.find(it => it.name == armeName && RdDItemArme.isArme(it)) : undefined; |     let arme = armeName ? this.data.items.find(it => Misc.data(it).name == armeName && RdDItemArme.isArme(it)) : undefined; | ||||||
|     let competence = this.getCompetence(compName); |     let competence = this.getCompetence(compName); | ||||||
|  |  | ||||||
|     if (arme || armeName || (competence.type == 'competencecreature' && competence.data.iscombat)) { |     if (arme || armeName || (competence.type == 'competencecreature' && competence.data.iscombat)) { | ||||||
| @@ -2915,10 +2917,10 @@ export class RdDActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async effectuerTacheAlchimie(recetteId, alchimieName, alchimieData) { |   async effectuerTacheAlchimie(recetteId, alchimieName, alchimieData) { | ||||||
|     let recette = this.data.items.find(item => item.type == 'recettealchimique' && item.id == recetteId); |     let recette = this.getItemOfType(recetteId, 'recettealchimique'); | ||||||
|     const actorData = Misc.data(this); |     const actorData = Misc.data(this); | ||||||
|     if (recette) { |     if (recette) { | ||||||
|       let competence = this.data.items.find(item => item.type == 'competence' && item.name.toLowerCase() == "alchimie"); |       let competence = this.getCompetence("alchimie"); | ||||||
|       let diffAlchimie = RdDAlchimie.getDifficulte(alchimieData); |       let diffAlchimie = RdDAlchimie.getDifficulte(alchimieData); | ||||||
|       let rollData = { |       let rollData = { | ||||||
|         recette: recette, |         recette: recette, | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ export class Monnaie { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   static filtrerMonnaies(items) { |   static filtrerMonnaies(items) { | ||||||
|     return items.filter(it => it.type == 'monnaie'); |     return items.filter(it => Misc.data(it).type == 'monnaie'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static monnaiesManquantes(items) { |   static monnaiesManquantes(items) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user