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}}