diff --git a/src/macros_new/gowlers-tracking-ledger/foundry.gowlershome.dyndns.org/modules/gowlers-tracking-ledger/scripts/gowlers-tracking-ledger.js b/src/macros_new/gowlers-tracking-ledger/foundry.gowlershome.dyndns.org/modules/gowlers-tracking-ledger/scripts/gowlers-tracking-ledger.js
index 456b4ea9..c4d26dc7 100644
--- a/src/macros_new/gowlers-tracking-ledger/foundry.gowlershome.dyndns.org/modules/gowlers-tracking-ledger/scripts/gowlers-tracking-ledger.js
+++ b/src/macros_new/gowlers-tracking-ledger/foundry.gowlershome.dyndns.org/modules/gowlers-tracking-ledger/scripts/gowlers-tracking-ledger.js
@@ -1,6 +1,6 @@
const MODULE_ID = "gowlers-tracking-ledger";
-const MODULE_VERSION = "0.1.12";
+const MODULE_VERSION = "0.1.13";
const TRACK_SETTING = "actorSettings";
const FLAG_SCOPE = "world";
const MAX_HISTORY_ROWS = 100;
@@ -430,7 +430,11 @@ function buildHistoryContent(actor, tabArg) {
columns: [
{ label: "Timestamp", render: (entry) => formatDate(entry.timestamp) },
{ label: "HP", render: (entry) => entry.value },
- { label: "Δ", render: (entry) => entry.diff },
+ {
+ label: "Δ",
+ render: (entry) => entry.diff,
+ getTitle: (entry) => entry.damageBreakdown ? `${entry.damageBreakdown}` : ""
+ },
{ label: "Source", render: (entry) => entry.source ?? "Manual" },
{ label: "Encounter", render: (entry) => entry.encounterId ? entry.encounterId.slice(0, 8) : "N/A" },
],
@@ -442,7 +446,11 @@ function buildHistoryContent(actor, tabArg) {
columns: [
{ label: "Timestamp", render: (entry) => formatDate(entry.timestamp) },
{ label: "XP", render: (entry) => entry.value },
- { label: "Δ", render: (entry) => entry.diff },
+ {
+ label: "Δ",
+ render: (entry) => entry.diff,
+ getTitle: (entry) => entry.damageBreakdown ? `${entry.damageBreakdown}` : ""
+ },
{ label: "Source", render: (entry) => entry.source ?? "Manual" },
{ label: "Encounter", render: (entry) => entry.encounterId ? entry.encounterId.slice(0, 8) : "N/A" },
],
@@ -526,7 +534,12 @@ function renderHistoryTable(entries, columns, id) {
.map(
(entry) => `
- ${columns.map((col) => `| ${col.render(entry) ?? ""} | `).join("")}
+ ${columns.map((col) => {
+ const cellContent = col.render(entry) ?? "";
+ const title = col.getTitle ? col.getTitle(entry) : "";
+ const titleAttr = title ? ` title="${title}"` : "";
+ return `${cellContent} | `;
+ }).join("")}
`
)
.join("");
@@ -564,14 +577,42 @@ async function recordHistoryEntry(actor, statId, previous, nextValue, userId, op
}
}
- // Detect source of the change
+ // Detect source of the change with actor and item details
let source = "Manual";
+ let sourceDetails = "";
+ let damageBreakdown = "";
+
if (options?.pf1DamageData) {
- source = "Attack";
+ // Try to get attacker actor and item information
+ const attackerName = options?.pf1?.attackerName || "Unknown";
+ const itemName = options?.pf1?.itemName || "Attack";
+ source = "Damage";
+ sourceDetails = `${attackerName}, ${itemName}`;
+
+ // Extract damage breakdown if available
+ if (options?.pf1DamageData?.rolls) {
+ const damageRolls = options.pf1DamageData.rolls;
+ const breakdown = [];
+ let total = 0;
+ for (const roll of damageRolls) {
+ if (roll.damageType && roll.value) {
+ breakdown.push(`${roll.value} ${roll.damageType}`);
+ total += parseInt(roll.value) || 0;
+ }
+ }
+ if (breakdown.length > 0) {
+ damageBreakdown = breakdown.join(", ");
+ }
+ }
} else if (options?.healing) {
+ const healerName = options?.pf1?.healerName || "Unknown";
+ const itemName = options?.pf1?.itemName || "Healing";
source = "Healing";
+ sourceDetails = `${healerName}, ${itemName}`;
+ damageBreakdown = `Healed for ${Math.abs(diffValue)} HP`;
} else if (options?.pf1?.actionType === "spell") {
source = "Spell";
+ sourceDetails = options?.pf1?.itemName || "Spell";
} else if (statId === "xp" && diffValue > 0) {
source = "XP Award";
} else if (statId === "hp") {
@@ -579,11 +620,18 @@ async function recordHistoryEntry(actor, statId, previous, nextValue, userId, op
const hpDiff = parseInt(diffValue);
if (hpDiff < 0) {
source = "Damage";
+ damageBreakdown = `${Math.abs(hpDiff)} damage`;
} else if (hpDiff > 0) {
source = "Healing";
+ damageBreakdown = `${hpDiff} healing`;
}
}
+ // Format source with details if available
+ if (sourceDetails) {
+ source = `${source} (${sourceDetails})`;
+ }
+
const entry = {
timestamp: Date.now(),
value: config.formatValue(nextValue),
@@ -591,6 +639,7 @@ async function recordHistoryEntry(actor, statId, previous, nextValue, userId, op
user: game.users.get(userId)?.name ?? "System",
source: source,
encounterId: encounterId,
+ damageBreakdown: damageBreakdown,
};
console.log(`[GowlersTracking] History entry created for ${statId}:`, entry);
diff --git a/src/macros_new/gowlers-tracking-ledger/module.json b/src/macros_new/gowlers-tracking-ledger/module.json
index 07fa1137..18bf548f 100644
--- a/src/macros_new/gowlers-tracking-ledger/module.json
+++ b/src/macros_new/gowlers-tracking-ledger/module.json
@@ -3,7 +3,7 @@
"type": "module",
"title": "Gowler's Tracking Ledger",
"description": "Adds HP/XP/Currency log buttons to PF1 sheets and opens the tracking dialog preloaded with the actor's logs.",
- "version": "0.1.12",
+ "version": "0.1.13",
"authors": [
{ "name": "Gowler", "url": "https://foundryvtt.com" }
],