import { SYSTEM } from "../config/system.mjs" export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields const schema = {} const requiredInteger = { required: true, nullable: false, integer: true } schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) schema.base = new fields.StringField({ required: true, initial: "WIS" }) schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.diceEvolved = new fields.BooleanField({ required: true, initial: true }) schema.rollFailed = new fields.BooleanField({ required: true, initial: false }) return schema } /** @override */ static LOCALIZATION_PREFIXES = ["CTHULHUETERNAL.Skill"] prepareDerivedData() { super.prepareDerivedData(); this.skillTotal = this.computeBase(); } computeBase() { let actor = this.parent?.actor; if (!actor) { return `${this.base } + ${ String(this.bonus)}`; } // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) const base = this.base; let baseSplit = base.split(","); let baseSplitLength = baseSplit.length; if ( baseSplitLength > 0) { // Select the max stat value from the parent actor let maxStat = 0; for (let i = 0; i < baseSplitLength; i++) { const stat = baseSplit[i]; const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; if (statValue > maxStat) { maxStat = statValue; } } return maxStat; } else { // Split with + calculate the total baseSplit = base.split("+"); baseSplitLength = baseSplit.length; if ( baseSplitLength > 0) { let total = 0; for (let i = 0; i < baseSplitLength; i++) { const stat = baseSplit[i]; const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; total += statValue; } return total } } return `${this.base } + ${ String(this.bonus)}`; } }