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:
@@ -230,6 +230,10 @@ export class BaseCharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
itemData = item.toObject(true);
|
||||
break;
|
||||
|
||||
case "skill":
|
||||
itemData.system.rank = 0;
|
||||
break;
|
||||
|
||||
case "technique":
|
||||
// School_ability and mastery_ability, allow only 1 per type
|
||||
if (CONFIG.l5r5e.techniques.get(itemData.system.technique_type)?.type === "school") {
|
||||
|
||||
@@ -98,7 +98,7 @@ export class CharacterGeneratorDialog extends FormApplication {
|
||||
}));
|
||||
return {
|
||||
...(await super.getData(options)),
|
||||
isNpc: this.actor.type === "npc",
|
||||
isNpc: this.actor.isNpc,
|
||||
clanList: [{ id: "random", label: game.i18n.localize("l5r5e.global.random") }, ...clans],
|
||||
genderList: [
|
||||
{ id: "random", label: game.i18n.localize("l5r5e.global.random") },
|
||||
|
||||
@@ -292,7 +292,7 @@ export class CharacterGenerator {
|
||||
}
|
||||
) {
|
||||
const actorDatas = actor.system;
|
||||
const isNpc = actor.type === "npc";
|
||||
const isNpc = actor.isNpc;
|
||||
|
||||
// Need to set some required values
|
||||
this.data.age = actorDatas.identity.age || CharacterGenerator.genAge(this.data.avgRingsValue);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user