diff --git a/Altoholic/Altoholic.lua b/Altoholic/Altoholic.lua index 5f6a3ff..1babc6d 100644 --- a/Altoholic/Altoholic.lua +++ b/Altoholic/Altoholic.lua @@ -335,10 +335,8 @@ function addon:OnEnable() -- CoA: just "Altoholic " in the title bar (Exiles branding + author credit live in the .toc). -- Read the live .toc Version so it tracks each -coa.N release without editing this string. - -- CoA: use a Lua constant, not GetAddOnMetadata — TOC metadata is cached at game launch - -- and does NOT refresh on /reload, so the .toc version looked stale ("still .18"). A Lua - -- constant re-evaluates on every /reload, giving a truthful loaded-code version. Bump with the .toc. - AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.30|r") + local titleVersion = GetAddOnMetadata(addonName, "Version") or addon.Version + AltoholicFrameName:SetText("Altoholic |cFFFFFFFF".. titleVersion .."|r") local realm = GetRealmName() local player = UnitName("player") @@ -608,17 +606,13 @@ end -- Fresh alts have partial per-module data, so every field is guarded here once -- instead of being copy-pasted (and missed) across the frames. function Altoholic:AddCharacterTooltipHeader(character) - local locClass, engClass = DS:GetCharacterClass(character) - local className = Altoholic:GetCoAClassName(engClass) or locClass or "" -- CoA: current class name (PROPHET->Venomancer, …) AltoTooltip:AddDoubleLine(DS:GetColoredCharacterName(character) or "?", DS:GetColoredCharacterFaction(character) or "") AltoTooltip:AddLine(format("%s %s |r%s %s", L["Level"], - GREEN..(DS:GetCharacterLevel(character) or 0), DS:GetCharacterRace(character) or "", className), 1, 1, 1) + GREEN..(DS:GetCharacterLevel(character) or 0), DS:GetCharacterRace(character) or "", DS:GetCharacterClass(character) or ""), 1, 1, 1) end function Altoholic:SetCharacterRowNameLevel(entry, i, icon, character) - local locClass, engClass = DS:GetCharacterClass(character) - local className = Altoholic:GetCoAClassName(engClass) or locClass or "" -- CoA: current class name - _G[entry..i.."NameNormalText"]:SetText(icon .. format("%s (%s)", DS:GetColoredCharacterName(character) or "?", className)) + _G[entry..i.."NameNormalText"]:SetText(icon .. format("%s (%s)", DS:GetColoredCharacterName(character) or "?", DS:GetCharacterClass(character) or "")) _G[entry..i.."Level"]:SetText(GREEN .. (DS:GetCharacterLevel(character) or 0)) end diff --git a/Altoholic/Altoholic.toc b/Altoholic/Altoholic.toc index 7e30c77..f4c2e9f 100644 --- a/Altoholic/Altoholic.toc +++ b/Altoholic/Altoholic.toc @@ -13,7 +13,7 @@ ## Author: Thaoky, Telkar-RG ## X-Edited-By: Exiles (Sub-Net) — florian.berthold@sub-net.at -## Version: 3.3.002b-coa.30 +## Version: 3.3.002b-coa.19 ## 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 @@ -70,4 +70,4 @@ Frames\Skills.xml Frames\Search.xml Frames\Talents.xml -Frames\Keys.xml \ No newline at end of file +Frames\Keys.xml diff --git a/Altoholic/Altoholic.xml b/Altoholic/Altoholic.xml index 696cf24..ac97f6f 100644 --- a/Altoholic/Altoholic.xml +++ b/Altoholic/Altoholic.xml @@ -92,7 +92,7 @@ - + @@ -172,49 +172,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -222,7 +179,7 @@ - + @@ -234,7 +191,7 @@ - + diff --git a/Altoholic/Characters.lua b/Altoholic/Characters.lua index c2699b4..8a6d365 100644 --- a/Altoholic/Characters.lua +++ b/Altoholic/Characters.lua @@ -98,7 +98,6 @@ local function AddRealm(AccountName, RealmName) professions[#professions + 1] = { name = p.name, rank = p.rank or 0, - maxRank = p.maxRank or 0, -- CoA: needed for the "rank/max" display in the vertical Skills list spellID = DataStore:GetProfessionSpellID(p.name), } end diff --git a/Altoholic/CoAClassColors.lua b/Altoholic/CoAClassColors.lua index 799b096..29b8888 100644 --- a/Altoholic/CoAClassColors.lua +++ b/Altoholic/CoAClassColors.lua @@ -115,23 +115,3 @@ function Alto:GetCoAClassIcon(token) if not tc then return end return COA_CLASS_ICON_TEXTURE, tc[1], tc[2], tc[3], tc[4] end - --- CoA renamed its classes, but UnitClass()/DataStore still return the OLD tokens --- (PROPHET, MONK, …). Map them to the current display names. Source: coa-omen/README-CoA.md. --- Tokens not listed here keep their normal localized name (returns nil). -local COA_CLASS_NAMES = { - HERO = "Hero", BARBARIAN = "Barbarian", WITCHDOCTOR = "Witch Doctor", - DEMONHUNTER = "Felsworn", WITCHHUNTER = "Witch Hunter", STORMBRINGER = "Stormbringer", - FLESHWARDEN = "Knight of Xoroth", GUARDIAN = "Guardian", MONK = "Templar", - SONOFARUGAL = "Bloodmage", RANGER = "Ranger", CHRONOMANCER = "Chronomancer", - NECROMANCER = "Necromancer", PYROMANCER = "Pyromancer", CULTIST = "Cultist", - STARCALLER = "Starcaller", SUNCLERIC = "Sun Cleric", TINKER = "Tinker", - PROPHET = "Venomancer", REAPER = "Reaper", WILDWALKER = "Primalist", - SPIRITMAGE = "Runemaster", -} - --- Current CoA display name for a class token, or nil if unmapped (caller falls back). -function Alto:GetCoAClassName(token) - if type(token) ~= "string" then return end - return COA_CLASS_NAMES[token] -end diff --git a/Altoholic/Frames/AccountSummary.lua b/Altoholic/Frames/AccountSummary.lua index 2a90d21..96dde04 100644 --- a/Altoholic/Frames/AccountSummary.lua +++ b/Altoholic/Frames/AccountSummary.lua @@ -168,7 +168,7 @@ end function ns:Update() - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameSummary" local entry = frame.."Entry" diff --git a/Altoholic/Frames/AccountSummary.xml b/Altoholic/Frames/AccountSummary.xml index a4a7bfc..e65f1c0 100644 --- a/Altoholic/Frames/AccountSummary.xml +++ b/Altoholic/Frames/AccountSummary.xml @@ -168,7 +168,7 @@ - + @@ -294,36 +294,6 @@ - - - - - - diff --git a/Altoholic/Frames/Activity.lua b/Altoholic/Frames/Activity.lua index 6525114..9ff1899 100644 --- a/Altoholic/Frames/Activity.lua +++ b/Altoholic/Frames/Activity.lua @@ -23,7 +23,7 @@ local ns = addon.Activity -- ns = namespace local Characters = addon.Characters function ns:Update() - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameActivity" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Activity.xml b/Altoholic/Frames/Activity.xml index a1e9f44..763049c 100644 --- a/Altoholic/Frames/Activity.xml +++ b/Altoholic/Frames/Activity.xml @@ -176,7 +176,7 @@ - + @@ -302,36 +302,6 @@ - - - - - - diff --git a/Altoholic/Frames/AuctionHouse.lua b/Altoholic/Frames/AuctionHouse.lua index 772931c..2991518 100644 --- a/Altoholic/Frames/AuctionHouse.lua +++ b/Altoholic/Frames/AuctionHouse.lua @@ -136,7 +136,7 @@ function ns:InvalidateView() end function ns:UpdateAuctions() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameAuctions" local entry = frame.."Entry" @@ -217,7 +217,7 @@ function ns:UpdateAuctions() end function ns:UpdateBids() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameAuctions" local entry = frame.."Entry" diff --git a/Altoholic/Frames/AuctionHouse.xml b/Altoholic/Frames/AuctionHouse.xml index 5d343bc..f2cf05b 100644 --- a/Altoholic/Frames/AuctionHouse.xml +++ b/Altoholic/Frames/AuctionHouse.xml @@ -106,7 +106,7 @@ - + @@ -222,21 +222,6 @@ - - - diff --git a/Altoholic/Frames/BagUsage.lua b/Altoholic/Frames/BagUsage.lua index a478b50..eacdbc2 100644 --- a/Altoholic/Frames/BagUsage.lua +++ b/Altoholic/Frames/BagUsage.lua @@ -22,7 +22,7 @@ local ns = addon.BagUsage -- ns = namespace local Characters = addon.Characters function ns:Update() - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameBagUsage" local entry = frame.."Entry" diff --git a/Altoholic/Frames/BagUsage.xml b/Altoholic/Frames/BagUsage.xml index a9ac8cc..9714cb5 100644 --- a/Altoholic/Frames/BagUsage.xml +++ b/Altoholic/Frames/BagUsage.xml @@ -177,7 +177,7 @@ - + @@ -303,36 +303,6 @@ - - - - - - diff --git a/Altoholic/Frames/Calendar.lua b/Altoholic/Frames/Calendar.lua index 5561a84..65f796d 100644 --- a/Altoholic/Frames/Calendar.lua +++ b/Altoholic/Frames/Calendar.lua @@ -764,7 +764,7 @@ function Altoholic.Calendar.Events:BuildList() self:BuildView() end -local NUM_EVENTLINES = 20 +local NUM_EVENTLINES = 14 function Altoholic.Calendar.Events:Update() local self = Altoholic.Calendar.Events diff --git a/Altoholic/Frames/Calendar.xml b/Altoholic/Frames/Calendar.xml index fdc0fea..fa3ee8f 100644 --- a/Altoholic/Frames/Calendar.xml +++ b/Altoholic/Frames/Calendar.xml @@ -131,7 +131,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -406,36 +406,6 @@ - - - - - - diff --git a/Altoholic/Frames/Containers.lua b/Altoholic/Frames/Containers.lua index afc46be..27f3670 100644 --- a/Altoholic/Frames/Containers.lua +++ b/Altoholic/Frames/Containers.lua @@ -96,7 +96,7 @@ end local function UpdateSpread() local mode = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectContainerView) local rarity = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectRarity) - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameContainers" local entry = frame.."Entry" @@ -242,7 +242,7 @@ end local function UpdateAllInOne() local mode = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectContainerView) local rarity = UIDropDownMenu_GetSelectedValue(AltoholicFrameContainers_SelectRarity) - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameContainers" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Containers.xml b/Altoholic/Frames/Containers.xml index 4ff8fca..85c2d4b 100644 --- a/Altoholic/Frames/Containers.xml +++ b/Altoholic/Frames/Containers.xml @@ -137,7 +137,7 @@ - + @@ -282,21 +282,6 @@ - - - diff --git a/Altoholic/Frames/Currencies.lua b/Altoholic/Frames/Currencies.lua index 1d7637c..3d94c38 100644 --- a/Altoholic/Frames/Currencies.lua +++ b/Altoholic/Frames/Currencies.lua @@ -177,7 +177,7 @@ local function Currencies_UpdateEx(self, offset, entry, desc) end local CurrenciesScrollFrame_Desc = { - NumLines = 10, + NumLines = 8, LineHeight = 41, Frame = "AltoholicFrameCurrencies", GetSize = function() return #usedTokens end, diff --git a/Altoholic/Frames/Currencies.xml b/Altoholic/Frames/Currencies.xml index b33792a..823221a 100644 --- a/Altoholic/Frames/Currencies.xml +++ b/Altoholic/Frames/Currencies.xml @@ -175,7 +175,7 @@ - + @@ -302,16 +302,6 @@ - - diff --git a/Altoholic/Frames/Equipment.lua b/Altoholic/Frames/Equipment.lua index 6587eb7..2d684c5 100644 --- a/Altoholic/Frames/Equipment.lua +++ b/Altoholic/Frames/Equipment.lua @@ -415,7 +415,7 @@ function ns:GetInventoryTypeName(inv) end function ns:Update() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameEquipment" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Equipment.xml b/Altoholic/Frames/Equipment.xml index e8aa3fe..9c02118 100644 --- a/Altoholic/Frames/Equipment.xml +++ b/Altoholic/Frames/Equipment.xml @@ -117,7 +117,7 @@ - + @@ -213,21 +213,6 @@ - - - diff --git a/Altoholic/Frames/GuildBankTabs.lua b/Altoholic/Frames/GuildBankTabs.lua index ea44eef..165693c 100644 --- a/Altoholic/Frames/GuildBankTabs.lua +++ b/Altoholic/Frames/GuildBankTabs.lua @@ -72,7 +72,7 @@ function ns:Update() BuildView() end - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameGuildBankTabs" local entry = frame.."Entry" diff --git a/Altoholic/Frames/GuildBankTabs.xml b/Altoholic/Frames/GuildBankTabs.xml index 16736cb..2dd2070 100644 --- a/Altoholic/Frames/GuildBankTabs.xml +++ b/Altoholic/Frames/GuildBankTabs.xml @@ -107,7 +107,7 @@ - + @@ -233,36 +233,6 @@ - - - - - - diff --git a/Altoholic/Frames/GuildMembers.lua b/Altoholic/Frames/GuildMembers.lua index d9d4dd7..f16624e 100644 --- a/Altoholic/Frames/GuildMembers.lua +++ b/Altoholic/Frames/GuildMembers.lua @@ -285,7 +285,7 @@ function ns:Update() BuildView() end - local VisibleLines = 17 + local VisibleLines = 14 local frame = "AltoholicFrameGuildMembers" local entry = frame.."Entry" diff --git a/Altoholic/Frames/GuildMembers.xml b/Altoholic/Frames/GuildMembers.xml index 73877a6..d416eb3 100644 --- a/Altoholic/Frames/GuildMembers.xml +++ b/Altoholic/Frames/GuildMembers.xml @@ -159,7 +159,7 @@ - + @@ -307,36 +307,6 @@ - - - - - - - - - - - - diff --git a/Altoholic/Frames/Keys.lua b/Altoholic/Frames/Keys.lua index 3aabe6d..ca50d17 100644 --- a/Altoholic/Frames/Keys.lua +++ b/Altoholic/Frames/Keys.lua @@ -461,7 +461,7 @@ function ns:Update() AltoTooltip:Hide(); GameTooltip:Hide(); - local VisibleLines = 10 + local VisibleLines = 8 local NumLines = VisibleLines local frame = "AltoholicFrameKeys" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Keys.xml b/Altoholic/Frames/Keys.xml index 9687994..db9922a 100644 --- a/Altoholic/Frames/Keys.xml +++ b/Altoholic/Frames/Keys.xml @@ -221,7 +221,7 @@ - + @@ -317,16 +317,6 @@ - - diff --git a/Altoholic/Frames/Mails.lua b/Altoholic/Frames/Mails.lua index 9578c64..ab9401d 100644 --- a/Altoholic/Frames/Mails.lua +++ b/Altoholic/Frames/Mails.lua @@ -81,7 +81,7 @@ function ns:BuildView(field, ascending) end function ns:Update() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameMail" local entry = frame.."Entry" local player = addon:GetCurrentCharacter() diff --git a/Altoholic/Frames/Mails.xml b/Altoholic/Frames/Mails.xml index f72d190..2ba22ce 100644 --- a/Altoholic/Frames/Mails.xml +++ b/Altoholic/Frames/Mails.xml @@ -84,7 +84,7 @@ - + @@ -190,21 +190,6 @@ - - - diff --git a/Altoholic/Frames/Pets.lua b/Altoholic/Frames/Pets.lua index e48daf7..89f9b50 100644 --- a/Altoholic/Frames/Pets.lua +++ b/Altoholic/Frames/Pets.lua @@ -212,7 +212,7 @@ function ns:UpdatePets() end function ns:UpdatePetsAllInOne() - local VisibleLines = 10 + local VisibleLines = 8 local frame = "AltoholicFramePetsAllInOne" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Pets.xml b/Altoholic/Frames/Pets.xml index 115f927..ae8c97b 100644 --- a/Altoholic/Frames/Pets.xml +++ b/Altoholic/Frames/Pets.xml @@ -25,7 +25,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -429,16 +429,6 @@ - - diff --git a/Altoholic/Frames/Quests.lua b/Altoholic/Frames/Quests.lua index 77f24df..c2246f8 100644 --- a/Altoholic/Frames/Quests.lua +++ b/Altoholic/Frames/Quests.lua @@ -34,7 +34,7 @@ function ns:Update() local character = addon.Tabs.Characters:GetCurrent() - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameQuests" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Quests.xml b/Altoholic/Frames/Quests.xml index d73145c..707715a 100644 --- a/Altoholic/Frames/Quests.xml +++ b/Altoholic/Frames/Quests.xml @@ -106,7 +106,7 @@ - + @@ -232,36 +232,6 @@ - - - - - - diff --git a/Altoholic/Frames/Recipes.lua b/Altoholic/Frames/Recipes.lua index cb1cb49..493b075 100644 --- a/Altoholic/Frames/Recipes.lua +++ b/Altoholic/Frames/Recipes.lua @@ -218,7 +218,7 @@ end function ns:Update() local currentProfession = addon.TradeSkills.CurrentProfession - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameRecipes" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Recipes.xml b/Altoholic/Frames/Recipes.xml index 466478d..2f1c0f4 100644 --- a/Altoholic/Frames/Recipes.xml +++ b/Altoholic/Frames/Recipes.xml @@ -196,7 +196,7 @@ - + @@ -459,36 +459,6 @@ - - - - - - diff --git a/Altoholic/Frames/Reputations.lua b/Altoholic/Frames/Reputations.lua index e421b7b..556ffa1 100644 --- a/Altoholic/Frames/Reputations.lua +++ b/Altoholic/Frames/Reputations.lua @@ -365,7 +365,7 @@ local function Reputations_UpdateEx(self, offset, entry, desc) end local ReputationsScrollFrame_Desc = { - NumLines = 10, + NumLines = 8, LineHeight = 41, Frame = "AltoholicFrameReputations", GetSize = function() return #displayedFactions end, diff --git a/Altoholic/Frames/Reputations.xml b/Altoholic/Frames/Reputations.xml index 4e7bd9a..b36c483 100644 --- a/Altoholic/Frames/Reputations.xml +++ b/Altoholic/Frames/Reputations.xml @@ -178,7 +178,7 @@ - + @@ -309,16 +309,6 @@ - - diff --git a/Altoholic/Frames/Search.lua b/Altoholic/Frames/Search.lua index 78afba2..d4c7405 100644 --- a/Altoholic/Frames/Search.lua +++ b/Altoholic/Frames/Search.lua @@ -239,7 +239,7 @@ function ns:Realm_Update() end function ns:Loots_Update() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameSearch" local entry = frame.."Entry" @@ -311,7 +311,7 @@ function ns:Loots_Update() end function ns:Upgrade_Update() - local VisibleLines = 10 + local VisibleLines = 7 local frame = "AltoholicFrameSearch" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Search.xml b/Altoholic/Frames/Search.xml index 1889133..f4c4ca8 100644 --- a/Altoholic/Frames/Search.xml +++ b/Altoholic/Frames/Search.xml @@ -240,7 +240,7 @@ - + @@ -331,21 +331,6 @@ - - - diff --git a/Altoholic/Frames/Skills.lua b/Altoholic/Frames/Skills.lua index 164ede4..96e782c 100644 --- a/Altoholic/Frames/Skills.lua +++ b/Altoholic/Frames/Skills.lua @@ -28,130 +28,408 @@ local Characters = addon.Characters local size = 22 local inset = 2 - function ns:Update() - local VisibleLines = 18 + local VisibleLines = 14 local frame = "AltoholicFrameSkills" local entry = frame.."Entry" + + local DS = DataStore - - -- CoA: vertical list. For each visible character a header row, then one row per known - -- profession / secondary skill (icon + name + rank/max), top to bottom (like the other detail views). - local SECONDARY = { 2550, 3273, 7733 } -- Cooking, First Aid, Fishing (spell id -> icon + GetSpellInfo name) - local items = {} - for _, viewLine in pairs(Characters:GetView()) do - if Characters:GetLineType(viewLine) == INFO_CHARACTER_LINE then - local character = DS:GetCharacter( Characters:GetInfo(viewLine) ) - items[#items + 1] = { kind = "header", viewLine = viewLine, character = character } - - local profs = Characters:GetField(viewLine, "professions") - if profs then - for _, p in ipairs(profs) do - items[#items + 1] = { kind = "skill", viewLine = viewLine, character = character, - spellID = p.spellID, name = p.name, rank = p.rank or 0, maxRank = p.maxRank or 0 } + + local offset = FauxScrollFrame_GetOffset( _G[ frame.."ScrollFrame" ] ); + local DisplayedCount = 0 + local VisibleCount = 0 + local DrawRealm + local i=1 + + for _, line in pairs(Characters:GetView()) do + local lineType = Characters:GetLineType(line) + + if (offset > 0) or (DisplayedCount >= VisibleLines) then -- if the line will not be visible + if lineType == INFO_REALM_LINE then -- then keep track of counters + if Characters:GetField(line, "isCollapsed") == false then + DrawRealm = true + else + DrawRealm = false end + VisibleCount = VisibleCount + 1 + offset = offset - 1 -- no further control, nevermind if it goes negative + elseif DrawRealm then + VisibleCount = VisibleCount + 1 + offset = offset - 1 -- no further control, nevermind if it goes negative end - for _, sid in ipairs(SECONDARY) do - local sName = GetSpellInfo(sid) - if sName then - local cur, max = DS:GetSkillInfo(character, sName) - if cur and cur > 0 then - items[#items + 1] = { kind = "skill", viewLine = viewLine, character = character, - spellID = sid, name = sName, rank = cur, maxRank = max or 0 } + else -- line will be displayed + if lineType == INFO_REALM_LINE then + local _, realm, account = Characters:GetInfo(line) + + if Characters:GetField(line, "isCollapsed") == false then + _G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up"); + DrawRealm = true + else + _G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up"); + DrawRealm = false + end + _G[entry..i.."Collapse"]:Show() + _G[entry..i.."Name"]:SetWidth(300) + _G[entry..i.."Name"]:SetPoint("TOPLEFT", 25, 0) + _G[entry..i.."NameNormalText"]:SetWidth(300) + if account == "Default" then -- saved as default, display as localized. + _G[entry..i.."NameNormalText"]:SetText(format("%s (%s".. L["Account"]..": %s%s|r)", realm, WHITE, GREEN, L["Default"])) + else + local last = addon:GetLastAccountSharingInfo(realm, account) + _G[entry..i.."NameNormalText"]:SetText(format("%s (%s".. L["Account"]..": %s%s %s%s|r)", realm, WHITE, GREEN, account, YELLOW, last or "")) + end + _G[entry..i.."Level"]:SetText("") + _G[entry..i.."Skill1NormalText"]:SetText("") + _G[entry..i.."CookingNormalText"]:SetText("") + _G[entry..i.."FirstAidNormalText"]:SetText("") + _G[entry..i.."FishingNormalText"]:SetText("") + _G[entry..i.."RidingNormalText"]:SetText("") + + _G[ entry..i ]:SetID(line) + _G[ entry..i ]:Show() + i = i + 1 + VisibleCount = VisibleCount + 1 + DisplayedCount = DisplayedCount + 1 + elseif DrawRealm then + if (lineType == INFO_CHARACTER_LINE) then + local character = DS:GetCharacter( Characters:GetInfo(line) ) + + local icon + if DS:GetCharacterFaction(character) == "Alliance" then + -- icon = addon:TextureToFontstring(ICON_FACTION_ALLIANCE, size, size) .. " " + icon = addon:TextureToFontstring2(ICON_FACTION_ALLIANCE, size, size, inset, inset, inset, inset) .. " " + else + -- icon = addon:TextureToFontstring(ICON_FACTION_HORDE, size, size) .. " " + icon = addon:TextureToFontstring2(ICON_FACTION_HORDE, size, size, inset, inset, inset, inset) .. " " end + + _G[entry..i.."Collapse"]:Hide() + _G[entry..i.."Name"]:SetWidth(170) + _G[entry..i.."Name"]:SetPoint("TOPLEFT", 10, 0) + _G[entry..i.."NameNormalText"]:SetWidth(170) + addon:SetCharacterRowNameLevel(entry, i, icon, character) + + -- CoA: render ALL primary professions the character knows into the + -- single wide Professions cell, as a row of icon+rank segments. + -- The list is precomputed in Characters.lua (field "professions") + -- and may be empty (unscanned char) -> cell renders blank. Every + -- value is guarded with "or 0" before GetColor/concat. + local professions = Characters:GetField(line, "professions") + local profText = "" + if professions then + 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 + profIcon = addon:TextureToFontstring2(addon:GetSpellIcon(p.spellID), size, size, inset, inset, inset, inset) .. " " + end + profText = profText .. profIcon .. ns:GetColor(rank) .. rank .. "|r " + end + end + _G[entry..i.."Skill1NormalText"]:SetText(profText) + + local field + -- cooking + -- icon = addon:TextureToFontstring(addon:GetSpellIcon(2550), size, size) .. " " + icon = addon:TextureToFontstring2(addon:GetSpellIcon(2550), size, size, inset, inset, inset, inset) .. " " + field = Characters:GetField(line, "cooking") or 0 + _G[entry..i.."CookingNormalText"]:SetText(icon .. ns:GetColor(field) .. field) + + -- first aid + -- icon = addon:TextureToFontstring(addon:GetSpellIcon(3273), size, size) .. " " + icon = addon:TextureToFontstring2(addon:GetSpellIcon(3273), size, size, inset, inset, inset, inset) .. " " + field = Characters:GetField(line, "firstaid") or 0 + _G[entry..i.."FirstAidNormalText"]:SetText(icon .. ns:GetColor(field) .. field) + + -- fishing + -- icon = addon:TextureToFontstring(addon:GetSpellIcon(7733), size, size) .. " " + icon = addon:TextureToFontstring2(addon:GetSpellIcon(7733), size, size, inset, inset, inset, inset) .. " " + field = Characters:GetField(line, "fishing") or 0 + _G[entry..i.."FishingNormalText"]:SetText(icon .. ns:GetColor(field) .. field) + + -- riding + field = Characters:GetField(line, "riding") or 0 + if field >= 300 then + -- icon = addon:TextureToFontstring("Interface\\Icons\\Ability_Mount_Gryphon_01", size, size) .. " " + icon = addon:TextureToFontstring2("Interface\\Icons\\ability_mount_drake_bronze", size, size, inset, inset, inset, inset) + + for _,spId in pairs({63956, 63963, 60024, 72808, 72807, 63796, 40192, 69395, 60021, 59976, 64927, 67336, 65439, 49193, 71810, 44317, 44744, 58615, 37015, 3363, 32345}) do + -- IsPetKnown(character, companionType, spellID) + if DS:IsPetKnown(character, "MOUNT", spId) then + icon = addon:TextureToFontstring2("Interface\\Icons\\inv_misc_enggizmos_03", size, size, inset, inset, inset, inset) + break + end + end + elseif field >= 225 then + icon = addon:TextureToFontstring2("Interface\\Icons\\ability_mount_goldengryphon", size, size, inset, inset, inset, inset) + elseif field >= 150 then + icon = addon:TextureToFontstring2("Interface\\Icons\\ability_mount_charger", size, size, inset, inset, inset, inset) + elseif field >= 75 then + icon = addon:TextureToFontstring2("Interface\\Icons\\spell_nature_swiftness", size, size, inset, inset, inset, inset) + else + icon = addon:TextureToFontstring2("Interface\\Icons\\inv_boots_03", size, size, inset, inset, inset, inset) + end + + if DS:IsSpellKnown(character, 54197) then -- KNOWS [Cold Weather Flying] + -- Interface\Icons\Spell_Frost_FrostShock + -- icon = addon:TextureToFontstring(addon:GetSpellIcon(54197), size, size) .. " " + -- TextureToFontstringHalfSquare(name, side, inset, isRight) + -- icon = addon:TextureToFontstringHalfSquare(addon:GetSpellIcon(54197), size, inset, true) .. " " + -- icon = icon .. addon:TextureToFontstringHalfSquare(addon:GetSpellIcon(54197), size, inset, 0.7, 1.0) .. " " + + -- TextureToFontstringCut(name, heightOrig, widthOrig, insetLeft, insetRight, insetTop, insetBottom) + -- local sTemp = size+2*inset + -- icon = icon .. addon:TextureToFontstringCut(addon:GetSpellIcon(54197), sTemp, sTemp, floor(0.7*sTemp), floor(0.1*sTemp), inset, inset) .. " " + icon = addon:TextureToFontstring(addon:GetSpellIcon(54197), size, size) .. " " .. icon .. " " + + else -- DOES NOT KNOW [Cold Weather Flying] + icon = format("|T%s:%s:%s:0:0:%s:%s:%s:%s:%s:%s|t", addon:GetSpellIcon(54197), size, size, size, size, 0, 0, 0, 0) .. " " .. icon .. " " + end + + _G[entry..i.."RidingNormalText"]:SetText(icon .. ns:GetColor(field, 300) .. field) + elseif (lineType == INFO_TOTAL_LINE) then + _G[entry..i.."Collapse"]:Hide() + _G[entry..i.."Name"]:SetWidth(200) + _G[entry..i.."Name"]:SetPoint("TOPLEFT", 15, 0) + _G[entry..i.."NameNormalText"]:SetWidth(200) + _G[entry..i.."NameNormalText"]:SetText(L["Totals"]) + _G[entry..i.."Level"]:SetText(Characters:GetField(line, "level")) + _G[entry..i.."Skill1NormalText"]:SetText("") + _G[entry..i.."CookingNormalText"]:SetText("") + _G[entry..i.."FirstAidNormalText"]:SetText("") + _G[entry..i.."FishingNormalText"]:SetText("") + _G[entry..i.."RidingNormalText"]:SetText("") end + _G[ entry..i ]:SetID(line) + _G[ entry..i ]:Show() + i = i + 1 + VisibleCount = VisibleCount + 1 + DisplayedCount = DisplayedCount + 1 end - local riding = Characters:GetField(viewLine, "riding") or 0 - if riding > 0 then - items[#items + 1] = { kind = "skill", viewLine = viewLine, character = character, - spellID = 33388, name = (L and L["Riding"]) or "Riding", rank = riding, maxRank = 300 } - end - items[#items + 1] = { kind = "spacer" } -- blank row between characters end end - - local offset = FauxScrollFrame_GetOffset( _G[ frame.."ScrollFrame" ] ) - for i = 1, VisibleLines do - local e = entry..i - local btn = _G[e] - local item = items[i + offset] - if item then - _G[e.."Collapse"]:Hide() - _G[e.."Skill1NormalText"]:SetText("") - _G[e.."CookingNormalText"]:SetText("") - _G[e.."FirstAidNormalText"]:SetText("") - _G[e.."FishingNormalText"]:SetText("") - _G[e.."RidingNormalText"]:SetText("") - - if item.kind == "spacer" then - -- blank separator row between characters - _G[e.."Name"]:SetPoint("TOPLEFT", 15, 0) - _G[e.."NameNormalText"]:SetText("") - _G[e.."Level"]:SetText("") - elseif item.kind == "header" then - -- character header: gold "Name (Class)" across the row, no rank column - _G[e.."Name"]:SetPoint("TOPLEFT", 12, 0) - _G[e.."Name"]:SetWidth(420) - _G[e.."NameNormalText"]:SetWidth(420) - local cname = Characters:GetInfo(item.viewLine) or "?" -- name from the key, always present (scanned char.name can be nil) - local locClass, engClass = DS:GetCharacterClass(item.character) - local className = Altoholic:GetCoAClassName(engClass) or locClass or "" -- CoA: PROPHET->Venomancer, MONK->Templar, … - local classColor = DS:GetClassColor(item.character) or WHITE - _G[e.."NameNormalText"]:SetText( classColor .. cname .. "|r " .. WHITE .. "(" .. className .. ")" ) - _G[e.."Level"]:SetText("") - else - -- profession row: [icon] name in the Name cell (indented), rank/max in its own column - local iconEsc = "" - if item.spellID then - iconEsc = addon:TextureToFontstring2(addon:GetSpellIcon(item.spellID), size, size, inset, inset, inset, inset) .. " " - end - _G[e.."Name"]:SetPoint("TOPLEFT", 34, 0) - _G[e.."Name"]:SetWidth(170) - _G[e.."NameNormalText"]:SetWidth(170) - _G[e.."NameNormalText"]:SetText( iconEsc .. WHITE .. item.name ) - - local cap = (item.maxRank > 0) and item.maxRank or 450 - _G[e.."Level"]:SetPoint("TOPLEFT", 195, 0) - _G[e.."Level"]:SetWidth(120) - _G[e.."Level"]:SetJustifyH("LEFT") - _G[e.."Level"]:SetText( ns:GetColor(item.rank, cap) .. item.rank .. " / " .. item.maxRank ) - end - btn.coaItem = item - btn:SetID(item.viewLine or 0) - btn:Show() - else - btn.coaItem = nil - btn:SetID(0) - btn:Hide() - end + + while i <= VisibleLines do + _G[ entry..i ]:SetID(0) + _G[ entry..i ]:Hide() + i = i + 1 end - FauxScrollFrame_Update( _G[ frame.."ScrollFrame" ], #items, VisibleLines, 18 ) -end + + FauxScrollFrame_Update( _G[ frame.."ScrollFrame" ], VisibleCount, VisibleLines, 18); +end function ns:OnEnter(frame) - local item = frame:GetParent() and frame:GetParent().coaItem - if not item or item.kind ~= "skill" then return end - AltoTooltip:ClearLines() - AltoTooltip:SetOwner(frame, "ANCHOR_RIGHT") - AltoTooltip:AddLine(WHITE .. item.name, 1, 1, 1) - local cap = (item.maxRank > 0) and item.maxRank or 450 - AltoTooltip:AddLine( ns:GetColor(item.rank, cap) .. item.rank .. " / " .. item.maxRank, 1, 1, 1 ) - AltoTooltip:Show() + local line = frame:GetParent():GetID() + local lineType = Characters:GetLineType(line) + if lineType ~= INFO_CHARACTER_LINE then + return + end + + local id = frame:GetID() + local skillName, rank, suggestion + + local DS = DataStore + local character = DS:GetCharacter(Characters:GetInfo(line)) + + -- CoA: id 1 is now the combined "Professions" cell -> list every known primary + -- profession with rank/max and recipe counts in a single tooltip. + if id == 1 then + local professions = Characters:GetField(line, "professions") + AltoTooltip:ClearLines() + AltoTooltip:SetOwner(frame, "ANCHOR_RIGHT") + AltoTooltip:AddLine(L["Professions"] or "Professions", 1, 1, 1) + if not professions or #professions == 0 then + AltoTooltip:AddLine(L["No data"]) + AltoTooltip:Show() + return + end + for _, p in ipairs(professions) do + local pName = p.name + local curRank, maxRank = DS:GetSkillInfo(character, pName) + curRank, maxRank = curRank or 0, maxRank or 0 + local rankText = ns:GetColor(curRank) .. curRank .. "/" .. maxRank + local recipeText = "" + local prof = DS:GetProfession(character, pName) + if prof and DS:GetNumCraftLines(prof) > 0 then + local orange, yellow, green, grey = DS:GetNumRecipesByColor(prof) + recipeText = WHITE .. " (" .. (orange + yellow + green + grey) .. " " .. TRADESKILL_SERVICE_LEARN .. ")" + end + -- localized display name where possible + local displayName = pName + local spellID = DS:GetProfessionSpellID(pName) + if spellID then + displayName = GetSpellInfo(spellID) or pName + end + AltoTooltip:AddDoubleLine(WHITE .. displayName, rankText .. recipeText) + end + AltoTooltip:Show() + return + end + + if id == 3 then + skillName = GetSpellInfo(2550) -- cooking + elseif id == 4 then + skillName = GetSpellInfo(3273) -- First Aid + elseif id == 5 then + skillName = GetSpellInfo(24303) -- Fishing + elseif id == 6 then + skillName = L["Riding"] + end + + local curRank, maxRank = DS:GetSkillInfo(character, skillName) + curRank, maxRank = curRank or 0, maxRank or 0 -- CoA: getter returns no value for skills DataStore_Skills hasn't scanned + local profession = DS:GetProfession(character, skillName) + + if (id >= 3) and (id <= 6) then + if id == 6 then -- riding + rank = ns:GetColor(curRank, 300) .. curRank .. "/" .. maxRank + else + rank = ns:GetColor(curRank) .. curRank .. "/" .. maxRank + end + suggestion = addon:GetSuggestion(skillName, curRank) + elseif id == 7 then -- class + local _, class = DS:GetCharacterClass(character) + if class ~= "ROGUE" then + return + end + skillName = L["Rogue Proficiencies"] + + local curLock, maxLock = DS:GetSkillInfo(character, L["Lockpicking"]) + curLock, maxLock = curLock or 0, maxLock or 0 -- CoA: guard unscanned lockpicking + rank = TEAL .. L["Lockpicking"] .. " " .. curLock .. "/" .. maxLock + suggestion = addon:GetSuggestion(L["Lockpicking"], curLock) + end + + AltoTooltip:ClearLines(); + AltoTooltip:SetOwner(frame, "ANCHOR_RIGHT"); + AltoTooltip:AddLine(skillName,1,1,1); + AltoTooltip:AddLine(GREEN..rank,1,1,1); + + if (id == 3) or (id == 4) then -- crafting secondary skills (Cooking, First Aid); skips fishing/riding + if skillName ~= GetSpellInfo(13614) and skillName ~= GetSpellInfo(8613) then -- no display for herbalism & skinning + AltoTooltip:AddLine(" "); + + if not profession then + AltoTooltip:AddLine(L["No data"]); + AltoTooltip:Show(); + return + end + + if DS:GetNumCraftLines(profession) == 0 then + AltoTooltip:AddLine(L["No data"].. ": 0 " .. TRADESKILL_SERVICE_LEARN,1,1,1); + else + local orange, yellow, green, grey = DS:GetNumRecipesByColor(profession) + + AltoTooltip:AddLine(orange+yellow+green+grey .. " " .. TRADESKILL_SERVICE_LEARN,1,1,1); + AltoTooltip:AddLine(format(WHITE .. "%d " .. RECIPE_GREEN .. "Green|r /" + .. WHITE .. " %d " .. YELLOW .. "Yellow|r /" + .. WHITE .. " %d " .. RECIPE_ORANGE .. "Orange", + green, yellow, orange)) + end + end + end + + local skillCap = 450 + if id == 6 then + skillCap = 300 + end + + AltoTooltip:AddLine(" "); + AltoTooltip:AddLine(RECIPE_GREY .. L["Grey"] .. "|r " .. L["up to"] .. " " .. (floor(skillCap*0.25)-1),1,1,1); + AltoTooltip:AddLine(RED .. RED_GEM .. "|r " .. L["up to"] .. " " .. (floor(skillCap*0.50)-1),1,1,1); + AltoTooltip:AddLine(ORANGE .. BI["Orange"] .. "|r " .. L["up to"] .. " " .. (floor(skillCap*0.75)-1),1,1,1); + AltoTooltip:AddLine(YELLOW .. YELLOW_GEM .. "|r " .. L["up to"] .. " " .. (skillCap-1),1,1,1); + AltoTooltip:AddLine(GREEN .. BI["Green"] .. "|r " .. L["at"] .. " "..skillCap.." " .. L["and above"],1,1,1); + + if suggestion then + AltoTooltip:AddLine(" ",1,1,1); + AltoTooltip:AddLine(L["Suggestion"] .. ": ",1,1,1); + AltoTooltip:AddLine(TEAL .. suggestion,1,1,1); + end + + -- parse profession cooldowns + if id ~= 7 and profession then + DS:ClearExpiredCooldowns(profession) + local numCooldows = DS:GetNumActiveCooldowns(profession) + + if numCooldows == 0 then + AltoTooltip:AddLine(" ",1,1,1); + AltoTooltip:AddLine(L["All cooldowns are up"],1,1,1); + else + AltoTooltip:AddLine(" ",1,1,1); + for i = 1, numCooldows do + local craftName, expiresIn = DS:GetCraftCooldownInfo(profession, i) + AltoTooltip:AddDoubleLine(craftName, addon:GetTimeString(expiresIn)); + end + end + end + + AltoTooltip:Show(); end +local VIEW_MOUNTS = 8 + function ns:OnClick(frame, button) - -- CoA: clicking a profession row opens that character's profession recipe list, if available. - local item = frame:GetParent() and frame:GetParent().coaItem - if not item or item.kind ~= "skill" or not item.character then return end - if addon.Tabs and addon.Tabs.Characters and addon.Tabs.Characters.ViewCharInfo then - local name, realm, account = Characters:GetInfo(item.viewLine) - addon:SetCurrentCharacter(name, realm, account) - addon.Tabs.Characters:SetCurrent(name, realm, account) - addon.Tabs:OnClick(2) + local line = frame:GetParent():GetID() + local lineType = Characters:GetLineType(line) + if lineType ~= INFO_CHARACTER_LINE then + return + end + + local id = frame:GetID() + if id == 5 then return end -- fishing ? do nothing + + addon:SetCurrentCharacter( Characters:GetInfo(line) ) + + local skillName + if id == 1 then + -- CoA: id 1 is the combined Professions cell. A single click can't pick one + -- of several professions, so default to the first known primary profession + -- (opens its recipes / supplies its trade link on shift-click). + local professions = Characters:GetField(line, "professions") + if professions and professions[1] then + skillName = professions[1].name + end + elseif id == 3 then + skillName = GetSpellInfo(2550) -- cooking + elseif id == 4 then + skillName = GetSpellInfo(3273) -- First Aid + end + + local DS = DataStore + local character = DS:GetCharacter(Characters:GetInfo(line)) + local profession = DS:GetProfession(character, skillName) + + if skillName then + if not profession or DS:GetNumCraftLines(profession) == 0 then -- if profession hasn't been scanned (or scan failed), exit + return + end + end + + local charName, realm, account = addon:GetCurrentCharacter() + local chat = ChatEdit_GetLastActiveWindow() + + if chat:IsShown() and IsShiftKeyDown() and realm == GetRealmName() and id ~= 6 then + -- if shift-click, then display the profession link and exit + local link = profession.FullLink + if link and link:match("trade:") then + chat:Insert(link); + end + return + end + + addon.Tabs.Characters:SetCurrent(charName, realm, account) + addon.Tabs:OnClick(2) + + if id == 6 then + addon.Tabs.Characters:ViewCharInfo(VIEW_MOUNTS) + else + addon.Tabs.Characters:ViewRecipes(skillName) end end - local skillColors = { RECIPE_GREY, RED, ORANGE, YELLOW, GREEN } function ns:GetColor(rank, skillCap) @@ -165,4 +443,3 @@ function ns:GetColor(rank, skillCap) if index > #skillColors then index = #skillColors end return skillColors[index] end - diff --git a/Altoholic/Frames/Skills.xml b/Altoholic/Frames/Skills.xml index d275ec0..1a9477f 100644 --- a/Altoholic/Frames/Skills.xml +++ b/Altoholic/Frames/Skills.xml @@ -34,7 +34,7 @@ - - - - - - diff --git a/Altoholic/Frames/TabCharacters.xml b/Altoholic/Frames/TabCharacters.xml index 4303347..de17777 100644 --- a/Altoholic/Frames/TabCharacters.xml +++ b/Altoholic/Frames/TabCharacters.xml @@ -55,7 +55,7 @@ - + @@ -243,44 +243,63 @@ - - - - - - - - - - -