# wow-Altoholic-dev
Altoholic: modified development for WotLK

## CoA fork (Exiles)

Ported for the Ascension CoA (Vol'jin) 3.3.5a client by the Exiles guild. Released as `*-coa.N` tags via Gitea Actions; see `Exiles/coa-altoholic`.

- **3.3.002b-coa.12** — Bigger main window (real size, not scale): `AltoholicFrame` 447→555px tall; AuctionFrame background art re-anchored with a middle filler; every scrolling tab shows more rows (18px tabs 14→20, 41px tabs 7/8→10) with matching `$parentEntryN` frames + grown scrollframes. Visual polish (art seam, scrollbar track length) may need a tweak after testing.
- **3.3.002b-coa.11** — Hotfix: Skills tab crash — `$parentSkill1` ButtonText global-name collision left `Skill1NormalText` nil; made it self-contained.
- **3.3.002b-coa.10** — Three CoA data-coverage features:
  - **Reputation** is now data-driven: shows every faction a character actually has (grouped by in-game category), so CoA's custom factions (and future ones) appear automatically. The old hardcoded faction tree is kept only as an icon lookup.
  - **Class icons** for CoA custom classes (12–32) now render from a bundled CoA atlas (`Altoholic/images/coa-classes.blp`, texcoords from the CoA Details fork) instead of falling back to the Warrior glue icon.
  - **Skills** tab shows ALL known professions (dynamic list, not 2 fixed slots) incl. Woodcutting/Woodworking, and fixes "no profession data" — `DataStore_Skills` now scans on login (`PLAYER_ENTERING_WORLD`/`SKILL_LINES_CHANGED`) instead of only on death/ghost-release.
- **3.3.002b-coa.9** — Reverted the 1.4 default scale (it only zoomed, didn't show more content; scale stays user-opt-in at 1.0 default, applied on open). Hardened `Options:Get/Set` against a nil `options` table (`TabOptions.lua:442` crash). Guild Members: guard `Level_OnClick` against cleared/stale row IDs (clicking AiL crashed). **New:** Personal + Realm bank tracking ported from coa-bagnon (detects CoA `BANK_PERMISSIONS_PAYLOAD`, personal=per-char, realm=per-realm; surfaced in Search + BagUsage tooltip). **New:** Woodcutting + Woodworking columns on the Skills tab (CoA custom professions). NOTE: Skills "all professions" redesign, profession data population, character icons, and reputation factions are still in progress.
- **3.3.002b-coa.8** — Title bar reads just `Altoholic <version>` (from the live `.toc`), dropping the "by Thaoky (Edited by Telkar-RG 1.04a)" string. Window now opens at the AtlasLoot-ish default scale (`UIScale` 1.4, ≈ 1105×640); scale is applied on every open (upstream only applied it after visiting Options), with a one-time bump for profiles still on the old 1.0 default.
- **3.3.002b-coa.7** — Skills tab: `GetColor()` now nil-safe and the per-skill rank fields (`skillRank1/2`, `cooking`, `firstaid`, `fishing`, `riding`) default to `0` — they're nil for chars `DataStore_Characters` hasn't scanned, which crashed the Skills summary (`floor(rank/…)` arithmetic and the `>= 300` riding check).
- **3.3.002b-coa.6** — Final straggler: guarded `AccountSharing.lua` realm/name line (name getter was the last `format` arg, so a no-value collapsed it to a format error). Concludes the frame sweep.
- **3.3.002b-coa.5** — Refactor + completeness pass:
  - Extracted the duplicated character header/row blocks into `Altoholic:AddCharacterTooltipHeader()` and `Altoholic:SetCharacterRowNameLevel()` — the nil-guards now live in one place instead of being copy-pasted across frames.
  - Fixed crash sites the per-frame sweep had missed: `Skills.lua` (row + skill-rank tooltip), `Keys.lua` (×3 `format` with possibly-nil name), and the latent `ShowClassIcons` sort (`Altoholic.lua` — getters bypass their own `or 0` via the DataStore wrapper).
  - Restored login scanning: `OnPlayerAlive` in `Altoholic.lua` + `DataStore_Inventory` was gated to ghost-only (commit fdcb25a), so inventory/iLvl never populated on login. Now scans once per session (still skips resurrect/Feign-Death rescans). Removed dated DEBUG leftovers.
- **3.3.002b-coa.4** — Rebranded to the Exiles fork (title `Altoholic (Exiles)`; Thaoky/Telkar-RG still credited as Author). Hardened **all** Altoholic frames against partial alt records: DataStore char-based getters return *no value* for any module that hasn't scanned a char, and the frames assumed full data everywhere. Guarded every `format`/concat/arithmetic/`pairs` site across AccountSummary, Activity, BagUsage, Quests, Reputations, TabCharacters, `DrawCharacterTooltip`, and the recipe tooltip. No DataStore contract change.
- **3.3.002b-coa.3** — More partial-record guards in `DataStore_Characters` (own alts seen via guild comm but never fully scanned):
  - `GetXPRate` — guard nil/zero `XPMax` (crashed AccountSummary; also fixes div-by-zero at max level).
  - `GetRestXPRate` — guard nil/zero `XPMax` and nil `lastLogoutTimestamp` (`nil ~= 0` was true and crashed).
- **3.3.002b-coa.2** — Defensive guards for CoA data shapes (custom classes, records seeded from guild comm before a full scan, ungeared chars). Fixes login/UI crashes:
  - `DataStore_Inventory` — `GetAverageItemLevel` returns `0` instead of `nil` (crashed the Altoholic char sort and AccountSummary iLvl format); guarded the login AIL broadcast and the `0/0` average for ungeared chars.
  - `DataStore_Pets` — `GetNumPets` returns `0` for an unscanned companion table instead of `assert`-crashing TabCharacters.
  - `DataStore_Characters` — `GetColoredCharacterName` tolerates a `nil` name (records known only via guild comm).
  - `Altoholic/Characters.lua` — `GetLineType` returns `nil` for a stale/out-of-range line id (caller already handles it) instead of indexing a nil row.
- **3.3.002b-coa.1** — Initial CoA packaging (Altoholic + Altoholic_Achievements + 16 DataStore modules).

Added "Keys" Tab for better overview of owned keys and some attunement quests.
## Changes
- [Edited Version 1.04a](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/t1.04a)
  - Some game lag issues addressed by adjusting how some Scan functions were called by triggering Game Events

- [Edited Version 1.03a](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/t1.03a)
  - Added source information to recipes and pets
    
- [Edited Version 1.02](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/t1.02)
  - Small fix for "Known Pets" display (thanks to "[UsernameUsername](https://www.rising-gods.de/forum/63-programmiererecke/830273-addon-altoholic-haustier-info.html)") 

- [Edited Version 1.01](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/t1.01)
  - Items that start Quests now show if the player has already completed them (only affects items of quality above common)

![The new "Keys" tab](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/10.png?raw=true)

- [Edited Version 1.0](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/t1.0)
  - Added "Keys" tab: will show various relevant keys or attunement quests per character in order to enter instances or allow for quicker entry.
  - Items in "Currencies" tab are now sorted by item id
  - Added button to "DataStore" options to ignore Addon-Communication from the Rising-Gods starter guilds
  - Fixed various "Source tooltip" entries (specifically for Ulduar)
  - Fixed various links between recipes and crafting spells
  - The "Hearthstone" will no longer be counted per character (as everyone has it)
  - Removed deDE mistranslation of "Mail"
  - Characters in the horizontzal tab are now sorted by average item level
  
![The new "Keys" tab](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/1.png?raw=true)

- [Original 3.3.5 version](https://github.com/telkar-rg/wow-Altoholic-dev/releases/tag/r90)

## Pretty Pictures

<details>
  <summary>Key item, that requires a questline</summary>
  
  ![Mouseover Key Label](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/8.png?raw=true)
  ![Mouseover Character Item](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/9.png?raw=true)
</details>

<details>
  <summary>Key, that is a questline</summary>
  
  ![Mouseover Key Label](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/6.png?raw=true)
  ![Mouseover Character Item](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/7.png?raw=true)
</details>

<details>
  <summary>Key, that requires reputation</summary>
  
  ![Mouseover Key Label](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/4.png?raw=true)
  ![Mouseover Character Item](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/5.png?raw=true)
</details>

<details>
  <summary>Optional Key, for quick instance entry</summary>
  
  ![Mouseover Key Label](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/2.png?raw=true)
  ![Mouseover Character Item](https://github.com/telkar-rg/wow-Altoholic-dev/blob/main/_img/3.png?raw=true)
</details>
