Derniers fix de sécurité et assimilé

This commit is contained in:
2026-04-04 09:40:30 +02:00
parent 1fb80f6abe
commit 56b58565d1
5 changed files with 37 additions and 27 deletions

View File

@@ -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) let item = this.items.find(item => item.id == itemId)
if (item) { if (item) {
console.log("Item ", item, itemField, dataType, value) console.log("Item ", item, itemField, dataType, value)
@@ -336,7 +336,7 @@ export class MournbladeCYD2Actor extends Actor {
value = String(value) value = String(value)
} }
let update = { _id: item.id, [`system.${itemField}`]: 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) { 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 const passedTresAffaibli = curr >= tresAffaibli && prev < tresAffaibli
if (passedAffaibli) { if (passedAffaibli) {
if (this.items.find(item => item.type == "talent" && item.name.toLowerCase() == "encaissement")) { if (this.hasTalent("encaissement")) {
ChatMessage.create({ content: `<strong>${this.name} ne subit pas les 2 adversités rouge (Affaibli) grâce à Encaissement. Pensez à les ajouter à la fin de la scène !</strong>` }) ChatMessage.create({ content: `<strong>${this.name} ne subit pas les 2 adversités rouge (Affaibli) grâce à Encaissement. Pensez à les ajouter à la fin de la scène !</strong>` })
} else { } else {
ChatMessage.create({ content: `<strong>${this.name} est Affaibli et subit 2 adversités rouge !</strong>` }) ChatMessage.create({ content: `<strong>${this.name} est Affaibli et subit 2 adversités rouge !</strong>` })
@@ -529,7 +537,7 @@ export class MournbladeCYD2Actor extends Actor {
} }
} }
if (passedTresAffaibli) { if (passedTresAffaibli) {
if (this.items.find(item => item.type == "talent" && item.name.toLowerCase().includes("vaillant"))) { if (this.hasTalent(/vaillant/)) {
ChatMessage.create({ content: `<strong>${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 !</strong>` }) ChatMessage.create({ content: `<strong>${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 !</strong>` })
} else { } else {
ChatMessage.create({ content: `<strong>${this.name} est Très Affaibli et subit 2 adversités rouge supplémentaires !</strong>` }) ChatMessage.create({ content: `<strong>${this.name} est Très Affaibli et subit 2 adversités rouge supplémentaires !</strong>` })

View File

@@ -88,8 +88,8 @@ export class MournbladeCYD2Commands {
} }
if (command && command.func) { if (command && command.func) {
const result = command.func(content, msg, params); const result = command.func(content, msg, params);
if (result == false) { if (result === false) {
RdDCommands._chatAnswer(msg, command.descr); MournbladeCYD2Commands._chatAnswer(msg, command.descr);
} }
return true; return true;
} }
@@ -98,8 +98,7 @@ export class MournbladeCYD2Commands {
/* -------------------------------------------- */ /* -------------------------------------------- */
async createChar(msg) { async createChar(msg) {
game.system.MournbladeCYD2.creator = new MournbladeCYD2ActorCreate(); ui.notifications.warn("La création automatique de personnage n'est pas disponible dans cette version.")
game.system.MournbladeCYD2.creator.start();
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@@ -17,6 +17,10 @@ export class MournbladeCYD2TokenHud {
static async addExtensionHud(app, html, tokenId) { static async addExtensionHud(app, html, tokenId) {
let token = canvas.tokens.get(tokenId) let token = canvas.tokens.get(tokenId)
if (!token) {
console.warn("MournbladeCYD2TokenHud.addExtensionHud : token introuvable", tokenId)
return
}
let actor = token.actor let actor = token.actor
app.hasExtension = true app.hasExtension = true

View File

@@ -41,7 +41,7 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
game.socket.on("system.fvtt-mournblade-cyd-2-0", data => { game.socket.on("system.fvtt-mournblade-cyd-2-0", data => {
MournbladeCYD2Utility.onSocketMesssage(data) MournbladeCYD2Utility.onSocketMessage(data)
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@@ -229,15 +229,6 @@ export class MournbladeCYD2Utility {
return undefined; return undefined;
} }
/* -------------------------------------------- */
static createDirectOptionList(min, max) {
let options = {};
for (let i = min; i <= max; i++) {
options[`${i}`] = `${i}`;
}
return options;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static buildListOptions(min, max) { static buildListOptions(min, max) {
let options = "" let options = ""
@@ -279,13 +270,13 @@ export class MournbladeCYD2Utility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static onSocketMesssage(msg) { static onSocketMessage(msg) {
if (msg.msg == "msg_apply_combativite") { if (msg.msg == "msg_apply_combativite") {
let defender = game.canvas.tokens.get(msg.data.defenderTokenId)?.actor let defender = game.canvas.tokens.get(msg.data.defenderTokenId)?.actor
if (defender) { if (defender) {
defender.changeEtatCombativite(msg.data.value) defender.changeEtatCombativite(msg.data.value)
} else { } 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) { 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")) { 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) { if (diceValue % 2 == 1) {
rollData.isD20Impair = true rollData.isD20Impair = true
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value
@@ -376,7 +367,12 @@ export class MournbladeCYD2Utility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static applyCombativite(rollData, value) { static applyCombativite(rollData, value) {
if (game.user.isGM) { 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) defender.changeEtatCombativite(value)
} else { } else {
game.socket.emit("system.fvtt-mournblade-cyd-2-0", { msg: "msg_apply_combativite", data: { defenderTokenId: rollData.defenderTokenId, value } }); game.socket.emit("system.fvtt-mournblade-cyd-2-0", { msg: "msg_apply_combativite", data: { defenderTokenId: rollData.defenderTokenId, value } });
@@ -533,10 +529,13 @@ export class MournbladeCYD2Utility {
this.applyCombativite(rollData, rollData.nbCombativitePerdu) this.applyCombativite(rollData, rollData.nbCombativitePerdu)
} }
if (rollData.coupBas && rollData.isSuccess && rollData.defenderTokenId) { if (rollData.coupBas && rollData.isSuccess && rollData.defenderTokenId) {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor const token = game.canvas.tokens.get(rollData.defenderTokenId)
const defender = token?.actor
if (defender) {
defender.incDecAdversite("bleue", -2) defender.incDecAdversite("bleue", -2)
} }
} }
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static getCombativiteList(nbActivite) { static getCombativiteList(nbActivite) {
@@ -620,7 +619,7 @@ export class MournbladeCYD2Utility {
rollData.bonusFormula = rollData.addedBonus rollData.bonusFormula = rollData.addedBonus
console.log("Bonus Roll MournbladeCYD2", rollData.bonusFormula) console.log("Bonus Roll MournbladeCYD2", rollData.bonusFormula)
if (!Number(rollData.bonusFormula)) { if (isNaN(Number(rollData.bonusFormula))) {
let bonusRoll = await new Roll(rollData.bonusFormula).roll() let bonusRoll = await new Roll(rollData.bonusFormula).roll()
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode")); await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll) rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)