Correction de combat

- filtrage des parades selon l'attaque
- gestion des tactiques
This commit is contained in:
2025-12-15 01:08:28 +01:00
parent dbe5d0b974
commit 0563286cca
9 changed files with 116 additions and 78 deletions

View File

@@ -49,9 +49,8 @@ export default class ChatRollResult {
roll.active.actor,
roll.current?.rollmode?.key
)
const save = RollDialog.saveParts(roll, impacts)
await this.saveChatMessageRoll(chatMessage, save)
await this.saveChatMessageRoll(chatMessage, roll, impacts)
return chatMessage
}
@@ -166,8 +165,20 @@ export default class ChatRollResult {
return roll.active?.actor ?? (roll.ids?.actorId ? game.actors.get(roll.ids.actorId) : undefined)
}
async saveChatMessageRoll(chatMessage, savedRoll) {
await ChatUtility.setMessageData(chatMessage, 'rollData', savedRoll)
async updateChatMessage(chatMessage, savedRoll) {
RollDialog.loadRollData(savedRoll)
savedRoll.dmg = savedRoll.current.attaque?.dmg
await this.saveChatMessageRoll(chatMessage, savedRoll)
this.prepareDisplay(savedRoll)
chatMessage.update({ content: await this.buildRollHtml(savedRoll) })
chatMessage.render(true)
}
async saveChatMessageRoll(chatMessage, roll, impacts = undefined) {
const save = RollDialog.saveParts(roll, impacts)
await ChatUtility.setMessageData(chatMessage, 'rollData', save)
}
loadChatMessageRoll(chatMessage) {
@@ -176,16 +187,6 @@ export default class ChatRollResult {
return savedRoll
}
async updateChatMessage(chatMessage, savedRoll) {
await this.saveChatMessageRoll(chatMessage, savedRoll)
const copy = foundry.utils.duplicate(savedRoll)
RollDialog.loadRollData(copy)
savedRoll.dmg = copy.current.attaque?.dmg
this.prepareDisplay(copy)
chatMessage.update({ content: await this.buildRollHtml(copy) })
chatMessage.render(true)
}
onClickAppelChance(event) {
event.preventDefault()
const chatMessage = ChatUtility.getChatMessage(event)
@@ -197,28 +198,28 @@ export default class ChatRollResult {
)
}
async onAppelChanceSuccess(reRoll, chatMessage) {
reRoll.type.retry = true
await this.updateChatMessage(chatMessage, reRoll)
async onAppelChanceSuccess(roll, chatMessage) {
roll.type.retry = true
await this.updateChatMessage(chatMessage, roll)
const callbacks = [ChatUtility.remover(chatMessage)]
// TODO: annuler les effets...
switch (reRoll.type.current) {
switch (roll.type.current) {
case ROLL_TYPE_DEFENSE:
this.getCombat(reRoll)?.doRollDefense(reRoll, callbacks)
this.getCombat(roll)?.doRollDefense(roll, callbacks)
break
case ROLL_TYPE_ATTAQUE:
this.getCombat(reRoll)?.doRollAttaque(reRoll, callbacks)
this.getCombat(roll)?.doRollAttaque(roll, callbacks)
break
default: {
await RollDialog.create(reRoll, { onRollDone: RollDialog.onRollDoneClose, callbacks })
await RollDialog.create(roll, { onRollDone: RollDialog.onRollDoneClose, callbacks })
}
}
}
async onAppelChanceEchec(reRoll, chatMessage) {
reRoll.type.retry = true
await this.updateChatMessage(chatMessage, reRoll)
async onAppelChanceEchec(roll, chatMessage) {
roll.type.retry = true
await this.updateChatMessage(chatMessage, roll)
}
onClickAppelDestinee(event) {
@@ -229,10 +230,9 @@ export default class ChatRollResult {
const actor = this.getActiveActor(savedRoll)
Misc.doIfOwner(actor, it => it.appelDestinee(async () => {
const reRoll = foundry.utils.duplicate(savedRoll)
reRoll.type.retry = true
RdDResolutionTable.significativeRequise(reRoll.rolled)
await this.updateChatMessage(chatMessage, reRoll)
savedRoll.type.retry = true
RdDResolutionTable.significativeRequise(savedRoll.rolled)
await this.updateChatMessage(chatMessage, savedRoll)
}))
}