From be273620789abbd25e93f7b8346273a2f3ca07ab Mon Sep 17 00:00:00 2001 From: jalensailin Date: Thu, 24 Jul 2025 15:55:38 -0400 Subject: [PATCH] WIP 2: improve _applySkillImprovements --- module/sheets/agent-sheet.js | 75 ++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/module/sheets/agent-sheet.js b/module/sheets/agent-sheet.js index 5708a38..be711be 100644 --- a/module/sheets/agent-sheet.js +++ b/module/sheets/agent-sheet.js @@ -87,37 +87,36 @@ export default class DGAgentSheet extends DGActorSheet { /* -------------------------------------------- */ - static async _applySkillImprovements(event, target) { - const failedSkills = Object.entries(this.actor.system.skills).filter( - (skill) => skill[1].failure, + static async _applySkillImprovements() { + const { skills, typedSkills } = this.actor.system; + + const failedSkills = Object.values(skills).filter((data) => data.failure); + + const failedTypedSkills = Object.values(typedSkills).filter( + (data) => data.failure, ); - const failedTypedSkills = Object.entries( - this.actor.system.typedSkills, - ).filter((skill) => skill[1].failure); + + const localizedFailedSkills = failedSkills.map((skill) => + game.i18n.localize(`DG.Skills.${skill.key}`), + ); + + const localizedFailedTypedSkills = failedTypedSkills.map((skill) => { + const groupKey = `DG.TypeSkills.${skill.group.replace(/\s+/g, "")}`; + const groupLabel = game.i18n.localize(groupKey); + return `${groupLabel} (${skill.label})`; + }); + if (failedSkills.length === 0 && failedTypedSkills.length === 0) { - ui.notifications.warn("DG.Skills.ApplySkillImprovements.Warning"); + ui.notifications.warn("DG.Skills.ApplySkillImprovements.Warning", { + localize: true, + }); return; } - let failedSkillNames = ""; - failedSkills.forEach(([skill], value) => { - if (value === 0) { - failedSkillNames += game.i18n.localize(`DG.Skills.${skill}`); - } else { - failedSkillNames += `, ${game.i18n.localize(`DG.Skills.${skill}`)}`; - } - }); - failedTypedSkills.forEach(([skillName, skillData], value) => { - if (value === 0 && failedSkillNames === "") { - failedSkillNames += `${game.i18n.localize( - `DG.TypeSkills.${skillData.group.split(" ").join("")}`, - )} (${skillData.label})`; - } else { - failedSkillNames += `, ${game.i18n.localize( - `DG.TypeSkills.${skillData.group.split(" ").join("")}`, - )} (${skillData.label})`; - } - }); + const failedSkillNames = [ + ...localizedFailedSkills, + ...localizedFailedTypedSkills, + ].join(", "); const baseRollFormula = game.settings.get(DG.ID, "skillImprovementFormula"); @@ -219,42 +218,42 @@ export default class DGAgentSheet extends DGActorSheet { // Get copy of current system data, will update this and then apply all changes at once synchronously at the end. const updatedData = foundry.utils.duplicate(actorData); - failedSkills.forEach(([skill], value) => { - updatedData.skills[skill].proficiency += resultList[value] ?? 1; // Increase proficiency by die result or by 1 if there is no dice roll. - updatedData.skills[skill].failure = false; + failedSkills.forEach((skill, value) => { + updatedData.skills[skill.key].proficiency += resultList[value] ?? 1; // Increase proficiency by die result or by 1 if there is no dice roll. + updatedData.skills[skill.key].failure = false; // So we can record the regular skills improved and how much they were increased by in chat. // The if statement tells us whether to add a comma before the term or not. if (value === 0) { improvedSkillList += `${game.i18n.localize( - `DG.Skills.${skill}`, + `DG.Skills.${skill.key}`, )}: +${resultList[value] ?? 1}%`; } else { improvedSkillList += `, ${game.i18n.localize( - `DG.Skills.${skill}`, + `DG.Skills.${skill.key}`, )}: +${resultList[value] ?? 1}%`; } }); - failedTypedSkills.forEach(([skillName, skillData], value) => { + failedTypedSkills.forEach((skill, value) => { // We must increase value in the following line by the length of failedSkills, so that we index the entire resultList. // Otherwise we would be adding the same die results to regular skills and typed skills. - updatedData.typedSkills[skillName].proficiency += + updatedData.typedSkills[skill.key].proficiency += resultList[value + failedSkills.length] ?? 1; - updatedData.typedSkills[skillName].failure = false; + updatedData.typedSkills[skill.key].failure = false; // So we can record the typed skills improved and how much they were increased by in chat. // The if statement tells us whether to add a comma before the term or not. if (value === 0 && improvedSkillList === "") { improvedSkillList += `${game.i18n.localize( - `DG.TypeSkills.${skillData.group.split(" ").join("")}`, - )} (${skillData.label}): +${ + `DG.TypeSkills.${skill.group.split(" ").join("")}`, + )} (${skill.label}): +${ resultList[value + failedSkills.length] ?? 1 }%`; } else { improvedSkillList += `, ${game.i18n.localize( - `DG.TypeSkills.${skillData.group.split(" ").join("")}`, - )} (${skillData.label}): +${ + `DG.TypeSkills.${skill.group.split(" ").join("")}`, + )} (${skill.label}): +${ resultList[value + failedSkills.length] ?? 1 }%`; }