From 56b58565d17f520b70026717819a17374d799e2b Mon Sep 17 00:00:00 2001 From: LeRatierBretonnier Date: Sat, 4 Apr 2026 09:40:30 +0200 Subject: [PATCH] =?UTF-8?q?Derniers=20fix=20de=20s=C3=A9curit=C3=A9=20et?= =?UTF-8?q?=20assimil=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/mournblade-cyd2-actor.js | 18 +++++++++++----- modules/mournblade-cyd2-commands.js | 7 +++--- modules/mournblade-cyd2-hud.js | 4 ++++ modules/mournblade-cyd2-main.js | 2 +- modules/mournblade-cyd2-utility.js | 33 ++++++++++++++--------------- 5 files changed, 37 insertions(+), 27 deletions(-) diff --git a/modules/mournblade-cyd2-actor.js b/modules/mournblade-cyd2-actor.js index ea2be2e..0f6c25d 100644 --- a/modules/mournblade-cyd2-actor.js +++ b/modules/mournblade-cyd2-actor.js @@ -326,7 +326,7 @@ export class MournbladeCYD2Actor extends Actor { } /* -------------------------------------------- */ - editItemField(itemId, itemType, itemField, dataType, value) { + async editItemField(itemId, itemType, itemField, dataType, value) { let item = this.items.find(item => item.id == itemId) if (item) { console.log("Item ", item, itemField, dataType, value) @@ -336,7 +336,7 @@ export class MournbladeCYD2Actor extends Actor { value = String(value) } let update = { _id: item.id, [`system.${itemField}`]: value }; - this.updateEmbeddedDocuments("Item", [update]) + await this.updateEmbeddedDocuments("Item", [update]) } } @@ -465,7 +465,15 @@ export class MournbladeCYD2Actor extends Actor { /* -------------------------------------------- */ getAttribute(attrKey) { - return this.system.attributes[attrKey] + return this.system.attributs[attrKey] + } + + /* -------------------------------------------- */ + hasTalent(nameOrPattern) { + if (nameOrPattern instanceof RegExp) { + return !!this.items.find(i => i.type === "talent" && nameOrPattern.test(i.name.toLowerCase())) + } + return !!this.items.find(i => i.type === "talent" && i.name.toLowerCase() === nameOrPattern.toLowerCase()) } /* -------------------------------------------- */ @@ -521,7 +529,7 @@ export class MournbladeCYD2Actor extends Actor { const passedTresAffaibli = curr >= tresAffaibli && prev < tresAffaibli if (passedAffaibli) { - if (this.items.find(item => item.type == "talent" && item.name.toLowerCase() == "encaissement")) { + if (this.hasTalent("encaissement")) { ChatMessage.create({ content: `${this.name} ne subit pas les 2 adversités rouge (Affaibli) grâce à Encaissement. Pensez à les ajouter à la fin de la scène !` }) } else { ChatMessage.create({ content: `${this.name} est Affaibli et subit 2 adversités rouge !` }) @@ -529,7 +537,7 @@ export class MournbladeCYD2Actor extends Actor { } } if (passedTresAffaibli) { - if (this.items.find(item => item.type == "talent" && item.name.toLowerCase().includes("vaillant"))) { + if (this.hasTalent(/vaillant/)) { ChatMessage.create({ content: `${this.name} ne subit pas les 2 adversités rouge (Très Affaibli) grâce à Vaillant. Pensez à les ajouter à la fin de la scène !` }) } else { ChatMessage.create({ content: `${this.name} est Très Affaibli et subit 2 adversités rouge supplémentaires !` }) diff --git a/modules/mournblade-cyd2-commands.js b/modules/mournblade-cyd2-commands.js index 0a30c67..222815c 100644 --- a/modules/mournblade-cyd2-commands.js +++ b/modules/mournblade-cyd2-commands.js @@ -88,8 +88,8 @@ export class MournbladeCYD2Commands { } if (command && command.func) { const result = command.func(content, msg, params); - if (result == false) { - RdDCommands._chatAnswer(msg, command.descr); + if (result === false) { + MournbladeCYD2Commands._chatAnswer(msg, command.descr); } return true; } @@ -98,8 +98,7 @@ export class MournbladeCYD2Commands { /* -------------------------------------------- */ async createChar(msg) { - game.system.MournbladeCYD2.creator = new MournbladeCYD2ActorCreate(); - game.system.MournbladeCYD2.creator.start(); + ui.notifications.warn("La création automatique de personnage n'est pas disponible dans cette version.") } /* -------------------------------------------- */ diff --git a/modules/mournblade-cyd2-hud.js b/modules/mournblade-cyd2-hud.js index a7c6bf4..576534d 100644 --- a/modules/mournblade-cyd2-hud.js +++ b/modules/mournblade-cyd2-hud.js @@ -17,6 +17,10 @@ export class MournbladeCYD2TokenHud { static async addExtensionHud(app, html, tokenId) { let token = canvas.tokens.get(tokenId) + if (!token) { + console.warn("MournbladeCYD2TokenHud.addExtensionHud : token introuvable", tokenId) + return + } let actor = token.actor app.hasExtension = true diff --git a/modules/mournblade-cyd2-main.js b/modules/mournblade-cyd2-main.js index 590a6d3..2ddaf79 100644 --- a/modules/mournblade-cyd2-main.js +++ b/modules/mournblade-cyd2-main.js @@ -41,7 +41,7 @@ Hooks.once("init", async function () { /* -------------------------------------------- */ game.socket.on("system.fvtt-mournblade-cyd-2-0", data => { - MournbladeCYD2Utility.onSocketMesssage(data) + MournbladeCYD2Utility.onSocketMessage(data) }); /* -------------------------------------------- */ diff --git a/modules/mournblade-cyd2-utility.js b/modules/mournblade-cyd2-utility.js index 86e9188..3e415d8 100644 --- a/modules/mournblade-cyd2-utility.js +++ b/modules/mournblade-cyd2-utility.js @@ -229,15 +229,6 @@ export class MournbladeCYD2Utility { return undefined; } - /* -------------------------------------------- */ - static createDirectOptionList(min, max) { - let options = {}; - for (let i = min; i <= max; i++) { - options[`${i}`] = `${i}`; - } - return options; - } - /* -------------------------------------------- */ static buildListOptions(min, max) { let options = "" @@ -279,13 +270,13 @@ export class MournbladeCYD2Utility { } /* -------------------------------------------- */ - static onSocketMesssage(msg) { + static onSocketMessage(msg) { if (msg.msg == "msg_apply_combativite") { let defender = game.canvas.tokens.get(msg.data.defenderTokenId)?.actor if (defender) { defender.changeEtatCombativite(msg.data.value) } else { - console.warn("MournbladeCYD2Utility.onSocketMesssage : Impossible de trouver le token pour appliquer la combativité", msg.defenderTokenId) + console.warn("MournbladeCYD2Utility.onSocketMessage : Impossible de trouver le token pour appliquer la combativité", msg.defenderTokenId) } } } @@ -347,9 +338,9 @@ export class MournbladeCYD2Utility { /* -------------------------------------------- */ static computeResult(rollData) { - rollData.diceResult = rollData.roll.terms[0].results[0].result + rollData.diceResult = rollData.roll?.terms?.[0]?.results?.[0]?.result ?? 0 if (rollData.mainDice.includes("d20")) { - let diceValue = rollData.roll.terms[0].results[0].result + let diceValue = rollData.roll?.terms?.[0]?.results?.[0]?.result ?? 0 if (diceValue % 2 == 1) { rollData.isD20Impair = true rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value @@ -376,7 +367,12 @@ export class MournbladeCYD2Utility { /* -------------------------------------------- */ static applyCombativite(rollData, value) { if (game.user.isGM) { - let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor + const token = game.canvas.tokens.get(rollData.defenderTokenId) + const defender = token?.actor + if (!defender) { + console.warn("MournbladeCYD2Utility.applyCombativite : token défenseur introuvable", rollData.defenderTokenId) + return + } defender.changeEtatCombativite(value) } else { game.socket.emit("system.fvtt-mournblade-cyd-2-0", { msg: "msg_apply_combativite", data: { defenderTokenId: rollData.defenderTokenId, value } }); @@ -533,8 +529,11 @@ export class MournbladeCYD2Utility { this.applyCombativite(rollData, rollData.nbCombativitePerdu) } if (rollData.coupBas && rollData.isSuccess && rollData.defenderTokenId) { - let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor - defender.incDecAdversite("bleue", -2) + const token = game.canvas.tokens.get(rollData.defenderTokenId) + const defender = token?.actor + if (defender) { + defender.incDecAdversite("bleue", -2) + } } } @@ -620,7 +619,7 @@ export class MournbladeCYD2Utility { rollData.bonusFormula = rollData.addedBonus console.log("Bonus Roll MournbladeCYD2", rollData.bonusFormula) - if (!Number(rollData.bonusFormula)) { + if (isNaN(Number(rollData.bonusFormula))) { let bonusRoll = await new Roll(rollData.bonusFormula).roll() await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode")); rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)