converting advancement to dynamic list skills

This commit is contained in:
Vlyan
2023-03-15 17:44:06 +01:00
parent a24e775001
commit 1b68d33bd2
8 changed files with 209 additions and 191 deletions

View File

@@ -24,7 +24,7 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
const sheetData = await super.getData(options);
sheetData.data.subTypesList = AdvancementSheetL5r5e.types;
sheetData.data.skillsList = game.l5r5e.HelpersL5r5e.getSkillsList(true);
sheetData.data.skillsList = game.l5r5e.HelpersL5r5e.splitSkillByCategory(await game.l5r5e.HelpersL5r5e.getSkillsItemsList(this.actor));
return sheetData;
}
@@ -82,33 +82,45 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
let name = this.object.name;
let img = this.object.img;
const getLocalItemByUuid = async (uuid) => {
const item = await fromUuid(uuid);
if (!item) {
return null;
}
if (item?.actor?._id === this.actor._id) {
return item;
}
return this.items.getName(item.name);
}
const skillItemNew = newChoice.skill ? (await getLocalItemByUuid(newChoice.skill)) : null;
const skillItemOld = oldChoice.skill ? (await getLocalItemByUuid(oldChoice.skill)) : null;
// Modify image to reflect choice
if (newChoice.ring) {
name = game.i18n.localize(`l5r5e.rings.${newChoice.ring}`) + "+1";
img = `systems/l5r5e/assets/icons/rings/${newChoice.ring}.svg`;
} else if (newChoice.skill) {
name =
game.i18n.localize(`l5r5e.skills.${CONFIG.l5r5e.skills.get(newChoice.skill)}.${newChoice.skill}`) +
"+1";
} else if (newChoice.skill && skillItemNew) {
name = skillItemNew.name +"+1";
img = `systems/l5r5e/assets/dices/default/skill_blank.svg`;
}
// Object embed in actor ?
const actor = this.document.actor;
if (actor) {
if (newChoice.skill && !skillItemNew.actor) {
ui.notifications.warn(`Unable to find "${skillItemNew?.name}" on this actor`);
return;
}
const actorData = foundry.utils.duplicate(actor.system);
let skillCatId = null;
// Old choices
if (oldChoice.ring) {
actorData.rings[oldChoice.ring] = Math.max(1, actorData.rings[oldChoice.ring] - 1);
}
if (oldChoice.skill) {
skillCatId = CONFIG.l5r5e.skills.get(oldChoice.skill);
actorData.skills[skillCatId][oldChoice.skill] = Math.max(
0,
actorData.skills[skillCatId][oldChoice.skill] - 1
);
if (oldChoice.skill && skillItemOld) {
await skillItemOld.update({ "system.rank": Math.max(0, skillItemOld.system.rank - 1) });
}
// new choices
@@ -119,15 +131,11 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
game.i18n.localize(`l5r5e.rings.${newChoice.ring}`) +
` +1 (${actorData.rings[newChoice.ring] - 1} -> ${actorData.rings[newChoice.ring]})`;
}
if (newChoice.skill) {
skillCatId = CONFIG.l5r5e.skills.get(newChoice.skill);
actorData.skills[skillCatId][newChoice.skill] = actorData.skills[skillCatId][newChoice.skill] + 1;
xp_used = actorData.skills[skillCatId][newChoice.skill] * CONFIG.l5r5e.xp.skillCostMultiplier;
name =
game.i18n.localize(`l5r5e.skills.${skillCatId}.${newChoice.skill}`) +
` +1 (${actorData.skills[skillCatId][newChoice.skill] - 1} -> ${
actorData.skills[skillCatId][newChoice.skill]
})`;
if (newChoice.skill && skillItemNew) {
const newRank = Math.min(9, skillItemNew.system.rank + 1);
await skillItemNew.update({ "system.rank": newRank });
xp_used = newRank * CONFIG.l5r5e.xp.skillCostMultiplier;
name = `${skillItemNew.name} +1 (${newRank - 1} -> ${newRank})`;
}
// Update Actor
@@ -141,7 +149,7 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
name: name,
img: img,
system: {
xp_used: xp_used,
xp_used,
},
});

View File

@@ -160,18 +160,6 @@ export class TechniqueSheetL5r5e extends ItemSheetL5r5e {
}
});
// List skill (not include in cat)
const unqSkillList = new Set();
skillList.forEach((s) => {
s = s?.trim();
if (!!s && CONFIG.l5r5e.skills.has(s)) {
const cat = CONFIG.l5r5e.skills.get(s);
if (!unqCatList.has(cat)) {
unqSkillList.add(s);
}
}
});
return [...unqCatList, ...unqSkillList];
return [...unqCatList];
}
}