Compare commits

...

9 Commits

Author SHA1 Message Date
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.
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).
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.
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.
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.
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.
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.
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.
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.
2026-05-29 18:09:16 +02:00
55 changed files with 652 additions and 113 deletions
+6 -3
View File
@@ -495,11 +495,12 @@ function addon:SetItemButtonTexture(button, texture, width, height)
height = height or 36
local itemTexture = _G[button.."IconTexture"]
if not itemTexture then return end -- CoA: guard buttons that don't exist / lack an IconTexture region (e.g. iterating more professions than there are _ProfN buttons)
itemTexture:SetWidth(width);
itemTexture:SetHeight(height);
itemTexture:SetAllPoints(_G[button]);
SetItemButtonTexture(_G[button], texture)
end
@@ -551,6 +552,7 @@ function addon:GetSpellIDFromRecipeLink(link)
end
function addon:GetMoneyString(copper, color, noTexture)
copper = copper or 0 -- CoA: callers may pass a no-value DS getter result
color = color or "|cFFFFD700"
local gold = floor( copper / 10000 );
@@ -571,6 +573,7 @@ function addon:GetMoneyString(copper, color, noTexture)
end
function addon:GetTimeString(seconds)
seconds = seconds or 0 -- CoA: callers may pass a no-value DS getter result
local days = floor(seconds / 86400); -- TotalTime is expressed in seconds
seconds = mod(seconds, 86400)
local hours = floor(seconds / 3600);
@@ -647,7 +650,7 @@ function Altoholic:FormatDelay(timeStamp)
end
function addon:GetRestedXP(character)
local rate = DS:GetRestXPRate(character)
local rate = DS:GetRestXPRate(character) or 0 -- CoA: getter returns no value for unscanned/partial chars
local coeff = 1
if addon.Options:Get("RestXPMode") == 1 then
+1 -1
View File
@@ -13,7 +13,7 @@
## Author: Thaoky, Telkar-RG
## X-Edited-By: Exiles (Sub-Net) — florian.berthold@sub-net.at
## Version: 3.3.002b-coa.11
## Version: 3.3.002b-coa.20
## X-Category: Inventory, Tradeskill, Mail
## X-Localizations: enUS, frFR, zhCN, zhTW, deDE, koKR, esES, esMX, ruRU
## X-Website: http://wow.curse.com/downloads/wow-addons/details/altoholic.aspx
+46 -3
View File
@@ -92,7 +92,7 @@
<Frame name="AltoholicFrame" toplevel="true" parent="UIParent" movable="true" enableMouse="true" hidden="true">
<Size>
<AbsDimension x="832" y="447"/>
<AbsDimension x="832" y="555"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
@@ -172,6 +172,49 @@
</Anchor>
</Anchors>
</Texture>
<!-- Filler strip covering the gap opened between the top row (ends at y=-256) and the
re-anchored bottom row (top now at y=-364). 108px tall = +6 content rows.
Uses a thin horizontal slice from the vertical middle (flat parchment / side border)
of the same AuctionFrame-Browse tiles, stretched over the 108px gap. -->
<Texture name="$parentMidLeft" file="Interface\AuctionFrame\UI-AuctionFrame-Browse-BotLeft">
<Size>
<AbsDimension x="256" y="108"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-256"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="1.0" top="0.46" bottom="0.54"/>
</Texture>
<Texture name="$parentMid" file="Interface\AuctionFrame\UI-AuctionFrame-Browse-Bot">
<Size>
<AbsDimension x="320" y="108"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="256" y="-256"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="1.0" top="0.46" bottom="0.54"/>
</Texture>
<Texture name="$parentMidRight" file="Interface\AuctionFrame\UI-AuctionFrame-Browse-BotRight">
<Size>
<AbsDimension x="256" y="108"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentMid" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="1.0" top="0.46" bottom="0.54"/>
</Texture>
<Texture name="$parentBotLeft" file="Interface\AuctionFrame\UI-AuctionFrame-Browse-BotLeft">
<Size>
<AbsDimension x="256" y="256"/>
@@ -179,7 +222,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-256"/>
<AbsDimension x="0" y="-364"/>
</Offset>
</Anchor>
</Anchors>
@@ -191,7 +234,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="256" y="-256"/>
<AbsDimension x="256" y="-364"/>
</Offset>
</Anchor>
</Anchors>
+1 -1
View File
@@ -168,7 +168,7 @@ end
function ns:Update()
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameSummary"
local entry = frame.."Entry"
+31 -1
View File
@@ -168,7 +168,7 @@
<Frame name="AltoholicFrameSummary" parent="AltoholicTabSummary">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -294,6 +294,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoCharacterSummaryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Frame name="$parentRightClickMenu" inherits="UIDropDownMenuTemplate" id="1" hidden="true">
<Size>
+1 -1
View File
@@ -23,7 +23,7 @@ local ns = addon.Activity -- ns = namespace
local Characters = addon.Characters
function ns:Update()
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameActivity"
local entry = frame.."Entry"
+31 -1
View File
@@ -176,7 +176,7 @@
<Frame name="AltoholicFrameActivity" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -302,6 +302,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoActivityTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+2 -2
View File
@@ -136,7 +136,7 @@ function ns:InvalidateView()
end
function ns:UpdateAuctions()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameAuctions"
local entry = frame.."Entry"
@@ -217,7 +217,7 @@ function ns:UpdateAuctions()
end
function ns:UpdateBids()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameAuctions"
local entry = frame.."Entry"
+16 -1
View File
@@ -106,7 +106,7 @@
<Frame name="AltoholicFrameAuctions" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -222,6 +222,21 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoAuctionEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoAuctionEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoAuctionEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+10 -10
View File
@@ -22,7 +22,7 @@ local ns = addon.BagUsage -- ns = namespace
local Characters = addon.Characters
function ns:Update()
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameBagUsage"
local entry = frame.."Entry"
@@ -118,15 +118,15 @@ function ns:Update()
_G[entry..i.."BankSlotsNormalText"]:SetText(L["Bank not visited yet"])
else
_G[entry..i.."BankSlotsNormalText"]:SetText(format("%s/%s|r/%s|r/%s|r/%s|r/%s|r/%s|r/%s |r(%s|r)",
DS:GetContainerSize(character, 100),
WHITE .. DS:GetContainerSize(character, 5),
WHITE .. DS:GetContainerSize(character, 6),
WHITE .. DS:GetContainerSize(character, 7),
WHITE .. DS:GetContainerSize(character, 8),
WHITE .. DS:GetContainerSize(character, 9),
WHITE .. DS:GetContainerSize(character, 10),
WHITE .. DS:GetContainerSize(character, 11),
CYAN .. DS:GetNumBankSlots(character)))
DS:GetContainerSize(character, 100) or 0, -- CoA: empty/unscanned bank bags return nil size
WHITE .. (DS:GetContainerSize(character, 5) or 0),
WHITE .. (DS:GetContainerSize(character, 6) or 0),
WHITE .. (DS:GetContainerSize(character, 7) or 0),
WHITE .. (DS:GetContainerSize(character, 8) or 0),
WHITE .. (DS:GetContainerSize(character, 9) or 0),
WHITE .. (DS:GetContainerSize(character, 10) or 0),
WHITE .. (DS:GetContainerSize(character, 11) or 0),
CYAN .. (DS:GetNumBankSlots(character) or 0)))
end
elseif (lineType == INFO_TOTAL_LINE) then
_G[entry..i.."Collapse"]:Hide()
+31 -1
View File
@@ -177,7 +177,7 @@
<Frame name="AltoholicFrameBagUsage" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -303,6 +303,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoBagUsageTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -764,7 +764,7 @@ function Altoholic.Calendar.Events:BuildList()
self:BuildView()
end
local NUM_EVENTLINES = 14
local NUM_EVENTLINES = 20
function Altoholic.Calendar.Events:Update()
local self = Altoholic.Calendar.Events
+32 -2
View File
@@ -131,7 +131,7 @@
<Frame name="AltoholicFrameCalendar" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -286,7 +286,7 @@
<ScrollFrame name="$parentScrollFrame" inherits="FauxScrollFrameTemplate">
<Size>
<AbsDimension x="250" y="306"/>
<AbsDimension x="250" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
@@ -406,6 +406,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoCalendarEventTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+5 -5
View File
@@ -96,7 +96,7 @@ end
local function UpdateSpread()
local mode = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectContainerView)
local rarity = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectRarity)
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameContainers"
local entry = frame.."Entry"
@@ -177,8 +177,8 @@ local function UpdateSpread()
local slotID = bagIndices[line].from - 3 + j
local itemID, itemLink, itemCount = DS:GetSlotInfo(container, slotID)
if (slotID <= containerSize) then
if (slotID <= (containerSize or 0)) then -- CoA: containerSize nil for unscanned bag on partial-data alt
if itemID then
Altoholic:SetItemButtonTexture(itemName, GetItemIcon(itemID));
@@ -242,7 +242,7 @@ end
local function UpdateAllInOne()
local mode = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectContainerView)
local rarity = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectRarity)
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameContainers"
local entry = frame.."Entry"
@@ -278,7 +278,7 @@ local function UpdateAllInOne()
local container = DS:GetContainer(character, containerID)
local _, _, containerSize = DS:GetContainerInfo(character, containerID)
for slotID = 1, containerSize do
for slotID = 1, (containerSize or 0) do -- CoA: containerSize nil for unscanned bag on partial-data alt
local itemID, itemLink, itemCount = DS:GetSlotInfo(container, slotID)
if itemID then
currentSlotIndex = currentSlotIndex + 1
+16 -1
View File
@@ -137,7 +137,7 @@
<Frame name="AltoholicFrameContainers" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -282,6 +282,21 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoContainerTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoContainerTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoContainerTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -177,7 +177,7 @@ local function Currencies_UpdateEx(self, offset, entry, desc)
end
local CurrenciesScrollFrame_Desc = {
NumLines = 8,
NumLines = 10,
LineHeight = 41,
Frame = "AltoholicFrameCurrencies",
GetSize = function() return #usedTokens end,
+11 -1
View File
@@ -175,7 +175,7 @@
<Frame name="AltoholicFrameCurrencies" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -302,6 +302,16 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoCurrenciesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoCurrenciesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -415,7 +415,7 @@ function ns:GetInventoryTypeName(inv)
end
function ns:Update()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameEquipment"
local entry = frame.."Entry"
+16 -1
View File
@@ -117,7 +117,7 @@
<Frame name="AltoholicFrameEquipment" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -213,6 +213,21 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoEquipmentEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoEquipmentEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoEquipmentEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -72,7 +72,7 @@ function ns:Update()
BuildView()
end
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameGuildBankTabs"
local entry = frame.."Entry"
+31 -1
View File
@@ -107,7 +107,7 @@
<Frame name="AltoholicFrameGuildBankTabs" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -233,6 +233,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoGuildBankTabsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+4 -4
View File
@@ -81,9 +81,9 @@ local SecondaryLevelSort = {-- sort functions for the alts
end
end,
["level"] = function(a, b)
local levelA = select(4, DataStore:GetGuildMemberInfo(a))
local levelB = select(4, DataStore:GetGuildMemberInfo(b))
local levelA = select(4, DataStore:GetGuildMemberInfo(a)) or 0 -- CoA: nil level on partial guild data crashed table.sort
local levelB = select(4, DataStore:GetGuildMemberInfo(b)) or 0
if viewSortOrder then
return levelA < levelB
else
@@ -285,7 +285,7 @@ function ns:Update()
BuildView()
end
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameGuildMembers"
local entry = frame.."Entry"
+31 -1
View File
@@ -159,7 +159,7 @@
<Frame name="AltoholicFrameGuildMembers" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -307,6 +307,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoGuildMembersTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<!-- Equipment Icons on the right of the frame -->
<Button name="$parentItem1" inherits="AltoAltEquipmentTemplate">
+10 -8
View File
@@ -25,9 +25,9 @@ local PrimaryLevelSort = { -- sort functions for the mains
end
end,
["level"] = function(a, b)
local levelA = select(4, DataStore:GetGuildMemberInfo(a.name))
local levelB = select(4, DataStore:GetGuildMemberInfo(b.name))
local levelA = select(4, DataStore:GetGuildMemberInfo(a.name)) or 0 -- CoA: nil level on partial guild data crashed table.sort
local levelB = select(4, DataStore:GetGuildMemberInfo(b.name)) or 0
if viewSortOrder then
return levelA < levelB
else
@@ -76,9 +76,9 @@ local SecondaryLevelSort = {-- sort functions for the alts
end
end,
["level"] = function(a, b)
local levelA = select(4, DataStore:GetGuildMemberInfo(a))
local levelB = select(4, DataStore:GetGuildMemberInfo(b))
local levelA = select(4, DataStore:GetGuildMemberInfo(a)) or 0 -- CoA: nil level on partial guild data crashed table.sort
local levelB = select(4, DataStore:GetGuildMemberInfo(b)) or 0
if viewSortOrder then
return levelA < levelB
else
@@ -199,6 +199,7 @@ local function DisplayProfessionLink(frameName, member, index)
local icon = addon:TextureToFontstring(addon:GetSpellIcon(tonumber(spellID)), 18, 18) .. " "
if link then
local curRank, maxRank = DataStore:GetProfessionInfo(link)
curRank, maxRank = curRank or 0, maxRank or 0 -- CoA: GetProfessionInfo returns nil if the link doesn't match the trade pattern
local ts = addon.TradeSkills
text:SetText(icon .. ts:GetColor(curRank) .. curRank .. "/" .. maxRank)
else
@@ -220,7 +221,7 @@ function ns:Update()
BuildView()
end
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameGuildProfessions"
local entry = frame.."Entry"
@@ -350,7 +351,8 @@ function ns:OnEnter(self)
if not spellID or not link then return end
local curRank, maxRank = DataStore:GetProfessionInfo(link)
curRank, maxRank = curRank or 0, maxRank or 0 -- CoA: nil ranks when link doesn't match trade pattern; guard concat below
AltoTooltip:ClearLines();
AltoTooltip:SetOwner(self, "ANCHOR_RIGHT");
+31 -1
View File
@@ -143,7 +143,7 @@
<Frame name="AltoholicFrameGuildProfessions" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -269,6 +269,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoGuildProfessionsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -461,7 +461,7 @@ function ns:Update()
AltoTooltip:Hide();
GameTooltip:Hide();
local VisibleLines = 8
local VisibleLines = 10
local NumLines = VisibleLines
local frame = "AltoholicFrameKeys"
local entry = frame.."Entry"
+11 -1
View File
@@ -221,7 +221,7 @@
<Frame name="AltoholicFrameKeys" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -317,6 +317,16 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -81,7 +81,7 @@ function ns:BuildView(field, ascending)
end
function ns:Update()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameMail"
local entry = frame.."Entry"
local player = addon:GetCurrentCharacter()
+16 -1
View File
@@ -84,7 +84,7 @@
<Frame name="AltoholicFrameMail" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -190,6 +190,21 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoMailEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoMailEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoMailEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -212,7 +212,7 @@ function ns:UpdatePets()
end
function ns:UpdatePetsAllInOne()
local VisibleLines = 8
local VisibleLines = 10
local frame = "AltoholicFramePetsAllInOne"
local entry = frame.."Entry"
+12 -2
View File
@@ -25,7 +25,7 @@
<Frame name="AltoholicFramePets" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -333,7 +333,7 @@
<Frame name="$parentAllInOne" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
@@ -429,6 +429,16 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoIconListtEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoIconListtEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -34,7 +34,7 @@ function ns:Update()
local character = addon.Tabs.Characters:GetCurrent()
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameQuests"
local entry = frame.."Entry"
+31 -1
View File
@@ -106,7 +106,7 @@
<Frame name="AltoholicFrameQuests" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -232,6 +232,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoQuestEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -218,7 +218,7 @@ end
function ns:Update()
local currentProfession = addon.TradeSkills.CurrentProfession
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameRecipes"
local entry = frame.."Entry"
+31 -1
View File
@@ -196,7 +196,7 @@
<Frame name="AltoholicFrameRecipes" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -459,6 +459,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoRecipesEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+1 -1
View File
@@ -365,7 +365,7 @@ local function Reputations_UpdateEx(self, offset, entry, desc)
end
local ReputationsScrollFrame_Desc = {
NumLines = 8,
NumLines = 10,
LineHeight = 41,
Frame = "AltoholicFrameReputations",
GetSize = function() return #displayedFactions end,
+11 -1
View File
@@ -178,7 +178,7 @@
<Frame name="AltoholicFrameReputations" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -309,6 +309,16 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoReputationEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoReputationEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+2 -2
View File
@@ -239,7 +239,7 @@ function ns:Realm_Update()
end
function ns:Loots_Update()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameSearch"
local entry = frame.."Entry"
@@ -311,7 +311,7 @@ function ns:Loots_Update()
end
function ns:Upgrade_Update()
local VisibleLines = 7
local VisibleLines = 10
local frame = "AltoholicFrameSearch"
local entry = frame.."Entry"
+16 -1
View File
@@ -240,7 +240,7 @@
<Frame name="AltoholicFrameSearch" parent="AltoholicTabSearch" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
<AbsDimension x="615" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -331,6 +331,21 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoSearchEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry9" inherits="AltoSearchEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry8" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry10" inherits="AltoSearchEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry9" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+3 -2
View File
@@ -29,7 +29,7 @@ local size = 22
local inset = 2
function ns:Update()
local VisibleLines = 14
local VisibleLines = 20
local frame = "AltoholicFrameSkills"
local entry = frame.."Entry"
@@ -118,7 +118,8 @@ function ns:Update()
local professions = Characters:GetField(line, "professions")
local profText = ""
if professions then
for _, p in ipairs(professions) do
for idx, p in ipairs(professions) do
if idx > 6 then profText = profText .. YELLOW .. "+" .. (#professions - 6) .. "|r"; break end -- CoA: cap inline profs so the strip fits its 325px cell
local rank = p.rank or 0
local profIcon = ""
if p.spellID then
+31 -1
View File
@@ -194,7 +194,7 @@
<Frame name="AltoholicFrameSkills" parent="AltoholicTabSummary" hidden="true">
<Size>
<AbsDimension x="745" y="306"/>
<AbsDimension x="745" y="414"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
@@ -320,6 +320,36 @@
<Anchor point="TOPLEFT" relativeTo="$parentEntry13" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry15" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry14" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry16" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry15" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry17" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry16" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry18" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry17" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry19" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry18" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry20" inherits="AltoSkillsTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry19" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
+13 -3
View File
@@ -227,22 +227,32 @@ function ns:UpdateViewIcons()
AltoholicTabCharacters_FirstAid.text = professionName
AltoholicTabCharacters_FirstAid:Show()
-- CoA: characters can know far more than the retail 2 primary professions, so the
-- _ProfN button row may run out before the profession list does. Stop at the last
-- existing button instead of indexing a nil frame (which crashed the character view).
local i = 1
for skillName, skill in pairs(DS:GetPrimaryProfessions(character) or {}) do -- CoA: getter returns no value for chars DataStore_Crafts hasn't scanned
for skillName, skill in pairs(DS:GetPrimaryProfessions(character) or {}) do
local itemName = "AltoholicTabCharacters_Prof" .. i
local item = _G[itemName]
if not item then break end -- no more profession buttons available
local spellID = DataStore:GetProfessionSpellID(skillName)
if spellID then
addon:SetItemButtonTexture(itemName, addon:GetSpellIcon(spellID), size, size)
item.text = skillName
item:Show()
else
item.text = nil
item:Hide()
item:Hide()
end
i = i + 1
end
-- Hide any leftover profession buttons this character doesn't fill.
while _G["AltoholicTabCharacters_Prof" .. i] do
_G["AltoholicTabCharacters_Prof" .. i].text = nil
_G["AltoholicTabCharacters_Prof" .. i]:Hide()
i = i + 1
end
end
function ns:MenuItem_OnClick(frame, button)
+47 -3
View File
@@ -55,7 +55,7 @@
<Frame name="AltoholicTabCharacters" parent="AltoholicFrame" hidden="true">
<Size>
<AbsDimension x="758" y="447"/>
<AbsDimension x="758" y="555"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
@@ -245,8 +245,8 @@
</Button>
<Button name="$parent_Prof1" inherits="AltoViewIconTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_FirstAid" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
<Anchor point="TOPLEFT" relativeTo="AltoholicTabCharacters" relativePoint="TOPLEFT" >
<Offset x="30" y="-235" />
</Anchor>
</Anchors>
</Button>
@@ -257,6 +257,50 @@
</Anchor>
</Anchors>
</Button>
<!-- CoA: characters can know many more than 2 primary professions. Extra slots;
UpdateViewIcons fills/hides them dynamically and stops at the last one. -->
<Button name="$parent_Prof3" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_Prof2" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Prof4" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_Prof3" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Prof5" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parent_Prof1" relativePoint="BOTTOMLEFT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Prof6" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_Prof5" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Prof7" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_Prof6" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Prof8" inherits="AltoViewIconTemplate" hidden="true">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent_Prof7" relativePoint="BOTTOMRIGHT" >
<Offset x="5" y="0" />
</Anchor>
</Anchors>
</Button>
<Button name="$parent_Sort1" inherits="AltoSortButtonTemplate" id="1">
<Size>
+1 -1
View File
@@ -18,7 +18,7 @@
<Frame name="AltoholicTabGuildBank" parent="AltoholicFrame" hidden="true">
<Size>
<AbsDimension x="758" y="447"/>
<AbsDimension x="758" y="555"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
+1 -1
View File
@@ -3,7 +3,7 @@
<Frame name="AltoholicTabSearch" parent="AltoholicFrame" hidden="true">
<Size>
<AbsDimension x="758" y="447"/>
<AbsDimension x="758" y="555"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT"/>
+1 -1
View File
@@ -14,7 +14,7 @@
<Frame name="AltoholicTabSummary" parent="AltoholicFrame">
<Size>
<AbsDimension x="758" y="447"/>
<AbsDimension x="758" y="555"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT"/>
+1
View File
@@ -337,6 +337,7 @@ function tns:Update(treeIndex)
-- textures are 90.625% of the original size
local _, bg = DS:GetTreeInfo(class, treeName)
if not bg then return end -- CoA: no talent-tree background for this class (e.g. custom class with no reference data)
AltoholicFrameTalents_bgTopLeft:SetTexture(bg.."-TopLeft")
AltoholicFrameTalents_bgTopRight:SetTexture(bg.."-TopRight")
AltoholicFrameTalents_bgBottomLeft:SetTexture(bg.."-BottomLeft")
+1 -1
View File
@@ -380,7 +380,7 @@ local function GetItemCount(searchedID)
for tabID = 1, 6 do
local tabCount = DataStore:GetGuildBankTabItemCount(guildKey, tabID, searchedID)
if tabCount > 0 then
table.insert(tabCounters, format("%s: %s", WHITE .. DataStore:GetGuildBankTabName(guildKey, tabID), TEAL..tabCount))
table.insert(tabCounters, format("%s: %s", WHITE .. (DataStore:GetGuildBankTabName(guildKey, tabID) or ""), TEAL..tabCount)) -- CoA: tab name nil on partial guild-bank data
end
end
@@ -55,8 +55,8 @@ local function ScanSingleAchievement(id, isCompleted, month, day, year)
if critCompleted then
table.insert(CriteriaCache, tostring(j))
else
if reqQuantity > 1 then
table.insert(CriteriaCache, j .. ":" .. quantity)
if (reqQuantity or 0) > 1 then -- CoA: GetAchievementCriteriaInfo can return nil quantities for custom/partial achievements
table.insert(CriteriaCache, j .. ":" .. (quantity or 0))
end
end
end
@@ -86,10 +86,15 @@ local function OnPlayerMoney()
addon.ThisCharacter.money = GetMoney();
end
local hasScannedThisSession
local function OnPlayerAlive()
-- print("DataStore_Characters.lua") -- DEBUG 2025 07 21
if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard
-- CoA: scan once at login. PLAYER_ALIVE also fires on resurrect / Feign-Death cancel
-- (unchanged data), so skip those. The previous "only when ghost" gate skipped LOGIN
-- too, so name/level/class/money/XP never populated on a normal login - the root of
-- "no character data". (Same trap as DataStore_Inventory / _Skills; see commit fdcb25a.)
if hasScannedThisSession then return end
hasScannedThisSession = true
local character = addon.ThisCharacter
character.name = UnitName("player") -- to simplify processing a bit, the name is saved in the table too, in addition to being part of the key
@@ -263,7 +268,7 @@ local function _GetGuildInfo(character)
end
local function _GetPlayTime(character)
return character.played
return character.played or 0 -- CoA: nil on partial-data alt; callers do arithmetic (AccountSummary)
end
local function _GetLocation(character)
+10 -7
View File
@@ -678,25 +678,28 @@ local BagTypeStrings = {
local function _GetContainerInfo(character, containerID)
local bag = _GetContainer(character, containerID)
if type(bag) ~= "table" then return end -- CoA: unscanned bag on partial-data alt; was an index-nil crash
return bag.icon, bag.link, bag.size, bag.freeslots, BagTypeStrings[bag.bagtype]
end
local function _GetContainerSize(character, containerID)
-- containerID can be number or string
return character.Containers["Bag" .. containerID].size
local bag = character.Containers["Bag" .. containerID] -- CoA: nil for unscanned bag on partial-data alt
return bag and bag.size
end
local function _GetSlotInfo(bag, slotID)
assert(type(bag) == "table") -- this is the pointer to a bag table, obtained through addon:GetContainer()
assert(type(slotID) == "number")
-- CoA: partial-data alts can have an unscanned/nil bag pointer (GetContainer returns nil
-- for a "BagN" the Containers module never scanned); return empties instead of asserting.
if type(bag) ~= "table" or type(slotID) ~= "number" then return end
-- return itemID, itemLink, itemCount
return bag.ids[slotID], bag.links[slotID], bag.counts[slotID] or 1
return bag.ids and bag.ids[slotID], bag.links and bag.links[slotID], (bag.counts and bag.counts[slotID]) or 1
end
local function _GetContainerCooldownInfo(bag, slotID)
assert(type(bag) == "table") -- this is the pointer to a bag table, obtained through addon:GetContainer()
assert(type(slotID) == "number")
-- CoA: partial-data alts can have an unscanned/nil bag pointer; degrade to nil gracefully.
if type(bag) ~= "table" or type(slotID) ~= "number" or type(bag.cooldowns) ~= "table" then return end
local cd = bag.cooldowns[slotID]
if cd then
@@ -868,7 +871,7 @@ end
local function _GetGuildBankTabItemCount(guild, tabID, searchedID)
local count = 0
local container = guild.Tabs[tabID]
if type(container) ~= "table" or type(container.ids) ~= "table" then return count end -- CoA: unscanned guild bank tab; was a pairs(nil) crash on item tooltips
for slotID, id in pairs(container.ids) do
if (id == searchedID) then
count = count + (container.counts[slotID] or 1)
+4 -1
View File
@@ -625,6 +625,9 @@ local function _GetProfessionInfo(profession)
end
local function _GetNumCraftLines(profession)
-- CoA: profession is nil for an unscanned/custom profession on a partial-data alt;
-- callers use this as a numeric `for` limit, so return 0 instead of crashing on #nil.Crafts
if type(profession) ~= "table" or type(profession.Crafts) ~= "table" then return 0 end
return #profession.Crafts
end
@@ -709,7 +712,7 @@ local function _GetNumRecipesByColor(profession)
for i = 1, _GetNumCraftLines(profession) do
local isHeader, color = _GetCraftLineInfo(profession, i)
if not isHeader then
if not isHeader and color and counts[color] then -- CoA: custom-profession craft lines can carry an out-of-range/nil color
counts[color] = counts[color] + 1
end
end
+4 -2
View File
@@ -274,8 +274,10 @@ local function _GetQuestLogRewardInfo(character, index, rewardIndex)
end
local function _GetQuestInfo(link)
assert(type(link) == "string")
-- CoA: GetQuestLogInfo can hand back a nil link for a partial-data alt; degrade to nil
-- returns instead of asserting (callers already nil-check the returned name/level).
if type(link) ~= "string" then return end
local questID, questLevel = link:match("quest:(%d+):(-?%d+)")
local questName = link:match("%[(.+)%]")
+19 -14
View File
@@ -234,41 +234,47 @@ local function _GetReferenceTable()
end
local function _GetClassReference(class)
assert(type(class) == "string")
-- CoA: custom classes (MONK, BARBARIAN, …) have no vanilla reference table; return nil
-- instead of asserting/crashing so callers can degrade gracefully.
if type(class) ~= "string" then return end
return addon.ref.global[class]
end
local function _GetTreeReference(class, tree)
assert(type(class) == "string")
assert(type(tree) == "string")
return addon.ref.global[class].Trees[tree]
-- CoA: custom classes (MONK, etc.) may have no/partial talent reference data, so a
-- tree lookup can arrive with a nil tree name. Degrade to nil instead of asserting.
if type(class) ~= "string" or type(tree) ~= "string" then return end
local c = addon.ref.global[class]
if not c or not c.Trees then return end
return c.Trees[tree]
end
local function _IsClassKnown(class)
class = class or "" -- if by any chance nil is passed, trap it to make sure the function does not fail, but returns nil anyway
local ref = _GetClassReference(class)
if ref.Order then -- if the Order field is not nil, we have data for this class
if ref and ref.Order then -- CoA: ref is nil for custom classes; was an unguarded index crash
return true
end
end
local function _ImportClassReference(class, data)
assert(type(class) == "string")
assert(type(data) == "table")
-- CoA: data arrives over Comm/AccountSharing; a peer with no reference for a custom
-- class can send nil, which used to crash the import. Skip silently instead.
if type(class) ~= "string" or type(data) ~= "table" then return end
addon.ref.global[class] = data
end
local function _GetClassTrees(class)
assert(type(class) == "string")
-- CoA: ref is nil for custom classes; guard so the `for tree in DS:GetClassTrees()`
-- loops in Talents.lua get an empty iterator instead of an index-nil crash.
local ref = _GetClassReference(class)
local order = ref.Order
local order = ref and ref.Order
if order then
return order:gmatch("([^,]+)")
end
-- to do, add a return value that does not require validity testing by the caller
return function() return nil end -- empty iterator so callers can loop safely
end
local function _GetTreeInfo(class, tree)
@@ -281,8 +287,7 @@ end
local function _GetTreeNameByID(class, id)
-- returns the name of tree "id" for a given class
assert(type(class) == "string")
-- CoA: _GetClassTrees now yields an empty iterator for custom classes, so no assert needed
local index = 1
for name in _GetClassTrees(class) do
if index == id then
+2
View File
@@ -5,6 +5,8 @@ Altoholic: modified development for WotLK
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 (1232) 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.