Added so effects can be applied from a partner to a companion and vice versa

This commit is contained in:
WBHarry 2025-12-26 03:21:28 +01:00
parent fa21baf8bf
commit f3cf850355
6 changed files with 55 additions and 3 deletions

View file

@ -1,5 +1,6 @@
import BaseEffect from './baseEffect.mjs'; import BaseEffect from './baseEffect.mjs';
import BeastformEffect from './beastformEffect.mjs'; import BeastformEffect from './beastformEffect.mjs';
import CompanionEffect from './companionEffect.mjs';
import HordeEffect from './hordeEffect.mjs'; import HordeEffect from './hordeEffect.mjs';
export { BaseEffect, BeastformEffect, HordeEffect }; export { BaseEffect, BeastformEffect, HordeEffect };
@ -7,5 +8,6 @@ export { BaseEffect, BeastformEffect, HordeEffect };
export const config = { export const config = {
base: BaseEffect, base: BaseEffect,
beastform: BeastformEffect, beastform: BeastformEffect,
companion: CompanionEffect,
horde: HordeEffect horde: HordeEffect
}; };

View file

@ -0,0 +1,11 @@
import BaseEffect from './baseEffect.mjs';
export default class CompanionEffect extends BaseEffect {
static defineSchema() {
const fields = foundry.data.fields;
return {
...BaseEffect.defineSchema()
};
}
}

View file

@ -453,8 +453,7 @@ export default class DhCharacter extends BaseDataActor {
if ( if (
item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.foundation || item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.foundation ||
(item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.specialization && (item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.specialization && subclassState >= 2) ||
subclassState >= 2) ||
(item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.mastery && subclassState >= 3) (item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.mastery && subclassState >= 3)
) { ) {
return true; return true;
@ -573,6 +572,16 @@ export default class DhCharacter extends BaseDataActor {
} }
} }
allApplicableEffects(baseEffects) {
if (!this.companion) return baseEffects;
const effects = [
...Array.from(baseEffects),
...Array.from(this.companion.getBaseApplicableEffects()).filter(x => x.type === 'companion')
];
return effects;
}
prepareBaseData() { prepareBaseData() {
this.evasion += this.class.value?.system?.evasion ?? 0; this.evasion += this.class.value?.system?.evasion ?? 0;

View file

@ -113,6 +113,16 @@ export default class DhCompanion extends BaseDataActor {
return false; return false;
} }
allApplicableEffects(baseEffects) {
if (!this.partner) return baseEffects;
const effects = [
...Array.from(baseEffects),
...Array.from(this.partner.getBaseApplicableEffects()).filter(x => x.type === 'companion')
];
return effects;
}
prepareBaseData() { prepareBaseData() {
this.attack.roll.bonus = this.partner?.system?.spellcastModifier ?? 0; this.attack.roll.bonus = this.partner?.system?.spellcastModifier ?? 0;

View file

@ -71,6 +71,25 @@ export default class DhpActor extends Actor {
return doc; return doc;
} }
getBaseApplicableEffects() {
const effects = [...this.effects];
if (CONFIG.ActiveEffect.legacyTransferral) return;
for (const item of this.items) {
for (const effect of item.effects) {
if (effect.transfer) effects.push(effect);
}
}
return effects;
}
allApplicableEffects() {
const effects = this.getBaseApplicableEffects();
return this.system.allApplicableEffects?.(effects) ?? effects;
}
/**@inheritdoc */ /**@inheritdoc */
async _preCreate(data, options, user) { async _preCreate(data, options, user) {
if ((await super._preCreate(data, options, user)) === false) return false; if ((await super._preCreate(data, options, user)) === false) return false;

View file

@ -263,6 +263,7 @@
}, },
"ActiveEffect": { "ActiveEffect": {
"beastform": {}, "beastform": {},
"companion": {},
"horde": {} "horde": {}
}, },
"Combat": { "Combat": {