From c6feac41c6007a1ef007e1fc773ad7d117fe82ee Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sat, 7 Dec 2024 19:20:01 +0100 Subject: [PATCH] =?UTF-8?q?Import=20comp=C3=A9tences=20avec=20sp=C3=A9cial?= =?UTF-8?q?isations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ie: Musique (Harpe) +6 --- module/apps/rdd-import-stats.js | 65 ++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/module/apps/rdd-import-stats.js b/module/apps/rdd-import-stats.js index 10ec4800..b91c973b 100644 --- a/module/apps/rdd-import-stats.js +++ b/module/apps/rdd-import-stats.js @@ -144,7 +144,7 @@ export class RdDStatBlockParser { let actorData = foundry.utils.deepClone(game.model.Actor[type]); let items = []; - actorData.flags = { hautRevant: false, malusArmure: 0 } + actorData.flags = { hautRevant: false, malusArmure: 0, type } for (let key in actorData.carac) { let caracDef = actorData.carac[key]; // Parse the stat string for each caracteristic @@ -169,7 +169,7 @@ export class RdDStatBlockParser { } // Get skills from compendium - await RdDStatBlockParser.parseCompetences(type, statString, actorData, items); + await RdDStatBlockParser.parseCompetences(statString, actorData, items); if (type == "personnage") { @@ -191,35 +191,48 @@ export class RdDStatBlockParser { await newActor?.sheet.render(true) } - static async parseCompetences(type, statString, actorData, items) { - const competences = await SystemCompendiums.getCompetences(type); + static async parseCompetences(statString, actorData, items) { + const competences = await SystemCompendiums.getCompetences(actorData.flags.type); //console.log("Competences : ", competences); - for (let comp of competences) { - let compNameToSearch = RdDStatBlockParser.fixCompName(comp.name); - let compMatch = XRegExp.exec(statString, XRegExp("\\s" + compNameToSearch + compParser[type], 'giu')); - if (compMatch) { - comp = comp.toObject() - comp.system.niveau = Number(compMatch.value) - if (compMatch.malus) { - comp.system.niveau = Number(compMatch.value) - actorData.flags.malusArmure - } - if (comp.system.categorie == 'draconic' && comp.system.niveau > -11) { - actorData.flags.hautRevant = true - } - if (type == "creature" || type == "entite") { - comp.system.carac_value = Number(compMatch.carac); - if (compMatch.dommages != undefined) { - comp.system.dommages = Number(compMatch.dommages); - comp.system.iscombat = true; + for (let competence of competences) { + let pushed = actorData.flags.type != "personnage" + let compNameToSearch = RdDStatBlockParser.fixCompName(competence.name) + XRegExp.forEach(statString, XRegExp("\\s" + compNameToSearch + compParser[actorData.flags.type], 'giu'), + function (compMatch, i) { + items.push(RdDStatBlockParser.prepareCompetence(actorData, competence, compMatch)) + if (!compMatch.special) { + pushed = true } - } - items.push(comp); + }) + if (!pushed) { + // ajout niveau de base + items.push(competence.toObject()) } - else if (type == "personnage") { - comp = comp.toObject(); - items.push(comp); + + } + } + + static prepareCompetence(actorData, competence, compMatch) { + const comp = competence.toObject(); + if (compMatch.special) { + comp._id = undefined + comp.name = `${comp.name} (${compMatch.special})` + } + comp.system.niveau = Number(compMatch.value); + if (compMatch.malus) { + comp.system.niveau = Number(compMatch.value) - actorData.flags.malusArmure + } + if (comp.system.categorie == 'draconic' && comp.system.niveau > -11) { + actorData.flags.hautRevant = true + } + if (["creature", "entite"].includes(actorData.flags.type)) { + comp.system.carac_value = Number(compMatch.carac); + if (compMatch.dommages != undefined) { + comp.system.dommages = Number(compMatch.dommages) + comp.system.iscombat = true } } + return comp } static async parseArmors(statString, actorData, items) {