From a1032392887a40e3ac319519095a897cabc486de Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sat, 1 Jun 2024 01:53:14 +0200 Subject: [PATCH] =?UTF-8?q?Passe=20de=20v=C3=A9rification=20mergeObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quand mergeObject est utilisé pour retourner une valeur, faire très attention à ne pas passer un Item/Actor, ou une de ses sous parties en premier paramètre sans préciser l'option { inplace: false } Sinon, le premier paramètre subit une mutation! --- module/actor-sheet.js | 21 ++++++++++---------- module/actor.js | 2 +- module/actor/base-actor-reve.js | 6 +++--- module/actor/base-actor-sheet.js | 2 +- module/actor/commerce-sheet.js | 2 +- module/actor/commerce.js | 3 +-- module/actor/creature-sheet.js | 2 +- module/actor/entite-sheet.js | 2 +- module/actor/vehicule-sheet.js | 2 +- module/item-competence.js | 2 +- module/item-competencecreature.js | 6 ++---- module/item-sheet.js | 2 +- module/item/blessure.js | 8 ++++---- module/item/sheet-base-inventaire.js | 7 ++++--- module/item/sheet-rencontre.js | 4 ++-- module/rdd-combat.js | 24 ++++++++++------------- module/rdd-confirm.js | 2 +- module/settings/regles-optionnelles.js | 6 ++---- module/settings/system-compendiums.js | 4 ++-- module/sommeil/app-astrologie.js | 4 ++-- module/time/rdd-calendrier.js | 2 +- module/tirage/fenetre-recherche-tirage.js | 2 +- module/voyage/dialog-fatigue-voyage.js | 7 ++++--- 23 files changed, 57 insertions(+), 65 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 8b042f4c..4ff63dd7 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -32,21 +32,20 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { width: 550, showCompNiveauBase: false, vueArchetype: false, - }); + }, { inplace: false }); } /* -------------------------------------------- */ async getData() { let formData = await super.getData(); - foundry.utils.mergeObject(formData, - { - editable: this.isEditable, - cssClass: this.isEditable ? "editable" : "locked", - limited: this.actor.limited, - owner: this.actor.isOwner, - biographie: await TextEditor.enrichHTML(this.actor.system.biographie, { async: true }), - notes: await TextEditor.enrichHTML(this.actor.system.notes, { async: true }), - }); + foundry.utils.mergeObject(formData, { + editable: this.isEditable, + cssClass: this.isEditable ? "editable" : "locked", + limited: this.actor.limited, + owner: this.actor.isOwner, + biographie: await TextEditor.enrichHTML(this.actor.system.biographie, { async: true }), + notes: await TextEditor.enrichHTML(this.actor.system.notes, { async: true }), + }); foundry.utils.mergeObject(formData.calc, { surenc: this.actor.computeMalusSurEncombrement(), surprise: RdDBonus.find(this.actor.getSurprise(false)).descr, @@ -211,7 +210,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { const key = Number(li.data("key") ?? -1); await this.actor.deleteExperienceLog(0, key + 1); }); - // Boutons spéciaux MJs + // Boutons spéciaux MJs this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) } diff --git a/module/actor.js b/module/actor.js index 962c2b5d..37ab5f25 100644 --- a/module/actor.js +++ b/module/actor.js @@ -2346,7 +2346,7 @@ export class RdDActor extends RdDBaseActorSang { async _xpCaracDerivee(xpData) { const caracs = RdDActor._getComposantsCaracDerivee(xpData.caracName) - .map(c => foundry.utils.mergeObject(this.system.carac[c], { isMax: this.isCaracMax(c) })) + .map(c => foundry.utils.mergeObject(this.system.carac[c], { isMax: this.isCaracMax(c) }, { inplace: false })) switch (caracs.filter(it => !it.isMax).length) { case 0: xpData.caracRepartitionManuelle = true; diff --git a/module/actor/base-actor-reve.js b/module/actor/base-actor-reve.js index 38155403..840e6adf 100644 --- a/module/actor/base-actor-reve.js +++ b/module/actor/base-actor-reve.js @@ -286,12 +286,12 @@ export class RdDBaseActorReve extends RdDBaseActor { getCarac() { // TODO: le niveau d'une entité de cauchemar devrait être exclu... - const carac = foundry.utils.mergeObject(foundry.utils.duplicate(this.system.carac), + return foundry.utils.mergeObject(this.system.carac, { 'reve-actuel': this.getCaracReveActuel(), 'chance-actuelle': this.getCaracChanceActuelle() - }); - return carac; + }, + { inplace: false }) } /* -------------------------------------------- */ diff --git a/module/actor/base-actor-sheet.js b/module/actor/base-actor-sheet.js index fd428432..1df6c37d 100644 --- a/module/actor/base-actor-sheet.js +++ b/module/actor/base-actor-sheet.js @@ -20,7 +20,7 @@ export class RdDBaseActorSheet extends ActorSheet { tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }], vueDetaillee: false - }); + }, { inplace: false }) } /* -------------------------------------------- */ diff --git a/module/actor/commerce-sheet.js b/module/actor/commerce-sheet.js index 5a7c4cd5..2aed0d6b 100644 --- a/module/actor/commerce-sheet.js +++ b/module/actor/commerce-sheet.js @@ -15,7 +15,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html", width: 600, height: 720, tabs: [] - }); + }, { inplace: false }) } get title() { if (this.actor.token && this.actor.token != this.actor.prototypeToken) { diff --git a/module/actor/commerce.js b/module/actor/commerce.js index 9f6cd289..ed075a6b 100644 --- a/module/actor/commerce.js +++ b/module/actor/commerce.js @@ -25,8 +25,7 @@ export class RdDCommerce extends RdDBaseActor { } await super.depenserSols(cout) } - - async consommerNourritureAchetee(achat, vente, createdItemId) { + async consommerNourritureboisson(itemId, choix, userId) { // ne pas consommer pour un commerce } diff --git a/module/actor/creature-sheet.js b/module/actor/creature-sheet.js index 6e9b865c..80ddb9a6 100644 --- a/module/actor/creature-sheet.js +++ b/module/actor/creature-sheet.js @@ -12,7 +12,7 @@ export class RdDCreatureSheet extends RdDBaseActorSangSheet { return foundry.utils.mergeObject(RdDBaseActorSangSheet.defaultOptions, { template: "systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.html", width: 640, height: 720 - }); + }, { inplace: false }) } /* -------------------------------------------- */ diff --git a/module/actor/entite-sheet.js b/module/actor/entite-sheet.js index 927b749c..354f4429 100644 --- a/module/actor/entite-sheet.js +++ b/module/actor/entite-sheet.js @@ -9,7 +9,7 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet { return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { template: "systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.html", width: 640, height: 720, - }); + }, { inplace: false }) } async getData() { diff --git a/module/actor/vehicule-sheet.js b/module/actor/vehicule-sheet.js index e63d9f2b..fb38f1b6 100644 --- a/module/actor/vehicule-sheet.js +++ b/module/actor/vehicule-sheet.js @@ -9,7 +9,7 @@ export class RdDActorVehiculeSheet extends RdDBaseActorSheet { return foundry.utils.mergeObject(RdDBaseActorSheet.defaultOptions, { template: "systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.html", width: 640, height: 720, - }); + }, { inplace: false }) } /* -------------------------------------------- */ diff --git a/module/item-competence.js b/module/item-competence.js index dce1f30c..b25ea07f 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -199,7 +199,7 @@ export class RdDItemCompetence extends Item { if (idOrName == undefined || idOrName == "") { return RdDItemCompetence.sansCompetence(); } - options = foundry.utils.mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false }); + options = foundry.utils.mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false, inplace: false }); return RdDItemCompetence.findFirstItem(list, idOrName, options); } diff --git a/module/item-competencecreature.js b/module/item-competencecreature.js index e541b458..d16f8aba 100644 --- a/module/item-competencecreature.js +++ b/module/item-competencecreature.js @@ -33,8 +33,7 @@ export class RdDItemCompetenceCreature extends Item { if (categorieAttaque != undefined) { // si c'est un Item compétence: cloner pour ne pas modifier la compétence let arme = item.clone(); - foundry.utils.mergeObject(arme, - { + return foundry.utils.mergeObject(arme, { action: item.isCompetencePossession() ? 'possession' : 'attaque', system: { competence: arme.name, @@ -48,8 +47,7 @@ export class RdDItemCompetenceCreature extends Item { force: 0, rapide: true, } - }); - return arme; + }, { inplace: false }); } return undefined; } diff --git a/module/item-sheet.js b/module/item-sheet.js index 48bf5fa6..5b32caae 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -44,7 +44,7 @@ export class RdDItemSheet extends ItemSheet { template: RdDItemSheet.defaultTemplate(RdDItemSheet.ITEM_TYPE), width: 550, height: 550 - }); + }, { inplace: false }); } /* -------------------------------------------- */ diff --git a/module/item/blessure.js b/module/item/blessure.js index 142d40c5..0af4e9f6 100644 --- a/module/item/blessure.js +++ b/module/item/blessure.js @@ -39,7 +39,7 @@ export class RdDItemBlessure extends RdDItem { ui.notifications.warn(`Pas de tâche de soins pour une blessure ${gravite}`) return undefined; } - return foundry.utils.mergeObject(foundry.utils.duplicate(BASE_TACHE_SOIN_BLESSURE), tache) + return foundry.utils.mergeObject(BASE_TACHE_SOIN_BLESSURE, tache, { inplace: false }) } static async applyFullBlessure(actor, gravite) { @@ -106,12 +106,12 @@ export class RdDItemBlessure extends RdDItem { } async setSoinsBlessure(systemUpdate = {}) { - systemUpdate = foundry.utils.mergeObject(systemUpdate, this.system, { overwrite: false }), - systemUpdate.soinscomplets.done = systemUpdate.premierssoins.done && systemUpdate.soinscomplets.done + systemUpdate = foundry.utils.mergeObject(systemUpdate, this.system, { overwrite: false }) + systemUpdate.soinscomplets.done = systemUpdate.premierssoins.done && systemUpdate.soinscomplets.done await this.update({ img: this.getImgSoins(systemUpdate.gravite, systemUpdate.soinscomplets.done), system: systemUpdate - }); + }) } async recuperationBlessure({ actor, timestamp, message, isMaladeEmpoisonne, blessures }) { diff --git a/module/item/sheet-base-inventaire.js b/module/item/sheet-base-inventaire.js index 4df15a05..014bc4ea 100644 --- a/module/item/sheet-base-inventaire.js +++ b/module/item/sheet-base-inventaire.js @@ -10,7 +10,7 @@ export class RdDItemInventaireSheet extends RdDItemSheet { static get defaultOptions() { return foundry.utils.mergeObject(RdDItemSheet.defaultOptions, { tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "informations" }] - }); + }, { inplace: false }) } setPosition(options = {}) { @@ -23,9 +23,10 @@ export class RdDItemInventaireSheet extends RdDItemSheet { async getData() { const formData = await super.getData(); - return foundry.utils.mergeObject(formData, { + foundry.utils.mergeObject(formData, { milieux: await game.system.rdd.environnement.autresMilieux(this.item) - }); + }) + return formData } activateListeners(html) { diff --git a/module/item/sheet-rencontre.js b/module/item/sheet-rencontre.js index 58a93a9c..bfd55b7a 100644 --- a/module/item/sheet-rencontre.js +++ b/module/item/sheet-rencontre.js @@ -8,7 +8,7 @@ export class RdDRencontreItemSheet extends RdDItemSheet { static get defaultOptions() { return foundry.utils.mergeObject(super.defaultOptions, { tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }] - }); + }, { inplace: false }) } /* -------------------------------------------- */ @@ -35,7 +35,7 @@ export class RdDRencontreItemSheet extends RdDItemSheet { select: RdDRencontre.mapEffets(this.item.system.echec.effets) } } - }); + }) return formData; } diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 771a9f76..4d6c922a 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -128,21 +128,17 @@ export class RdDCombatManager extends Combat { // Send a chat message let rollMode = messageOptions.rollMode || game.settings.get("core", "rollMode"); - let messageData = foundry.utils.mergeObject( - { - speaker: { - scene: canvas.scene._id, - actor: combatant.actor?._id, - token: combatant.token._id, - alias: combatant.token.name, - sound: CONFIG.sounds.dice, - }, - flavor: `${combatant.token.name} a fait son jet d'Initiative (${messageOptions.initInfo}) -
- `, + let messageData = foundry.utils.mergeObject({ + speaker: { + scene: canvas.scene._id, + actor: combatant.actor?._id, + token: combatant.token._id, + alias: combatant.token.name, + sound: CONFIG.sounds.dice, }, - messageOptions - ); + flavor: `${combatant.token.name} a fait son jet d'Initiative (${messageOptions.initInfo})
`, + }, + messageOptions); roll.toMessage(messageData, { rollMode, create: true }); RdDCombatManager.processPremierRoundInit(); diff --git a/module/rdd-confirm.js b/module/rdd-confirm.js index 7e701432..85d52813 100644 --- a/module/rdd-confirm.js +++ b/module/rdd-confirm.js @@ -12,7 +12,7 @@ export class RdDConfirm { buttons = foundry.utils.mergeObject(RdDConfirm._createButtonActionSave(options), buttons); } if (autresActions) { - buttons = foundry.utils.mergeObject(autresActions, buttons); + buttons = foundry.utils.mergeObject(autresActions, buttons, { inplace: false }); } const dialogDetails = { title: options.title, diff --git a/module/settings/regles-optionnelles.js b/module/settings/regles-optionnelles.js index 2d2f36bd..95ca2a2c 100644 --- a/module/settings/regles-optionnelles.js +++ b/module/settings/regles-optionnelles.js @@ -71,8 +71,7 @@ export class ReglesOptionnelles extends FormApplication { } static get defaultOptions() { - const options = super.defaultOptions; - foundry.utils.mergeObject(options, { + return foundry.utils.mergeObject(super.defaultOptions, { id: "regles-optionnelles", template: "systems/foundryvtt-reve-de-dragon/templates/settings/regles-optionnelles.html", height: 650, @@ -80,8 +79,7 @@ export class ReglesOptionnelles extends FormApplication { minimizable: false, closeOnSubmit: true, title: "Règles optionnelles" - }); - return options; + }, { inplace: false }) } getData() { diff --git a/module/settings/system-compendiums.js b/module/settings/system-compendiums.js index f0ce4b9e..6281bab5 100644 --- a/module/settings/system-compendiums.js +++ b/module/settings/system-compendiums.js @@ -152,7 +152,7 @@ export class SystemCompendiums extends FormApplication { getData() { const systemCompendiums = Object.values(CONFIGURABLE_COMPENDIUMS) - .map(it => foundry.utils.mergeObject(it, { value: SystemCompendiums.getCompendium(it.compendium) })); + .map(it => foundry.utils.mergeObject(it, { value: SystemCompendiums.getCompendium(it.compendium) }, { inplace: false })) const availableCompendiums = game.packs.map(pack => { return { name: pack.collection, @@ -163,7 +163,7 @@ export class SystemCompendiums extends FormApplication { return foundry.utils.mergeObject(super.getData(), { systemCompendiums: systemCompendiums, availableCompendiums: availableCompendiums - }); + }, { inplace: false }) } activateListeners(html) { diff --git a/module/sommeil/app-astrologie.js b/module/sommeil/app-astrologie.js index eca4accb..0e33a748 100644 --- a/module/sommeil/app-astrologie.js +++ b/module/sommeil/app-astrologie.js @@ -25,7 +25,7 @@ export class AppAstrologie extends Application { classes: ['calendar-astrologie'], popOut: true, resizable: false - }); + }, { inplace: false }) } constructor(actor, options = {}) { @@ -49,7 +49,7 @@ export class AppAstrologie extends Application { signeNaissance: RdDTimestamp.definition(0) } }) - return this.appData; + return this.appData } getActorAstrologie() { diff --git a/module/time/rdd-calendrier.js b/module/time/rdd-calendrier.js index 0ff8022c..d5f4432d 100644 --- a/module/time/rdd-calendrier.js +++ b/module/time/rdd-calendrier.js @@ -43,7 +43,7 @@ export class RdDCalendrier extends Application { resizable: false, width: 'fit-content', height: 'fit-content', - }); + }, { inplace: false }) } constructor() { diff --git a/module/tirage/fenetre-recherche-tirage.js b/module/tirage/fenetre-recherche-tirage.js index be6a5293..932778d0 100644 --- a/module/tirage/fenetre-recherche-tirage.js +++ b/module/tirage/fenetre-recherche-tirage.js @@ -125,7 +125,7 @@ export class FenetreRechercheTirage extends Application { popOut: true, dragDrop: [{ dragSelector: "a.content-link" }], resizable: true - }); + }, { inplace: false }) } static async create() { diff --git a/module/voyage/dialog-fatigue-voyage.js b/module/voyage/dialog-fatigue-voyage.js index 343f267e..74a4b179 100644 --- a/module/voyage/dialog-fatigue-voyage.js +++ b/module/voyage/dialog-fatigue-voyage.js @@ -142,18 +142,19 @@ export class DialogFatigueVoyage extends Dialog { it => this.$extractActor(this.html.find(it)) ) actors.filter(it => it.selected) - .forEach(async it => { + .forEach(async it => { const perteFatigue = fatigueBase + it.ajustement ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(it.actor.name), content: await renderTemplate( - 'systems/foundryvtt-reve-de-dragon/templates/voyage/chat-fatigue_voyage.hbs', foundry.utils.mergeObject(it, + 'systems/foundryvtt-reve-de-dragon/templates/voyage/chat-fatigue_voyage.hbs', + foundry.utils.mergeObject(it, { parameters: this.parameters, fatigueBase: fatigueBase, perteFatigue: perteFatigue, isVoyage: fatigueBase == this.parameters.nombreHeures * this.parameters.fatigueHoraire - }) + }, { inplace: false }) ), }) await it.actor.santeIncDec("fatigue", perteFatigue)