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

@@ -216,38 +216,51 @@ export class ActorL5r5e extends Actor {
* @private
*/
async _updateActorFromAdvancement(item, isAdd) {
if (item && item.type === "advancement") {
const actor = foundry.utils.duplicate(this.system);
const itemData = item.system;
if (itemData.advancement_type === "ring") {
// Ring
if (isAdd) {
actor.rings[itemData.ring] = Math.min(9, actor.rings[itemData.ring] + 1);
} else {
actor.rings[itemData.ring] = Math.max(1, actor.rings[itemData.ring] - 1);
}
if (!item || item.type !== "advancement") {
return;
}
const actorSystem = foundry.utils.duplicate(this.system);
const itemData = item.system;
if (itemData.advancement_type === "ring") {
// Ring
if (isAdd) {
actorSystem.rings[itemData.ring] = Math.min(9, actorSystem.rings[itemData.ring] + 1);
} else {
// Skill
const skillCatId = CONFIG.l5r5e.skills.get(itemData.skill);
if (skillCatId) {
if (isAdd) {
actor.skills[skillCatId][itemData.skill] = Math.min(
9,
actor.skills[skillCatId][itemData.skill] + 1
);
} else {
actor.skills[skillCatId][itemData.skill] = Math.max(
0,
actor.skills[skillCatId][itemData.skill] - 1
);
}
}
actorSystem.rings[itemData.ring] = Math.max(1, actorSystem.rings[itemData.ring] - 1);
}
// Update Actor
await this.update({
system: foundry.utils.diffObject(this.system, actor),
system: foundry.utils.diffObject(this.system, actorSystem),
});
} else {
// Skill
let skillItem = await fromUuid(itemData.skill); // Skill itemUuid
if (!skillItem) {
console.warn("L5R5E | Unknown skill item uuid", itemData.skill);
return;
}
// Out of actor item ?
if (!skillItem.actor || skillItem.actor._id !== this._id) {
const checkItem = this.items.getName(skillItem.name);
if (checkItem) {
skillItem = checkItem;
} else {
throw new Error(`Unable to find "${skillItem.name}" on this actor`);
}
}
const newRank = isAdd
? Math.min(9, skillItem.system.rank + 1)
: Math.max(0, skillItem.system.rank - 1);
if (skillItem.system.rank === newRank) {
return;
}
// Update Item
await skillItem.update({ "system.rank": newRank });
}
}