Commit Graph

210 Commits

Author SHA1 Message Date
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
telkar-rg e96df24680 Merge branch 'main' of https://github.com/telkar-rg/wow-Altoholic-dev 2025-03-24 15:38:09 +01:00
telkar-rg 6248952d1f Update README.md 2025-03-24 15:37:54 +01:00
telkar-rg 2c90e2b233 fixed formating error 2025-03-24 14:59:52 +01:00
telkar-rg 274ea540a7 added pets 2025-03-22 19:42:37 +01:00
telkar-rg 0b82514f52 version 1.03 2025-03-11 13:55:32 +01:00
telkar-rg 0a87a1e494 added Jewelcrafting 2025-03-10 06:26:27 +01:00
telkar-rg d891e5e382 added Enchanting recipes 2025-03-09 12:11:37 +01:00
telkar-rg cb80dcfd07 localization for engineering expanded 2025-03-09 08:44:58 +01:00