diff --git a/module/applications/dialogs/d20RollDialog.mjs b/module/applications/dialogs/d20RollDialog.mjs index 5ef9e005..d872a1f8 100644 --- a/module/applications/dialogs/d20RollDialog.mjs +++ b/module/applications/dialogs/d20RollDialog.mjs @@ -104,7 +104,7 @@ export default class D20RollDialog extends HandlebarsApplicationMixin(Applicatio context.roll = this.roll; context.rollType = this.roll?.constructor.name; context.rallyDie = this.roll.rallyChoices; - const experiences = this.config.data?.experiences || {}; + const experiences = this.config.data?.system.experiences || {}; context.experiences = Object.keys(experiences).map(id => ({ id, ...experiences[id] @@ -185,7 +185,7 @@ export default class D20RollDialog extends HandlebarsApplicationMixin(Applicatio extKey: button.dataset.key, key: this.config?.data?.parent?.isNPC ? 'fear' : 'hope', value: 1, - name: this.config.data?.experiences?.[button.dataset.key]?.name + name: this.config.data?.system.experiences?.[button.dataset.key]?.name } ]; this.render(); diff --git a/module/applications/levelup/characterLevelup.mjs b/module/applications/levelup/characterLevelup.mjs index 623f0308..f7ef2ffa 100644 --- a/module/applications/levelup/characterLevelup.mjs +++ b/module/applications/levelup/characterLevelup.mjs @@ -280,11 +280,19 @@ export default class DhCharacterLevelUp extends LevelUpBase { break; case 'experience': if (!advancement[choiceKey]) advancement[choiceKey] = []; + const allExperiences = { + ...this.actor.system.experiences, + ...Object.values(this.levelup.levels).reduce((acc, level) => { + for (const key of Object.keys(level.achievements.experiences)) { + acc[key] = level.achievements.experiences[key]; + } + + return acc; + }, {}) + }; const data = checkbox.data.map(data => { - const experience = Object.keys(this.actor.system.experiences).find( - x => x === data - ); - return this.actor.system.experiences[experience]?.name ?? ''; + const experience = Object.keys(allExperiences).find(x => x === data); + return allExperiences[experience]?.name ?? ''; }); advancement[choiceKey].push({ data: data, value: checkbox.value }); break; diff --git a/module/applications/levelup/levelup.mjs b/module/applications/levelup/levelup.mjs index c3cc6e81..ba6110cc 100644 --- a/module/applications/levelup/levelup.mjs +++ b/module/applications/levelup/levelup.mjs @@ -357,11 +357,23 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2) const experienceIncreaseTagify = htmlElement.querySelector('.levelup-experience-increases'); if (experienceIncreaseTagify) { + const allExperiences = { + ...this.actor.system.experiences, + ...Object.values(this.levelup.levels).reduce((acc, level) => { + for (const key of Object.keys(level.achievements.experiences)) { + acc[key] = level.achievements.experiences[key]; + } + + return acc; + }, {}) + }; tagifyElement( experienceIncreaseTagify, - Object.keys(this.actor.system.experiences).reduce((acc, id) => { - const experience = this.actor.system.experiences[id]; - acc.push({ id: id, label: experience.name }); + Object.keys(allExperiences).reduce((acc, id) => { + const experience = allExperiences[id]; + if (experience.name) { + acc.push({ id: id, label: experience.name }); + } return acc; }, []), diff --git a/module/dice/d20Roll.mjs b/module/dice/d20Roll.mjs index 387123c4..0256f281 100644 --- a/module/dice/d20Roll.mjs +++ b/module/dice/d20Roll.mjs @@ -98,10 +98,10 @@ export default class D20Roll extends DHRoll { this.options.roll.modifiers = this.applyBaseBonus(); this.options.experiences?.forEach(m => { - if (this.options.data.experiences?.[m]) + if (this.options.data.system?.experiences?.[m]) this.options.roll.modifiers.push({ - label: this.options.data.experiences[m].name, - value: this.options.data.experiences[m].value + label: this.options.data.system.experiences[m].name, + value: this.options.data.system.experiences[m].value }); });