Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec9e34e8f6 | ||
|
|
21840a322c |
+8
@@ -14,6 +14,13 @@ Rivals:
|
||||
-
|
||||
SMH_Acronym:
|
||||
Intel:
|
||||
- date: 2025-10-08
|
||||
type: interaction
|
||||
summary: Says that [[House Asase]] is working to rebuild the walls of the Drenches to keep out the seaspray.
|
||||
source: "[[Ronan Elidari]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
- date: 2025-10-02
|
||||
type: interaction
|
||||
summary: Vaust informs us that [[House Asase]] has been exceeding their quota for excavations underneath the arch. It's possible that [[House Asase]] is working with [[The Archmasons]] on this endeavour.
|
||||
@@ -40,6 +47,7 @@ Tags:
|
||||
---
|
||||
|
||||
|
||||
|
||||
# House Asase
|
||||
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
||||
|
||||
|
||||
+218
@@ -0,0 +1,218 @@
|
||||
---
|
||||
Reputation: 0
|
||||
Faction_Type: High House
|
||||
Motto:
|
||||
Ideology:
|
||||
Symbol:
|
||||
Colors:
|
||||
Headquarters:
|
||||
Territories:
|
||||
-
|
||||
Allies:
|
||||
-
|
||||
Rivals:
|
||||
-
|
||||
SMH_Acronym:
|
||||
Intel:
|
||||
Tags:
|
||||
- faction
|
||||
---
|
||||
|
||||
# House Gille
|
||||
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Artwork
|
||||
![[House Gille.png]]
|
||||
*Optional caption / artist credit*
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Identity & Heraldry
|
||||
- **Motto:** `= default(this.Motto, "—")`
|
||||
- **Symbol:** `= default(this.Symbol, "—")`
|
||||
- **Colors:** `= default(this.Colors, "—")`
|
||||
- **Headquarters:** `= default(this.Headquarters, "—")`
|
||||
- **Territories:** `= this.Territories`
|
||||
|
||||
---
|
||||
|
||||
## 📜 Ideology & Goals
|
||||
- **Ideology / Alignment:** `= default(this.Ideology, "—")`
|
||||
- **Primary Goals:**
|
||||
-
|
||||
- **Taboos / Anathema:**
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Relationship with Party
|
||||
- **Reputation:** `= this.Reputation`
|
||||
|
||||
---
|
||||
|
||||
## 🧑💼 Leadership & Structure
|
||||
- **Leader(s):** [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]]
|
||||
- **Structure:** (council, hierarchy, cells, chapters)
|
||||
- **Key Offices:** (Intelligence, Logistics, Priory, Treasury, etc.)
|
||||
|
||||
---
|
||||
|
||||
## 🧰 Assets & Operations
|
||||
- **Resources:** (coin, troops, mages, ships, safehouses, contacts)
|
||||
- **Notable Holdings:**
|
||||
- Starlight Ridge, a Vineyard outside of Y'athyr
|
||||
- **Typical Ops / Tactics:**
|
||||
|
||||
---
|
||||
|
||||
## 🕊️ Diplomacy & Relations
|
||||
- **Allies:** `= this.Allies`
|
||||
- **Rivals:** `= this.Rivals`
|
||||
- **Stance toward “SMH” (their wording):** `= default(this.SMH_Acronym, "—")`
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Intelligence & Mentions
|
||||
```button
|
||||
name ➕ Add Intel
|
||||
type command
|
||||
action Templater: Insert Add Intel Entry to Faction
|
||||
```
|
||||
```dataviewjs
|
||||
const THIS = dv.current();
|
||||
const thisName = String(THIS.file.name);
|
||||
const thisLC = thisName.toLowerCase();
|
||||
|
||||
const factions = dv.pages("#faction");
|
||||
|
||||
// mention detector (same logic as your table)
|
||||
function mentionsThisFaction(entry) {
|
||||
const sum = String(entry.summary ?? "");
|
||||
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||
const src = entry.source;
|
||||
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||
for (const s of list) {
|
||||
if (typeof s === "string") {
|
||||
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||
if (s.toLowerCase() === thisLC) return true;
|
||||
} else if (s && typeof s === "object" && s.path) {
|
||||
const base = s.path.split("/").pop().replace(/\.md$/i,"").toLowerCase();
|
||||
if (base === thisLC) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const own = (THIS.Intel ?? []).length;
|
||||
|
||||
let mentions = 0;
|
||||
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||
for (const it of (p.Intel ?? [])) if (mentionsThisFaction(it)) mentions++;
|
||||
}
|
||||
|
||||
dv.paragraph(`_Entries: ${own + mentions} (own ${own} + mentions ${mentions})_`);
|
||||
```
|
||||
```dataviewjs
|
||||
// Current faction
|
||||
const THIS = dv.current();
|
||||
const thisName = String(THIS.file.name);
|
||||
const thisLC = thisName.toLowerCase();
|
||||
|
||||
// All faction pages (including this one)
|
||||
const factions = dv.pages("#faction");
|
||||
|
||||
// Mention detector: summary has [[This Faction]] OR source points at this faction
|
||||
function mentionsThisFaction(entry) {
|
||||
const sum = String(entry.summary ?? "");
|
||||
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||
|
||||
const src = entry.source;
|
||||
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||
for (const s of list) {
|
||||
if (typeof s === "string") {
|
||||
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||
if (s.toLowerCase() === thisLC) return true; // fallback: plain text match
|
||||
} else if (s && typeof s === "object" && s.path) { // wikilink object
|
||||
const base = s.path.split("/").pop().replace(/\.md$/i,"").toLowerCase();
|
||||
if (base === thisLC) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Collect rows
|
||||
const rows = [];
|
||||
|
||||
// 1) Own intel
|
||||
for (const it of (THIS.Intel ?? [])) {
|
||||
rows.push({
|
||||
date: it.date ?? "",
|
||||
from: THIS.file.link,
|
||||
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 ?? "")
|
||||
});
|
||||
}
|
||||
|
||||
// 2) Mentions from other factions
|
||||
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||
for (const it of (p.Intel ?? [])) {
|
||||
if (mentionsThisFaction(it)) {
|
||||
rows.push({
|
||||
date: it.date ?? "",
|
||||
from: p.file.link,
|
||||
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 ?? "")
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort newest first
|
||||
rows.sort((a,b) => String(b.date).localeCompare(String(a.date)));
|
||||
|
||||
if (!rows.length) {
|
||||
dv.paragraph("_No intel yet._");
|
||||
} else {
|
||||
dv.table(
|
||||
["Date","From Faction","Type","Summary","Source","Rel","Cred","Tags"],
|
||||
rows.map(r => [r.date, r.from, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
|
||||
);
|
||||
}
|
||||
```
|
||||
> Add new entries in the **frontmatter** under `Intel:` (keep newest on top). Suggested fields: `date, type, summary, source, reliability, credibility, tags`.
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Related NPCs (auto)
|
||||
```dataview
|
||||
TABLE link(file.name) AS NPC, number(Level_of_Influence) AS Influence, default(SMH_Acronym, "—") AS SMH
|
||||
FROM #npc
|
||||
WHERE file.name != "NPC Template"
|
||||
AND (
|
||||
Faction = this.file.link
|
||||
OR lower(string(Faction)) = lower(this.file.name)
|
||||
OR contains(lower(string(Faction)), lower(this.file.name))
|
||||
)
|
||||
SORT number(Level_of_Influence) DESC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📌 Plot Hooks & Notes
|
||||
-
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## 🗒 Session Updates
|
||||
- 2025-10-08: …
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 3
|
||||
Faction: "[[The Archmasons]]"
|
||||
Tags:
|
||||
- npc
|
||||
@@ -63,7 +63,7 @@ Tags:
|
||||
- **Personality:** (e.g., stern, practical, loyal)
|
||||
- **Speech Style / Quirks:** (catchphrases, accent, tics)
|
||||
- **Appearance Details:** (clothing, scars, distinguishing features)
|
||||
- Wore a very distinctive dress that she and her friends made to the event at [[Deidre Gille]]'s Winery.
|
||||
- Wore a very distinctive dress that she and her friends made to the event at [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]]'s Winery.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 2
|
||||
Faction:
|
||||
SMH_Acronym: Sandwich Mountain Harpoon
|
||||
Tags:
|
||||
|
||||
+5
-2
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 2
|
||||
Faction: "[[House Gille]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
@@ -7,7 +7,7 @@ Tags:
|
||||
---
|
||||
|
||||
# Deidre Gille
|
||||
*Local Vineyard Owner*
|
||||
*Local Vineyard Owner, head of House Gille*
|
||||
|
||||
## 🎨 Artwork
|
||||
![[Deidre Gille.png]]
|
||||
@@ -31,6 +31,9 @@ Tags:
|
||||
- **Level of Influence:** `= this.Level_of_Influence` (−10 to +10)
|
||||
- **Notes on Influence:** (what actions improve/worsen standing)
|
||||
- ***Discovery Skills***
|
||||
- DC 14 Wine Lore
|
||||
- DC 17 Crafting
|
||||
- DC 19 Perception
|
||||
- ***Influence Skills***
|
||||
- ***Weaknesses***
|
||||
- ***Resistances***
|
||||
|
||||
+5
-2
@@ -1,9 +1,8 @@
|
||||
---
|
||||
Level_of_Influence: 2
|
||||
Level_of_Influence: 4
|
||||
Faction:
|
||||
Tags:
|
||||
- npc
|
||||
|
||||
---
|
||||
|
||||
# Elthea Rinvale
|
||||
@@ -35,6 +34,8 @@ Tags:
|
||||
- DC 17 Society
|
||||
- DC 19 Perception
|
||||
- ***Influence Skills***
|
||||
- DC 24 Deception
|
||||
- DC 21 Intimidation
|
||||
- DC 19 Diplomacy
|
||||
- ***Weaknesses***
|
||||
- Most happy when offered fresh drink/food. Reduces Influence DC by 2.
|
||||
@@ -53,6 +54,8 @@ Tags:
|
||||
|
||||
## 📖 History & Background
|
||||
- **Origin / Past:**
|
||||
- Grew up in Glisburn - chief often brought others into the brotherhood. In the trackless they'd adopt others into the cheif's family - in the E'in they do the same. Though in the Trackless, it's alot less consensual.
|
||||
-
|
||||
- **Known Motivations:**
|
||||
- **Secrets / Rumors:**
|
||||
- Potentially annoyed with people who constantly gawk at her being an envoy to the Trackless Courts, or otherwise disrespecting her role as a diplomat.
|
||||
|
||||
+5
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 1
|
||||
Level_of_Influence: 6
|
||||
Faction: "[[House Asase]]"
|
||||
Tags:
|
||||
- npc
|
||||
@@ -38,9 +38,13 @@ Tags:
|
||||
- DC 21 Performance
|
||||
- DC 19 Diplomacy
|
||||
- DC 14 Labor Lore
|
||||
- DC 17 Medicine
|
||||
- ***Weaknesses***
|
||||
- Promoting Charitable Organization or Helping the Common Folk Reduces the DC by 2.
|
||||
- ***Resistances***
|
||||
-
|
||||
- ***Biases***
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 2
|
||||
Faction:
|
||||
Tags:
|
||||
- npc
|
||||
@@ -36,7 +36,7 @@ Tags:
|
||||
- DC 19 Society
|
||||
- ***Influence Skills***
|
||||
- DC 24 Intimidation
|
||||
- DC 22 Perception
|
||||
- DC 22 Deception
|
||||
- ***Weaknesses***
|
||||
- Flirting or Offering a Deal of some sort will reduce the Influence DC by 2.
|
||||
- ***Resistances***
|
||||
@@ -59,6 +59,7 @@ Tags:
|
||||
- **Origin / Past:**
|
||||
- **Known Motivations:**
|
||||
- **Secrets / Rumors:**
|
||||
- Has attended the last five soiree's that [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]] has hosted.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
---
|
||||
Level_of_Influence: 2
|
||||
Faction:
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
---
|
||||
|
||||
# Maltrix
|
||||
*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"*
|
||||
|
||||
## 🎨 Artwork
|
||||
![[Maltrix.png]]
|
||||
*Optional caption / alt text*
|
||||
|
||||
---
|
||||
|
||||
## 🧑 NPC Overview
|
||||
- **Full Name:**
|
||||
- **Race / Ancestry:**
|
||||
- **Gender / Pronouns:**
|
||||
- **Occupation / Role:**
|
||||
- **Faction / Allegiance:**
|
||||
- **SMH (what THEY call it):** `= this.SMH_Acronym`
|
||||
- **Notable Traits:** (quirks, mannerisms, appearance)
|
||||
- **First Impression:** (how the party perceives them)
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Relationship with Party
|
||||
- **Level of Influence:** `= this.Level_of_Influence` (−10 to +10)
|
||||
- **Notes on Influence:** (what actions improve/worsen standing)
|
||||
- ***Discovery Skills***
|
||||
- ***Influence Skills***
|
||||
- ***Weaknesses***
|
||||
- ***Resistances***
|
||||
- ***Biases***
|
||||
|
||||
---
|
||||
|
||||
## 🏛️ Relations & Factions
|
||||
- **Primary Faction:** [[Faction Name]]
|
||||
- **Allied Factions:** [[Faction A]], [[Faction B]]
|
||||
- **Rival Factions:** [[Faction C]]
|
||||
- **Personal Enemies / Allies:** [[NPC or PC]]
|
||||
|
||||
---
|
||||
|
||||
## 📖 History & Background
|
||||
- **Origin / Past:**
|
||||
- **Known Motivations:**
|
||||
- **Secrets / Rumors:**
|
||||
|
||||
---
|
||||
|
||||
## 🎭 Roleplay Notes
|
||||
- **Personality:** (e.g., stern, practical, loyal)
|
||||
- **Speech Style / Quirks:** (catchphrases, accent, tics)
|
||||
- **Appearance Details:** (clothing, scars, distinguishing features)
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Miscellaneous
|
||||
- **Current Location:**
|
||||
- **Important Items / Assets:**
|
||||
- **Plot Hooks / Ties to PCs:**
|
||||
- **Session Notes / Updates:**
|
||||
- 2025-10-08: …
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Connections
|
||||
- **Related NPCs:**
|
||||
- [[NPC A]] (Mentor)
|
||||
- [[NPC B]] (Rival)
|
||||
- **PC Ties:** (how the party knows them)
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# 🗂 NPC Influence Dashboard
|
||||
p# 🗂 NPC Influence Dashboard
|
||||
|
||||
> Scale: −10 … 0 … +10 (0 = Neutral; positive = more influential, negative = less)
|
||||
> Source: **#npc** • Excluding: **NPC Template.md** (change the name below if yours differs)
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: -2
|
||||
Level_of_Influence: -1
|
||||
Faction: "[[House Elidari]]"
|
||||
Tags:
|
||||
- npc
|
||||
@@ -41,7 +41,7 @@ Tags:
|
||||
- ***Weaknesses***
|
||||
- ***Resistances***
|
||||
- ***Biases***
|
||||
- Doesn't like commoners or those not working with the High Houses. -1 to Influence or Discovery
|
||||
- Doesn't like commoners or those not working with the City. -1 to Influence or Discovery
|
||||
- Likes people who are martially minded: +2 to Influence Checks
|
||||
- Speaking Positively about [[House Elidari]] or the direction that the city is taking nets a +2 to Influence Checks.
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
+1 Influence with People of Highwater
|
||||
-1 Influence with High Class People
|
||||
+2 Influence with [[Lord Ellin Vaust]]
|
||||
+1 Influence with [[Iniana Asase]]
|
||||
-2 Influence with [[Ronan Elidari]]
|
||||
+2 Influence with [[Elthea Rinvale]]
|
||||
0 Influence with [[Amity Cornwallis]]
|
||||
0 Influence with [[Laughlin]]
|
||||
0 Influence with [[Iniana Asase]]
|
||||
0 Influence with [[Deidre Gille]]
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
---
|
||||
Date: 2025-10-08
|
||||
Session_Name: Session 10 - Wined, Dined and Influenced
|
||||
Tags:
|
||||
- pf2e
|
||||
- session
|
||||
---
|
||||
|
||||
|
||||
|
||||
# Session 10 - Wined, Dined and Influenced
|
||||
|
||||
> **Date:** `= this.Date` • **Name:** `= this.Session_Name`
|
||||
|
||||
---
|
||||
|
||||
## 📄 Session Summary (auto)
|
||||
<!-- SUMMARY-START -->
|
||||
<!-- SUMMARY-END -->
|
||||
|
||||
```button
|
||||
name ✍️ Generate AI Summary
|
||||
type command
|
||||
action Templater: Insert Generate Session Summary
|
||||
```
|
||||
|
||||
## 🧭 Where / When
|
||||
|
||||
- **Region / Location:**
|
||||
- Starlight Ridge, a Winery owned by [[Deidre Gille]]
|
||||
- **In-game Date / Time:**
|
||||
|
||||
- **Weather / Conditions:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 👥 PCs Present / Absent
|
||||
|
||||
- **Present:**
|
||||
- [[Kite]]
|
||||
- [[Calen]]
|
||||
- [[Faylen Valora]]
|
||||
- [[Val]]
|
||||
- [[Metternich]]
|
||||
- **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:**
|
||||
- Influence the Partygoers
|
||||
|
||||
- **Progress / Resolutions:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🗣️ NPCs Met / Factions
|
||||
|
||||
- **NPCs:** [[ ]] [[ ]] [[ ]]
|
||||
|
||||
- **Factions Touched:** [[ ]] [[ ]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ⚔️ Encounters
|
||||
|
||||
- **Social / Exploration:**
|
||||
- **Influence Encounter at the Winery**
|
||||
- [[Deidre Gille]] calls for dinner, proffering everyone to sit where they like.
|
||||
- [[Val]] and [[Calen]] sit down with [[Iniana Asase]] for dinner.
|
||||
- Round 1
|
||||
- [[Val]] joins in conversation to also try and perform Discovery on [[Iniana Asase]]
|
||||
- [[Val]] inquires as to how she got started - and it was as simple as spending time in the Drenches to see the conditions. One of her house servants had lived in the Drenches - and she would go to the Drenches to explore, and as she grew older she witness the instability.
|
||||
- [[Calen]] inquires as to how to better things in the city. [[Iniana Asase]] advises the we take a more official capacity
|
||||
- Specifically [[Iniana Asase]] advises that we seek licensure so that we're operating in a more official capacity.
|
||||
- They converse specifically about how to best provide aid to the downtrodden and her experience in dealing with the [[Thin Wisps]] with her Soup Kitchen being in the Drenches.
|
||||
- Round 2
|
||||
- [[Val]] brings up the conversation between [[Faylen Valora]] and [[Ronan Elidari]].
|
||||
- [[Calen]] and [[Val]] chat with [[Iniana Asase]] about meekness around confronting and speaking about how the situation could improve in Y'athry.
|
||||
- [[Faylen Valora]] and [[Metternich]] sit with [[Ronan Elidari]], [[Amity Cornwallis]] and [[Deidre Gille]] for dinner.
|
||||
- Round 1
|
||||
- [[Faylen Valora]] makes a speech thanking those who have dedicated so much time and energy to the care and well-being of the city.
|
||||
- **Reactions**
|
||||
- [[Deidre Gille]] offers a kind nod.
|
||||
- [[Iniana Asase]] is slightly embarrased by the speech.
|
||||
- [[Ronan Elidari]] thinks Faylen is making a spectacle.
|
||||
- [[Laughlin]] says "Well Said!"
|
||||
- [[Elthea Rinvale]] is comtemplative regarding it.
|
||||
- [[Faylen Valora]] successfully gains us at least one influence with each notable at the party.
|
||||
- [[Metternich]] chats with [[Deidre Gille]]
|
||||
- Chats about the Vineyard, success of operations and a bit about [[Faylen Valora]].
|
||||
- [[Metternich]] also expresses an interest in learning about making wine.
|
||||
- Despite his conversation with her, [[Metternich]] is unable to learn any additional information.
|
||||
- Round 2
|
||||
- [[Faylen Valora]] talks with the group again and regales her experience of dealing with the Fey. Expresses the superiority of magics of Fey and Rhodesian Magics.
|
||||
- [[Faylen Valora]] shares that the Alsatians have free share and exchange of knowledge. Shares the martial superiority of them in comparison to the E'in.
|
||||
- [[Faylen Valora]] and [[Ronan Elidari]] bickering nets us a influence point with [[Amity Cornwallis]]
|
||||
- [[Metternich]] and [[Amity Cornwallis]] sneak away after the argument is over and enjoy a quiet moment.
|
||||
- They discuss the high houses being so focused on fending for themselves, and both Amity and Metternich express sentiment for "the new boss being the same as the old boss" and ruling powers viewing themselves as unassailable with their measure of power.
|
||||
- [[Amity Cornwallis]] makes an argument that it's only right that those in power keep some measure for themselves.
|
||||
- [[Metternich]] makes an argument that it needs to be seen that everyone survives the winter, so to speak.
|
||||
- Amity counters with asking if chieftains of the trackless would've embettered themselves through the nature of their position.
|
||||
- [[Amity Cornwallis]] says that all people act in their own self interest - even egalitarian systems will only last the lifetime of the person who established it.
|
||||
- [[Kite]] sits with [[Elthea Rinvale]] for dinner.
|
||||
- Round 1
|
||||
- [[Kite]] asks her opinion or [[Faylen Valora]]'s speech, but [[Elthea Rinvale]] doesn't say much beyond saying that [[Faylen Valora]] is well-spoken.
|
||||
- They talk a bit about [[Ronan Elidari]] and [[Elthea Rinvale]] expresses some appreciation for his direct-ness.
|
||||
- [[Kite]] inquires as to her presences -- and [[Elthea Rinvale]] is there for pleasure, but is in town for business.
|
||||
- Y'ahtyr, serves as her homebase in the E'in, giving it's westerly location and occasional encroachments by the Trackless Territories.
|
||||
- They talk a bit about Valentia and [[Kite]]'s time in Castore - and why he left.
|
||||
- Per [[Kite]] this is due to feeling "roots" set in.
|
||||
- They additionally talk about [[Faylen Valora]] and the rest of the part trying to bring change to the city.
|
||||
- [[Kite]] inquires as to alternative employments that will serve the city at large.
|
||||
- The Consortium is always looking for mercenaries to help secure the border.
|
||||
- Round 2
|
||||
- [[Kite]] and [[Elthea Rinvale]] talk about Trackless vs. E'in Society.
|
||||
- **Combat:**
|
||||
|
||||
- **Outcome / Loot:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Intel Captured
|
||||
|
||||
---
|
||||
|
||||
## 📦 Treasure & Rewards
|
||||
|
||||
- **Items:**
|
||||
|
||||
- **Coin:**
|
||||
|
||||
- **XP / Milestones:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Next Hooks / To-Dos
|
||||
|
||||
- [
|
||||
|
||||
|
||||
- [ ]
|
||||
|
||||
- [ ]
|
||||
+1
-1
@@ -16,7 +16,7 @@ DM: Tommy
|
||||
4. [[Calen]] gets a +2 to influence for magic based traditions
|
||||
1. Can use Bon Mot to reduce Influence DC
|
||||
5. [[Metternich]] can use Hobnobbler to do two discoveries in a single round, can use Bon Mot to reduce the Influence DC.
|
||||
2. [[Deidre Gille]]
|
||||
2. [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]]
|
||||
1. Osal Planes Winemaker, under [[House Miiran]], at the Starlight Ridge Winery
|
||||
2. Discovery Skills
|
||||
1. DC 14 Wine Lore
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
<%*
|
||||
/* PF2e AI Session Summary — FULL NOTE MODE (single-string call)
|
||||
- Uses the whole note body (not just bullets)
|
||||
- Strips frontmatter, code fences, and prior summaries/history
|
||||
- Lets you pick Short / Standard / Detailed length
|
||||
*/
|
||||
|
||||
const file = app.workspace.getActiveFile();
|
||||
if (!file) { new Notice("Open a session note first."); return; }
|
||||
|
||||
/* ---------- Read & sanitize whole note ---------- */
|
||||
let body = await app.vault.read(file);
|
||||
|
||||
// strip YAML frontmatter
|
||||
body = body.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "");
|
||||
|
||||
// strip prior summaries & history blocks if present
|
||||
body = body.replace(/<!--\s*SUMMARY-START\s*-->[\s\S]*?<!--\s*SUMMARY-END\s*-->/gi, "");
|
||||
body = body.replace(/<!--\s*SUMMARY-HISTORY-START\s*-->[\s\S]*?<!--\s*SUMMARY-HISTORY-END\s*-->/gi, "");
|
||||
|
||||
// strip code fences & inline dataview
|
||||
body = body.replace(/```[\s\S]*?```/g, "");
|
||||
body = body.replace(/`=\s*[^`]+`/g, "");
|
||||
|
||||
// normalize whitespace
|
||||
body = body.replace(/\r/g, "").trim();
|
||||
|
||||
// If the note is very long, cap input (you can raise this safely)
|
||||
const MAX_INPUT_CHARS = 40000;
|
||||
if (body.length > MAX_INPUT_CHARS) body = body.slice(0, MAX_INPUT_CHARS);
|
||||
|
||||
/* ---------- Metadata ---------- */
|
||||
const cache = app.metadataCache.getFileCache(file) || {};
|
||||
const fm = cache.frontmatter || {};
|
||||
const seshName = fm.Session_Name || tp.file.title || file.basename;
|
||||
const seshDate = fm.Date || tp.date.now("YYYY-MM-DD");
|
||||
|
||||
/* ---------- Length selector ---------- */
|
||||
const lenPick = await tp.system.suggester(
|
||||
["Short (~6 bullets)","Standard (~12 bullets)","Detailed (~20 bullets)"],
|
||||
["short","standard","detailed"]
|
||||
) ?? "standard";
|
||||
const bulletTarget = (lenPick === "short") ? 6 : (lenPick === "detailed") ? 20 : 12;
|
||||
|
||||
/* ---------- Build single-string prompt ---------- */
|
||||
const prompt = `You are a concise Pathfinder 2e GM assistant. Summarize the FULL session note below.
|
||||
|
||||
Return ONLY:
|
||||
**One-line recap (bold)**
|
||||
- Key beats (bulleted, chronological, ${bulletTarget} bullets max)
|
||||
- NPCs & factions touched (preserve existing [[wikilinks]] verbatim if present)
|
||||
- Encounters/checks/outcomes (brief)
|
||||
- Loot/rewards/XP (brief)
|
||||
- Next hooks/to-dos (bullets)
|
||||
|
||||
DO NOT echo raw headings, “Highlight::”, or placeholder text. Cover ALL major content, not just bullet lists.
|
||||
|
||||
Session: "${seshName}" on ${seshDate}
|
||||
|
||||
=== NOTE START ===
|
||||
${body}
|
||||
=== NOTE END ===`;
|
||||
|
||||
/* ---------- Call AI (string-only) ---------- */
|
||||
let summary = "";
|
||||
try {
|
||||
const resp = await tp.ai.chat(prompt);
|
||||
summary = (typeof resp === "string") ? resp : (resp?.content ?? resp?.text ?? "");
|
||||
} catch (e) {
|
||||
console.error("AI error:", e);
|
||||
}
|
||||
|
||||
/* ---------- Fallback if model returns empty ---------- */
|
||||
if (!summary || !summary.trim()) {
|
||||
// Build a tidy, non-noisy fallback from the whole note (no headings/labels)
|
||||
const lines = body
|
||||
.split("\n")
|
||||
.map(s => s.trim())
|
||||
.filter(s => s && !/^#{1,6}\s/.test(s)) // no markdown headings
|
||||
.filter(s => !/^\*\*[^*]+:\*\*$/.test(s)) // no bold-only section labels
|
||||
.filter(s => !/^Highlight::/i.test(s)) // no "Highlight::"
|
||||
.filter(s => !/^Round\s+\d+/i.test(s)) // no "Round X"
|
||||
.filter(s => s !== "[[ ]]"); // no empty wikilinks
|
||||
|
||||
const oneLine = `**${seshName} — ${seshDate}:** ${lines[0] || "Session recap unavailable."}`;
|
||||
const bullets = lines.slice(1, 1 + Math.min(20, bulletTarget + 4)).map(s => `- ${s}`);
|
||||
summary = [oneLine, ...bullets].join("\n");
|
||||
}
|
||||
|
||||
/* ---------- Inject between SUMMARY markers ---------- */
|
||||
const START = "<!-- SUMMARY-START -->";
|
||||
const END = "<!-- SUMMARY-END -->";
|
||||
let content = await app.vault.read(file);
|
||||
const sIdx = content.indexOf(START), eIdx = content.indexOf(END);
|
||||
if (sIdx === -1 || eIdx === -1 || eIdx < sIdx) { new Notice("Could not find SUMMARY markers."); return; }
|
||||
|
||||
const before = content.slice(0, sIdx + START.length);
|
||||
const after = content.slice(eIdx);
|
||||
await app.vault.modify(file, before + "\n" + summary.trim() + "\n" + after);
|
||||
new Notice("AI session summary generated.");
|
||||
%>
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
Date: <% tp.date.now("YYYY-MM-DD") %>
|
||||
Session_Name: <% tp.file.title %>
|
||||
Tags: [pf2e, session]
|
||||
---
|
||||
|
||||
# <% tp.file.title %>
|
||||
|
||||
> **Date:** `= this.Date` • **Name:** `= this.Session_Name`
|
||||
|
||||
---
|
||||
|
||||
## 📄 Session Summary (auto)
|
||||
<!-- SUMMARY-START -->
|
||||
*No summary yet — click “Generate Summary” below.*
|
||||
<!-- SUMMARY-END -->
|
||||
|
||||
```button
|
||||
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:**
|
||||
|
||||
- **Combat:**
|
||||
|
||||
- **Outcome / Loot:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Intel Captured
|
||||
|
||||
---
|
||||
|
||||
## 📦 Treasure & Rewards
|
||||
|
||||
- **Items:**
|
||||
|
||||
- **Coin:**
|
||||
|
||||
- **XP / Milestones:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Next Hooks / To-Dos
|
||||
|
||||
- [ ]
|
||||
|
||||
- [ ]
|
||||
|
||||
- [ ]
|
||||
@@ -0,0 +1,9 @@
|
||||
<%*
|
||||
try {
|
||||
const out = await tp.ai.chat("Say 'OK' if you can read this.");
|
||||
new Notice("AI replied: " + (typeof out === "string" ? out.slice(0,60) : JSON.stringify(out).slice(0,60)));
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
new Notice("AI call threw an error (check console).");
|
||||
}
|
||||
%>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Reference in New Issue
Block a user