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 BeastformEffect from './beastformEffect.mjs';
import CompanionEffect from './companionEffect.mjs';
import HordeEffect from './hordeEffect.mjs';
export { BaseEffect, BeastformEffect, HordeEffect };
@ -7,5 +8,6 @@ export { BaseEffect, BeastformEffect, HordeEffect };
export const config = {
base: BaseEffect,
beastform: BeastformEffect,
companion: CompanionEffect,
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 (
item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.foundation ||
(item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.specialization &&
subclassState >= 2) ||
(item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.specialization && subclassState >= 2) ||
(item.system.identifier === CONFIG.DH.ITEM.featureSubTypes.mastery && subclassState >= 3)
) {
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() {
this.evasion += this.class.value?.system?.evasion ?? 0;

View file

@ -108,11 +108,21 @@ export default class DhCompanion extends BaseDataActor {
get proficiency() {
return this.partner?.system?.proficiency ?? 1;
}
isItemValid() {
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() {
this.attack.roll.bonus = this.partner?.system?.spellcastModifier ?? 0;

View file

@ -71,6 +71,25 @@ export default class DhpActor extends Actor {
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 */
async _preCreate(data, options, user) {
if ((await super._preCreate(data, options, user)) === false) return false;