diff --git a/lang/en.json b/lang/en.json index 53e15be5..a96598bc 100644 --- a/lang/en.json +++ b/lang/en.json @@ -169,6 +169,9 @@ "Ex3.Tracking": "Tracking", "Ex3.Combat": "Combat", "Ex3.AnyCombatAbility": "Any Combat Ability", + "Ex3.PhysicalAttribute": "Physical Attribute", + "Ex3.MentalAttribute": "Mental Attributes", + "Ex3.SocialAttribute": "Social Attribute", "Ex3.Defense": "Defense", "Ex3.SelfDefensePenalty": "Self Defense Penalty", "Ex3.TargetDefensePenalty": "Target Defense Penalty", diff --git a/module/apps/character-builder.js b/module/apps/character-builder.js index d709105b..e2301dd6 100644 --- a/module/apps/character-builder.js +++ b/module/apps/character-builder.js @@ -1082,10 +1082,28 @@ export default class CharacterBuilder extends FormApplication { if (itemType === 'charm') { items = items.filter(charm => { if (charm.system.numberprerequisites.number > 0) { - if (CONFIG.exaltedthird.maidens.includes(charm.system.ability)) { - return charm.system.numberprerequisites.number <= this._getMaidenCharmsNumber(charm.system.numberprerequisites.ability); + let existingCharms = 0; + if (charm.system.numberprerequisites.ability === "combat") { + existingCharms = (Object.values(this.object.character.charms)?.filter(numberCharm => ['archery', 'brawl', 'melee', 'thrown', 'war'].includes(numberCharm.system.ability)).length || 0); + } + else if(['physicalAttribute', 'mentalAttribute', 'socialAttribute'].includes(charm.system.numberprerequisites.ability)) { + if(charm.system.numberprerequisites.ability === 'physicalAttribute') { + existingCharms = (Object.values(this.object.character.charms)?.filter(numberCharm => ['strength', 'dexterity', 'stamina'].includes(numberCharm.system.ability)).length || 0); + } + if(charm.system.numberprerequisites.ability === 'mentalAttribute') { + existingCharms = (Object.values(this.object.character.charms)?.filter(numberCharm => ['intelligence', 'wits', 'perception'].includes(numberCharm.system.ability)).length || 0); + } + if(charm.system.numberprerequisites.ability === 'socialAttribute') { + existingCharms = (Object.values(this.object.character.charms)?.filter(numberCharm => ['charisma', 'appearance', 'manipulation'].includes(numberCharm.system.ability)).length || 0); + } + } + else if (CONFIG.exaltedthird.maidens.includes(charm.system.ability)) { + existingCharms = this._getMaidenCharmsNumber(charm.system.numberprerequisites.ability); + } + else { + existingCharms = (Object.values(this.object.character.charms)?.filter(numberCharm => numberCharm.system.ability === charm.system.numberprerequisites.ability).length || 0); } - if ((Object.values(this.object.character.charms)?.filter(numberCharm => numberCharm.system.ability === charm.system.numberprerequisites.ability).length || 0) < charm.system.numberprerequisites.number) { + if(existingCharms < charm.system.numberprerequisites.number) { return false; } } diff --git a/module/apps/template-importer.js b/module/apps/template-importer.js index bc9fb117..4af2c1d7 100644 --- a/module/apps/template-importer.js +++ b/module/apps/template-importer.js @@ -359,7 +359,13 @@ export default class TemplateImporter extends FormApplication { } if (requirementArray.length === 1) { var essenceRequirement = requirementArray[0].trim().split(' '); - charmData.system.ability = 'evocation'; + if(this.charmType === 'evocation') { + charmData.system.ability = 'evocation'; + } + else { + charmData.system.ability = 'universal'; + } + charmData.system.requirement = 0; charmData.system.essence = essenceRequirement[1].replace(/[^0-9]/g, ''); } if (requirementArray.length === 2) { diff --git a/templates/item/item-charm-sheet.html b/templates/item/item-charm-sheet.html index 6b63f239..80d636f4 100644 --- a/templates/item/item-charm-sheet.html +++ b/templates/item/item-charm-sheet.html @@ -952,6 +952,10 @@

{{/each}} + + + + {{/select}}