Commit Graph

218 Commits

Author SHA1 Message Date
florian.berthold 863709e450 coa.26: fix Skills frame overlapping the menu (745->615 width)
release / release (push) Successful in 5s
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.
3.3.002b-coa.26
2026-05-29 23:37:56 +02:00
florian.berthold 78e50e9f5c coa.25: clean two-column Skills layout
release / release (push) Successful in 5s
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).
3.3.002b-coa.25
2026-05-29 22:58:45 +02:00
florian.berthold 14dd30e9a9 coa.24: revert char-view profession grid to clean 2-slot original
release / release (push) Successful in 4s
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).
3.3.002b-coa.24
2026-05-29 22:50:04 +02:00
florian.berthold 996a11dd0a coa.23: correct CoA class names (PROPHET->Venomancer etc.) + fix Skills rank/max
release / release (push) Successful in 5s
- 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).
3.3.002b-coa.23
2026-05-29 22:27:53 +02:00
florian.berthold d1616b4354 coa.22: Skills view as a vertical list (character header + one row per profession)
release / release (push) Successful in 6s
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.
3.3.002b-coa.22
2026-05-29 22:04:19 +02:00
florian.berthold 3663d44cd4 coa.21: title from Lua constant (updates on /reload, unlike cached TOC metadata)
release / release (push) Successful in 5s
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.
3.3.002b-coa.21
2026-05-29 20:42:03 +02:00
florian.berthold d915f6b844 coa.20: restore bigger window + relocate char-view professions
release / release (push) Successful in 5s
- 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.
3.3.002b-coa.20
2026-05-29 20:30:29 +02:00
florian.berthold d440c62a73 coa.19: revert the window enlargement (restore original 832x447 frame)
release / release (push) Successful in 5s
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).
3.3.002b-coa.19
2026-05-29 20:23:40 +02:00
florian.berthold 219e749046 coa.18: guard DataStore_Achievements nil criteria quantity
release / release (push) Successful in 5s
GetAchievementCriteriaInfo returns nil reqQuantity/quantity for some CoA achievements;
'reqQuantity > 1' crashed. Guarded both.
3.3.002b-coa.18
2026-05-29 20:05:03 +02:00
florian.berthold 0a56cbe560 coa.17: comprehensive partial-data hardening + DataStore_Characters login scan + Skills strip cap
release / release (push) Successful in 5s
- 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.
3.3.002b-coa.17
2026-05-29 19:53:03 +02:00
florian.berthold b8d619c3bb coa.16: Talents view no longer crashes on CoA custom classes
release / release (push) Successful in 5s
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.
3.3.002b-coa.16
2026-05-29 19:36:11 +02:00
florian.berthold f305f0a226 coa.15: guard GetRestedXP + GetMoneyString/GetTimeString against no-value getters
release / release (push) Successful in 4s
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.
3.3.002b-coa.15
2026-05-29 19:34:25 +02:00
florian.berthold f64d2c9250 coa.14: wrap character-view professions at 4 per row
release / release (push) Successful in 5s
_Prof5 starts a 2nd row under _Prof1 (Prof6-8 follow) so chars with many professions
don't run the icon row off the right edge of the screen.
3.3.002b-coa.14
2026-05-29 18:34:21 +02:00
florian.berthold 1faf213f17 coa.13: fix character-view crash on chars with >2 professions
release / release (push) Successful in 5s
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.
3.3.002b-coa.13
2026-05-29 18:17:53 +02:00
florian.berthold ee7770baed coa.12: bigger main window with more visible rows (real size, not scale)
release / release (push) Successful in 4s
- AltoholicFrame 832x447 -> 832x555; AuctionFrame art bottom row re-anchored down
  + middle filler textures cover the gap; tab containers grown to match.
- Every scrolling tab shows more rows: 18px tabs VisibleLines 14->20, 41px tabs
  7/8->10; added matching $parentEntryN frames + extended scrollframes.
- Verified VisibleLines <= max entry per tab (no nil-row crash); luac + xmllint clean.
- Flagged for visual check: art seam at filler, decorative scrollbar track length.
3.3.002b-coa.12
2026-05-29 18:09:16 +02:00
florian.berthold e555a22f36 coa.11: fix Skills tab crash (Skill1 ButtonText name collision)
release / release (push) Successful in 5s
$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).
3.3.002b-coa.11
2026-05-29 17:59:05 +02:00
florian.berthold 0565051302 coa.10: CoA reputation factions (data-driven) + custom-class icons + all-professions Skills
release / release (push) Successful in 5s
- 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).
3.3.002b-coa.10
2026-05-29 15:55:25 +02:00
florian.berthold ec868716ed coa.9: revert scale default + crash fixes + personal/realm bank + woodworking
release / release (push) Successful in 5s
- Revert UIScale default 1.4->1.0 (scaling only zoomed, no extra content; real
  larger layout tracked separately). Apply saved scale on open, default 1.0.
- Fix Options:Get/Set nil 'options' crash (TabOptions.lua:442).
- Guild Members: guard Level_OnClick against cleared/stale row IDs.
- Personal + Realm bank tracking ported from coa-bagnon (BANK_PERMISSIONS_PAYLOAD
  detection; personal per-char, realm per-realm; Search + BagUsage surfacing).
- Woodcutting/Woodworking columns on Skills tab (CoA custom professions).
3.3.002b-coa.9
2026-05-29 15:43:42 +02:00
florian.berthold ad54312ad9 coa.8: simplify title bar + default to AtlasLoot-size window
release / release (push) Successful in 6s
- 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.
3.3.002b-coa.8
2026-05-29 15:29:55 +02:00
florian.berthold 11c47a86db coa.7: guard Skills tab summary against unscanned skill ranks
release / release (push) Successful in 5s
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.
3.3.002b-coa.7
2026-05-29 15:22:21 +02:00
florian.berthold 86e5b3485f coa.6: guard AccountSharing realm/name format (last straggler)
release / release (push) Successful in 5s
3.3.002b-coa.6
2026-05-29 10:44:59 +02:00
florian.berthold 97e38d5c3d coa.5: refactor char display into guarded helpers; fix missed sites; restore login scan
release / release (push) Successful in 5s
- 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.
3.3.002b-coa.5
2026-05-29 01:02:24 +02:00
florian.berthold 3fde42454e coa.4: rebrand title to Exiles fork + frame hardening changelog
release / release (push) Successful in 4s
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.
3.3.002b-coa.4
2026-05-28 23:54:32 +02:00
florian.berthold f19ff36733 Harden Altoholic frames against partial alt records (no-value char getters)
DataStore char-based getters return *no value* for any module that hasn't
scanned a given char (DataStore.lua: 'if not arg1.lastUpdate then return end').
Fresh CoA alts have partial per-module data, so the frames crashed feeding
'no value' into format()/concat/arithmetic/pairs. Guarded every such site:
AccountSummary, Activity, BagUsage, Quests, Reputations, TabCharacters,
DrawCharacterTooltip, recipe tooltip. No DataStore contract change.
2026-05-28 23:45:09 +02:00
florian.berthold b332499098 coa.3: guard XP getters in DataStore_Characters for partial records
release / release (push) Successful in 5s
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.
3.3.002b-coa.3
2026-05-28 22:40:04 +02:00
florian.berthold 961290d9bd coa.2: guard CoA data shapes (custom classes, comm-seeded records, ungeared chars)
release / release (push) Successful in 5s
Fixes login/UI crashes on Vol'jin - CoA Beta:
- DataStore_Inventory: GetAverageItemLevel returns 0 not nil (Altoholic sort
  + AccountSummary iLvl format); guard login AIL broadcast and 0/0 average.
- DataStore_Pets: GetNumPets returns 0 for unscanned companion table instead
  of assert-crashing TabCharacters.
- DataStore_Characters: GetColoredCharacterName tolerates nil name.
- Altoholic/Characters.lua: GetLineType returns nil for stale line id.

Stamp -coa.2 + X-Edited-By: Exiles on touched addons; README CoA changelog.
3.3.002b-coa.2
2026-05-28 22:16:44 +02:00
florian.berthold 95fe53bd89 ci: respect GITHUB_REPOSITORY + tolerate per-asset upload failures
release / release (push) Successful in 6s
3.3.002b-coa.1
2026-05-25 12:16:07 +02:00
florian.berthold f59c18bdaa ci: add Gitea Actions release workflow (per-addon git-archive zip)
release / release (push) Failing after 5s
2026-05-25 12:00:16 +02:00
florian.berthold bbe2492a5b chore: flatten Altoholic-Addon/ wrapper + add standard .gitignore/.gitattributes
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching
the Exiles fork-layout convention (one folder per addon, no wrapper dir).
2026-05-25 10:59:24 +02:00
florian.berthold 7789489aec fix(libs): pick up coa-ace3 9583952 (AceDB falsy-defaults PR #10 backport)
Re-sync after coa-ace3 9583952 backported WoWUIDev/Ace3 PR #10 which fixes
the AceDB-3.0 simple-value defaults metatable: previously falsy defaults
like ["*"] = false read back as nil because of `k2~=nil and v or nil`
short-circuiting. Now they round-trip correctly.
2026-05-24 19:31:41 +02:00
florian.berthold 92c6afd9c2 fix(libs): pick up coa-ace3 3ec2009 (BlizOptionsGroup + Settings.* CoA-compat)
Re-sync after coa-ace3 3ec2009 added two CoA-compat patches:
  - AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua: parent
    falls back to UIParent when InterfaceOptionsFramePanelContainer is nil
  - AceConfig-3.0/AceConfigDialog-3.0: Settings.* block guarded with
    fallback to InterfaceOptions_AddCategory on WotLK-era clients

Without these, every addon registering a Blizzard Interface Options
panel via AceConfigDialog errors on load on the CoA client.
2026-05-24 17:41:24 +02:00
florian.berthold 6b767a1e7a fix(libs): pick up coa-ace3 d422ad3 (FileDataID → string paths)
Re-sync after coa-ace3 d422ad3 which converted 42 numeric FileDataIDs in
Set*Texture() calls back to string paths. Upstream Ace3 uses FDIDs which
silently fail on WoW 3.3.5 / CoA, rendering color swatches, checkboxes
and window chrome as solid-red placeholders.
2026-05-23 14:03:38 +02:00
florian.berthold c8b2f1f044 chore(libs): sync Ace3 to coa-ace3 (WoWUIDev master @ 52e5f2c)
Bring every embedded Ace3 / CallbackHandler / LibStub copy in line with the
canonical Exiles/coa-ace3 bundle so LibStub resolution is predictable across
all Exiles forks regardless of which addons are enabled.

Libraries updated in this fork:
  AceAddon-3.0           13  (5 → 13)
  AceComm-3.0            14  (6 → 14)
  AceConfig-3.0          3  (2 → 3)
  AceConfigCmd-3.0       14  (12 → 14)
  AceConfigDialog-3.0    92  (49 → 92)
  AceConfigRegistry-3.0  22  (12 → 22)
  AceConsole-3.0         7
  AceDB-3.0              33  (21 → 33)
  AceDBOptions-3.0       15  (12 → 15)
  AceEvent-3.0           4  (3 → 4)
  AceGUI-3.0             41  (33 → 41)
  AceLocale-3.0          6  (2 → 6)
  AceSerializer-3.0      5  (3 → 5)
  AceTimer-3.0           17  (5 → 17)
  CallbackHandler-1.0    8  (5 → 8)
  LibStub                2
2026-05-23 13:42:15 +02:00
florian.berthold 9fda41fde0 CoA: register Woodcutting and Woodworking as custom professions
Altoholic's DataStore_Crafts hardcodes a ProfessionSpellID lookup so
the localized profession name received over guild comms can be
resolved back to a canonical English key (see GetProfessionID at
DataStore_Crafts.lua:95). Stock table covers the vanilla 15
professions only.

The Voljin/PTR realm adds two custom tradeskills:

  * Woodcutting   — base spell 13977860 (single-rank gathering skill,
                    parallels Mining/Herbalism shape)
  * Woodworking   — Apprentice 1005008, Journeyman 1005009,
                    Expert 1005010, Artisan 1005011 (matches the
                    vanilla 75/150/225/300 rank ladder)

Without this, the local TRADE_SKILL_SHOW data is still captured by
the runtime API path, but the cross-character / cross-locale sync
through GuildBroadcast falls through to the linear scan and never
finds a matching ID — guildmates' Woodcutting/Woodworking ranks
don't propagate.

IDs cross-referenced against coa-professionmenu/ProfessionMenu.lua
:200-206 (the in-house CoA profession panel which enumerates these
exact IDs) and verified against db.exil.es (/spell/13977860 →
"Woodcutting", /spell/1005011 → "Artisan Woodworking").
2026-05-17 16:43:01 +02:00
florian.berthold f53f3e3f0f CoA: mirror RAID_CLASS_COLORS for the 21 custom classes
Vanilla Altoholic hardcodes a 10-entry ChatColor table keyed by the
englishClass tokens MAGE/WARRIOR/.../DEATHKNIGHT. On the CoA Voljin/PTR
realm UnitClass / GetGuildRosterInfo return tokens like BARBARIAN,
WITCHDOCTOR, CHRONOMANCER, … so the lookup falls through:

  * Altoholic:GetClassColor (Altoholic.lua:580) returns WHITE for all
    21 CoA classes via the `or WHITE` fallback — guild/character/
    profession panes lose their per-class colours.
  * DataStore_Characters._GetColoredCharacterName had no fallback at
    all — `ClassColors[englishClass] .. character.name` hard-crashed
    on nil-concat for any CoA-class character.
  * Altoholic.lua:710 read CLASS_ICON_TCOORDS[class] for the character
    portrait without a fallback; CoA classes aren't in the vanilla
    sprite sheet's coord table, so the next line `tc[1]` crashed.

Fix follows the established Exiles addon-port pattern (see
coa-omen/CoAClassColors.lua, coa-shadowedunitframes/.../CoAClassColors.lua,
coa-kui-nameplates/.../CoAClassColors.lua): mirror _G.RAID_CLASS_COLORS
into the addon's private table at load. The CoA client itself ships
the realm-authoritative 32-token palette (10 vanilla + HERO + 21 CoA)
in Interface/SharedXML/SharedConstants.lua inside patch-B.MPQ, which
populates RAID_CLASS_COLORS at FrameXML load time — see
db.exil.es /coa/dev for the full table.

- Altoholic/CoAClassColors.lua: new file, mirrors source palette into
  Altoholic.ClassInfo as "|cFFRRGGBB" ChatColor escapes. Never
  overwrites — preserves the addon's vanilla defaults and any future
  user overrides.
- Altoholic/Altoholic.xml: loads CoAClassColors.lua after Altoholic.lua
  so Altoholic.ClassInfo exists.
- Altoholic/Altoholic.lua: defensive CLASS_ICON_TCOORDS lookup with
  WARRIOR fallback (wrong icon beats crash; CoA character creation
  uses its own sprite sheet which doesn't extend the vanilla table).
- DataStore_Characters/DataStore_Characters.lua: inline mirror after
  the local ClassColors table (can't be touched from a sibling file
  because the table is file-local), plus `or WHITE` defensive fallback
  in _GetColoredCharacterName and _GetClassColor.

Does not touch DataStore_Talents — CoA's MoA system uses
C_CharacterAdvancement, not GetNumTalentTabs/GetTalentInfo, so that
module needs a full API rewrite rather than a data patch.
2026-05-17 16:37:57 +02:00
telkar-rg 0fa1293223 Update README.md 2025-08-01 14:24:47 +02:00
telkar-rg da6fe7a427 version bump 2025-08-01 14:17:54 +02:00
telkar-rg bf181351b8 fixed use of "AceTimer:ScheduleTimer(callback, delay, arg)" 2025-08-01 13:59:24 +02:00
telkar-rg c7dd5efdb5 Update README.md 2025-07-21 20:25:29 +02:00
telkar-rg eed2c35412 version bump 2025-07-21 20:10:49 +02:00
telkar-rg c3219e81c1 added "Func Call Spam Protection" for "CURRENCY_DISPLAY_UPDATE" Event in "DataStore_Currencies" file 2025-07-21 20:01:53 +02:00
telkar-rg 111fd0d153 added "Func Call Spam Protection" for "UNIT_INVENTORY_CHANGED" Event in "DataStore_Stats" file 2025-07-21 17:28:34 +02:00
telkar-rg fb53721d71 added "Func Call Spam Protection" for "BAG_UPDATE" Event in "DataStore_Mails" file 2025-07-21 17:14:04 +02:00
telkar-rg a43b18506c added "Func Call Spam Protection" for "BAG_UPDATE" Event in "DataStore_Containers" file 2025-07-21 17:13:41 +02:00
telkar-rg fdcb25a94d Scan on "PLAYER_ALIVE" Event changed to only execute when player releases spirit (not on "Feign Death" or resurrect by player) 2025-07-21 15:15:00 +02:00
telkar-rg edbfb74d83 added img 2025-03-24 16:03:04 +01:00
telkar-rg eb280c3cd0 img edited 2025-03-24 16:02:58 +01:00
telkar-rg f7c181b476 imgs edited 2025-03-24 15:57:55 +01:00
telkar-rg 7976352fb7 added imgs 2025-03-24 15:55:36 +01:00
telkar-rg 2744c8ec1a version bump 2025-03-24 15:55:29 +01:00