From 70198a572747265be47263eb81ed14a6a891f0eb Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Mon, 4 Nov 2024 00:19:21 +0100 Subject: [PATCH] =?UTF-8?q?Correction=20des=20armes=20de=20d=C3=A9fense?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 2 ++ module/item-arme.js | 54 ++++++++++++++++++++--------- module/rdd-combat.js | 19 +++++----- templates/chat-demande-defense.html | 10 +++--- 4 files changed, 56 insertions(+), 29 deletions(-) diff --git a/changelog.md b/changelog.md index a4677db0..b696159d 100644 --- a/changelog.md +++ b/changelog.md @@ -12,6 +12,8 @@ - la commande /astro fonctionne de nouveau - le nombre d'utilisations d'items est réinitialisé à chaque round et fin de combat - la difficulté de parade pour les armes à distances n'est plus indiquée + - les propositions d'armes de parade sont corrigées +- Ajout d'un indicateur pour les armes de parade nécessitant une significative ## 12.0.16 - Le secret d'Astrobazzarh - Fix: les jets envoyés messages uniquement au MJ ne sont plus envoyés à tous les autres joueurs (et dupliqués) diff --git a/module/item-arme.js b/module/item-arme.js index 25cb4dd4..86255aa6 100644 --- a/module/item-arme.js +++ b/module/item-arme.js @@ -81,37 +81,59 @@ export class RdDItemArme extends Item { /* -------------------------------------------- */ static getCategorieParade(armeData) { if (armeData.system.categorie_parade) { - return armeData.system.categorie_parade; + return armeData.system.categorie_parade } // pour compatibilité avec des personnages existants if (armeData.type == ITEM_TYPES.competencecreature || armeData.system.categorie == 'creature') { - return armeData.system.categorie_parade || (armeData.system.isparade ? 'armes-naturelles' : ''); + return armeData.system.categorie_parade || (armeData.system.isparade ? 'armes-naturelles' : '') } if (!armeData.type.match(/arme|competencecreature/)) { - return ''; + return '' } if (armeData.system.competence == undefined) { return ITEM_TYPES.competencecreature; } let compname = armeData.system.competence.toLowerCase(); - if (compname.match(/^(dague de jet|javelot|fouet|arc|arbalête|fronde|hache de jet|fléau)$/)) return ''; + if (compname.match(/^(dague de jet|javelot|fouet|arc|arbalête|fronde|hache de jet|fléau)$/)) { + return '' + } - if (compname.match('hache')) return 'haches'; - if (compname.match('hast')) return 'hast'; - if (compname.match('lance')) return 'lances'; - if (compname.match('bouclier')) return 'boucliers'; - if (compname.match('masse')) return 'masses'; + if (compname.match('hache')) return 'haches' + if (compname.match('hast')) return 'hast' + if (compname.match('lance')) return 'lances' + if (compname.match('bouclier')) return 'boucliers' + if (compname.match('masse')) return 'masses' if (compname.match('epée') || compname.match('épée')) { if (armeData.name.toLowerCase().match(/(gnome)/)) - return 'epees-courtes'; + return 'epees-courtes' if (armeData.name.toLowerCase().match(/((e|é)pée dragone|esparlongue|demi-dragonne)/)) - return 'epees-longues'; - return 'epees-lourdes'; + return 'epees-longues' + return 'epees-lourdes' } if (compname.match('dague')) { - return 'dagues'; + return 'dagues' + } + return 'sans-armes' + } + + static defenseArmeParade(armeAttaque, armeParade) { + const defCategory = RdDItemArme.getCategorieParade(armeParade) + if (defCategory == 'bouclier') { + return 'norm' + } + if (armeAttaque.system.competence.toLowerCase().match(/(fléau)/)) { + return '' + } + if (armeParade.system.tir) { + return '' + } + const attCategory = RdDItemArme.getCategorieParade(armeAttaque) + switch (attCategory) { + case 'armes-naturelles': case 'sans-armes': + return defCategory == 'sans-armes' ? 'norm' : '' + default: + return RdDItemArme.needParadeSignificative(armeAttaque, armeParade) ? 'sign' : 'norm' } - return 'sans-armes'; } /* -------------------------------------------- */ @@ -120,8 +142,8 @@ export class RdDItemArme extends Item { return false; } // categories d'armes à la parade (cf. page 115 ) - let attCategory = RdDItemArme.getCategorieParade(armeAttaque); - let defCategory = RdDItemArme.getCategorieParade(armeParade); + const attCategory = RdDItemArme.getCategorieParade(armeAttaque) + const defCategory = RdDItemArme.getCategorieParade(armeParade) // bouclier et mêmes catégorie: peuvent se parer sans difficulté if (defCategory == 'boucliers') { return false; diff --git a/module/rdd-combat.js b/module/rdd-combat.js index fb10350e..35b6bf9f 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -932,7 +932,7 @@ export class RdDCombat { // # utilisation esquive const corpsACorps = this.defender.getCompetenceCorpsACorps({ onMessage: it => console.info(it, this.defender) }); const esquives = foundry.utils.duplicate(this.defender.getCompetencesEsquive()) - esquives.forEach(e => e.system.nbUsage = e?._id ? this.defender.getItemUse(e._id) : 0); + esquives.forEach(e => e.nbUsage = e?._id ? this.defender.getItemUse(e._id) : 0); const paramChatDefense = { passeArme: attackerRoll.passeArme, @@ -993,19 +993,20 @@ export class RdDCombat { /* -------------------------------------------- */ _filterArmesParade(defender, competence, arme) { - let items = defender.items.filter(it => RdDItemArme.isArmeUtilisable(it) || RdDItemCompetenceCreature.isCompetenceParade(it)) - items.forEach(item => item.system.nbUsage = defender.getItemUse(item.id)); // Ajout du # d'utilisation ce round + let defenses = defender.items.filter(it => RdDItemArme.isArmeUtilisable(it) || RdDItemCompetenceCreature.isCompetenceParade(it)) + defenses = foundry.utils.duplicate(defenses) + defenses.forEach(armeDefense => { + // Ajout du # d'utilisation ce round + armeDefense.nbUsage = defender.getItemUse(armeDefense.id) + armeDefense.typeParade = RdDItemArme.defenseArmeParade(arme, armeDefense) + }) switch (competence.system.categorie) { case 'tir': case 'lancer': - return items.filter(item => RdDItemArme.getCategorieParade(item) == 'boucliers') + return defenses.filter(armeDefense => RdDItemArme.getCategorieParade(armeDefense) == 'boucliers') default: - // Le fléau ne peut être paré qu’au bouclier p115 - if (competence.name == "Fléau") { - return items.filter(item => RdDItemArme.getCategorieParade(item) == 'boucliers') - } - return items.filter(item => RdDItemArme.getCategorieParade(item)); + return defenses.filter(armeDefense => armeDefense.typeParade != '') } } diff --git a/templates/chat-demande-defense.html b/templates/chat-demande-defense.html index ece0c693..4a8a0bd7 100644 --- a/templates/chat-demande-defense.html +++ b/templates/chat-demande-defense.html @@ -35,7 +35,6 @@ {{/if}} {{/unless}} {{else}} - {{log 'defense' attaqueArme attaqueCategorie this}} {{#each armes as |arme key|}} ×½ + {{/if}} + {{#if arme.nbUsage}}(Utilisations : {{arme.nbUsage}}){{/if}}
{{/each}} @@ -53,7 +55,7 @@ - Parer à mains nues à {{diffLibre}}{{#if arme.system.nbUsage}} (Utilisations : {{arme.system.nbUsage}}){{/if}} + Parer à mains nues à {{diffLibre}}{{#if arme.nbUsage}} (Utilisations : {{arme.nbUsage}}){{/if}}
{{/if}} @@ -67,7 +69,7 @@ (difficulté à déterminer) {{else}}à {{../diffLibre }} {{/if}} - {{#if esquive.system.nbUsage}}(Utilisations : {{esquive.system.nbUsage}}){{/if}} + {{#if esquive.nbUsage}}(Utilisations : {{esquive.nbUsage}}){{/if}}
{{/each}}