From 3b2ff4b436498d1d3e8158c13eebd892d6120700 Mon Sep 17 00:00:00 2001 From: CPTN Cosmo Date: Sun, 25 Jan 2026 17:46:04 +0100 Subject: [PATCH] added support for multiple experiences --- module.json | 4 ++-- scripts/importer.js | 33 ++++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/module.json b/module.json index c9d7f99..9caf802 100644 --- a/module.json +++ b/module.json @@ -1,7 +1,7 @@ { "id": "dh-importer", "title": "Daggerheart Statblock Importer", - "version": "1.2.1", + "version": "1.2.2", "compatibility": { "minimum": "13", "verified": "13" @@ -34,5 +34,5 @@ "description": "Imports Adversaries and Environments from text blocks into the Daggerheart system.", "url": "https://github.com/cptn-cosmo/dh-importer", "manifest": "https://git.geeks.gay/cosmo/dh-importer/raw/branch/main/module.json", - "download": "https://git.geeks.gay/cosmo/dh-importer/releases/download/1.2.1/dh-importer.zip" + "download": "https://git.geeks.gay/cosmo/dh-importer/releases/download/1.2.2/dh-importer.zip" } \ No newline at end of file diff --git a/scripts/importer.js b/scripts/importer.js index a8ccaf9..58b97b6 100644 --- a/scripts/importer.js +++ b/scripts/importer.js @@ -279,16 +279,31 @@ export class DHImporter { } static _parseExperienceLine(line, data) { - // "Ambusher +3" - const match = line.match(/(.+?)\s+([+-]?\d+)$/); - if (match) { - const currentCount = Object.keys(data.system.experiences).length; - const key = "exp" + currentCount; - data.system.experiences[key] = { - name: match[1].trim(), - value: parseInt(match[2]) - }; + // Handle "Experience: Manipulate +2, Infiltrate +2" or "Knowledge (Arcana, History) +2" + const parts = line.split(","); + let buffer = ""; + + for (let part of parts) { + buffer = buffer ? buffer + "," + part : part; + + // Check if buffer matches "Name +Value" + // We trim to handle spaces around commas + const trimmed = buffer.trim(); + // Regex to match "Name +Value" at the end of the string + const match = trimmed.match(/(.+?)\s+([+-]?\d+)$/); + + if (match) { + const currentCount = Object.keys(data.system.experiences).length; + const key = "exp" + currentCount; + data.system.experiences[key] = { + name: match[1].trim(), + value: parseInt(match[2]) + }; + // Reset buffer as we found a complete experience + buffer = ""; + } } + // If buffer remains (e.g. "Some Trait" without number), it is ignored, consistent with previous behavior. } /**