2024-07-26 09:20:48 +02:00
|
|
|
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") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/armor.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "weapon") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/weapon.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "skill") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/skill.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "skill_category") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/skill_category.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "spell") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/spell.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "herb_or_poison") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/herb_or_poison.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
else if (this.type === "transport") {
|
2024-07-26 12:51:32 +02:00
|
|
|
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/transport.svg"});
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
{
|
2024-07-26 14:15:51 +02:00
|
|
|
const items = this.parent?.items;
|
2024-07-26 09:20:48 +02:00
|
|
|
console.log(`rmss | item.js | Skill ${this.name} has owner, calculating skill category bonus.`);
|
2024-07-26 14:15:51 +02:00
|
|
|
if (items) {
|
|
|
|
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;
|
|
|
|
}
|
2024-07-26 09:20:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|