diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index e4c11a5c..c1c9aca9 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -153,13 +153,10 @@ export default class DhpActor extends Actor { async updateLevel(newLevel) { if (!['character', 'companion'].includes(this.type) || newLevel === this.system.levelData.level.changed) return; - const tiers = Object.values(game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers).tiers); - const maxLevel = tiers.reduce((acc, tier) => Math.max(acc, tier.levels.end), 0); - const multiclassMinLevel = Math.min( - maxLevel, - ...tiers.filter(t => t.options.multiclass).map(t => t.levels.start) - ); if (newLevel > this.system.levelData.level.current) { + const maxLevel = Object.values( + game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers).tiers + ).reduce((acc, tier) => Math.max(acc, tier.levels.end), 0); if (newLevel > maxLevel) { ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.tooHighLevel')); } @@ -234,19 +231,18 @@ export default class DhpActor extends Actor { this.system.multiclass.subclass.update({ 'system.featureState': subclassFeatureState.multiclass }); } - // Remove multiclass if we're removing a multiclass feature or if we're below the multiclass minimum level - // Multclasses cannot be manually removed on the sheet, so this allows recovering in the case of errors - if (multiclass || newLevel < multiclassMinLevel) { - const multiclassItems = this.items.filter( - x => - x.uuid === multiclass?.itemUuid || - x.system.isMulticlass || - (['class', 'subclass'].includes(x.system.originItemType) && x.system.multiclassOrigin) + if (multiclass) { + const multiclassItem = this.items.find(x => x.uuid === multiclass.itemUuid); + const multiclassFeatures = this.items.filter( + x => x.system.originItemType === 'class' && x.system.multiclassOrigin + ); + const subclassFeatures = this.items.filter( + x => x.system.originItemType === 'subclass' && x.system.multiclassOrigin ); this.deleteEmbeddedDocuments( 'Item', - multiclassItems.map(x => x.id) + [multiclassItem, ...multiclassFeatures, ...subclassFeatures].map(x => x.id) ); this.update({ @@ -398,7 +394,6 @@ export default class DhpActor extends Actor { const embeddedItem = await this.createEmbeddedDocuments('Item', [ { ...multiclassData, - uuid: multiclassItem.uuid, // todo: replace with setting an id and using keepId _stats: getStatsWithSource(multiclassItem), system: { ...multiclassData.system, @@ -412,7 +407,6 @@ export default class DhpActor extends Actor { await this.createEmbeddedDocuments('Item', [ { ...subclassData, - uuid: subclassItem.uuid, // todo: replace with setting an id and using keepId _stats: getStatsWithSource(subclassItem), system: { ...subclassData.system, @@ -433,7 +427,6 @@ export default class DhpActor extends Actor { const embeddedItem = await this.createEmbeddedDocuments('Item', [ { ...cardData, - uuid: cardItem.uuid, // todo: replace with setting an id and using keepId _stats: getStatsWithSource(cardItem), system: { ...cardData.system,