forked from public/foundryvtt-reve-de-dragon
Nouveau roll-dialog: mode attaque / defense
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import { SYSTEM_RDD } from "../constants.js";
|
||||
import { Misc } from "../misc.js";
|
||||
import { RdDBonus } from "../rdd-bonus.js";
|
||||
|
||||
export const STATUSES = {
|
||||
StatusGrappling: 'grappling',
|
||||
@@ -12,9 +14,11 @@ export const STATUSES = {
|
||||
StatusBleeding: 'bleeding',
|
||||
StatusDead: 'dead',
|
||||
StatusDemiReve: 'demi-reve',
|
||||
StatusForceWeak: 'force insuffisante',
|
||||
}
|
||||
|
||||
const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg' };
|
||||
const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg' };
|
||||
const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg' };
|
||||
const rddStatusEffects = [
|
||||
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
|
||||
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
|
||||
@@ -29,15 +33,15 @@ const rddStatusEffects = [
|
||||
|
||||
{ rdd: true, id: STATUSES.StatusBleeding, name: 'EFFECT.StatusBleeding', img: 'icons/svg/blood.svg' },
|
||||
{ rdd: true, id: STATUSES.StatusDead, name: 'EFFECT.StatusDead', img: 'icons/svg/skull.svg' },
|
||||
demiReveStatusEffect
|
||||
demiReveStatusEffect,
|
||||
forceWeakStatusEffect
|
||||
];
|
||||
|
||||
const statusDemiSurprise = new Set([STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained])
|
||||
const statusDemiSurprise = new Set([STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained, STATUSES.StatusForceWeak])
|
||||
const statusSurpriseTotale = new Set([STATUSES.StatusUnconscious, STATUSES.StatusBlind, STATUSES.StatusComma])
|
||||
|
||||
export class StatusEffects extends FormApplication {
|
||||
|
||||
|
||||
static onReady() {
|
||||
const rddEffectIds = rddStatusEffects.map(it => it.id);
|
||||
rddStatusEffects.forEach(it => {
|
||||
@@ -67,6 +71,27 @@ export class StatusEffects extends FormApplication {
|
||||
console.log('statusEffects', CONFIG.statusEffects);
|
||||
}
|
||||
|
||||
static isSurprise(effect) {
|
||||
return StatusEffects.niveauSurprise(effect, true) > 0
|
||||
}
|
||||
|
||||
static getSurprise(effects, isCombat = undefined) {
|
||||
return StatusEffects.typeSurprise(
|
||||
effects.map(it => StatusEffects.niveauSurprise(it, isCombat))
|
||||
.reduce(Misc.sum(), 0)
|
||||
)
|
||||
}
|
||||
|
||||
static getActorEffetSurprise(actor, forceRequise) {
|
||||
const effets = actor?.getEffects(StatusEffects.isSurprise, forceRequise) ?? []
|
||||
return {
|
||||
effets: effets,
|
||||
surprise: effets.length > 0
|
||||
? RdDBonus.find(StatusEffects.getSurprise(effets, true))
|
||||
: undefined
|
||||
}
|
||||
}
|
||||
|
||||
static niveauSurprise(effect, isCombat) {
|
||||
if (statusSurpriseTotale.intersects(effect.statuses)) {
|
||||
return 2
|
||||
|
Reference in New Issue
Block a user