Загрузить файлы в «/»

This commit is contained in:
Ade
2026-11-06 20:11:37 +00:00
parent c83a012c29
commit bb6b27e14d
5 changed files with 150 additions and 106 deletions
+5 -3
View File
@@ -10,15 +10,16 @@ including those on **other accounts**, and shows it in one window.
- **Total gold** of all alts.
- **Professions** – skill levels, known and **missing recipes** with required level and source (trainer, vendor, drop, quest...), sortable, with tooltips. Recipe items also show which of your alts can learn them, and every item tooltip shows how many of it your other alts carry.
- **Equipped gear** of every alt.
- **Minimap button** – docks into pfUI's addon button panel automatically.
- **Settings** – window scale, width, height, background opacity, background colour, cooldown-window opacity.
- **Minimap button** – classic round button; docks into pfUI's addon button panel automatically.
- **Settings** – window scale, width, height, background opacity, background colour, cooldown-window opacity, window style.
- **Looks** – classic Blizzard windows by default, pfUI look automatically when pfUI is installed (switchable).
## Requirements
- Turtle WoW / any 1.12 client.
- Optional but recommended: **[SuperWoW](https://github.com/balakethelock/SuperWoW)** – lets all accounts in the same
game folder share data through `imports\AdeAlts.txt`. Without it, nothing is shared between accounts unless you enable chat sync with `/ade chat` (cooldowns only).
- Optional: pfUI (minimap button docking and skin).
- Optional: pfUI (pfUI window look and minimap button docking). Not required: without pfUI the addon uses classic Blizzard-style windows.
## Installation
@@ -58,6 +59,7 @@ Every alias works the same: `/ade`, `/adealts`, `/pcd`, `/profcd`, `/cdt`.
| `/ade del <name>` | Remove a cached character and ignore it from now on, so chat / shared-file sync cannot bring it back (not the one you are logged in on) |
| `/ade unignore <name>` | Stop ignoring a character removed with `del` |
| `/ade counts` | Turn the "On alts: N" item amounts in item tooltips on / off |
| `/ade style [auto\|blizz\|pfui]` | Window style: `auto` = pfUI look when pfUI is installed, otherwise Blizzard; `blizz` forces the classic look; `pfui` forces pfUI (needs pfUI installed). Also in Settings. |
| `/ade chat` | Turn guild / party / raid addon-message sync on or off (**off by default**; SuperWoW file sync is unaffected) |
## How data is shared
+13
View File
@@ -99,6 +99,7 @@ ev:SetScript("OnEvent", function()
local sv = ch.prof and ch.prof.Survival
if sv and AA.BadProf("Survival", sv.m) then ch.prof.Survival = nil end
end
AA.ApplyStyle()
AA.ApplyConfig()
AA.db.angle = AA.db.angle or 200
if AA.db.hidden then AA.btn:Hide() end
@@ -288,6 +289,18 @@ SlashCmdList["PROFCD"] = function(msg)
end
end
AA.Print("no longer ignoring " .. n .. " character(s).")
elseif cmd == "style" then
local a = string.lower(arg or "")
if a == "blizz" or a == "blizzard" then AA.db.style = "blizz"
elseif a == "pfui" then AA.db.style = "pfui"
elseif a == "auto" then AA.db.style = nil
else
AA.Print("window style: " .. (AA.db.style or "auto") .. " - use /ade style auto | blizz | pfui")
return
end
AA.ApplyStyle()
if AA.UpdateStyleBtn then AA.UpdateStyleBtn() end
AA.Print("window style: " .. (AA.db.style or "auto") .. (AA.UsePf() and " (pfUI look)" or " (Blizzard look)"))
elseif cmd == "chat" then
AA.db.chat = not AA.db.chat
AA.Print("guild / party / raid sync " .. (AA.db.chat and "|cff40ff40ON|r (cooldowns are sent to and accepted from guild / party / raid)" or "|cffff6060OFF|r (default; nothing is sent or accepted from chat)") .. ".")
+16 -37
View File
@@ -12,46 +12,25 @@ AA.btn:SetFrameLevel(8)
AA.btn:RegisterForClicks("LeftButtonUp", "RightButtonUp")
AA.btn:RegisterForDrag("LeftButton")
local icon = AA.btn:CreateTexture(nil, "BACKGROUND")
-- classic round minimap button (gold ring); pfUI keeps this look for docked buttons
local bg = AA.btn:CreateTexture(nil, "BACKGROUND")
bg:SetTexture("Interface\\Minimap\\UI-Minimap-Background")
bg:SetWidth(20)
bg:SetHeight(20)
bg:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 7, -5)
local icon = AA.btn:CreateTexture(nil, "ARTWORK")
icon:SetTexture("Interface\\Icons\\Trade_Alchemy")
icon:SetWidth(20)
icon:SetHeight(20)
icon:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 7, -5)
icon:SetTexCoord(0.07, 0.93, 0.07, 0.93)
local border = AA.btn:CreateTexture(nil, "OVERLAY")
border:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder")
function AA.StyleButton()
if pfUI and pfUI.api and pfUI.api.CreateBackdrop then
-- pfUI look: flat icon inside a pfUI backdrop, same as other docked buttons
if not AA.btn.pcdBackdrop then
AA.btn.pcdBackdrop = true
pcall(pfUI.api.CreateBackdrop, AA.btn, nil, true)
end
icon:SetDrawLayer("ARTWORK")
icon:ClearAllPoints()
icon:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 3, -3)
icon:SetPoint("BOTTOMRIGHT", AA.btn, "BOTTOMRIGHT", -3, 3)
icon:SetTexCoord(0.08, 0.92, 0.08, 0.92)
border:Hide()
AA.btn:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
elseif pfUI then
icon:SetDrawLayer("ARTWORK")
icon:ClearAllPoints()
icon:SetAllPoints(AA.btn)
icon:SetTexCoord(0.08, 0.92, 0.08, 0.92)
border:Hide()
AA.btn:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
else
icon:SetDrawLayer("BACKGROUND")
icon:ClearAllPoints()
icon:SetWidth(20); icon:SetHeight(20)
icon:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 6, -5)
icon:SetTexCoord(0, 1, 0, 1)
border:ClearAllPoints()
border:SetWidth(53); border:SetHeight(53)
border:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 0, 0)
border:Show()
AA.btn:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight")
end
end
AA.StyleButton()
border:SetWidth(53)
border:SetHeight(53)
border:SetPoint("TOPLEFT", AA.btn, "TOPLEFT", 0, 0)
AA.btn:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight")
AA.StyleButton = function() end
function AA.PlaceButton()
if AA.btn:GetParent() ~= Minimap then return end -- docked by pfUI
+115
View File
@@ -0,0 +1,115 @@
-- Ade Alts: skin (window backgrounds: pfUI look or classic Blizzard look)
local AA = AdeAlts
-- backgrounds: only these colours change with the opacity setting (never icons / text) -----
local skinned = {} -- frames that follow the opacity setting
local allskins = {} -- every skinned frame (the style can be switched at any time)
-- pfUI look when pfUI is installed (and not switched off in the settings), Blizzard look otherwise
function AA.UsePf()
if AA.db and AA.db.style == "blizz" then return false end
return (pfUI and pfUI.api and pfUI.api.CreateBackdrop) and true or false
end
function AA.ApplySkin(rec)
local fr = rec.f
rec.pf = false
if AA.UsePf() then
if not fr.backdrop then pcall(pfUI.api.CreateBackdrop, fr) end
if fr.backdrop and fr.backdrop.GetBackdropColor then
if not rec.pfeff then
local r, g, b, a0 = fr.backdrop:GetBackdropColor()
rec.pfr, rec.pfg, rec.pfb, rec.pfeff = r or 0, g or 0, b or 0, a0 or 0.85 -- pfUI's own alpha counts as 100 %
end
fr:SetBackdrop(nil)
fr.backdrop:Show()
rec.pf = true
rec.r, rec.g, rec.b, rec.eff = rec.pfr, rec.pfg, rec.pfb, rec.pfeff
return
end
end
if fr.backdrop then fr.backdrop:Hide() end
if rec.top then
-- classic dialog window
fr:SetBackdrop({
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
tile = true, tileSize = 32, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 },
})
rec.r, rec.g, rec.b = 1, 1, 1
else
-- classic tooltip-style panel
fr:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 14,
insets = { left = 4, right = 4, top = 4, bottom = 4 },
})
rec.r, rec.g, rec.b = 0, 0, 0
end
rec.eff = rec.base
end
-- a = background alpha, fixed = ignores the opacity setting, top = main window (dialog look)
function AA.SkinFrame(fr, a, fixed, top)
local rec = { f = fr, base = a or 0.9, top = top }
fr.adeSkin = rec
table.insert(allskins, rec)
if not fixed then table.insert(skinned, rec) end
AA.ApplySkin(rec)
AA.PaintSkin(rec, 1)
end
-- chosen background colour (settings), or nil for the default
function AA.BgColor()
local c = AA.db and AA.db.bg
if c then return c[1], c[2], c[3] end
end
function AA.PaintSkin(rec, o)
local cr, cg, cb = AA.BgColor()
local r, g, b = cr or rec.r, cg or rec.g, cb or rec.b
local target = rec.pf and rec.f.backdrop or rec.f
target:SetBackdropColor(r, g, b, rec.eff * o)
end
function AA.ApplyOpacity(o)
for _, rec in ipairs(skinned) do AA.PaintSkin(rec, o) end
end
-- opacity of one skinned frame (cooldowns window)
function AA.SetSkinAlpha(fr, o)
if fr.adeSkin then AA.PaintSkin(fr.adeSkin, o) end
end
-- re-skin every window (style setting changed)
function AA.ApplyStyle()
for _, rec in ipairs(allskins) do AA.ApplySkin(rec) end
AA.ApplyOpacity((AA.db and AA.db.alpha) or 1)
if AA.f then AA.SetSkinAlpha(AA.f, (AA.db and AA.db.cdalpha) or 1) end
end
function AA.ItemTip(b)
local ref = b.itemStr
if not ref and b.itemId then ref = b.itemId .. ":0:0:0" end
if not ref then return end
GameTooltip:SetOwner(b, "ANCHOR_RIGHT")
local ok = pcall(GameTooltip.SetHyperlink, GameTooltip, "item:" .. ref)
if not ok or GameTooltip:NumLines() == 0 then
GameTooltip:ClearLines()
GameTooltip:AddLine(b.itemId and AA.ItemName(b.itemId) or ref)
end
GameTooltip:Show()
end
function AA.ScrollWheel(sf, step)
local sb = getglobal(sf:GetName() .. "ScrollBar")
if sb then sb:SetValue(sb:GetValue() - arg1 * step * 2) end
end
function AA.ResetScroll(sf)
local sb = getglobal(sf:GetName() .. "ScrollBar")
if sb then sb:SetValue(0) end
end
+1 -66
View File
@@ -95,71 +95,6 @@ function AA.SetClassTex(tex, class)
end
end
-- backgrounds: only these colours change with the opacity setting (never icons / text) -----
local skinned = {}
function AA.SkinFrame(fr, a, fixed)
local rec = { f = fr, base = a or 0.9 }
if pfUI and pfUI.api and pfUI.api.CreateBackdrop then
local ok = pcall(pfUI.api.CreateBackdrop, fr)
if ok and fr.backdrop and fr.backdrop.GetBackdropColor then
local r, g, b, a0 = fr.backdrop:GetBackdropColor()
rec.pf = true
rec.r, rec.g, rec.b = r or 0, g or 0, b or 0
rec.base = a0 or 0.85 -- pfUI's own alpha counts as 100 %
if not fixed then table.insert(skinned, rec) end
return
end
end
fr:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 14,
insets = { left = 4, right = 4, top = 4, bottom = 4 },
})
fr:SetBackdropColor(0, 0, 0, rec.base)
if not fixed then table.insert(skinned, rec) end
end
-- chosen background colour (settings), or nil for the default
function AA.BgColor()
local c = AA.db and AA.db.bg
if c then return c[1], c[2], c[3] end
end
function AA.ApplyOpacity(o)
local cr, cg, cb = AA.BgColor()
for _, rec in ipairs(skinned) do
if rec.pf then
rec.f.backdrop:SetBackdropColor(cr or rec.r, cg or rec.g, cb or rec.b, rec.base * o)
else
rec.f:SetBackdropColor(cr or 0, cg or 0, cb or 0, rec.base * o)
end
end
end
function AA.ItemTip(b)
local ref = b.itemStr
if not ref and b.itemId then ref = b.itemId .. ":0:0:0" end
if not ref then return end
GameTooltip:SetOwner(b, "ANCHOR_RIGHT")
local ok = pcall(GameTooltip.SetHyperlink, GameTooltip, "item:" .. ref)
if not ok or GameTooltip:NumLines() == 0 then
GameTooltip:ClearLines()
GameTooltip:AddLine(b.itemId and AA.ItemName(b.itemId) or ref)
end
GameTooltip:Show()
end
function AA.ScrollWheel(sf, step)
local sb = getglobal(sf:GetName() .. "ScrollBar")
if sb then sb:SetValue(sb:GetValue() - arg1 * step * 2) end
end
function AA.ResetScroll(sf)
local sb = getglobal(sf:GetName() .. "ScrollBar")
if sb then sb:SetValue(0) end
end
-- main frame ----------------------------------------------------------
AA.M = CreateFrame("Frame", "AdeAltsManager", UIParent)
AA.M:SetWidth(AA.DEF_W)
@@ -172,7 +107,7 @@ AA.M:RegisterForDrag("LeftButton")
AA.M:SetScript("OnDragStart", function() this:StartMoving() end)
AA.M:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
AA.M:Hide()
AA.SkinFrame(AA.M, 0.95)
AA.SkinFrame(AA.M, 0.95, false, true)
table.insert(UISpecialFrames, "AdeAltsManager")
local mtitle = AA.M:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")