Gestion défense et compteur de possession
This commit is contained in:
@@ -13,6 +13,8 @@ import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
|
||||
import { RdDRollTables } from "../rdd-rolltables.js"
|
||||
import { RdDEmpoignade } from "../rdd-empoignade.js"
|
||||
import { Misc } from "../misc.js"
|
||||
import { RollBasicParts } from "./roll-basic-parts.mjs"
|
||||
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
|
||||
|
||||
export default class ChatRollResult {
|
||||
static init() {
|
||||
@@ -134,6 +136,8 @@ export default class ChatRollResult {
|
||||
$(html).on("click", '.appel-chance', event => this.onClickAppelChance(event))
|
||||
$(html).on("click", '.appel-destinee', event => this.onClickAppelDestinee(event))
|
||||
$(html).on("click", '.button-defense', event => this.onClickDefense(event))
|
||||
$(html).on("click", '.button-defense-possession', event => this.onClickDefensePossession(event))
|
||||
$(html).on("click", '.marquer-point-possession', event => this.onClickMarquerPointPossession(event))
|
||||
$(html).on("click", '.encaissement', event => this.onClickEncaissement(event))
|
||||
$(html).on("click", '.resister-recul', event => this.onClickRecul(event))
|
||||
$(html).on("click", '.choix-particuliere', event => this.onClickChoixParticuliere(event))
|
||||
@@ -187,7 +191,7 @@ export default class ChatRollResult {
|
||||
console.log('onAppelChanceSuccess savedRoll', savedRoll)
|
||||
reRoll.type.retry = true
|
||||
await this.updateChatMessage(chatMessage, reRoll)
|
||||
const callbacks = [r => ChatUtility.removeChatMessageId(chatMessage.id)]
|
||||
const callbacks = [ChatUtility.remover(chatMessage)]
|
||||
|
||||
// TODO: annuler les effets
|
||||
switch (reRoll.type.current) {
|
||||
@@ -226,12 +230,28 @@ export default class ChatRollResult {
|
||||
async onClickDefense(event) {
|
||||
const chatMessage = ChatUtility.getChatMessage(event)
|
||||
const savedRoll = this.loadChatMessageRoll(chatMessage)
|
||||
RollBasicParts.restore(savedRoll)
|
||||
const attackerRoll = savedRoll.attackerRoll
|
||||
RollDialog.loadRollData(attackerRoll)
|
||||
this.getCombat(attackerRoll)?.defenseV2(attackerRoll,
|
||||
[roll => { ChatUtility.removeChatMessageId(chatMessage.id) }]
|
||||
[ChatUtility.remover(chatMessage)]
|
||||
)
|
||||
}
|
||||
|
||||
async onClickDefensePossession(event) {
|
||||
const chatMessage = ChatUtility.getChatMessage(event)
|
||||
const savedRoll = this.loadChatMessageRoll(chatMessage)
|
||||
await RdDPossessionV2.rollDefensePossession(savedRoll, chatMessage)
|
||||
}
|
||||
|
||||
async onClickMarquerPointPossession(event) {
|
||||
const chatMessage = ChatUtility.getChatMessage(event)
|
||||
const savedRoll = this.loadChatMessageRoll(chatMessage)
|
||||
RollBasicParts.restore(savedRoll)
|
||||
await RdDPossessionV2.onMarquerPointPossession(savedRoll)
|
||||
ChatUtility.remover(chatMessage)()
|
||||
}
|
||||
|
||||
async onClickEncaissement(event) {
|
||||
const chatMessage = ChatUtility.getChatMessage(event)
|
||||
const isMessageDemande = ChatUtility.getMessageData(chatMessage, 'demande-defense')
|
||||
@@ -254,7 +274,7 @@ export default class ChatRollResult {
|
||||
break
|
||||
}
|
||||
if (isMessageDemande) {
|
||||
ChatUtility.removeChatMessageId(chatMessage.id)
|
||||
ChatUtility.remover(chatMessage)()
|
||||
} else {
|
||||
savedRoll.done.encaissement = true
|
||||
await this.updateChatMessage(chatMessage, savedRoll)
|
||||
|
||||
@@ -11,7 +11,7 @@ export class RollBasicParts {
|
||||
rollData.ids.sceneId = rollData.ids.sceneId ?? canvas.scene.id
|
||||
rollData.active = RollBasicParts.getTokenActor(rollData)
|
||||
rollData.opponent = RollBasicParts.getTokenActorOpponent(rollData)
|
||||
if (rollData.type.opposed == undefined) {
|
||||
if (rollData.type && rollData.type.opposed == undefined) {
|
||||
rollData.type.opposed = rollData.opponent != null
|
||||
}
|
||||
}
|
||||
@@ -46,10 +46,10 @@ export class RollBasicParts {
|
||||
type: rollData.type,
|
||||
ids: {
|
||||
sceneId: rollData.ids.sceneId,
|
||||
actorId: rollData.active.id,
|
||||
actorTokenId: rollData.active.tokenId,
|
||||
opponentId: isOpposed ? rollData.opponent.id : undefined,
|
||||
opponentTokenId: isOpposed ? rollData.opponent.tokenId : undefined,
|
||||
actorId: rollData.ids.actorId,
|
||||
actorTokenId: rollData.ids.actorTokenId,
|
||||
opponentId: isOpposed ? rollData.ids.opponentId : undefined,
|
||||
opponentTokenId: isOpposed ? rollData.ids.opponentTokenId : undefined,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,15 +318,33 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
|
||||
return rollData
|
||||
}
|
||||
|
||||
static saveParts(rollData, impacts) {
|
||||
static saveParts(rollData, impacts = undefined) {
|
||||
if (rollData == undefined) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
function saveBasics(from, to) {
|
||||
if (from) {
|
||||
to.passeArme = from.passeArme
|
||||
to.rolled = from.rolled
|
||||
to.particuliere = from.particuliere
|
||||
to.result = from.result
|
||||
to.done = from.done ?? {}
|
||||
to.dmg = from.dmg
|
||||
if (from.attackerRoll) {
|
||||
to.attackerRoll = {}
|
||||
saveBasics(from.attackerRoll, to.attackerRoll)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const target = RollBasicParts.initFrom(rollData)
|
||||
ROLL_PARTS.filter(p => p.isActive(rollData))
|
||||
.forEach(p => p.storeClean(rollData, target))
|
||||
target.attackerRoll = rollData.attackerRoll
|
||||
target.rolled = rollData.rolled
|
||||
target.result = rollData.result
|
||||
target.done = rollData.done ?? {}
|
||||
target.dmg = rollData.dmg
|
||||
if (rollData.current) {
|
||||
// stockage de current
|
||||
ROLL_PARTS.filter(p => p.isActive(rollData))
|
||||
.forEach(p => p.storeClean(rollData, target))
|
||||
}
|
||||
saveBasics(rollData, target)
|
||||
if (impacts) {
|
||||
target.reverse = {
|
||||
active: impacts.active?.reverseImpacts(),
|
||||
@@ -334,6 +352,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
|
||||
}
|
||||
}
|
||||
return target
|
||||
|
||||
}
|
||||
|
||||
constructor(rollData, rollOptions) {
|
||||
@@ -352,7 +371,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
|
||||
}
|
||||
this.chatRollResult = new ChatRollResult()
|
||||
this.selectType()
|
||||
this.registerHooks(rollData);
|
||||
this.registerHooks(rollData)
|
||||
}
|
||||
|
||||
registerHooks(rollData) {
|
||||
|
||||
@@ -16,8 +16,8 @@ export class RollPartDefense extends RollPartSelect {
|
||||
get code() { return PART_DEFENSE }
|
||||
get section() { return ROLLDIALOG_SECTION.CHOIX }
|
||||
|
||||
isValid(rollData) { return rollData.attackerRoll != undefined }
|
||||
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) }
|
||||
isValid(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
|
||||
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
|
||||
|
||||
static getDiffAttaque(attackerRoll) {
|
||||
// TODO: rollDataV2?
|
||||
|
||||
@@ -62,7 +62,7 @@ export class RollPartPossession extends RollPartSelect {
|
||||
})
|
||||
button?.addEventListener("click", async e => {
|
||||
e.preventDefault()
|
||||
await RdDPossessionV2.createPossession(rollData.active.actor, rollData.opponent.actor)
|
||||
await RdDPossessionV2.createPossessionIfMissing(rollData.active.actor, rollData.opponent.actor)
|
||||
rollDialog.render()
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { RDD_CONFIG } from "../constants.js"
|
||||
import { Misc } from "../misc.js"
|
||||
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
|
||||
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"
|
||||
import { demiReveStatusEffect, StatusEffects } from "../settings/status-effects.js"
|
||||
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
||||
import { StatusEffects } from "../settings/status-effects.js"
|
||||
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE, ROLL_TYPE_POSSESSION } from "./roll-constants.mjs"
|
||||
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
|
||||
|
||||
export const PART_SIGN = "sign"
|
||||
@@ -25,7 +26,7 @@ export class RollPartSign extends RollPart {
|
||||
}
|
||||
|
||||
isCombat(rollData) {
|
||||
return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE].includes(rollData.type.current) || rollData.type.isCombat
|
||||
return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE, ROLL_TYPE_POSSESSION].includes(rollData.type.current)
|
||||
}
|
||||
|
||||
prepareContext(rollData) {
|
||||
@@ -40,7 +41,7 @@ export class RollPartSign extends RollPart {
|
||||
const isCombat = this.isCombat(rollData)
|
||||
const current = this.getCurrent(rollData)
|
||||
current.armeDisparate = isCombat && current.armeDisparate
|
||||
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
|
||||
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
|
||||
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it, isCombat) > 0, current.forceRequise ?? 0)
|
||||
.map(it => { return { img: it.img, label: game.i18n.localize(it.name) } })
|
||||
current.diviseur = 1
|
||||
@@ -67,7 +68,16 @@ export class RollPartSign extends RollPart {
|
||||
}
|
||||
|
||||
isAttaqueFinesse(rollData) {
|
||||
return ROLL_TYPE_DEFENSE == rollData.type.current && rollData.attaque?.particuliere == 'finesse'
|
||||
const attackerRoll = rollData.attackerRoll
|
||||
if (rollData.attackerRoll){
|
||||
switch (rollData.type.current) {
|
||||
case ROLL_TYPE_DEFENSE:
|
||||
return attackerRoll?.particuliere == RDD_CONFIG.particuliere.finesse.key
|
||||
case ROLL_TYPE_POSSESSION:
|
||||
return RdDPossessionV2.isDefense(rollData.type.possession.action) && attackerRoll?.particuliere == RDD_CONFIG.particuliere.finesse.key
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
isParadeArmeDisparate(current) {
|
||||
|
||||
@@ -7,7 +7,7 @@ export class RollTypePossession extends RollType {
|
||||
get name() { return "Posséder" }
|
||||
|
||||
prepare(rollData) {
|
||||
rollData.type.possession = RdDPossessionV2.getPossessionDetails(rollData, rollData.type.possession?.action)
|
||||
rollData.type.possession = RdDPossessionV2.getTypePossessionAction(rollData, rollData.type.possession?.action)
|
||||
}
|
||||
|
||||
title(rollData) {
|
||||
|
||||
Reference in New Issue
Block a user