Ascension's `C_CharacterAdvancement.GetEntryByInternalID` returns the
active character's *own* class entries with `Class` empty (the API
treats the player's class as implicit), while still returning `Class`
populated for every other class.
The entry-walk gate `if entry and entry.Class then ...` was therefore
silently dropping every talent of whatever class you ran the export
on. A Venomancer alt would correctly capture the 41 *other* classes'
talents/skills but produce zero rows for Prophet itself, leaving the
db.exil.es Venomancer page perpetually missing icons for Rotting Away,
Lure, Envenomed Weapons, and friends.
Cache UnitClass("player") at the start of C.Run and substitute it for
`entry.Class` whenever that field is missing or empty. The bucketing
key in `info.cls` now matches the localized class string (consistent
with how the other 41 classes show up in CoaExporterCatalog.talents).
- New AE:GenerateMarkdownSpellbook(): one section per spell tab
(General, class, pet) with icon + name + db.ascension.gg link + rank.
Skips empty tabs.
- /coae export mdspellbook new slash subcommand
- /coae export md now appends a Spellbook section after
Talents in the full wiki page
- UI sidebar: "MD Spellbook" button added under Markdown (Wiki)
New Collectors/Spellbook.lua walks GetNumSpellTabs() and emits one entry
per tab with name, texture, offset, numSpells, and a spells[] array of
{ slot, name, rank, spellID, icon }.
3.3.5/Ascension API differences are handled defensively: name comes
from GetSpellBookItemInfo or vanilla GetSpellName; spellID is parsed
out of GetSpellLink (3.3.5 doesn't return it from GetSpellBookItemInfo);
icon falls back to GetSpellTexture if GetSpellInfo doesn't have it yet.
Wiring:
- CoaExporter.toc: load Collectors/Spellbook.lua after Talents
- Core.lua: AssembleExport() includes spellbook for all + spellbook
- Core.lua: HandleExport() accepts /coae export spellbook
- Core.lua: debug output shows tab + spell counts
- UI/ExportFrame.lua: "Spellbook" button in the Character section
Replaces the cramped two-row button strip with a proper sidebar layout:
Character Markdown Catalog Scrolls Tools
- All - MD Gear - Skills - Scan - Reload UI
- Talents - MD Enchants - Talents - Status - Debug
- Gear - MD Full - All - Help
- Enchants
Section headers in gold; full-width buttons stacked vertically.
The new "Reload UI" button calls ReloadUI() so guildies can flush a
catalog dump to disk without leaving the export window. Debug and Help
buttons route through SlashCmdList["COAE"] so the UI and slash share
one code path.
Frame is 720x500 (was 700x520); the right-side copy-out edit box keeps
its existing CoaExporter_ShowExportFrame() entry point so Core.lua is
unchanged.
Folds three previously-separate Lua addons into one for guild-member use:
- ascension-char-exporter (per-character JSON/Wiki.js Markdown via /ascx)
- CoA_SkillExporter (skills/dispels/passives catalog via /skilldump)
- CoA_TalentExporter (talent-tree catalog via /talentdumpall)
The two CoA catalog dumpers were ~90% identical entry-walkers. Pulled the
shared C_CharacterAdvancement.GetAllEntries() loop into Catalogs/Common.lua
and have Skills.lua / Talents.lua register collectors that share a single
scan pass (so /coae catalog all walks the entry list once, not twice).
Per-character collectors (Talents, Gear, Enchants, MysticScrolls,
MysticScrollProbe) and the AtlasLootAscension-derived ScrollCatalog data
are kept verbatim, just rebranded.
Slash interface:
/coae export {all|talents|gear|enchants|mdgear|mdenchants|md}
/coae catalog {all|skills|talents|dispels [class]|passives [class]|status}
/coae scrolls {scan|export|reset|status}
/coae sv on|off | debug | help
Aliases: /coaexp, /ascx, /asxc, plus legacy /skilldump /talentdumpall
/dispels /passives that map to the catalog subcommands.
SavedVariables: CoaExporterSaved, CoaExporterConfig, CoaExporterScrollCache,
CoaExporterCatalog (skills/dispels/levelPassives/talents/_meta).