converting advancement to dynamic list skills
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user