export class RMSSItem extends Item { /** @override */ prepareData() { // Prepare data for the item. Calling the super version of this executes // the following, in order: data reset (to clear active effects), // prepareBaseData(), prepareEmbeddedDocuments() (including active effects), // prepareDerivedData(). console.log(`rmss | item.js | prepareData for: ${this.name}`); super.prepareData(); } // Set the icon images for newly created images. async _preCreate(data, options, userId) { await super._preCreate(data, options, userId); // Do not set on copied items if they have a custom Icon. if (!data.name.includes("(Copy)")) { if (this.type === "armor") { await this.updateSource({img: "systems/rmss/assets/default/armor.svg"}); } else if (this.type === "weapon") { await this.updateSource({img: "systems/rmss/assets/default/weapon.svg"}); } else if (this.type === "skill") { await this.updateSource({img: "systems/rmss/assets/default/skill.svg"}); } else if (this.type === "skill_category") { await this.updateSource({img: "systems/rmss/assets/default/skill_category.svg"}); } else if (this.type === "spell") { await this.updateSource({img: "systems/rmss/assets/default/spell.svg"}); } else if (this.type === "herb_or_poison") { await this.updateSource({img: "systems/rmss/assets/default/herb_or_poison.svg"}); } else if (this.type === "transport") { await this.updateSource({img: "systems/rmss/assets/default/transport.svg"}); } } } prepareDerivedData() { const itemData = this; const systemData = itemData.system; const flags = itemData.flags.rmss || {}; // Make separate methods for each item type to keep things organized. if (itemData.type === "skill") { this._prepareSkillCategoryData(itemData); } if (itemData.type === "skill") { this._prepareSkillData(itemData); } } _prepareSkillCategoryData(itemData) { if (itemData.type !== "skill_category") return; console.log(`rmss | item.js | Preparing Skill Category Data for: ${itemData.name}`); // Calculate Skill Category Total Bonus this.calculateSkillCategoryTotalBonus(itemData); } _prepareSkillData(itemData) { if (itemData.type !== "skill") return; console.log(`rmss | item.js | Preparing Skill Data for: ${itemData.name}`); // Make modifications to data here. For example: // const systemData = itemData.system; // Calculate Skill Category Bonus this.calculateSelectedSkillCategoryBonus(itemData); // Calculate Skill Total Bonus this.calculateSkillTotalBonus(itemData); } calculateSkillCategoryTotalBonus(itemData) { if (this.type === "skill_category") { console.log(`rmss | item.js | Calculating Skill Category Total Bonus for: ${itemData.name}`); const systemData = itemData.system; itemData.system.total_bonus = Number(systemData.rank_bonus) + Number(systemData.stat_bonus) + Number(systemData.prof_bonus) + Number(systemData.special_bonus_1) + Number(systemData.special_bonus_2); } } calculateSkillTotalBonus(itemData) { if (this.type === "skill") { const systemData = itemData.system; console.log(`rmss | item.js | Calculating Skill Total Bonus for: ${itemData.name}`); itemData.system.total_bonus = Number(systemData.rank_bonus) + Number(systemData.category_bonus) + Number(systemData.item_bonus) + Number(systemData.special_bonus_1) + Number(systemData.special_bonus_2); } } calculateSelectedSkillCategoryBonus(itemData) { if (this.isEmbedded === null) { console.log(`rmss | item.js | Skill ${this.name} has no owner. Not calculating Skill Category bonus`); } else { const items = this.parent.items; console.log(`rmss | item.js | Skill ${this.name} has owner, calculating skill category bonus.`); for (const item of items) { if (item.type === "skill_category" && item._id === itemData.system.category) { console.log(`rmss | item.js | Calculating Skill Category bonus for skill: ${this.name}`); this.system.category_bonus = item.system.total_bonus; } } } } }