Working on Skills and some fixes

- Added Skills to character sheet
- Added migration to old skills
- Added icon on skills
- Added actor.isNpc
- Money out of system
This commit is contained in:
Vlyan
2023-01-08 15:12:22 +01:00
parent 1ec9e65ca5
commit 710afd9804
22 changed files with 302 additions and 145 deletions

View File

@@ -47,8 +47,11 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
// Min rank = 1
this.actor.system.identity.school_rank = Math.max(1, this.actor.system.identity.school_rank);
// Split Skills
sheetData.data.skillCategories = this._splitSkills(sheetData);
// Split Money
sheetData.data.system.money = this._zeniToMoney(this.actor.system.zeni);
sheetData.data.money = this._zeniToMoney(this.actor.system.zeni);
// Split school advancements by rank, and calculate xp spent and add it to total
this._prepareSchoolAdvancement(sheetData);
@@ -64,6 +67,28 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
return sheetData;
}
/**
* Split Skills item by categories
* @private
*/
_splitSkills(sheetData) {
const skill = CONFIG.l5r5e.skillCategories.reduce((acc,curr) => (acc[curr] = [], acc), {});
sheetData.items.forEach((item) => {
if (item.type === "skill") {
const cat = item.system.category ?? "artisan";
skill[cat].push(item);
}
});
// Sort Items by name
Object.values(skill).forEach(section => {
section.sort((a, b) => a.name.localeCompare(b.name));
});
return skill;
}
/**
* Subscribe to events from the sheet.
* @param {jQuery} html HTML content of the sheet.
@@ -180,6 +205,12 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
* @param formData
*/
_updateObject(event, formData) {
// Update items ranks
const formDataObj = foundry.utils.expandObject(formData);
if (formDataObj.skillsValues) {
this._updateItemsRank(foundry.utils.expandObject(formDataObj.skillsValues));
}
// Clan tag trim if autocomplete in school name
if (
formData["autoCompleteListName"] === "system.identity.school" &&
@@ -194,16 +225,12 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
}
// Store money in Zeni
if (formData["system.money.koku"] || formData["system.money.bu"] || formData["system.money.zeni"]) {
if (formData["money.koku"] || formData["money.bu"] || formData["money.zeni"]) {
formData["system.zeni"] = this._moneyToZeni(
formData["system.money.koku"] || 0,
formData["system.money.bu"] || 0,
formData["system.money.zeni"] || 0
formData["money.koku"] || 0,
formData["money.bu"] || 0,
formData["money.zeni"] || 0
);
// Remove fake money object
delete formData["system.money.koku"];
delete formData["system.money.bu"];
delete formData["system.money.zeni"];
}
// Save computed values
@@ -219,6 +246,20 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
return super._updateObject(event, formData);
}
/**
* Update embedded items ranks
* @param {Object<String:String>} itemsValues items new values "ids: rank"
*/
_updateItemsRank(itemsValues) {
Object.entries(itemsValues).forEach(([key, rank]) => {
const item = this.actor.items.get(key);
if (!item || item.system.rank === rank) {
return;
}
item.update({ "system.rank": rank });
});
}
/**
* Convert a sum in Zeni to Zeni, Bu and Koku
* @param {number} zeni