Nouvelle fenêtre: attaque/defense

quelques améliorations
préparation pour gérer les messages de résultats en
fonction du type de jet (attaque/compétence/...)

quelques corrections (suppression du filtre de compétences
quand on change de type de jet, astrologie, ..)
This commit is contained in:
2025-09-24 01:23:10 +02:00
parent 1f330c734e
commit d26ab59c51
65 changed files with 381 additions and 350 deletions

View File

@@ -19,7 +19,7 @@ import RollDialog from "./roll/roll-dialog.mjs";
import { PART_DEFENSE } from "./roll/roll-part-defense.mjs";
import { PART_ATTAQUE } from "./roll/roll-part-attaque.mjs";
import { RollDialogAdapter } from "./roll/roll-dialog-adapter.mjs";
import { ROLL_MODE_ATTAQUE, ROLL_MODE_DEFENSE } from "./roll/roll-constants.mjs";
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll/roll-constants.mjs";
/* -------------------------------------------- */
const premierRoundInit = [
@@ -565,7 +565,7 @@ export class RdDCombat {
// TODO: en cas de demi-surprise en défense, pas de changement à la règle de base
return rollData.rolled.isETotal
}
if (rollData.mode == ROLL_MODE_ATTAQUE && rollData.surprise == 'demi'){
if (rollData.mode == ROLL_TYPE_ATTAQUE && rollData.surprise == 'demi') {
// échec normal à l'attaque en demi surprise
return rollData.rolled.isEchec && rollData.rolled.code != 'notSign'
}
@@ -702,7 +702,7 @@ export class RdDCombat {
/* -------------------------------------------- */
_prepareAttaque(competence, arme) {
let rollData = {
mode: ROLL_MODE_ATTAQUE,
mode: ROLL_TYPE_ATTAQUE,
alias: this.attacker?.getAlias(),
passeArme: foundry.utils.randomID(16),
mortalite: arme?.system.mortalite,
@@ -979,25 +979,20 @@ export class RdDCombat {
opponentTokenId: this.attackerTokenId,
opponentId: this.attackerId,
},
mode: {
allowed: ['defense'],
current: 'defense'
},
type: { allowed: ['defense'], current: 'defense' },
attaque: RollDialogAdapter.mapActionAttaque(attackerRoll),
passeArme: attackerRoll.passeArme,
}
await RollDialog.create(rollData, {
onRoll: (dialog) => {
dialog.close()
},
onRollDone: (dialog) => { dialog.close() },
customChatMessage: true,
callbacks: [async (actor, rd) => {
this.removeChatMessageActionsPasseArme(rd.passeArme)
callbacks: [async (roll) => {
this.removeChatMessageActionsPasseArme(roll.passeArme)
// defense: esquive / arme de parade / competence de défense
if (!RdDCombat.isParticuliere(rd))
await rd.active.actor.incDecItemUse(rd.current[PART_DEFENSE].defense?.id,)
await this._onDefense(rd)
if (!RdDCombat.isParticuliere(roll))
await roll.active.actor.incDecItemUse(roll.current[PART_DEFENSE].defense?.id,)
await this._onDefense(roll)
}]
})
}
@@ -1006,7 +1001,7 @@ export class RdDCombat {
/* -------------------------------------------- */
_prepareParade(attackerRoll, armeParade, competenceParade) {
let defenderRoll = {
mode: ROLL_MODE_DEFENSE,
mode: ROLL_TYPE_DEFENSE,
alias: this.defender?.getAlias(),
passeArme: attackerRoll.passeArme,
diffLibre: attackerRoll.diffLibre,
@@ -1037,7 +1032,7 @@ export class RdDCombat {
}
}
else {
await this._onDefenseEchec(rollData)
await this._onDefenseEchec(dialog, rollData)
}
}
@@ -1155,7 +1150,7 @@ export class RdDCombat {
/* -------------------------------------------- */
_prepareEsquive(attackerRoll, competence) {
let rollData = {
mode: ROLL_MODE_DEFENSE,
mode: ROLL_TYPE_DEFENSE,
alias: this.defender.getAlias(),
passeArme: attackerRoll.passeArme,
diffLibre: attackerRoll.diffLibre,