Correction des armes de défense
This commit is contained in:
parent
bfe70c6634
commit
70198a5727
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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 != '')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,6 @@
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{else}}
|
||||
{{log 'defense' attaqueArme attaqueCategorie this}}
|
||||
{{#each armes as |arme key|}}
|
||||
<a class='chat-card-button' id='parer-button'
|
||||
data-attackerId='{{../attackerId}}' data-defenderTokenId='{{../defenderToken.id}}' data-attackerTokenId='{{../attackerToken.id}}'
|
||||
@ -45,7 +44,10 @@
|
||||
(difficulté à déterminer)
|
||||
{{else}}à {{../diffLibre }}
|
||||
{{/if}}
|
||||
{{#if arme.system.nbUsage}}(Utilisations : {{arme.system.nbUsage}}){{/if}}
|
||||
{{#if (eq arme.typeParade 'sign')}}
|
||||
<span class="rdd-diviseur">×½</span>
|
||||
{{/if}}
|
||||
{{#if arme.nbUsage}}(Utilisations : {{arme.nbUsage}}){{/if}}
|
||||
</a>
|
||||
<br>
|
||||
{{/each}}
|
||||
@ -53,7 +55,7 @@
|
||||
<a class='chat-card-button' id='parer-button'
|
||||
data-attackerId='{{attackerId}}' data-defenderTokenId='{{defenderToken.id}}' data-attackerTokenId='{{attackerToken.id}}'
|
||||
data-armeid='{{arme._id}}' data-competence='{{arme.system.competence}}'>
|
||||
Parer à mains nues à {{diffLibre}}{{#if arme.system.nbUsage}} (Utilisations : {{arme.system.nbUsage}}){{/if}}
|
||||
Parer à mains nues à {{diffLibre}}{{#if arme.nbUsage}} (Utilisations : {{arme.nbUsage}}){{/if}}
|
||||
</a>
|
||||
<br>
|
||||
{{/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}}
|
||||
</a>
|
||||
<br>
|
||||
{{/each}}
|
||||
|
Loading…
Reference in New Issue
Block a user