Fixed effect removal

This commit is contained in:
WBHarry 2025-12-06 02:27:29 +01:00
parent 378c6b4c67
commit 1da5d7a1f7
3 changed files with 35 additions and 22 deletions

View file

@ -102,6 +102,8 @@ export default class SettingFeatureConfig extends HandlebarsApplicationMixin(App
return (
(await foundry.applications.api.DialogV2.input({
window: { title: game.i18n.localize('DAGGERHEART.CONFIG.SelectAction.selectType') },
position: { width: 300 },
classes: ['daggerheart', 'dh-style'],
content: await foundry.applications.handlebars.renderTemplate(
'systems/daggerheart/templates/actionTypes/actionType.hbs',
{ types: CONFIG.DH.ACTIONS.actionTypes }
@ -185,7 +187,24 @@ export default class SettingFeatureConfig extends HandlebarsApplicationMixin(App
static async removeItem(_, target) {
const { type, id } = target.dataset;
if (type === 'effect') {
await this.settings.updateSource({ [`${this.movePath}.effects.-=${id}`]: null });
const move = foundry.utils.getProperty(this.settings, this.movePath);
for (const action of move.actions) {
const remainingEffects = action.effects.filter(x => x._id !== id);
if (action.effects.length !== remainingEffects.length) {
await action.update({
effects: remainingEffects.map(x => {
const { _id, ...rest } = x;
return { ...rest, _id: _id };
})
});
}
}
await this.settings.updateSource({
[this.movePath]: {
effects: move.effects.filter(x => x.id !== id),
actions: move.actions
}
});
} else {
await this.settings.updateSource({ [`${this.actionsPath}.-=${target.dataset.id}`]: null });
}

View file

@ -459,16 +459,13 @@ export const allArmorFeatures = () => {
...armorFeatures,
...Object.keys(homebrewFeatures).reduce((acc, key) => {
const feature = homebrewFeatures[key];
const actionEffects = [];
const actions = feature.actions.map(action => {
const effects = action.effects.map(effect => feature.effects.find(x => x.id === effect._id));
actionEffects.push(...effects);
return {
...action,
effects: effects,
type: action.type
};
});
const actions = feature.actions.map(action => ({
...action,
effects: action.effects.map(effect => feature.effects.find(x => x.id === effect._id)),
type: action.type
}));
const actionEffects = actions.flatMap(a => a.effects);
const effects = feature.effects.filter(effect => !actionEffects.some(x => x.id === effect.id));
acc[key] = { ...feature, label: feature.name, effects, actions };
@ -1431,16 +1428,13 @@ export const allWeaponFeatures = () => {
...weaponFeatures,
...Object.keys(homebrewFeatures).reduce((acc, key) => {
const feature = homebrewFeatures[key];
const actionEffects = [];
const actions = feature.actions.map(action => {
const effects = action.effects.map(effect => feature.effects.find(x => x.id === effect._id));
actionEffects.push(...effects);
return {
...action,
effects: effects,
type: action.type
};
});
const actions = feature.actions.map(action => ({
...action,
effects: action.effects.map(effect => feature.effects.find(x => x.id === effect._id)),
type: action.type
}));
const actionEffects = actions.flatMap(a => a.effects);
const effects = feature.effects.filter(effect => !actionEffects.some(x => x.id === effect.id));
acc[key] = { ...feature, label: feature.name, effects, actions };