3.4 KiB
3.4 KiB
Date, Session_Name, Tags
| Date | Session_Name | Tags | ||
|---|---|---|---|---|
| 2026-04-23 | Session 28 - Downtime Activities |
|
Session 28 - Downtime Activities
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:
- Val goes to meet with Iniana Asase and gets an update on how the meeting with Deidre Gille and Therin Asase went. She also states that she knows we've been stepping on alot of people's toes - and she finally inquires as to what we're up to. Val gives her the short and easy of what we're up to, but let's her in on the truth. It did however, seem like Therin Asase was going to investigate Deidre Gille's situation.
-
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: