Amélioration des choix d'attaque
This commit is contained in:
@@ -6,6 +6,9 @@
|
||||
- Les conteneurs ouverts sont mis à jour si leur contenu change
|
||||
- Le style des icones d'objets est homogénéisé
|
||||
- Ajout d'icônes: coffre, tissu de soie, parchemin
|
||||
- Amélioration des choix d'actions de combat
|
||||
- le choix d'initiative limite les attaques disponibles
|
||||
- les compétences sont triées dans l'ordre décroissant
|
||||
|
||||
## 13.0.26 - La ménagerie d'Illysis
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export class Distance {
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
switch (attaque.comp.type) {
|
||||
switch (attaque.comp?.type) {
|
||||
case ITEM_TYPES.competence: return mapTypeAttaque(attaque.main)
|
||||
case ITEM_TYPES.competencecreature: return mapTypeAttaque(attaque.arme.system.categorie)
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ export class RdDBonus {
|
||||
dmgParticuliere: RdDBonus._dmgParticuliere(rollData),
|
||||
dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0,
|
||||
mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite),
|
||||
dmgActor: RdDBonus.bonusDmg(actor, attaque.carac.key, dmgArme, attaque.forceRequise),
|
||||
dmgActor: RdDBonus.bonusDmg(actor, attaque.carac?.key, dmgArme, attaque.forceRequise),
|
||||
dmgForceInsuffisante: Math.min(0, actor.getForce() - (attaque.forceRequise ?? 0)),
|
||||
dmgDiffLibre: ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(attaque.diff ?? 0) : 0
|
||||
}
|
||||
|
||||
@@ -63,6 +63,10 @@ export class RdDCombatManager extends Combat {
|
||||
it.token.id == tokenId
|
||||
)
|
||||
}
|
||||
static getRangInitiativeCombatant(actorId, tokenId) {
|
||||
const combatant = RdDCombatManager.getCombatant(actorId, tokenId)
|
||||
return combatant?.system.init?.rang
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async nextRound() {
|
||||
await this.finDeRound();
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { Distance } from "../combat/distance.mjs"
|
||||
import { RDD_CONFIG } from "../constants.js"
|
||||
import { MAP_PHASE, RdDInitiative } from "../initiative.mjs"
|
||||
import { ATTAQUE_TYPE_MELEE } from "../item/arme.js"
|
||||
import { Misc } from "../misc.js"
|
||||
import { RdDBonus } from "../rdd-bonus.js"
|
||||
import { CARACS } from "../rdd-carac.js"
|
||||
import { RdDCombatManager } from "../rdd-combat.js"
|
||||
import { RdDEmpoignade } from "../rdd-empoignade.js"
|
||||
import { DIFF, ROLL_TYPE_ATTAQUE, ROLL_TYPE_COMP } from "./roll-constants.mjs"
|
||||
import RollDialog from "./roll-dialog.mjs"
|
||||
@@ -17,9 +20,9 @@ export const PART_ATTAQUE = 'attaque'
|
||||
|
||||
const TACTIQUES = RdDBonus.tactiques.filter(it => it.isTactique)
|
||||
|
||||
const FILTER_ATTAQUE_EMPOIGNADE = attaque => attaque.arme.isEmpoignade()
|
||||
const FILTER_ATTAQUE_NON_EMPOIGNADE = attaque => !attaque.arme.isEmpoignade()
|
||||
const FILTER_ATTAQUE_EMPOIGNE = attaque => attaque.arme.isUtilisableEmpoigne() && ATTAQUE_TYPE_MELEE.includes(attaque.main)
|
||||
const FILTER_ATTAQUE_EMPOIGNADE = attaque => attaque.arme?.isEmpoignade()
|
||||
const FILTER_ATTAQUE_RANG = rang => attaque => !attaque.arme?.isEmpoignade() && (attaque.rang == rang || rang == undefined)
|
||||
const FILTER_ATTAQUE_EMPOIGNE = attaque => attaque.arme?.isUtilisableEmpoigne() && ATTAQUE_TYPE_MELEE.includes(attaque.main)
|
||||
|
||||
export class RollPartAttaque extends RollPartSelect {
|
||||
|
||||
@@ -33,8 +36,9 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
loadRefs(rollData) {
|
||||
const refs = this.getRefs(rollData)
|
||||
const attaques = rollData.active.actor.listAttaques()
|
||||
.sort(Misc.descending(it => it.comp?.system.niveau ?? -8))
|
||||
refs.all = attaques.map(it => RollPartAttaque.$extractAttaque(it, rollData))
|
||||
this.filterAttaquesEmpoignade(rollData)
|
||||
this.filterAttaquesInitiative(rollData)
|
||||
refs.tactiques = TACTIQUES
|
||||
if (refs.attaques.length > 0) {
|
||||
const attaque = this.findAttaque(refs.attaques, this.getSaved(rollData))
|
||||
@@ -78,24 +82,27 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
attaque.tactique = TACTIQUES[0]
|
||||
attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
|
||||
attaque.distance = Distance.ajustements(rollData.active?.token, rollData.opponent?.token, attaque)
|
||||
attaque.rang = RdDInitiative.phaseArme(attaque.comp?.system.categorie, attaque.arme)?.rang
|
||||
return attaque
|
||||
}
|
||||
|
||||
prepareContext(rollData) {
|
||||
this.filterAttaquesEmpoignade(rollData)
|
||||
this.filterAttaquesInitiative(rollData)
|
||||
const current = this.getCurrent(rollData)
|
||||
current.dmg = RdDBonus.dmgRollV2(rollData, current)
|
||||
}
|
||||
|
||||
filterAttaquesEmpoignade(rollData) {
|
||||
filterAttaquesInitiative(rollData) {
|
||||
const refs = this.getRefs(rollData)
|
||||
const isEmpoignade = RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId)
|
||||
const rang = RdDCombatManager.getRangInitiativeCombatant(rollData.ids.actorId, rollData.ids.actorTokenId)
|
||||
const isEmpoignade = MAP_PHASE.empoignade.rang == rang
|
||||
//const isEmpoignade = RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId)
|
||||
refs.isEmpoignadeEnCours = RdDEmpoignade.isEmpoignadeEnCours(rollData.active.actor)
|
||||
const filterAttaques = isEmpoignade ?
|
||||
FILTER_ATTAQUE_EMPOIGNADE
|
||||
: refs.isEmpoignadeEnCours
|
||||
? FILTER_ATTAQUE_EMPOIGNE
|
||||
: FILTER_ATTAQUE_NON_EMPOIGNADE
|
||||
: FILTER_ATTAQUE_RANG(rang)
|
||||
refs.attaques = refs.all.filter(filterAttaques)
|
||||
}
|
||||
|
||||
@@ -168,8 +175,8 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
if (this.visible(rollData)) {
|
||||
const current = this.getCurrent(rollData)
|
||||
switch (part.code) {
|
||||
case PART_CARAC: return part.filterCaracs(rollData, [current.carac.key])
|
||||
case PART_COMP: return part.filterComps(rollData, [current.comp.name])
|
||||
case PART_CARAC: return part.filterCaracs(rollData, [current.carac?.key])
|
||||
case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
|
||||
case PART_DIFF: {
|
||||
if (Distance.typeAttaqueDistance(current)) {
|
||||
part.setDiff(rollData, { type: DIFF.DEFAUT })
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{{#if current.key}}
|
||||
<subline>
|
||||
<select name="select-attaque" {{#if rollData.type.retry}}disabled{{/if}}>
|
||||
{{selectOptions refs.attaques selected=current.key valueAttr="key" labelAttr="label"}}
|
||||
@@ -85,4 +86,5 @@
|
||||
</ul>
|
||||
</subline>
|
||||
{{/if}}
|
||||
</roll-part-detail>
|
||||
</roll-part-detail>
|
||||
{{/if}}
|
||||
Reference in New Issue
Block a user