You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+38-5Lines changed: 38 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,26 +25,55 @@ additional chronicles can be added without endpoint changes.
25
25
engine rule.
26
26
-**NPCs** — both a **cleaned** layer (one record per unique name,
27
27
drops + spawns aggregated across merged ids) and a **raw**, source-faithful
28
-
layer for callers who need engine-level fidelity.
29
-
-**Monsters** — filtered view over the NPC dataset.
28
+
layer for callers who need engine-level fidelity. Detail responses
29
+
carry an optional `primaryRegion` derived from the NPC's spawns.
30
+
-**Monsters** — filtered view over the NPC dataset; same cleaned/raw
31
+
split, same `primaryRegion` enrichment.
30
32
-**Drops** — enriched with item names, deduped on `(npcId, itemId, min,
31
33
max, chance)`, and reverse-indexed: every item carries `dropped-by` and
32
34
`spoiled-by` lookups.
33
-
-**Spawns** — coordinates per NPC, deduped across merged ids.
35
+
-**Spawns** — coordinates per NPC, deduped across merged ids. Cleaned
36
+
spawn endpoints attach a resolved `region: RegionRefDto | null` per
37
+
row (raw endpoints stay unenriched).
34
38
-**Recipes** — exposed inline on item-detail responses (`crafting` for
35
39
recipe scrolls, `craftedBy` for products).
40
+
-**Skills** — full catalog with resolved descriptions, parsed `<for>`
41
+
effects (literal + `<table>` references), and icon files; consumed
42
+
inline by item / NPC / class detail.
36
43
-**Armor sets** — full catalog endpoint plus embedded set context on
37
44
every piece (`partOfSets[]`).
45
+
-**Classes** — all 89 Interlude player classes (base + 1st/2nd/3rd
46
+
profession), with full skill-learn tables, spellbook references, and
47
+
parent/child cross-links. Spellbook items reverse-link to the skills
48
+
they teach and the classes that learn them.
49
+
-**Commerce** — merchant `buyLists` (Adena-for-item) and a curated set
50
+
of multisell exchanges (Mammon, B-grade unseal, Luxury Shop, Apella).
51
+
Surfaced both per-NPC at `/npcs/[id]/shop` and per-item via `soldBy`,
52
+
`exchangeFrom`, and `exchangeFor` cross-links.
53
+
-**Quests** — full catalog (329 on Interlude) plus per-quest detail
54
+
with rewards, involved NPCs/monsters, quest items, and race/class
55
+
gates extracted from aCis Java scripts. When the L2 client's
56
+
`questname-e.dat` is present, also surfaces the `description` flavor
57
+
prose and `clientJournalEntries` (the player's in-game quest log
58
+
entries — short title + prose + completion NPC per step). Honestly
59
+
framed as the client journal, not an editorial walkthrough.
60
+
Cross-linked from item / NPC detail (`rewardOfQuests`, `questItemFor`,
61
+
`startsQuests`, `involvedInQuests`).
62
+
-**Regions** — full catalog of 19 named map regions (Talking Island
63
+
Village, Town of Aden, …) sourced from upstream `mapRegions.xml`.
64
+
These are engine "death-teleport" regions, not biome polygons —
65
+
`primaryRegion` reads as "the in-game town this NPC is associated
66
+
with" rather than "this NPC's biome label".
38
67
-**Meta endpoints** — known npc types / item types / item grades, with
39
68
counts, for filter dropdowns.
40
69
41
70
## Where things live
42
71
43
72
|||
44
73
|---|---|
45
-
|`data/datapack/<chronicle>/`| placeholder for upstream XML (untracked)|
74
+
|`data/datapack/<chronicle>/`| placeholder for upstream **L2 client DAT files** consumed at build time (e.g. `*grp.dat` for icons, `questname-e.dat` for quest journal entries) — untracked|
46
75
|`data/manual-fixes/<chronicle>.json`| one file per chronicle, sectioned by entity |
Copy file name to clipboardExpand all lines: docs/api.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -52,7 +52,7 @@ Requesting an unknown chronicle returns **404**.
52
52
| GET |`/api/[chronicle]/npcs`| List cleaned NPCs (one record per unique name) |
53
53
| GET |`/api/[chronicle]/npcs/[id]`| Single cleaned NPC; accepts canonical or any merged raw id |
54
54
| GET |`/api/[chronicle]/npcs/[id]/drops`| Aggregated drops for the cleaned NPC |
55
-
| GET |`/api/[chronicle]/npcs/[id]/spawns`| Aggregated spawn points for the cleaned NPC |
55
+
| GET |`/api/[chronicle]/npcs/[id]/spawns`| Aggregated spawn points for the cleaned NPC. Each row is an `EnrichedSpawnDto` and includes a resolved `region: RegionRefDto \| null` (M4); the raw equivalent at `/api/[chronicle]/raw/monsters/[id]/spawns` does **not** carry the region field.|
0 commit comments