commit 4ef87a923c372b3635b182c9ace679bcd7071144 Author: Ade <923+ade@noreply.octowow.st> Date: Thu Oct 8 06:06:36 2026 +0000 Загрузить файлы в «/» diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f72bd57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.zip +.DS_Store +Thumbs.db diff --git a/AdeAlts.toc b/AdeAlts.toc new file mode 100644 index 0000000..39ab529 --- /dev/null +++ b/AdeAlts.toc @@ -0,0 +1,21 @@ +## Interface: 11200 +## Title: Ade Alts +## Notes: Alt manager: cooldowns, inventory, bank, gear and professions of all your characters. /ade +## Author: Ade +## Version: 1.0 +## SavedVariables: AdeAltsDB, ProfCDTrackerDB +## OptionalDeps: pfUI, SuperWoW, nampower +core.lua +scan.lua +cdwin.lua +ui_base.lua +ui_panel.lua +ui_equip.lua +ui_profs.lua +ui_show.lua +ui_layout.lua +ui_config.lua +sync.lua +minimap.lua +alert.lua +events.lua diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1a33bb2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +## 1.0 +- Equipment tab: three columns (6 / 6 / 5 slots) with icon, quality-coloured item name and tooltip. +- Settings: background colour picker. +- Fixed: hunter *Survival* talent line was shown as the Survival profession. +- Fishing, Skinning and Herbalism no longer ask for a recipe scan. +- Code split into several files (avoids Lua 5.0 local / upvalue limits). + +## 0.4 +- Professions with skill levels and known recipes, equipped gear, cooldown window opacity. + +## 0.3 / 0.2 +- Settings window (scale, size, opacity), sorting, gold and level fixes, per-alt inventory and bank. + +## 0.1 +- Cooldown tracker (Salt Shaker, Transmutes, Mooncloth), minimap button, login popup, cross-account sync. diff --git a/alert.lua b/alert.lua new file mode 100644 index 0000000..a20e836 --- /dev/null +++ b/alert.lua @@ -0,0 +1,67 @@ +-- Ade Alts: alert +local AA = AdeAlts + +---------------------------------------------------------------------- +-- login alert: small window listing everything that is ready +---------------------------------------------------------------------- +local al = CreateFrame("Frame", "AdeAltsAlert", UIParent) +al:SetWidth(300) +al:SetHeight(80) +al:SetPoint("TOP", UIParent, "TOP", 0, -140) +al:SetFrameStrata("DIALOG") +al:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, +}) +al:SetBackdropColor(0, 0, 0, 0.92) +al:SetMovable(true) +al:EnableMouse(true) +al:RegisterForDrag("LeftButton") +al:SetScript("OnDragStart", function() this:StartMoving() end) +al:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) +al:Hide() + +local altitle = al:CreateFontString(nil, "OVERLAY", "GameFontNormal") +altitle:SetPoint("TOP", al, "TOP", 0, -10) +altitle:SetText("|cff40ff40Cooldowns ready!|r") + +local altext = al:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") +altext:SetPoint("TOPLEFT", al, "TOPLEFT", 14, -28) +altext:SetWidth(272) +altext:SetJustifyH("LEFT") + +local alclose = CreateFrame("Button", nil, al, "UIPanelButtonTemplate") +alclose:SetWidth(80); alclose:SetHeight(22) +alclose:SetPoint("BOTTOM", al, "BOTTOM", 0, 10) +alclose:SetText("Close") +alclose:SetScript("OnClick", function() al:Hide() end) + +function AA.ShowReadyAlert(force) + if not AA.db then return end + if AA.db.noAlert and not force then return end + local nowt = time() + local text, lines = "", 0 + for _, k in ipairs(AA.SortedChars()) do + local c = AA.db.chars[k] + local ready = {} + for key, exp in pairs(c.cds) do + if exp <= nowt then table.insert(ready, key) end + end + if table.getn(ready) > 0 then + table.sort(ready) + text = text .. "|cff" .. AA.ClassHex(c.class) .. c.name .. "|r: " .. table.concat(ready, ", ") .. "\n" + lines = lines + 1 + end + end + if lines == 0 then + if not force then return end + text = "|cff808080Nothing is ready right now.\nOpen a profession window on each character\nto record its cooldowns.|r\n" + lines = 3 + end + altext:SetText(text) + al:SetHeight(lines * 14 + 70) + al:Show() +end + diff --git a/cdwin.lua b/cdwin.lua new file mode 100644 index 0000000..b26d5fe --- /dev/null +++ b/cdwin.lua @@ -0,0 +1,81 @@ +-- Ade Alts: cdwin +local AA = AdeAlts + +---------------------------------------------------------------------- +-- main window +---------------------------------------------------------------------- +AA.f = CreateFrame("Frame", "AdeAltsFrame", UIParent) +AA.f:SetWidth(400) +AA.f:SetHeight(100) +AA.f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) +AA.f:SetFrameStrata("DIALOG") +AA.f:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, +}) +AA.f:SetBackdropColor(0, 0, 0, 1) +AA.f:SetMovable(true) +AA.f:EnableMouse(true) +AA.f:RegisterForDrag("LeftButton") +AA.f:SetScript("OnDragStart", function() this:StartMoving() end) +AA.f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) +AA.f:Hide() +table.insert(UISpecialFrames, "AdeAltsFrame") + +local cdTitle = AA.f:CreateFontString(nil, "OVERLAY", "GameFontNormal") +cdTitle:SetPoint("TOPLEFT", AA.f, "TOPLEFT", 12, -10) +cdTitle:SetText("Profession Cooldowns") + +local close = CreateFrame("Button", nil, AA.f, "UIPanelCloseButton") +close:SetPoint("TOPRIGHT", AA.f, "TOPRIGHT", -2, -2) + +local cdLeft = AA.f:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") +cdLeft:SetPoint("TOPLEFT", AA.f, "TOPLEFT", 12, -32) +cdLeft:SetWidth(250) +cdLeft:SetJustifyH("LEFT") + +local cdRight = AA.f:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") +cdRight:SetPoint("TOPRIGHT", AA.f, "TOPRIGHT", -12, -32) +cdRight:SetWidth(110) +cdRight:SetJustifyH("RIGHT") + +AA.RefreshCD = function() + if not AA.db or not AA.f:IsVisible() then return end + local txtL, txtR, lines = "", "", 0 + local list = AA.Entries() + for _, e in ipairs(list) do + txtL = txtL .. e.l .. "\n" + txtR = txtR .. e.r .. "\n" + lines = lines + 1 + end + if lines == 0 then + txtL = "|cff808080No data yet. Open a profession window on each character.|r" + lines = 1 + end + cdLeft:SetText(txtL) + cdRight:SetText(txtR) + local h = 44 + lines * 12 + if h > 700 then h = 700 end + AA.f:SetHeight(h) +end + +AA.Refresh = function() + AA.RefreshCD() + if AA.RefreshManager then AA.RefreshManager() end +end + +AA.f:SetScript("OnUpdate", function() + this.t = (this.t or 0) + arg1 + if this.t >= 1 then + this.t = 0 + AA.RefreshCD() + end +end) +AA.f:SetScript("OnShow", function() if AA.FileMerge then AA.FileMerge() end AA.RefreshCD() end) + +function AA.ToggleWindow() + if AA.f:IsVisible() then AA.f:Hide() else AA.f:Show() end +end +