diff --git a/lang/en.json b/lang/en.json index b285a9eb..be797216 100755 --- a/lang/en.json +++ b/lang/en.json @@ -2086,7 +2086,11 @@ "FIELDS": { "maxFear": { "label": "Max Fear" }, "traitArray": { "label": "Initial Trait Modifiers" }, - "maxLoadout": { "label": "Max Cards in Loadout", "hint": "Set to blank or 0 for unlimited maximum" } + "maxLoadout": { + "label": "Max Cards in Loadout", + "hint": "Set to blank or 0 for unlimited maximum" + }, + "maxDomains": { "label": "Max Class Domains", "hint": "Max domains you can set on a class" } }, "currency": { "enabled": "Enable Overrides", @@ -2276,7 +2280,8 @@ "beastformToManyAdvantages": "You cannot select any more advantages.", "beastformToManyFeatures": "You cannot select any more features.", "beastformEquipWeapon": "You cannot use weapons while in a Beastform.", - "loadoutMaxReached": "You've reached maximum loadout. Move atleast one domain card to the vault.", + "loadoutMaxReached": "You've reached maximum loadout. Move atleast one domain card to the vault, or increase the limit in homebrew settings if desired.", + "domainMaxReached": "You've reached the maximum domains for the class. Increase the limit in homebrew settings if desired.", "insufficientResources": "You have insufficient resources", "multiclassAlreadyPresent": "You already have a class and multiclass", "subclassesAlreadyPresent": "You already have a class and multiclass subclass" diff --git a/module/applications/sheets/items/class.mjs b/module/applications/sheets/items/class.mjs index 3dce0a11..192555a8 100644 --- a/module/applications/sheets/items/class.mjs +++ b/module/applications/sheets/items/class.mjs @@ -15,7 +15,10 @@ export default class ClassSheet extends DHBaseItemSheet { { selector: '.domain-input', options: () => CONFIG.DH.DOMAIN.domains, - callback: ClassSheet.#onDomainSelect + callback: ClassSheet.#onDomainSelect, + tagifyOptions: { + maxTags: () => game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).maxDomains + } } ], dragDrop: [ diff --git a/module/data/item/class.mjs b/module/data/item/class.mjs index bca6434c..72f58b8b 100644 --- a/module/data/item/class.mjs +++ b/module/data/item/class.mjs @@ -19,7 +19,7 @@ export default class DHClass extends BaseDataItem { const fields = foundry.data.fields; return { ...super.defineSchema(), - domains: new fields.ArrayField(new fields.StringField(), { max: 2 }), + domains: new fields.ArrayField(new fields.StringField()), classItems: new ForeignDocumentUUIDArrayField({ type: 'Item', required: false }), hitPoints: new fields.NumberField({ required: true, @@ -123,6 +123,14 @@ export default class DHClass extends BaseDataItem { const allowed = await super._preUpdate(changed, options, userId); if (allowed === false) return false; + if (changed.system?.domains) { + const maxDomains = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).maxDomains; + if (changed.system.domains.length > maxDomains) { + ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.domainMaxReached')); + return false; + } + } + const paths = [ 'subclasses', 'characterGuide.suggestedPrimaryWeapon', diff --git a/module/data/settings/Homebrew.mjs b/module/data/settings/Homebrew.mjs index 29da1aa0..0251dd54 100644 --- a/module/data/settings/Homebrew.mjs +++ b/module/data/settings/Homebrew.mjs @@ -21,6 +21,13 @@ export default class DhHomebrew extends foundry.abstract.DataModel { initial: 5, label: 'DAGGERHEART.SETTINGS.Homebrew.FIELDS.maxLoadout.label' }), + maxDomains: new fields.NumberField({ + required: true, + integer: true, + min: 1, + initial: 2, + label: 'DAGGERHEART.SETTINGS.Homebrew.FIELDS.maxDomains.label' + }), traitArray: new fields.ArrayField(new fields.NumberField({ required: true, integer: true }), { initial: () => [2, 1, 1, 0, 0, -1] }), diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 34de5a5c..4de67e86 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -97,7 +97,7 @@ export const tagifyElement = (element, options, onChange, tagifyOptions = {}) => description: option.description }; }), - maxTags: maxTags, + maxTags: typeof maxTags === 'function' ? maxTags() : maxTags, dropdown: { mapValueTo: 'name', searchKeys: ['name'], diff --git a/templates/settings/homebrew-settings.hbs b/templates/settings/homebrew-settings.hbs index 152723cd..b70d63ad 100644 --- a/templates/settings/homebrew-settings.hbs +++ b/templates/settings/homebrew-settings.hbs @@ -3,6 +3,7 @@