mirror of
https://github.com/fzumpe/foundry-dnd5e-adaptive-resistances.git
synced 2026-06-06 21:10:02 +02:00
70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
import {
|
|
MODULE_ID,
|
|
EFFECT_FLAG,
|
|
ADAPTATION_CONFIG,
|
|
ADAPTATION_TYPES,
|
|
PROFANE_DAMAGE_TYPES,
|
|
PROFANE_BYPASSES
|
|
} from "./constants.js";
|
|
import { getDamageTypeLabel } from "./utils.js";
|
|
|
|
export async function removeOldAdaptiveEffects(actor) {
|
|
const oldEffects = actor.effects.filter(effect => effect.getFlag(MODULE_ID, EFFECT_FLAG));
|
|
if (!oldEffects.length) return;
|
|
|
|
await actor.deleteEmbeddedDocuments("ActiveEffect", oldEffects.map(effect => effect.id));
|
|
}
|
|
|
|
function getAdaptiveChanges(config, damageType) {
|
|
const changes = [
|
|
{
|
|
key: config.traitKey,
|
|
mode: CONST.ACTIVE_EFFECT_MODES.ADD,
|
|
value: damageType,
|
|
priority: 20
|
|
}
|
|
];
|
|
|
|
if (PROFANE_DAMAGE_TYPES.includes(damageType)) {
|
|
const bypassKey = config.traitKey.replace(/\.value$/, ".bypasses");
|
|
|
|
for (const bypass of PROFANE_BYPASSES) {
|
|
changes.push({
|
|
key: bypassKey,
|
|
mode: CONST.ACTIVE_EFFECT_MODES.ADD,
|
|
value: bypass,
|
|
priority: 20
|
|
});
|
|
}
|
|
}
|
|
|
|
return changes;
|
|
}
|
|
|
|
export async function createAdaptiveEffect(actor, damageType, adaptationType = ADAPTATION_TYPES.RESISTANCE) {
|
|
const config = ADAPTATION_CONFIG[adaptationType] ?? ADAPTATION_CONFIG[ADAPTATION_TYPES.RESISTANCE];
|
|
const label = getDamageTypeLabel(damageType);
|
|
|
|
await actor.createEmbeddedDocuments("ActiveEffect", [
|
|
{
|
|
name: game.i18n.format(config.effectNameKey, { type: label }),
|
|
icon: config.icon,
|
|
disabled: false,
|
|
transfer: false,
|
|
flags: {
|
|
[MODULE_ID]: {
|
|
[EFFECT_FLAG]: {
|
|
adaptationType: config.id,
|
|
damageType
|
|
}
|
|
}
|
|
},
|
|
changes: getAdaptiveChanges(config, damageType)
|
|
}
|
|
]);
|
|
}
|
|
|
|
export async function createAdaptiveResistanceEffect(actor, damageType) {
|
|
return createAdaptiveEffect(actor, damageType, ADAPTATION_TYPES.RESISTANCE);
|
|
}
|