3.3 KiB
3.3 KiB
Date, Session_Name, Tags
| Date | Session_Name | Tags | ||
|---|---|---|---|---|
| 2025-12-17 | Session 14 - Summer Solistice Pt. 3 |
|
Session 14 - Summer Solistice Pt. 3
Date:
= this.Date• Name:= this.Session_Name
📄 Session Summary (auto)
No summary yet — click “Generate Summary” below.
name ✍️ Generate AI Summary
type template
action Templates/Generate AI Session Summary.md
templater true
🧭 Where / When
-
Region / Location:
-
In-game Date / Time:
-
Weather / Conditions:
👥 PCs Present / Absent
-
Present:
-
Absent:
⭐ Highlights (feed the auto-summary)
Add one or more
Highlight::lines. The button will build a summary from these.
-
Highlight::
-
Highlight::
-
Highlight::
🎯 Quests & Progress
-
Active Objectives:
-
Progress / Resolutions:
🗣️ NPCs Met / Factions
-
NPCs:
-
Factions Touched:
⚔️ Encounters
-
Social / Exploration:
- Faylen Valora gives another speech
- She offers a thankful welcome to House Elidari and their patron for hosting.
- The Trackless taught her perspective - how much every choice matters, and that leadership is an act of devotion.
- All share a devotion to Y'athyr and hosts cheers to Y'athyr.
- Faylen Valora gives another speech
-
Combat:
-
Outcome / Loot:
🧠 Intel Captured (auto)
const THIS = dv.current();
const sessName = THIS.file.name;
const sessDate = THIS.Date ?? dv.current().file.frontmatter?.Date ?? "";
const sessLC = sessName.toLowerCase();
const pages = dv.pages("#npc or #faction").where(p => p.Intel);
function matchesSessionField(sessionField) {
const list = Array.isArray(sessionField) ? sessionField : [sessionField];
for (const s of list) {
if (!s) continue;
if (typeof s === "object" && s.path) {
const base = s.path.split("/").pop().replace(/\.md$/i,"");
if (base.toLowerCase() === sessLC) return true;
} else {
const text = String(s);
if (text.includes(`[[${sessName}]]`)) return true;
if (text.toLowerCase() === sessLC) return true;
}
}
return false;
}
const rows = [];
for (const p of pages) {
for (const it of p.Intel) {
let ok = false;
if (it.session) ok = matchesSessionField(it.session);
if (!ok && sessDate && it.date) ok = String(it.date) === String(sessDate); // fallback
if (ok) {
rows.push({
from: p.file.link,
date: it.date ?? "",
type: it.type ?? "",
summary: String(it.summary ?? ""),
source: it.source ?? "",
rel: it.reliability ?? "",
cred: it.credibility ?? "",
tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
});
}
}
}
rows.sort((a,b)=> String(b.date).localeCompare(String(a.date)));
if (!rows.length) {
dv.paragraph("_No intel captured for this session yet._");
} else {
dv.table(
["From", "Date", "Type", "Summary", "Source", "Rel", "Cred", "Tags"],
rows.map(r => [r.from, r.date, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
);
}
📦 Treasure & Rewards
-
Items:
-
Coin:
-
XP / Milestones: