Rank column pulled left (250->195), name cell narrowed. Headers now show class-colored
character name from the key (reliable) + (Class), with a blank spacer row between characters.
Root cause of the 'all over the place' Skills layout: the Skills content frame was 745
wide (widened at coa.9 for extra columns) vs 615 for every other Summary view. Both
anchor TOPRIGHT, so the extra 130px pushed the Skills frame's LEFT edge over the nav menu
-> profession names rendered on top of the menu. Restored to 615 so the left edge clears
the menu like AccountSummary; the two-column name/rank list now sits in the content area.
Skills vertical list now uses a proper two-column row: indented [icon] profession name
in the Name cell, rank/max color-coded in its own Level column to the right (was all
crammed into one text cell). Character headers span the row with name + (class).
The relocated Prof1-8 block (coa.20) was jumbled below the dropdowns in the narrow
char-view panel. Restored Prof1/Prof2 in the original bottom row (Cooking/First Aid/Prof1/Prof2);
removed Prof3-8. Full profession list stays on the Skills tab. No crash (loop stops at Prof2).
- CoA renamed classes but UnitClass returns old tokens; added a token->name map
(CoAClassColors.lua, from coa-omen) applied in the Skills header + the shared
AddCharacterTooltipHeader/SetCharacterRowNameLevel helpers (fixes class names everywhere).
- Skills vertical list now shows rank/max (precompute carries maxRank; was showing /0).
Rewrote the Skills tab from the cramped multi-column per-character grid to a vertical
list: each character is a header row, followed by one row per known primary profession
(incl Woodcutting/Woodworking) + secondary skills (Cooking/First Aid/Fishing) + Riding,
icon + name + rank/max, top to bottom. Simplified the column headers to match.
GetAddOnMetadata Version is cached at game launch and not refreshed by /reload, so the
title showed a stale version after reloads ('still .18'). Use a Lua constant that
re-evaluates each /reload as a truthful loaded-code indicator.
- Re-applied the window enlargement (832x555, more rows) - user accepts the AuctionFrame
art seam in exchange for the bigger frame.
- Char-view professions (Prof1-8) moved out of the cramped bottom Cooking/FirstAid row
into the open middle-left gap (2 rows of 4) so they stop overlapping/overflowing.
The coa.12 enlargement couldn't extend WoW's fixed AuctionFrame art cleanly -> fragmented
background + broken scrollbar. Reverted to the original clean frame (14 rows, intact art,
working scrollbar). All crash fixes, Skills professions cap, login-scan, class icons, and
the char-view profession wrap are preserved (they live in different lines/files).
- Hardening sweep across DataStore_* (softened crash-asserts in Talents/Containers/Quests
to graceful nil) + Altoholic frames (guarded remaining getter results).
- DataStore_Characters: scan on login (was ghost-gated -> name/level/class never populated;
the core 'no character data' cause).
- Skills tab: cap inline professions at 6 (+N) so the strip stops overflowing into Cooking.
DataStore_Talents._GetTreeReference degrades to nil (was assert) when a custom class
(MONK, etc.) has no/partial talent reference data; Talents.lua skips background render
when GetTreeInfo returns no bg.
GetRestedXP did 'rate * coeff' on a nil DS:GetRestXPRate result (crashed Account
Summary). Guarded it, plus defensive nil->0 on the two common string helpers.
SetItemButtonTexture now guards a nil IconTexture (was crashing whenever a button
didn't exist). UpdateViewIcons profession loop stops at the last existing _ProfN
button instead of indexing a nil frame; added _Prof3..8 so CoA chars (which can know
many professions) show more than 2. This was blocking the character detail view from
rendering when you clicked a char in the Account Summary.
$parentSkill1 inherited AltoSkillButtonTemplate AND redefined a $parentNormalText
ButtonText -> duplicate global name left Skill1NormalText nil and crashed the Skills
tab on open. Made $parentSkill1 self-contained (own 325px ButtonText + scripts).
- Reputation view rebuilt data-driven from each char's scanned factions grouped
by in-game category; CoA custom factions (and future ones) appear automatically.
Old hardcoded tree kept only as an icon lookup.
- CoA custom-class icons (classes 12-32) render from bundled atlas
Altoholic/images/coa-classes.blp (texcoords from coa-details) instead of the
Warrior glue-icon fallback in ShowClassIcons.
- Skills tab shows ALL known professions (dynamic list incl Woodcutting/Woodworking),
not 2 fixed slots; DataStore_Skills scans on PLAYER_ENTERING_WORLD/SKILL_LINES_CHANGED
(fixes 'no profession data' that only scanned on ghost-release).
- Title bar: 'Altoholic <toc version>' (was 'Altoholic v.. by Thaoky (Edited by
Telkar-RG 1.04a)'); reads GetAddOnMetadata Version so it tracks releases. Drop
dead VERSION_STRING.
- Default UIScale 1.0 -> 1.4 (~AtlasLoot 1105x640). Apply scale in OnShow (was only
applied after visiting Options); one-time migration bumps old-default profiles.
Options reset/default slider -> 1.4.
GetColor() did floor(rank/..) with no nil-guard and riding did 'field >= 300';
skillRank1/2/cooking/firstaid/fishing/riding are nil for chars DataStore_Characters
hasn't scanned. GetColor now defaults rank to 0 and each field falls back to 0.
- Extract AddCharacterTooltipHeader() + SetCharacterRowNameLevel() (Altoholic.lua);
nil-guards centralized, callers in AccountSummary/Activity/BagUsage/Skills/tooltip.
- Fix sites the manual sweep missed: Skills.lua (row + skill ranks), Keys.lua x3,
ShowClassIcons sort (Altoholic.lua:705, getters bypass their own or-0 via the wrapper).
- Restore login scan: OnPlayerAlive was ghost-only (fdcb25a) so iLvl never populated;
now scans once per session. Removed dated DEBUG leftovers.
Title drops Telkar-RG's personal 1.04a; now 'Altoholic (Exiles)'.
Author keeps Thaoky/Telkar-RG credit. Bundles the frame partial-record
guards from the previous commit.
GetXPRate / GetRestXPRate did raw arithmetic on character.XP / .XPMax /
.lastLogoutTimestamp, which are nil for own alts seen via guild comm but
never fully scanned. Crashed AccountSummary on Vol'jin - CoA Beta.