From 1c4fd753cbfbc4e4033bd7f2e749c193ac5d0d18 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 15:08:49 -0300 Subject: [PATCH 01/19] toc: remove unused FilgerData SavedVariable --- CLAUDE.md | 2 +- Filger.toc | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 20f49c9..23cc90c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,7 +12,7 @@ APIs and by secret values. Don't assume existing code is correct. **No configuration.** No options UI, slash-command configuration (`/filger` is help/dev only), profiles, per-character or per-client settings, and no SavedVariables added just to make something configurable. Decisions are made in code and constants (`config.lua`, `data/`). -The declared SavedVariable (`FilgerData`) is currently unused. If a feature genuinely needs new persistent state, explain +There are no SavedVariables. If a feature genuinely needs persistent state, explain why before adding it. **Minimalism.** No frameworks, abstractions, compatibility layers, helper systems or diff --git a/Filger.toc b/Filger.toc index 5cfe4ba..096af52 100644 --- a/Filger.toc +++ b/Filger.toc @@ -4,7 +4,6 @@ ## Credits: Nils Ruesch, Shestak, Affli, Garagar, hidekki, FourOne, Tukz ## OptionalDeps: Tainted, Tukui, ElvUI -## SavedVariables: FilgerData ## Notes: Minimal buff/debuff tracker ## Title: |cffff8000Filger|r From 2d25f881cf216d1edabab0bb892ab8056e123e03 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 15:58:52 -0300 Subject: [PATCH 02/19] data: collect invalid entries instead of warning at every login Finalize now records unresolved spell IDs and duplicated cooldowns in data.invalid as { kind, class, id } instead of printing a warning for each one at every login. Cooldown rows are now validated for every class, while the active list is still built from the player's class and ALL only. With dev enabled, each invalid entry is printed on its own line. --- core/data.lua | 72 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/core/data.lua b/core/data.lua index 74d3076..61ef32b 100644 --- a/core/data.lua +++ b/core/data.lua @@ -4,7 +4,8 @@ local _, ns = ... -- Data ------------------------------------------------------------ -- Loaded before core\init.xml: data files only collect tables here. --- Validation runs in Finalize() at ADDON_LOADED; it fills data.blacklist/spells/cooldowns. +-- Validation runs in Finalize() at ADDON_LOADED; it fills data.blacklist/spells/cooldowns, +-- and records unresolved or duplicated IDs in data.invalid as { kind, class, id }. local data = {} -- Compat @@ -60,7 +61,7 @@ function data.AddCooldowns(source) table.insert(cooldownSources, source) end -local buildBlacklist = function() +local buildBlacklist = function(invalid) local blacklist = {} for _, source in ipairs(blacklistSources) do for spellId, enabled in next, source do @@ -68,7 +69,7 @@ local buildBlacklist = function() if type(spellId) == "string" or GetSpellInfo(spellId) then blacklist[spellId] = true else - warn("Blacklist", "Spell " .. spellId .. " do not exists.") + table.insert(invalid, { kind = "blacklist", id = spellId }) end end end @@ -76,7 +77,7 @@ local buildBlacklist = function() return blacklist end -local buildSpells = function() +local buildSpells = function(invalid) local spells = {} for _, source in ipairs(spellSources) do for class, list in next, source do @@ -88,7 +89,7 @@ local buildSpells = function() if GetSpellInfo(spellId) then spells[class][spellId] = info else - warn("SPELLS", "Spell " .. spellId .. " do not exists.") + table.insert(invalid, { kind = "spell", class = class, id = spellId }) end end end @@ -96,35 +97,60 @@ local buildSpells = function() return spells end --- player class rows first, then "ALL" rows (racials, gear), each in source order -local buildCooldowns = function() +-- validates the enabled rows of `class`; appends the valid ones to `out` when given +local collectCooldowns = function(class, seen, out, invalid) + for _, source in ipairs(cooldownSources) do + for _, row in ipairs(source[class] or {}) do + if row.spellId and seen[row.spellId] then + table.insert(invalid, { kind = "duplicate", class = class, id = row.spellId }) + elseif row.enabled then + if row.spellId then seen[row.spellId] = true end + if row.slotId or GetSpellInfo(row.spellId) then + if out then table.insert(out, row) end + else + table.insert(invalid, { kind = "cooldown", class = class, id = row.spellId }) + end + end + end + end +end + +-- player class rows first, then "ALL" rows (racials, gear), each in source order; +-- other classes are only validated +local buildCooldowns = function(invalid) local cooldowns = {} local seen = {} - for _, key in ipairs({ ns.player.class, "ALL" }) do - for _, source in ipairs(cooldownSources) do - for _, row in ipairs(source[key] or {}) do - if row.spellId and seen[row.spellId] then - warn("COOLDOWN", "Spell " .. row.spellId .. " is duplicated.") - elseif row.enabled then - if row.spellId then seen[row.spellId] = true end - if row.slotId or GetSpellInfo(row.spellId) then - table.insert(cooldowns, row) - else - warn("COOLDOWN", "Spell " .. row.spellId .. " do not exists.") - end - end + collectCooldowns(ns.player.class, seen, cooldowns, invalid) + collectCooldowns("ALL", seen, cooldowns, invalid) + + local others = {} + for _, source in ipairs(cooldownSources) do + for class in next, source do + if class ~= ns.player.class and class ~= "ALL" then + others[class] = true end end end + for class in next, others do + collectCooldowns(class, {}, nil, invalid) + end return cooldowns end function data.Finalize() - data.blacklist = buildBlacklist() - data.spells = buildSpells() - data.cooldowns = buildCooldowns() + local invalid = {} + data.blacklist = buildBlacklist(invalid) + data.spells = buildSpells(invalid) + data.cooldowns = buildCooldowns(invalid) + data.invalid = invalid blacklistSources, spellSources, cooldownSources = nil, nil, nil + + if ns.config.general.dev then + for _, entry in ipairs(invalid) do + warn(entry.kind .. (entry.class and ("/" .. entry.class) or ""), entry.id) + end + end end ns.data = data From a73d4cb99a4e1a371b8940ccf5b0d2e1a9aadada Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 17:10:50 -0300 Subject: [PATCH 03/19] commands: add validate to list configured IDs missing on this client Prints the entries collected in data.invalid at load, grouped by kind and class, so spell data can be checked in-game on each client. --- README.md | 1 + core/commands.lua | 25 +++++++++++++++++++++++++ data/Standard/cooldowns.lua | 6 +++--- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ae8d4f0..98e9712 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ Spells shown or hidden per client are listed in [data/](./data). - `/filger help` - List all available commands. - `/filger auras ` - List your auras on a unit with their spell IDs. Out of combat only on Retail, while auras are secret. +- `/filger validate` - List configured spell IDs that don't exist on this client. ## Configuration diff --git a/core/commands.lua b/core/commands.lua index dc6ece3..30e0e4e 100644 --- a/core/commands.lua +++ b/core/commands.lua @@ -68,3 +68,28 @@ local auras = function(arg) end ns.AddCommand("auras", auras, "list your auras on a unit with their spell IDs (/filger auras player buffs)") + +-- lists configured IDs that don't resolve on this client +local validate = function() + local groups, keys = {}, {} + for _, entry in ipairs(ns.data.invalid) do + local key = entry.kind .. (entry.class and ("/" .. entry.class) or "") + if not groups[key] then + groups[key] = {} + table.insert(keys, key) + end + table.insert(groups[key], entry.id) + end + + if #keys == 0 then + print(Filger.title, "all configured IDs are valid.") + return + end + + table.sort(keys) + for _, key in ipairs(keys) do + print(Filger.title, "|cffff8000" .. key .. "|r", table.concat(groups[key], ", ")) + end +end + +ns.AddCommand("validate", validate, "list configured IDs that don't exist on this client") diff --git a/data/Standard/cooldowns.lua b/data/Standard/cooldowns.lua index 13449c9..c43a3af 100644 --- a/data/Standard/cooldowns.lua +++ b/data/Standard/cooldowns.lua @@ -55,7 +55,7 @@ local data = { -- Unholy CreateSpellCooldown(42650), -- Army of the Dead CreateSpellCooldown(49206), -- Summon Gargoyle - CreateSpellCooldown(455395), -- Rise Abomination + -- CreateSpellCooldown(455395), -- Rise Abomination }, ["DRUID"] = { -- General @@ -197,7 +197,7 @@ local data = { CreateSpellCooldown(32375), -- Mass Dispel CreateSpellCooldown(34433), -- Shadowfiennd CreateSpellCooldown(73325), -- Leap of Faith - CreateSpellCooldown(108920), -- Void Tendrils + -- CreateSpellCooldown(108920), -- Void Tendrils CreateSpellCooldown(108968), -- Void Shift CreateSpellCooldown(120517), -- Halo (Disciple / Holy) CreateSpellCooldown(120644), -- Halo (Shadow) @@ -255,7 +255,7 @@ local data = { CreateSpellCooldown(98008), -- Spirit Link Totem CreateSpellCooldown(108280), -- Healing Tide Totem CreateSpellCooldown(114052), -- Ascendance - CreateSpellCooldown(157153), -- Cloudburst Totem + -- CreateSpellCooldown(157153), -- Cloudburst Totem CreateSpellCooldown(198838), -- Eartheb Wall Totem CreateSpellCooldown(207399), -- Ancestral Protection Totem From 9a3935d60beb7f6316a0064168612da7bb45484f Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 17:20:07 -0300 Subject: [PATCH 04/19] data: resolve blacklist names from a spell ID Name entries now hold a representative ID marked name; Finalize stores its localized name, so matching works on every locale. Drop the Retail name keys, which never matched. --- core/data.lua | 7 ++++++- data/Standard/blacklist.lua | 2 -- data/shared/blacklist.lua | 14 +++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/core/data.lua b/core/data.lua index 61ef32b..db77c21 100644 --- a/core/data.lua +++ b/core/data.lua @@ -6,6 +6,7 @@ local _, ns = ... -- Loaded before core\init.xml: data files only collect tables here. -- Validation runs in Finalize() at ADDON_LOADED; it fills data.blacklist/spells/cooldowns, -- and records unresolved or duplicated IDs in data.invalid as { kind, class, id }. +-- A blacklist value of "name" also blacklists the spell's localized name (Classic filters only). local data = {} -- Compat @@ -66,8 +67,12 @@ local buildBlacklist = function(invalid) for _, source in ipairs(blacklistSources) do for spellId, enabled in next, source do if enabled then - if type(spellId) == "string" or GetSpellInfo(spellId) then + local info = GetSpellInfo(spellId) + if info then blacklist[spellId] = true + if enabled == "name" then + blacklist[info.name] = true + end else table.insert(invalid, { kind = "blacklist", id = spellId }) end diff --git a/data/Standard/blacklist.lua b/data/Standard/blacklist.lua index 690904c..d236ad6 100644 --- a/data/Standard/blacklist.lua +++ b/data/Standard/blacklist.lua @@ -85,8 +85,6 @@ do [462821] = true, -- General's Bulwark -- Consumables - ["Well Fed"] = true, - ["Hearty Well Fed"] = true, [454188] = true, -- Hearty Well Fed [462180] = true, -- Hearty Well Fed [462181] = true, -- Hearty Well Fed diff --git a/data/shared/blacklist.lua b/data/shared/blacklist.lua index af7568b..9660990 100644 --- a/data/shared/blacklist.lua +++ b/data/shared/blacklist.lua @@ -19,10 +19,11 @@ local LE_EXPANSION_MIDNIGHT = _G.LE_EXPANSION_MIDNIGHT or 11 -------------------------------------------------- -- Black List -------------------------------------------------- +-- "name": also hide every aura sharing this spell's localized name (all ranks, new food buffs) local general = { - ["Well Fed"] = true, - ["Drink"] = true, - ["Food"] = true, + [19705] = "name", -- Well Fed + [430] = "name", -- Drink + [433] = "name", -- Food -- Lust [57723] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Exhaustion (Heroism) @@ -32,15 +33,14 @@ local general = { [390435] = (EXPANSION >= LE_EXPANSION_DRAGONFLIGHT), -- Exhaustion (Evoker - Fury of the Aspects) -- DRUID - ["Mark of the Wild"] = true, - [1126] = true, -- Mark of the Wild + [1126] = "name", -- Mark of the Wild [768] = true, -- Cat Form [5487] = true, -- Bear Form [24858] = true, -- Moonkin Form [114282] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Treant Form -- MAGE - ["Arcane Intellect"] = true, + [1459] = "name", -- Arcane Intellect -- PALADIN [7294] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Retribution Aura @@ -49,7 +49,7 @@ local general = { [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura -- PRIEST - ["Power Word: Fortitude"] = true, + [1243] = "name", -- Power Word: Fortitude } AddBlacklist(general) From 59fb6d74480661da37052b7b5a9cd0961fc3fbec Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 17:29:16 -0300 Subject: [PATCH 05/19] cooldowns: count a shown secret cooldown as cast A cast whose UNIT_SPELLCAST_SUCCEEDED spellID is secret is never recorded, so the row vanished once the restriction lifted while its cooldown was still running. --- elements/cooldowns.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/elements/cooldowns.lua b/elements/cooldowns.lua index 362ebb0..0113fd6 100644 --- a/elements/cooldowns.lua +++ b/elements/cooldowns.lua @@ -176,6 +176,10 @@ do if self:FilterCooldown(data) then self.active[row] = data + -- a secret cooldown already shown counts as cast, in case the cast event's spellID was secret + if data.durationObject then + self.casted[data.spellId] = true + end else self.active[row] = nil if data.spellId then From bf564d1915d4e78d7bcf769a26fac4cda3b49d8a Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 18:39:35 -0300 Subject: [PATCH 06/19] cooldowns: reuse row data and cache name and icon SPELL_UPDATE_COOLDOWN fires on every GCD, and each update built a new table per row and repeated the spell and item info lookups. Each row now keeps one data table that is refreshed in place. Spell name and icon are looked up again only when the override spell changes, since iconID follows the override. Slot name and icon are looked up again only when the equipped item link changes, and keep retrying while item info is not cached yet. --- data/Camelot/blacklist.lua | 7 +--- data/Cata/blacklist.lua | 5 --- data/Mists/blacklist.lua | 5 +-- data/Mists/cooldowns.lua | 2 +- data/TBC/blacklist.lua | 5 --- data/Wrath/blacklist.lua | 5 --- elements/cooldowns.lua | 65 ++++++++++++++++++++++++-------------- 7 files changed, 44 insertions(+), 50 deletions(-) diff --git a/data/Camelot/blacklist.lua b/data/Camelot/blacklist.lua index 4075ca1..5f4918d 100644 --- a/data/Camelot/blacklist.lua +++ b/data/Camelot/blacklist.lua @@ -6,12 +6,7 @@ local AddBlacklist = ns.data.AddBlacklist -- Classic Forever -------------------------------------------------- do - local data = { - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer - } + local data = {} AddBlacklist(data) end diff --git a/data/Cata/blacklist.lua b/data/Cata/blacklist.lua index 208dd6b..2145085 100644 --- a/data/Cata/blacklist.lua +++ b/data/Cata/blacklist.lua @@ -14,11 +14,6 @@ do -- Consumables [17629] = true, -- Flask of Chromatic Resistance - - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer } AddBlacklist(data) diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index dd8f8de..2c1b468 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -7,10 +7,7 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- do local data = { - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer + [128943] = true, -- Cyclonic Inspiration } AddBlacklist(data) diff --git a/data/Mists/cooldowns.lua b/data/Mists/cooldowns.lua index 8fceedf..114b69e 100644 --- a/data/Mists/cooldowns.lua +++ b/data/Mists/cooldowns.lua @@ -47,7 +47,7 @@ local data = { CreateSpellCooldown(119392), -- Charging Ox Wave CreateSpellCooldown(119381), -- Leg Sweep CreateSpellCooldown(122278), -- Dampen Harm - CreateSpellCooldown(122283), -- Diffuse Magic + CreateSpellCooldown(122783), -- Diffuse Magic CreateSpellCooldown(123904), -- Invoke Xuen, the White Tiger -- Brewmaster diff --git a/data/TBC/blacklist.lua b/data/TBC/blacklist.lua index ce34369..9f4255b 100644 --- a/data/TBC/blacklist.lua +++ b/data/TBC/blacklist.lua @@ -65,11 +65,6 @@ do [33077] = true, -- Agility (Scroll of Agility V) [33082] = true, -- Strength (Scroll of Strength V) - - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer } AddBlacklist(data) diff --git a/data/Wrath/blacklist.lua b/data/Wrath/blacklist.lua index fe81068..b56e24d 100644 --- a/data/Wrath/blacklist.lua +++ b/data/Wrath/blacklist.lua @@ -54,11 +54,6 @@ do [11787] = true, -- Blood Pact (Rank 5) [27267] = true, -- Blood Pact (Rank 6) [47982] = true, -- Blood Pact (Rank 7) - - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer } AddBlacklist(data) diff --git a/elements/cooldowns.lua b/elements/cooldowns.lua index 0113fd6..8157ed9 100644 --- a/elements/cooldowns.lua +++ b/elements/cooldowns.lua @@ -107,16 +107,31 @@ do return a.index < b.index end + -- returns the row's reused data table; name/icon are cached and only looked up again when they can change function cooldown_proto:ProcessCooldownData(unit, data) - local index, name, icon, start, duration, enabled, durationObject + local d = self.rows[data] + if not d then + d = { + index = data.spellId and ("SPELL_" .. data.spellId) or ("SLOT_" .. data.slotId), + spellId = data.spellId, + slotId = data.slotId + } + self.rows[data] = d + end + + local start, duration, enabled, durationObject if data.spellId then - index = "SPELL_" .. data.spellId - local info = GetSpellInfo(data.spellId) - if info then - name = info.name - icon = info.iconID + -- a talent can replace one tracked spell with another (e.g. Sentinel overrides Avenging Wrath) + local activeSpellId = GetOverrideSpell and GetOverrideSpell(data.spellId) or data.spellId + -- iconID follows the override, so look it up again when the override changes + if not d.name or d.activeSpellId ~= activeSpellId then + local info = GetSpellInfo(data.spellId) + d.name = info and info.name + d.icon = info and info.iconID end + d.activeSpellId = activeSpellId + local cdInfo = GetSpellCooldown(data.spellId) if cdInfo then if SpellCooldownSecret(data.spellId) then @@ -131,12 +146,20 @@ do enabled = cdInfo.isEnabled and 1 or 0 end elseif data.slotId then - index = "SLOT_" .. data.slotId local itemLink = GetInventoryItemLink(unit, data.slotId) if (itemLink) then - name, _, _, _, _, _, _, _, _, icon, _, _, _, _, _, _, _ = GetItemInfo(itemLink) + if itemLink ~= d.itemLink then + local name, _, _, _, _, _, _, _, _, icon = GetItemInfo(itemLink) + d.name = name + d.icon = icon + -- item info can be uncached on first lookup; keep retrying until it returns a name + d.itemLink = name and itemLink + end start, duration, enabled = GetInventoryItemCooldown(unit, data.slotId) else + d.name = nil + d.icon = nil + d.itemLink = nil enabled = 0 end end @@ -144,22 +167,15 @@ do duration = duration or 0 start = start or 0 - return { - index = index, - name = name, - spellId = data.spellId, - -- a talent can replace one tracked spell with another (e.g. Sentinel overrides Avenging Wrath) - activeSpellId = data.spellId and GetOverrideSpell and GetOverrideSpell(data.spellId) or data.spellId, - slotId = data.slotId, - icon = icon, - start = start, - duration = duration, - expirationTime = start + duration, - durationObject = durationObject, - enabled = (enabled ~= 0), - casted = (not data.spellId) and true or self.casted[data.spellId], - isKnown = (not data.spellId) and true or IsSpellKnown(data.spellId) - } + d.start = start + d.duration = duration + d.expirationTime = start + duration + d.durationObject = durationObject + d.enabled = (enabled ~= 0) + d.casted = (not data.spellId) and true or self.casted[data.spellId] + d.isKnown = (not data.spellId) and true or IsSpellKnown(data.spellId) + + return d end function cooldown_proto:UpdateCooldowns(event, unit, spellID, baseSpellID) @@ -227,6 +243,7 @@ do self.casted = {} self.active = {} + self.rows = {} self:RegisterEvent("SPELL_UPDATE_COOLDOWN") self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", self.unit) From 3a8ec7a4c68e63d03d7c1317c640f437e0658328 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 19:29:52 -0300 Subject: [PATCH 07/19] cooldowns: refresh on equipment and spellbook changes --- data/Mists/blacklist.lua | 1 + data/TBC/cooldowns.lua | 7 +++++++ data/Vanilla/cooldowns.lua | 7 +++++++ elements/cooldowns.lua | 16 ++++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index 2c1b468..89b7af2 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -8,6 +8,7 @@ local AddBlacklist = ns.data.AddBlacklist do local data = { [128943] = true, -- Cyclonic Inspiration + [81744] = true, -- Horde } AddBlacklist(data) diff --git a/data/TBC/cooldowns.lua b/data/TBC/cooldowns.lua index 5360720..db96fa9 100644 --- a/data/TBC/cooldowns.lua +++ b/data/TBC/cooldowns.lua @@ -7,6 +7,13 @@ local AddCooldowns = ns.data.AddCooldowns -- The Burning Crusade Classic -------------------------------------------------- local data = { + ["MAGE"] = { + -- Arcane + CreateSpellCooldown(12051), -- Evocation + + -- Frost + CreateSpellCooldown(12472), -- Icy Veins + }, ["PRIEST"] = { -- Discipline CreateSpellCooldown(10060), -- Power Infusion diff --git a/data/Vanilla/cooldowns.lua b/data/Vanilla/cooldowns.lua index e1bb02a..4c396cc 100644 --- a/data/Vanilla/cooldowns.lua +++ b/data/Vanilla/cooldowns.lua @@ -7,6 +7,13 @@ local AddCooldowns = ns.data.AddCooldowns -- Classic Era -------------------------------------------------- local data = { + ["MAGE"] = { + -- Arcane + CreateSpellCooldown(12051), -- Evocation + + -- Frost + CreateSpellCooldown(12472), -- Icy Veins + }, ["PALADIN"] = { -- General CreateSpellCooldown(498), -- Divine Protection diff --git a/elements/cooldowns.lua b/elements/cooldowns.lua index 8157ed9..a5bd5df 100644 --- a/elements/cooldowns.lua +++ b/elements/cooldowns.lua @@ -230,6 +230,20 @@ do self:UpdateCooldowns("SPELL_UPDATE_COOLDOWN", self.unit, spellID, baseSpellID) end + -- only refresh when a tracked slot changed + function cooldown_proto:PLAYER_EQUIPMENT_CHANGED(slot) + for _, row in next, self.spells do + if row.slotId == slot then + return self:ForceUpdate() + end + end + end + + -- talent/spec changes alter isKnown and overrides + function cooldown_proto:SPELLS_CHANGED() + self:ForceUpdate() + end + -- register which spell the player cast function cooldown_proto:UNIT_SPELLCAST_SUCCEEDED(unit, guid, spellId) if IsSecret(spellId) then return end @@ -246,6 +260,8 @@ do self.rows = {} self:RegisterEvent("SPELL_UPDATE_COOLDOWN") + self:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") + self:RegisterEvent("SPELLS_CHANGED") self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", self.unit) end end From 09e8c119fc7e59e040bccf1ebc2f771ba5648769 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 19:41:25 -0300 Subject: [PATCH 08/19] tests: add a plain Lua test runner for util and data Covers FormatTime, the data constructors and Finalize (blacklist, spells, cooldown ordering, duplicates and invalid entries). Adds a make test target, runs it in CI and excludes tests/ from packaging. --- .github/workflows/lint.yml | 20 ++++- Makefile | 7 ++ exclude.lst | 1 + tests/run.lua | 170 +++++++++++++++++++++++++++++++++++++ 4 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 tests/run.lua diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 37e3bdf..1f99f6d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -3,9 +3,9 @@ name: Lint on: push: branches: [master] - paths: ['**.lua', '**.xml', '*.toc', '.luacheckrc', '.github/workflows/lint.yml'] + paths: ['**.lua', '**.xml', '*.toc', '.luacheckrc', 'Makefile', '.github/workflows/lint.yml'] pull_request: - paths: ['**.lua', '**.xml', '*.toc', '.luacheckrc', '.github/workflows/lint.yml'] + paths: ['**.lua', '**.xml', '*.toc', '.luacheckrc', 'Makefile', '.github/workflows/lint.yml'] jobs: check: @@ -24,3 +24,19 @@ jobs: - name: TOC check uses: lua-wow/toc-check@v1 + + test: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Install Lua 5.1 + run: sudo apt-get update && sudo apt-get install -y lua5.1 + + - name: Tests + run: make test LUA=lua5.1 diff --git a/Makefile b/Makefile index 7266cfd..352f41d 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ SHELL := bash .SHELLFLAGS := -eu -o pipefail -c LUACHECK ?= luacheck +LUA ?= lua # -- help --------------------- @@ -17,3 +18,9 @@ help: ## Show available commands .PHONY: check check: ## Run static analysis (see .luacheckrc) @$(LUACHECK) . + +# -- tests -------------------- + +.PHONY: test +test: ## Run unit tests (tests/run.lua) + @$(LUA) tests/run.lua diff --git a/exclude.lst b/exclude.lst index 8a8b013..7bc2de7 100644 --- a/exclude.lst +++ b/exclude.lst @@ -13,6 +13,7 @@ mise.toml *Makefile *exclude.lst *.luacheckrc +tests/* # extra files docs/* diff --git a/tests/run.lua b/tests/run.lua new file mode 100644 index 0000000..d9404ed --- /dev/null +++ b/tests/run.lua @@ -0,0 +1,170 @@ +-- Plain Lua 5.1 tests for Filger's pure logic. Run from the repository root: make test + +local passed, failed = 0, 0 + +local function test(name, fn) + local ok, err = pcall(fn) + if ok then + passed = passed + 1 + else + failed = failed + 1 + print("FAIL " .. name .. ": " .. tostring(err)) + end +end + +local function eq(actual, expected, msg) + if actual ~= expected then + error(string.format("%s: expected %s (%s), got %s (%s)", msg or "value", + tostring(expected), type(expected), tostring(actual), type(actual)), 2) + end +end + +-- addon files receive (addonName, ns) as `...`, like in WoW +local function loadAddonFile(ns, path) + assert(loadfile(path))("Filger", ns) +end + +-- fresh namespace per test: data.lua captures GetSpellInfo at load and Finalize drops its sources +local function newData(known, class) + local ns = { + config = { general = { dev = false } }, + player = { class = class or "MAGE" }, + compat = { + GetSpellInfo = function(id) + return known and known[id] and { name = known[id] } or nil + end, + }, + } + loadAddonFile(ns, "core/util.lua") + loadAddonFile(ns, "core/data.lua") + return ns.data +end + +local function hasInvalid(invalid, kind, class, id) + for _, entry in ipairs(invalid) do + if entry.kind == kind and entry.class == class and entry.id == id then + return true + end + end + return false +end + +------------------------------------------------------------ +-- util.FormatTime +------------------------------------------------------------ +test("FormatTime", function() + local ns = {} + loadAddonFile(ns, "core/util.lua") + local FormatTime = ns.util.FormatTime + + eq(FormatTime(nil), "0.0", "nil") + eq(FormatTime(0), "0.0", "0") + eq(FormatTime(4.99), "5.0", "4.99") + eq(FormatTime(5), 5, "5") + eq(FormatTime(59.9), 59, "59.9") + eq(FormatTime(60), "1m", "60") + eq(FormatTime(61), "2m", "61") + eq(FormatTime(3600), "1h", "3600") + eq(FormatTime(86400), "1d", "86400") + eq(FormatTime("12"), 12, "\"12\"") +end) + +------------------------------------------------------------ +-- data constructors +------------------------------------------------------------ +test("CreateSpellPriority", function() + local data = newData() + + local p = data.CreateSpellPriority() + eq(p.enabled, true, "default enabled") + eq(p.priority, 0, "default priority") + eq(p.stackThreshold, 0, "default stackThreshold") + + eq(data.CreateSpellPriority(false).enabled, false, "disabled") + + p = data.CreateSpellPriority(5, 3) + eq(p.enabled, true, "enabled") + eq(p.priority, 5, "priority") + eq(p.stackThreshold, 3, "stackThreshold") +end) + +test("CreateSpellCooldown", function() + local data = newData() + eq(data.CreateSpellCooldown(1).enabled, true, "default enabled") + eq(data.CreateSpellCooldown(1, false).enabled, false, "disabled") + eq(pcall(data.CreateSpellCooldown, "1"), false, "non-number spellId errors") +end) + +test("CreateSlotCooldown", function() + local data = newData() + eq(data.CreateSlotCooldown("13").slotId, "13", "numeric string slotId") + eq(data.CreateSlotCooldown(13, false).enabled, false, "disabled") + eq(pcall(data.CreateSlotCooldown, "x"), false, "non-numeric slotId errors") +end) + +------------------------------------------------------------ +-- data.Finalize +------------------------------------------------------------ +test("Finalize blacklist", function() + local data = newData({ [10] = "Ten", [11] = "Food", [12] = "Twelve" }) + data.AddBlacklist({ [10] = true, [11] = "name", [12] = false, [97] = true }) + data.Finalize() + + eq(data.blacklist[10], true, "id") + eq(data.blacklist["Ten"], nil, "name of an id-only entry") + eq(data.blacklist[11], true, "id of a name entry") + eq(data.blacklist["Food"], true, "name of a name entry") + eq(data.blacklist[12], nil, "disabled") + eq(data.blacklist[97], nil, "unknown") + eq(#data.invalid, 1, "invalid count") + eq(hasInvalid(data.invalid, "blacklist", nil, 97), true, "unknown reported") +end) + +test("Finalize spells", function() + local data = newData({ [10] = "Ten" }) + local info = data.CreateSpellPriority(1) + data.AddSpells({ MAGE = { [10] = info, [96] = info } }) + data.Finalize() + + eq(data.spells.MAGE[10], info, "known") + eq(data.spells.MAGE[96], nil, "unknown") + eq(#data.invalid, 1, "invalid count") + eq(hasInvalid(data.invalid, "spell", "MAGE", 96), true, "unknown reported") +end) + +test("Finalize cooldowns", function() + local data = newData({ [1] = "A", [2] = "B", [3] = "C", [4] = "D" }, "MAGE") + local spell, slot = data.CreateSpellCooldown, data.CreateSlotCooldown + data.AddCooldowns({ + MAGE = { spell(1), spell(99), spell(2, false) }, + ALL = { slot(13), spell(3) }, + PRIEST = { spell(98), spell(1) }, + }) + data.AddCooldowns({ + MAGE = { spell(4) }, + ALL = { spell(1) }, + }) + data.Finalize() + + -- player class first, then ALL, each in source order + local expected = { 1, 4, "slot13", 3 } + eq(#data.cooldowns, #expected, "active count") + for i, key in ipairs(expected) do + local row = data.cooldowns[i] + eq(row.spellId or ("slot" .. row.slotId), key, "row " .. i) + end + + eq(#data.invalid, 3, "invalid count") + eq(hasInvalid(data.invalid, "cooldown", "MAGE", 99), true, "unknown player row") + eq(hasInvalid(data.invalid, "duplicate", "ALL", 1), true, "duplicate across class and ALL") + eq(hasInvalid(data.invalid, "cooldown", "PRIEST", 98), true, "unknown other-class row") +end) + +test("Finalize drops sources", function() + local data = newData() + data.Finalize() + eq(pcall(data.AddSpells, {}), false, "AddSpells after Finalize errors") +end) + +print(string.format("%d passed, %d failed", passed, failed)) +os.exit(failed > 0 and 1 or 0) From a2cbd94088fc3ca747b0fbc2f28a4d7c4aa278f1 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 19:44:30 -0300 Subject: [PATCH 09/19] api: replace MergeAPI with a direct backdrop call --- Filger.lua | 7 +----- core/api.lua | 64 ++++++++++++------------------------------------- core/button.lua | 2 +- 3 files changed, 17 insertions(+), 56 deletions(-) diff --git a/Filger.lua b/Filger.lua index 41a10aa..ba3a599 100644 --- a/Filger.lua +++ b/Filger.lua @@ -19,14 +19,9 @@ end) function Filger:ADDON_LOADED(addon) if (addon ~= "Filger") then return end - -- order matters: config reads the validated data, the backdrop API reads the config + -- order matters: config reads the validated data ns.data.Finalize() ns.BuildConfig() - - -- Filger standalone - if ns.MergeAPI then - ns.MergeAPI() - end end function Filger:PLAYER_LOGIN() diff --git a/core/api.lua b/core/api.lua index b2819b3..ef9f658 100644 --- a/core/api.lua +++ b/core/api.lua @@ -13,16 +13,12 @@ function ns.SetBorderColor(backdrop, color) end end --- skip it if a UI with its own CreateBackdrop is loaded -if IsAddOnLoaded("Tainted") or IsAddOnLoaded("Tukui") or IsAddOnLoaded("ElvUI") then - return -end +-- these UIs add their own CreateBackdrop to every frame; OptionalDeps loads them first +local hasUIBackdrop = IsAddOnLoaded("Tainted") or IsAddOnLoaded("Tukui") or IsAddOnLoaded("ElvUI") --------------------------------------------------- -- API --------------------------------------------------- -local API = {} - local Scale = function(size) -- Ensure 'size' is a valid number, default to 1 if not size = tonumber(size) or 1 @@ -41,8 +37,10 @@ local Scale = function(size) return mult * math.floor(size / mult + 0.5) end -API.CreateBackdrop = function(self, template) - if not self.Backdrop then +function ns.CreateBackdrop(frame, template) + if hasUIBackdrop and frame.CreateBackdrop then + frame:CreateBackdrop(template) + elseif not frame.Backdrop then local backdropTexture = textures.blank local backdropColor = ns.config.general.backdrop.color local backdropAlpha = (template == "transparent") and 0.70 or 1 @@ -61,46 +59,14 @@ API.CreateBackdrop = function(self, template) backdrop.insets = { top = inset, left = inset, bottom = inset, right = inset } end - local level = self:GetFrameLevel() or 1 - - self.Backdrop = CreateFrame("Frame", nil, self, "BackdropTemplate") - self.Backdrop:SetPoint("TOPLEFT", -inset, inset) - self.Backdrop:SetPoint("BOTTOMRIGHT", inset, -inset) - self.Backdrop:SetFrameLevel(level - 1) - self.Backdrop:SetBackdrop(backdrop) - self.Backdrop:SetBackdropColor(backdropColor.r, backdropColor.g, backdropColor.b, backdropAlpha) - self.Backdrop:SetBackdropBorderColor(borderColor.r, borderColor.g, borderColor.b) + local level = frame:GetFrameLevel() or 1 + + frame.Backdrop = CreateFrame("Frame", nil, frame, "BackdropTemplate") + frame.Backdrop:SetPoint("TOPLEFT", -inset, inset) + frame.Backdrop:SetPoint("BOTTOMRIGHT", inset, -inset) + frame.Backdrop:SetFrameLevel(level - 1) + frame.Backdrop:SetBackdrop(backdrop) + frame.Backdrop:SetBackdropColor(backdropColor.r, backdropColor.g, backdropColor.b, backdropAlpha) + frame.Backdrop:SetBackdropBorderColor(borderColor.r, borderColor.g, borderColor.b) end end - --------------------------------------------------- --- Merge Filger API with WoW API --------------------------------------------------- -function ns.MergeAPI() - local AddAPI = function(obj) - local mt = getmetatable(obj).__index - for name, func in pairs(API) do - if (not obj[name]) then mt[name] = func end - end - end - - local Handled = { - ["Frame"] = true - } - - local Object = CreateFrame("Frame") - AddAPI(Object) - AddAPI(Object:CreateTexture()) - AddAPI(Object:CreateFontString()) - - Object = EnumerateFrames() - - while (Object) do - local t = Object:GetObjectType() - if (not Object:IsForbidden() and not Handled[t]) then - AddAPI(Object) - Handled[t] = true - end - Object = EnumerateFrames(Object) - end -end diff --git a/core/button.lua b/core/button.lua index 0d452f6..7cadeb0 100644 --- a/core/button.lua +++ b/core/button.lua @@ -108,7 +108,7 @@ do -- aura container buttons are unnamed; "$parent" would create globals like "Icon" local name = button:GetName() - button:CreateBackdrop() + ns.CreateBackdrop(button) -- ElvUI stores its backdrop as `backdrop` button.Backdrop = button.Backdrop or button.backdrop From 6d6552c24d48da90d84c8c7091f7863116b3377c Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 21:36:51 -0300 Subject: [PATCH 10/19] data: limit shared Fortitude blacklist entry to classic --- data/Mists/blacklist.lua | 1 + data/shared/blacklist.lua | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index 89b7af2..f4efaf9 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -45,6 +45,7 @@ do -- WARLOCK [109773] = true, -- Dark Intent + [108446] = true, -- Soul Link } AddBlacklist(data) end diff --git a/data/shared/blacklist.lua b/data/shared/blacklist.lua index 9660990..6d9d8dd 100644 --- a/data/shared/blacklist.lua +++ b/data/shared/blacklist.lua @@ -49,7 +49,7 @@ local general = { [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura -- PRIEST - [1243] = "name", -- Power Word: Fortitude + [1243] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA) and "name", -- Power Word: Fortitude (Retail uses 21562) } AddBlacklist(general) From e01459f071d759a97d96a8066fb3407e691cc576 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 21:45:14 -0300 Subject: [PATCH 11/19] data: remove invalid Classic Era spell IDs --- data/Vanilla/blacklist.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/Vanilla/blacklist.lua b/data/Vanilla/blacklist.lua index 6c60c11..56a3e62 100644 --- a/data/Vanilla/blacklist.lua +++ b/data/Vanilla/blacklist.lua @@ -38,8 +38,12 @@ do [21562] = true, -- Prayer of Fortitude (Rank 1) [21564] = true, -- Prayer of Fortitude (Rank 2) + [14819] = true, -- Divine Spirit [27681] = true, -- Prayer of Spirit + [976] = true, -- Shadow Protection (Rank 1) + [10957] = true, -- Shadow Protection (Rank 2) + -- WARLOCK [687] = true, -- Demon Skin (Rank 1) [696] = true, -- Demon Skin (Rank 2) From 7e0c67959d2a84d4b58b788e269d236af034684a Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 22:26:21 -0300 Subject: [PATCH 12/19] data: blacklist MoP Fortitude by its own ID --- data/Mists/blacklist.lua | 3 +++ data/shared/blacklist.lua | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index f4efaf9..ce98803 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -9,6 +9,9 @@ do local data = { [128943] = true, -- Cyclonic Inspiration [81744] = true, -- Horde + + -- PRIEST + [21562] = true, -- Power Word: Fortitude } AddBlacklist(data) diff --git a/data/shared/blacklist.lua b/data/shared/blacklist.lua index 6d9d8dd..186c422 100644 --- a/data/shared/blacklist.lua +++ b/data/shared/blacklist.lua @@ -49,7 +49,7 @@ local general = { [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura -- PRIEST - [1243] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA) and "name", -- Power Word: Fortitude (Retail uses 21562) + [1243] = (EXPANSION < LE_EXPANSION_MISTS_OF_PANDARIA) and "name", -- Power Word: Fortitude (Retail uses 21562) } AddBlacklist(general) From 094f50273c168ef999657d5a96cf659b9e62147f Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 23:23:52 -0300 Subject: [PATCH 13/19] dev: add /filger unseen to list aura IDs that never appear --- dev/development.lua | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/dev/development.lua b/dev/development.lua index 5379d26..f91cc82 100644 --- a/dev/development.lua +++ b/dev/development.lua @@ -222,3 +222,64 @@ local exp10 = function(arg) end ns.AddCommand("exp10", exp10, "experiment 10: item cooldown refresh events (/filger exp10 [itemID])") + +-- T20: listed aura IDs that never show up (a cast ID listed instead of the aura ID) +-- usage: /filger unseen starts logging; play the spec, then /filger unseen again lists them +-- Retail records nothing while auras are secret (combat, instances): test outside combat there +local unseenFrame, listed, seen +local unseenUnits = { player = true, target = true, focus = true } + +local function markAura(data) + if data and listed[data.spellId] then + seen[data.spellId] = true + end +end + +local function scanUnit(unit) + for _, filter in ipairs({ "HELPFUL", "HARMFUL" }) do + local slots = { C_UnitAuras.GetAuraSlots(unit, filter) } + for i = 2, #slots do -- #1 return is continuationToken + markAura(C_UnitAuras.GetAuraDataBySlot(unit, slots[i])) + end + end +end + +local unseen = function() + if unseenFrame then + unseenFrame:UnregisterAllEvents() + unseenFrame = nil + + local ids = {} + for spellId in next, listed do + if not seen[spellId] then table.insert(ids, spellId) end + end + table.sort(ids) + for _, spellId in ipairs(ids) do + local info = ns.compat.GetSpellInfo(spellId) + print(Filger.title, "unseen:", spellId, info and info.name or "?") + end + print(Filger.title, "unseen: stopped,", #ids, "listed IDs never seen") + return + end + + listed = Mixin({}, ns.data.spells[ns.player.class] or {}, ns.data.spells.ALL or {}) + seen = {} + + unseenFrame = CreateFrame("Frame") + unseenFrame:RegisterEvent("UNIT_AURA") + unseenFrame:SetScript("OnEvent", function(_, _, unit, updateInfo) + -- updateInfo and aura slots are secret while restricted + if not unseenUnits[unit] or ns.compat.AurasSecret() then return end + if not updateInfo or updateInfo.isFullUpdate then + scanUnit(unit) + elseif updateInfo.addedAuras then + for _, data in next, updateInfo.addedAuras do + markAura(data) + end + end + end) + if not ns.compat.AurasSecret() then scanUnit("player") end + print(Filger.title, "unseen: logging listed aura IDs, run again to report") +end + +ns.AddCommand("unseen", unseen, "dev: logs listed aura IDs; run again to list the ones never seen") From f9d60241875485313f7f3e0d33222cb38b7c506e Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Sun, 25 Oct 2026 23:43:10 -0300 Subject: [PATCH 14/19] dev: remove experimental slash commands --- dev/development.lua | 166 -------------------------------------------- 1 file changed, 166 deletions(-) diff --git a/dev/development.lua b/dev/development.lua index f91cc82..9a67925 100644 --- a/dev/development.lua +++ b/dev/development.lua @@ -7,133 +7,6 @@ if not ns.config.general.dev then return end -- Development (write anything here) ------------------------------------------------------------ --- Experiment 4: spell-ID gate of CustomAuraContainerTemplate --- usage: /filger exp4 , (out of combat, then enter combat and compare) -local exp4 = function(arg) - local buff, debuff = (arg or ""):match("^(%d+),(%d+)$") - if not buff then - print(Filger.title, "usage: /filger exp4 ,") - return - elseif not C_XMLUtil or not C_XMLUtil.GetTemplateInfo("CustomAuraContainerTemplate") then - print(Filger.title, "exp4: no CustomAuraContainerTemplate on this client") - return - elseif InCombatLockdown() then - print(Filger.title, "exp4: leave combat first") - return - elseif _G.FilgerExp4_T1 then - print(Filger.title, "exp4: already created, /reload to change IDs") - return - end - buff, debuff = tonumber(buff), tonumber(debuff) - - -- CustomAuraButtonTemplate has no regions; without an icon the button draws nothing - local function initializeFrame(button) - button:SetSize(32, 32) - local icon = button:CreateTexture(nil, "ARTWORK") - icon:SetAllPoints() - button:SetIcon(icon) - local count = button:CreateFontString(nil, "OVERLAY", "NumberFontNormal") - count:SetPoint("BOTTOMRIGHT") - button:SetApplicationCount(count) - end - - local function Make(name, unit, filter, candidateFilters, y) - local c = CreateFrame("AuraContainer", "FilgerExp4_" .. name, UIParent, "CustomAuraContainerTemplate") - c:SetPoint("LEFT", UIParent, "CENTER", 0, y) - c:SetUnit(unit) - c:AddAuraGroup(name, filter, { - candidateFilters = candidateFilters, - initializeFrame = initializeFrame, - layout = { elementWidth = 32, elementHeight = 32, elementSpacing = 2, lineSpacing = 2 } - }) - - local label = UIParent:CreateFontString(nil, "OVERLAY", "GameFontNormal") - label:SetPoint("RIGHT", UIParent, "CENTER", -10, y) - label:SetText(name .. " " .. unit .. " " .. filter) - end - - -- expected in combat (Retail): T1 buff, T2 empty, T3 debuff still shown, T4 no error - Make("T1", "player", "HELPFUL|PLAYER", { includeSpellIDs = { [buff] = true } }, 120) - Make("T2", "player", "HARMFUL", { includeSpellIDs = { [debuff] = true } }, 80) - Make("T3", "player", "HARMFUL", { excludeSpellIDs = { [debuff] = true } }, 40) - Make("T4", "focus", "HARMFUL", nil, 0) - print(Filger.title, "exp4: created T1-T4, buff", buff, "debuff", debuff) -end - -ns.AddCommand("exp4", exp4, "experiment 4: aura container spell-ID gate (/filger exp4 ,)") - --- Experiment 5: which filter strings each client accepts and fills --- usage: /filger exp5 (out of combat; GetAuraSlots errors on secret auras) -local filters = { - -- complementary pairs must add up to HELPFUL, so they can be checked solo - "HELPFUL", "HARMFUL", "HELPFUL|PLAYER", "HELPFUL|!PLAYER", "HELPFUL|CANCELABLE", "HELPFUL|!CANCELABLE", - "HELPFUL|NOT_CANCELABLE", "HELPFUL|BIG_DEFENSIVE", "HELPFUL|IMPORTANT", "HARMFUL|RAID_PLAYER_DISPELLABLE", - "HARMFUL|DISPELLABLE" -} - -local exp5 = function() - if C_Secrets and C_Secrets.ShouldAurasBeSecret() then - print(Filger.title, "exp5: auras are secret right now, leave combat first") - return - end - - for _, filter in ipairs(filters) do - -- unknown tokens may error; the first return is a continuation token, not a slot - local ok, n = pcall(function() return select("#", C_UnitAuras.GetAuraSlots("player", filter)) - 1 end) - -- "||" so chat doesn't read "|R" / "|N" as escape codes - print(Filger.title, (filter:gsub("|", "||")), ok and n or ("error: " .. tostring(n))) - end -end - -ns.AddCommand("exp5", exp5, "experiment 5: aura counts per filter string on the player") - --- Experiment 6: private aura anchors from addon code --- usage: /filger exp6 (anywhere; the private aura icon draws inside the grey boxes) -local exp6 = function() - if not C_UnitAuras.AddPrivateAuraAnchor then - print(Filger.title, "exp6: no AddPrivateAuraAnchor on this client") - return - elseif _G.FilgerExp6 then - print(Filger.title, "exp6: already created") - return - end - - local frame = CreateFrame("Frame", "FilgerExp6", UIParent) - frame:SetSize(3 * 44, 44) - frame:SetPoint("CENTER", UIParent, "CENTER", 0, 200) - - -- one anchor per private aura slot on the player - for i = 1, 3 do - local slot = CreateFrame("Frame", nil, frame) - slot:SetSize(40, 40) - slot:SetPoint("LEFT", frame, "LEFT", (i - 1) * 44, 0) - local bg = slot:CreateTexture(nil, "BACKGROUND") - bg:SetAllPoints() - bg:SetColorTexture(0.3, 0.3, 0.3, 0.5) - - local ok, anchorID = pcall(C_UnitAuras.AddPrivateAuraAnchor, { - unitToken = "player", - auraIndex = i, - parent = slot, - showCooldownFrame = true, - showCountdownNumbers = true, - iconInfo = { - iconAnchor = { point = "CENTER", relativeTo = slot, relativePoint = "CENTER", offsetX = 0, offsetY = 0 }, - iconWidth = 40, - iconHeight = 40 - } - }) - print(Filger.title, "exp6: slot", i, "aurasSecret", C_Secrets and C_Secrets.ShouldAurasBeSecret(), - ok and "anchorID" or "error", tostring(anchorID)) - end -end - -ns.AddCommand("exp6", exp6, "experiment 6: private aura anchors on the player") - --- Experiment 7: cooldown edges (item/slot cooldowns, secret cast spellID) --- usage: /filger exp7 [itemID] toggles logging; enter combat and cast spells / use the item --- on each player cast: is the spellID secret, are slot 13/14 and item cooldowns secret -local exp7Frame -- prints start/duration/enabled when readable, so an active cooldown is visible local function secrecy(...) local ok, start, duration, enabled = pcall(...) @@ -145,45 +18,6 @@ local function secrecy(...) return format("%.1f/%.1f/%s", start, duration, tostring(enabled)) end -local exp7 = function(arg) - if not issecretvalue then - print(Filger.title, "exp7: no issecretvalue on this client") - return - elseif exp7Frame then - exp7Frame:UnregisterAllEvents() - exp7Frame = nil - print(Filger.title, "exp7: stopped") - return - end - local itemID = tonumber(arg) - - exp7Frame = CreateFrame("Frame") - exp7Frame:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player") - exp7Frame:SetScript("OnEvent", function(_, _, _, _, spellID) - -- a secret spellID can't be printed or looked up; the cast order tells which spell it was - local id = issecretvalue(spellID) and "|cffff0000secret|r" or tostring(spellID) - print(Filger.title, "exp7:", format("%.1f", GetTime()), "combat", tostring(InCombatLockdown()), - "spellID", id, - "slot13", secrecy(GetInventoryItemCooldown, "player", 13), - "slot14", secrecy(GetInventoryItemCooldown, "player", 14), - "item", itemID and secrecy(C_Container.GetItemCooldown, itemID) or "-") - end) - print(Filger.title, "exp7: logging player casts (start/duration or secret), run again to stop") -end - -ns.AddCommand("exp7", exp7, "experiment 7: cooldown edges, logs player casts (/filger exp7 [itemID])") - --- Experiment 8: which aura tooltip methods each client has --- usage: /filger exp8 (anywhere) -local exp8 = function() - for _, method in ipairs({ "SetUnitAura", "SetUnitBuff", "SetUnitDebuff", "SetUnitBuffByAuraInstanceID", - "SetUnitDebuffByAuraInstanceID" }) do - print(Filger.title, "exp8:", method, GameTooltip[method] ~= nil) - end -end - -ns.AddCommand("exp8", exp8, "experiment 8: aura tooltip methods on GameTooltip") - -- Experiment 10: which event reports each item/slot cooldown change -- usage: /filger exp10 [itemID] toggles logging; use a trinket and a potion, compare with Filger's icons -- prints a line when an event sees slot 13/14/item values that differ from what that same event saw last From f07b2ee42215e857228fdb0d46e0b9b30d703660 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Thu, 29 Oct 2026 00:04:26 -0300 Subject: [PATCH 15/19] update LibDispel submodule --- libs/LibDispel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/LibDispel b/libs/LibDispel index 09accd8..7186300 160000 --- a/libs/LibDispel +++ b/libs/LibDispel @@ -1 +1 @@ -Subproject commit 09accd8f995c8b01e126ceafe665fad6adb1209b +Subproject commit 71863000e8b816390130ecef3a88ba6f1b65eeac From 2f74716962b7a49b82f4d1099b174c280684837c Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Thu, 29 Oct 2026 00:04:54 -0300 Subject: [PATCH 16/19] update spell tables --- data/Camelot/blacklist.lua | 6 +- data/Camelot/cooldowns.lua | 80 +++++++ data/Cata/blacklist.lua | 60 ++--- data/Cata/cooldowns.lua | 82 +++---- data/Cata/spells.lua | 20 +- data/Mists/blacklist.lua | 125 ++++++---- data/Mists/cooldowns.lua | 416 +++++++++++++++++++++++++++----- data/Mists/spells.lua | 16 +- data/Standard/blacklist.lua | 461 +++++++++++++++++++----------------- data/Standard/cooldowns.lua | 356 +++++++++++++++++++++++++--- data/Standard/spells.lua | 321 +++++++++++++++++-------- data/TBC/blacklist.lua | 183 ++++++++------ data/TBC/cooldowns.lua | 274 +++++++++++++++++---- data/Vanilla/blacklist.lua | 288 ++++++++++++++-------- data/Vanilla/cooldowns.lua | 286 +++++++++++++++++----- data/Wrath/blacklist.lua | 190 +++++++++------ data/Wrath/cooldowns.lua | 412 +++++++++++++++++++++++++++++--- data/shared/blacklist.lua | 207 ++++++++-------- data/shared/cooldowns.lua | 24 +- 19 files changed, 2731 insertions(+), 1076 deletions(-) diff --git a/data/Camelot/blacklist.lua b/data/Camelot/blacklist.lua index 5f4918d..ab262a0 100644 --- a/data/Camelot/blacklist.lua +++ b/data/Camelot/blacklist.lua @@ -5,8 +5,6 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Classic Forever -------------------------------------------------- -do - local data = {} +local data = {} - AddBlacklist(data) -end +AddBlacklist(data) diff --git a/data/Camelot/cooldowns.lua b/data/Camelot/cooldowns.lua index e9c8b89..ea13ca6 100644 --- a/data/Camelot/cooldowns.lua +++ b/data/Camelot/cooldowns.lua @@ -1,3 +1,83 @@ +local _, ns = ... + +local CreateSpellCooldown = ns.data.CreateSpellCooldown +local AddCooldowns = ns.data.AddCooldowns + -------------------------------------------------- -- Classic Forever -------------------------------------------------- +local data = { + ["DRUID"] = { + CreateSpellCooldown(417141), -- Berserk + CreateSpellCooldown(17116), -- Nature's Swiftness + CreateSpellCooldown(439748), -- Starfall + CreateSpellCooldown(408024), -- Survival Instincts + }, + ["HUNTER"] = { + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(19263), -- Deterrence + CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(409379), -- Kill Command + CreateSpellCooldown(23989), -- Readiness + }, + ["MAGE"] = { + CreateSpellCooldown(12042), -- Arcane Power + CreateSpellCooldown(425124), -- Arcane Surge + CreateSpellCooldown(11113), -- Blast Wave + CreateSpellCooldown(12472), -- Cold Snap + CreateSpellCooldown(11129), -- Combustion + CreateSpellCooldown(440802), -- Frozen Orb + CreateSpellCooldown(11958), -- Ice Block + CreateSpellCooldown(425121), -- Icy Veins + CreateSpellCooldown(12043), -- Presence of Mind + }, + ["PALADIN"] = { + CreateSpellCooldown(409324), -- Ancestral Guidance + CreateSpellCooldown(407788), -- Avenging Wrath + CreateSpellCooldown(20216), -- Divine Favor + CreateSpellCooldown(407804), -- Divine Sacrifice + CreateSpellCooldown(20066), -- Repentance + CreateSpellCooldown(1310994), -- Swift Judgement + CreateSpellCooldown(1311015), -- Templar's Bulwark + CreateSpellCooldown(1310897), -- Voice of Truth + }, + ["PRIEST"] = { + CreateSpellCooldown(425294), -- Dispersion + CreateSpellCooldown(402789), -- Eye of the Void + CreateSpellCooldown(402799), -- Homunculi + CreateSpellCooldown(14751), -- Inner Focus + CreateSpellCooldown(402004), -- Pain Suppression + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(425207), -- Power Word: Barrier + CreateSpellCooldown(15487), -- Silence + }, + ["ROGUE"] = { + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry + CreateSpellCooldown(14177), -- Cold Blood + CreateSpellCooldown(14183), -- Premeditation + CreateSpellCooldown(14185), -- Preparation + }, + ["SHAMAN"] = { + CreateSpellCooldown(16166), -- Elemental Mastery + CreateSpellCooldown(16190), -- Mana Tide Totem + CreateSpellCooldown(16188), -- Nature's Swiftness + CreateSpellCooldown(425336), -- Rage of the Farseer + }, + ["WARLOCK"] = { + CreateSpellCooldown(18288), -- Amplify Curse + CreateSpellCooldown(412789), -- Demonic Howl + CreateSpellCooldown(18708), -- Fel Domination + CreateSpellCooldown(426195), -- Vengeance + }, + ["WARRIOR"] = { + CreateSpellCooldown(12809), -- Concussion Blow + CreateSpellCooldown(12328), -- Death Wish + CreateSpellCooldown(402913), -- Enraged Regeneration + CreateSpellCooldown(12975), -- Last Stand + CreateSpellCooldown(403228), -- Meathook + CreateSpellCooldown(426490), -- Rallying Cry + } +} + +AddCooldowns(data) diff --git a/data/Cata/blacklist.lua b/data/Cata/blacklist.lua index 2145085..7498969 100644 --- a/data/Cata/blacklist.lua +++ b/data/Cata/blacklist.lua @@ -5,46 +5,38 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Cataclysm Classic -------------------------------------------------- -do - local data = { - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) +local data = { + -- DEATHKNIGHT + [55610] = true, -- Improved Icy Talons - [6307] = true, -- Blood Pact (Rank 1) + -- HUNTER + [77769] = true, -- Trap Launcher - -- Consumables - [17629] = true, -- Flask of Chromatic Resistance - } + -- MAGE + [61316] = true, -- Dalaran Brilliance - AddBlacklist(data) -end + -- PALADIN + [79102] = true, -- Blessing of Might + [20165] = true, -- Seal of Insight -do - local data = { - -- DEATHKNIGHT - [55610] = true, -- Improved Icy Talons + -- PRIEST + [588] = true, -- Inner Fire + [49868] = true, -- Mind Quickening + [79107] = true, -- Shadow Protection + [73413] = true, -- Inner Will - -- HUNTER - [77769] = true, -- Trap Launcher + -- SHAMAN + [30809] = true, -- Unleashed Rage + [51470] = true, -- Elemental Oath + [77747] = true, -- Totemic Wrath - -- MAGE - [61316] = true, -- Dalaran Brilliance + -- WARLOCK + [687] = true, -- Demon Skin (Rank 1) - -- PALADIN - [79102] = true, -- Blessing of Might - [20165] = true, -- Seal of Insight + [6307] = true, -- Blood Pact (Rank 1) - -- PRIEST - [588] = true, -- Inner Fire - [49868] = true, -- Mind Quickening - [79107] = true, -- Shadow Protection - [73413] = true, -- Inner Will + -- Consumables + [17629] = true, -- Flask of Chromatic Resistance +} - -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath - [77747] = true, -- Totemic Wrath - } - - AddBlacklist(data) -end +AddBlacklist(data) diff --git a/data/Cata/cooldowns.lua b/data/Cata/cooldowns.lua index 56938d6..4fb6f86 100644 --- a/data/Cata/cooldowns.lua +++ b/data/Cata/cooldowns.lua @@ -9,68 +9,68 @@ local AddCooldowns = ns.data.AddCooldowns local data = { ["DEATHKNIGHT"] = { -- All - CreateSpellCooldown(45529), -- Blood Tap - CreateSpellCooldown(47568), -- Empower Rune Weapon - CreateSpellCooldown(48707), -- Anti-Magic Shell - CreateSpellCooldown(48743), -- Death Pact - CreateSpellCooldown(48792), -- Icebound Fortitude - CreateSpellCooldown(49039), -- Lichborne - CreateSpellCooldown(61999), -- Raise Ally + CreateSpellCooldown(45529), -- Blood Tap + CreateSpellCooldown(47568), -- Empower Rune Weapon + CreateSpellCooldown(48707), -- Anti-Magic Shell + CreateSpellCooldown(48743), -- Death Pact + CreateSpellCooldown(48792), -- Icebound Fortitude + CreateSpellCooldown(49039), -- Lichborne + CreateSpellCooldown(61999), -- Raise Ally -- Blood - CreateSpellCooldown(55233), -- Vampiric Blood - CreateSpellCooldown(48982), -- Rune Tap + CreateSpellCooldown(55233), -- Vampiric Blood + CreateSpellCooldown(48982), -- Rune Tap -- Frost -- Unholy - CreateSpellCooldown(49206), -- Summon Gargoyle + CreateSpellCooldown(49206), -- Summon Gargoyle }, ["PALADIN"] = { -- All - CreateSpellCooldown(1022), -- Hand of Protection - CreateSpellCooldown(1044), -- Hand of Freedom - CreateSpellCooldown(6940), -- Hand of Sacrifice + CreateSpellCooldown(1022), -- Hand of Protection + CreateSpellCooldown(1044), -- Hand of Freedom + CreateSpellCooldown(6940), -- Hand of Sacrifice -- Holy - CreateSpellCooldown(31821), -- Aura Mastery - CreateSpellCooldown(31842), -- Divine Favor - CreateSpellCooldown(54428), -- Divine Plea - + CreateSpellCooldown(31821), -- Aura Mastery + CreateSpellCooldown(31842), -- Divine Favor + CreateSpellCooldown(54428), -- Divine Plea + -- Protection - CreateSpellCooldown(498), -- Divine Protection - CreateSpellCooldown(642), -- Divine Shield - CreateSpellCooldown(20925), -- Holy Shield - CreateSpellCooldown(31850), -- Ardent Defender - CreateSpellCooldown(70940), -- Divine Guardian - CreateSpellCooldown(86669), -- Guardian of Ancient Kings - + CreateSpellCooldown(498), -- Divine Protection + CreateSpellCooldown(642), -- Divine Shield + CreateSpellCooldown(20925), -- Holy Shield + CreateSpellCooldown(31850), -- Ardent Defender + CreateSpellCooldown(70940), -- Divine Guardian + CreateSpellCooldown(86669), -- Guardian of Ancient Kings + -- Retribution - CreateSpellCooldown(31884), -- Avenging Wrath + CreateSpellCooldown(31884), -- Avenging Wrath }, ["PRIEST"] = { -- All - CreateSpellCooldown(586), -- Fade - CreateSpellCooldown(6346), -- Fear Ward - CreateSpellCooldown(8122), -- Psychic Scream - CreateSpellCooldown(34433), -- Shadowfiend - CreateSpellCooldown(64901), -- Hymn of Hope - CreateSpellCooldown(73325), -- Leap of Faith - + CreateSpellCooldown(586), -- Fade + CreateSpellCooldown(6346), -- Fear Ward + CreateSpellCooldown(8122), -- Psychic Scream + CreateSpellCooldown(34433), -- Shadowfiend + CreateSpellCooldown(64901), -- Hymn of Hope + CreateSpellCooldown(73325), -- Leap of Faith + -- Discipline - CreateSpellCooldown(10060), -- Power Infusion - CreateSpellCooldown(33206), -- Pain Suppression - CreateSpellCooldown(87151), -- Archangel - CreateSpellCooldown(89485), -- Inner Focus + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(33206), -- Pain Suppression + CreateSpellCooldown(87151), -- Archangel + CreateSpellCooldown(89485), -- Inner Focus -- Holy - CreateSpellCooldown(47788), -- Guardian Spirit - CreateSpellCooldown(64843), -- Divine Hymn + CreateSpellCooldown(47788), -- Guardian Spirit + CreateSpellCooldown(64843), -- Divine Hymn -- Shadow - CreateSpellCooldown(15286), -- Vampiric Embrace - CreateSpellCooldown(15487), -- Silence - CreateSpellCooldown(47585), -- Dispersion + CreateSpellCooldown(15286), -- Vampiric Embrace + CreateSpellCooldown(15487), -- Silence + CreateSpellCooldown(47585), -- Dispersion } } diff --git a/data/Cata/spells.lua b/data/Cata/spells.lua index 5d073f0..ecab3bf 100644 --- a/data/Cata/spells.lua +++ b/data/Cata/spells.lua @@ -9,23 +9,23 @@ local AddSpells = ns.data.AddSpells local data = { ["DEATHKNIGHT"] = { -- Blood - [49222] = CreateSpellPriority(8), -- Bone Shield + [49222] = CreateSpellPriority(8), -- Bone Shield }, ["PALADIN"] = { -- Holy - [82327] = CreateSpellPriority(5), -- Holy Radiance - [86273] = CreateSpellPriority(5), -- Illuminated Healing - + [82327] = CreateSpellPriority(5), -- Holy Radiance + [86273] = CreateSpellPriority(5), -- Illuminated Healing + -- Protection - [20925] = CreateSpellPriority(7), -- Holy Shield + [20925] = CreateSpellPriority(7), -- Holy Shield }, ["PRIEST"] = { -- Discipline - [81660] = CreateSpellPriority(8), -- Evangelism (Rank 1) - [81661] = CreateSpellPriority(8), -- Evangelism (Rank 2) - [59887] = CreateSpellPriority(7), -- Borrowed Time (Rank 1) - [59888] = CreateSpellPriority(7), -- Borrowed Time (Rank 2) - [59889] = CreateSpellPriority(7), -- Borrowed Time (Rank 3) + [81660] = CreateSpellPriority(8), -- Evangelism (Rank 1) + [81661] = CreateSpellPriority(8), -- Evangelism (Rank 2) + [59887] = CreateSpellPriority(7), -- Borrowed Time (Rank 1) + [59888] = CreateSpellPriority(7), -- Borrowed Time (Rank 2) + [59889] = CreateSpellPriority(7), -- Borrowed Time (Rank 3) } } diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index ce98803..bc81f27 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -5,50 +5,81 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Mists of Pandaria Classic -------------------------------------------------- -do - local data = { - [128943] = true, -- Cyclonic Inspiration - [81744] = true, -- Horde - - -- PRIEST - [21562] = true, -- Power Word: Fortitude - } - - AddBlacklist(data) -end - -do - local data = { - -- DEATHKNIGHT - [55610] = true, -- Unholy Aura - - -- HUNTER - [77769] = true, -- Trap Launcher - - -- MAGE - [61316] = true, -- Dalaran Brilliance - - -- MONK - [117666] = true, -- Legacy of the Emperor - [116781] = true, -- Legacy of the White Tiger - - -- PRIEST - [49868] = true, -- Mind Quickening - - -- ROGUE - [113742] = true, -- Swiftblade's Cunning - [112942] = true, -- Shadow Focus - - - -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath - [77747] = true, -- Burning Wrath - [116956] = true, -- Grace of Air - - -- WARLOCK - [109773] = true, -- Dark Intent - [108446] = true, -- Soul Link - } - AddBlacklist(data) -end +local data = { + [128943] = true, -- Cyclonic Inspiration + [81744] = true, -- Horde + + -- DEATHKNIGHT + [48263] = true, -- Blood Presence + [48265] = true, -- Unholy Presence + [48266] = true, -- Frost Presence + [55610] = true, -- Unholy Aura + [57330] = true, -- Horn of Winter + + -- DRUID + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [33943] = true, -- Flight Form + [40120] = true, -- Swift Flight Form + + -- HUNTER + [77769] = true, -- Trap Launcher + [13165] = true, -- Aspect of the Hawk + + -- MAGE + [61316] = true, -- Dalaran Brilliance + [30482] = true, -- Molten Armor + [7302] = true, -- Frost Armor + [6117] = true, -- Mage Armor + + -- MONK + [117666] = true, -- Legacy of the Emperor + [116781] = true, -- Legacy of the White Tiger + [103985] = true, -- Stance of the Fierce Tiger + [115069] = true, -- Stance of the Sturdy Ox + [115070] = true, -- Stance of the Wise Serpent + + -- PALADIN + [20217] = true, -- Blessing of Kings + [25780] = true, -- Righteous Fury + [20165] = true, -- Seal of Insight + [20154] = true, -- Seal of Righteousness + [31801] = true, -- Seal of Truth + [20164] = true, -- Seal of Justice + + -- PRIEST + [21562] = true, -- Power Word: Fortitude + [49868] = true, -- Mind Quickening + [588] = true, -- Inner Fire + [73413] = true, -- Inner Will + [15473] = true, -- Shadowform + + -- ROGUE + [113742] = true, -- Swiftblade's Cunning + [112942] = true, -- Shadow Focus + [8679] = true, -- Wound Poison + [5761] = true, -- Mind-numbing Poison + [108211] = true, -- Leeching Poison + [108215] = true, -- Paralytic Poison + + -- SHAMAN + [30809] = true, -- Unleashed Rage + [51470] = true, -- Elemental Oath + [77747] = true, -- Burning Wrath + [116956] = true, -- Grace of Air + [324] = true, -- Lightning Shield + [52127] = true, -- Water Shield + + -- WARLOCK + [109773] = true, -- Dark Intent + [108446] = true, -- Soul Link + + -- WARRIOR + [2457] = true, -- Battle Stance + [71] = true, -- Defensive Stance + [2458] = true, -- Berserker Stance + [6673] = true, -- Battle Shout + [469] = true, -- Commanding Shout +} + +AddBlacklist(data) diff --git a/data/Mists/cooldowns.lua b/data/Mists/cooldowns.lua index 114b69e..ba36c0b 100644 --- a/data/Mists/cooldowns.lua +++ b/data/Mists/cooldowns.lua @@ -9,38 +9,196 @@ local AddCooldowns = ns.data.AddCooldowns local data = { ["DRUID"] = { -- General - CreateSpellCooldown(740), -- Tranquility - CreateSpellCooldown(20484), -- Rebirth - CreateSpellCooldown(22812), -- Barkskin - CreateSpellCooldown(29166), -- Innervate + CreateSpellCooldown(740), -- Tranquility + CreateSpellCooldown(20484), -- Rebirth + CreateSpellCooldown(22812), -- Barkskin + CreateSpellCooldown(29166), -- Innervate + CreateSpellCooldown(106898), -- Stampeding Roar + + -- Talents + CreateSpellCooldown(102351), -- Cenarion Ward + CreateSpellCooldown(108238), -- Renewal + CreateSpellCooldown(132158), -- Nature's Swiftness + CreateSpellCooldown(99), -- Disorienting Roar + CreateSpellCooldown(102359), -- Mass Entanglement + CreateSpellCooldown(102793), -- Ursol's Vortex + CreateSpellCooldown(132469), -- Typhoon + CreateSpellCooldown(124974), -- Nature's Vigil + + -- Balance + CreateSpellCooldown(78675), -- Solar Beam + CreateSpellCooldown(112071), -- Celestial Alignment + CreateSpellCooldown(102560), -- Incarnation: Chosen of Elune + CreateSpellCooldown(48505), -- Starfall -- Guardian / Feral - CreateSpellCooldown(61336), -- Survival Instincts + CreateSpellCooldown(61336), -- Survival Instincts CreateSpellCooldown(102795), -- Bear Hug CreateSpellCooldown(106922), -- Might of Ursoc CreateSpellCooldown(106952), -- Berkserk + CreateSpellCooldown(106839), -- Skull Bash + CreateSpellCooldown(5217), -- Tiger's Fury + CreateSpellCooldown(102543), -- Incarnation: King of the Jungle + CreateSpellCooldown(102558), -- Incarnation: Son of Ursoc -- Restoration - CreateSpellCooldown(102342), -- Ironbark + CreateSpellCooldown(102342), -- Ironbark + CreateSpellCooldown(33891), -- Incarnation: Tree of Life + + CreateSpellCooldown(1850), -- Dash + CreateSpellCooldown(5229), -- Enrage + CreateSpellCooldown(108288), -- Heart of the Wild + CreateSpellCooldown(106731), -- Incarnation + CreateSpellCooldown(5211), -- Mighty Bash + CreateSpellCooldown(16689), -- Nature's Grasp }, ["DEATHKNIGHT"] = { - CreateSpellCooldown(57330), -- Horn of Winter - CreateSpellCooldown(48792), -- Icebound Fortitude - CreateSpellCooldown(48707), -- Anti-Magic Shell - CreateSpellCooldown(49028), -- Dancing Rune Weapon - CreateSpellCooldown(49039), -- Lichborne - CreateSpellCooldown(55233), -- Vampiric Blood - CreateSpellCooldown(42650), -- Army of the Dead - CreateSpellCooldown(108200), -- Remorseless Winter + CreateSpellCooldown(57330), -- Horn of Winter + CreateSpellCooldown(48792), -- Icebound Fortitude + CreateSpellCooldown(48707), -- Anti-Magic Shell + CreateSpellCooldown(49028), -- Dancing Rune Weapon + CreateSpellCooldown(49039), -- Lichborne + CreateSpellCooldown(55233), -- Vampiric Blood + CreateSpellCooldown(42650), -- Army of the Dead + CreateSpellCooldown(108200), -- Remorseless Winter + CreateSpellCooldown(47528), -- Mind Freeze + CreateSpellCooldown(49576), -- Death Grip + CreateSpellCooldown(47476), -- Strangulate + CreateSpellCooldown(61999), -- Raise Ally + CreateSpellCooldown(47568), -- Empower Rune Weapon + CreateSpellCooldown(48743), -- Death Pact + CreateSpellCooldown(51052), -- Anti-Magic Zone + CreateSpellCooldown(108199), -- Gorefiend's Grasp + CreateSpellCooldown(96268), -- Death's Advance + CreateSpellCooldown(49222), -- Bone Shield + CreateSpellCooldown(51271), -- Pillar of Frost + CreateSpellCooldown(49206), -- Summon Gargoyle + CreateSpellCooldown(77575), -- Outbreak + + CreateSpellCooldown(50034), -- Blood Rites + CreateSpellCooldown(77606), -- Dark Simulacrum + CreateSpellCooldown(50977), -- Death Gate + CreateSpellCooldown(108201), -- Desecrated Ground + CreateSpellCooldown(47481), -- Gnaw + CreateSpellCooldown(91800), -- Gnaw + CreateSpellCooldown(91797), -- Monstrous Blow + CreateSpellCooldown(46584), -- Raise Dead + CreateSpellCooldown(115989), -- Unholy Blight + CreateSpellCooldown(49016), -- Unholy Frenzy + }, + ["HUNTER"] = { + CreateSpellCooldown(19263), -- Deterrence + CreateSpellCooldown(5384), -- Feign Death + CreateSpellCooldown(1499), -- Freezing Trap + CreateSpellCooldown(34477), -- Misdirection + CreateSpellCooldown(147362), -- Counter Shot + CreateSpellCooldown(3045), -- Rapid Fire + CreateSpellCooldown(19574), -- Bestial Wrath + + -- Talents + CreateSpellCooldown(34490), -- Silencing Shot + CreateSpellCooldown(19386), -- Wyvern Sting + CreateSpellCooldown(109248), -- Binding Shot + CreateSpellCooldown(120679), -- Dire Beast + CreateSpellCooldown(131894), -- A Murder of Crows + CreateSpellCooldown(121818), -- Stampede + + CreateSpellCooldown(1742), -- Cower + CreateSpellCooldown(4167), -- Web + CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(24604), -- Furious Howl + CreateSpellCooldown(26064), -- Shell Shield + CreateSpellCooldown(50245), -- Pin + CreateSpellCooldown(50318), -- Serenity Dust + CreateSpellCooldown(50479), -- Nether Shock + CreateSpellCooldown(50519), -- Sonic Blast + CreateSpellCooldown(50541), -- Clench + CreateSpellCooldown(51753), -- Camouflage + CreateSpellCooldown(53271), -- Master's Call + CreateSpellCooldown(53401), -- Rabid + CreateSpellCooldown(53478), -- Last Stand + CreateSpellCooldown(53480), -- Roar of Sacrifice + CreateSpellCooldown(53490), -- Bullheaded + CreateSpellCooldown(54706), -- Venom Web Spray + CreateSpellCooldown(55709), -- Heart of the Phoenix + CreateSpellCooldown(56626), -- Sting + CreateSpellCooldown(61684), -- Dash + CreateSpellCooldown(90309), -- Terrifying Roar + CreateSpellCooldown(90327), -- Lock Jaw + CreateSpellCooldown(90337), -- Bad Manner + CreateSpellCooldown(90339), -- Harden Carapace + CreateSpellCooldown(90355), -- Primal Rage + CreateSpellCooldown(91644), -- Snatch + CreateSpellCooldown(93434), -- Horn Toss + CreateSpellCooldown(93435), -- Roar of Courage + CreateSpellCooldown(96201), -- Web Wrap + CreateSpellCooldown(97229), -- Bellowing Roar + CreateSpellCooldown(109259), -- Powershot + CreateSpellCooldown(109304), -- Exhilaration + CreateSpellCooldown(120697), -- Lynx Rush + CreateSpellCooldown(126246), -- Lullaby + CreateSpellCooldown(126355), -- Paralyzing Quill + CreateSpellCooldown(126373), -- Fearless Roar + CreateSpellCooldown(126393), -- Eternal Guardian + CreateSpellCooldown(126423), -- Petrifying Gaze + CreateSpellCooldown(128997), -- Spirit Beast Blessing + }, + ["MAGE"] = { + CreateSpellCooldown(2139), -- Counterspell + CreateSpellCooldown(45438), -- Ice Block + CreateSpellCooldown(55342), -- Mirror Image + CreateSpellCooldown(66), -- Invisibility + CreateSpellCooldown(80353), -- Time Warp + CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(108978), -- Alter Time + + -- Talents + CreateSpellCooldown(12043), -- Presence of Mind + CreateSpellCooldown(11958), -- Cold Snap + CreateSpellCooldown(110959), -- Greater Invisibility + CreateSpellCooldown(113724), -- Ring of Frost + + -- Arcane + CreateSpellCooldown(12042), -- Arcane Power + + -- Fire + CreateSpellCooldown(11129), -- Combustion + CreateSpellCooldown(31661), -- Dragon's Breath + + -- Frost + CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(44572), -- Deep Freeze + CreateSpellCooldown(84714), -- Frozen Orb + CreateSpellCooldown(31687), -- Summon Water Elemental + -- CreateSpellCooldown(43987), -- Conjure Refreshment Table + + -- CreateSpellCooldown(120146), -- Ancient Portal: Dalaran + -- CreateSpellCooldown(53142), -- Portal: Dalaran + -- CreateSpellCooldown(11419), -- Portal: Darnassus + -- CreateSpellCooldown(32266), -- Portal: Exodar + -- CreateSpellCooldown(11416), -- Portal: Ironforge + -- CreateSpellCooldown(11417), -- Portal: Orgrimmar + -- CreateSpellCooldown(33691), -- Portal: Shattrath + -- CreateSpellCooldown(35717), -- Portal: Shattrath + -- CreateSpellCooldown(32267), -- Portal: Silvermoon + -- CreateSpellCooldown(49361), -- Portal: Stonard + -- CreateSpellCooldown(10059), -- Portal: Stormwind + -- CreateSpellCooldown(49360), -- Portal: Theramore + -- CreateSpellCooldown(11420), -- Portal: Thunder Bluff + -- CreateSpellCooldown(88345), -- Portal: Tol Barad + -- CreateSpellCooldown(88346), -- Portal: Tol Barad + -- CreateSpellCooldown(11418), -- Portal: Undercity + -- CreateSpellCooldown(132620), -- Portal: Vale of Eternal Blossoms + -- CreateSpellCooldown(132626), -- Portal: Vale of Eternal Blossoms }, - ["HUNTER"] = {}, - ["MAGE"] = {}, ["MONK"] = { -- General CreateSpellCooldown(115078), -- Paralysis CreateSpellCooldown(115176), -- Zen Meditation CreateSpellCooldown(117368), -- Grapple Weapon CreateSpellCooldown(137562), -- Nimble Brew + CreateSpellCooldown(116705), -- Spear Hand Strike + CreateSpellCooldown(115080), -- Touch of Death -- Talents CreateSpellCooldown(116844), -- Ring of Peace @@ -53,7 +211,6 @@ local data = { -- Brewmaster CreateSpellCooldown(115203), -- Fortifying Brew CreateSpellCooldown(115213), -- Avert Harm - CreateSpellCooldown(115308), -- Elusive Brew CreateSpellCooldown(115315), -- Summon Black Ox Statue CreateSpellCooldown(115399), -- Chi Brew CreateSpellCooldown(122057), -- Clash @@ -63,88 +220,225 @@ local data = { CreateSpellCooldown(115310), -- Revival CreateSpellCooldown(116849), -- Life Cocoon CreateSpellCooldown(116680), -- Thunder Focus Tea - + -- Windwaker CreateSpellCooldown(122470), -- Touch of Karma + CreateSpellCooldown(115288), -- Energizing Brew + + CreateSpellCooldown(101643), -- Transcendence + CreateSpellCooldown(126892), -- Zen Pilgrimage }, ["PALADIN"] = { -- General - CreateSpellCooldown(498), -- Divine Protection - CreateSpellCooldown(642), -- Divine Shield - CreateSpellCooldown(633), -- Lay on Hands - CreateSpellCooldown(1022), -- Blessing of Protection - CreateSpellCooldown(1044), -- Blessing of Freedom - CreateSpellCooldown(6940), -- Blessing of Sacrifice + CreateSpellCooldown(498), -- Divine Protection + CreateSpellCooldown(642), -- Divine Shield + CreateSpellCooldown(633), -- Lay on Hands + CreateSpellCooldown(853), -- Hammer of Justice + CreateSpellCooldown(1022), -- Blessing of Protection + CreateSpellCooldown(1044), -- Blessing of Freedom + CreateSpellCooldown(6940), -- Blessing of Sacrifice -- Talents - CreateSpellCooldown(31821), -- Aura Mastery - CreateSpellCooldown(31842), -- Divine Favor - CreateSpellCooldown(31850), -- Ardent Defender - CreateSpellCooldown(31884), -- Avenging Wrath (Holy) + CreateSpellCooldown(31821), -- Devotion Mastery + CreateSpellCooldown(31842), -- Divine Favor + CreateSpellCooldown(31850), -- Ardent Defender + CreateSpellCooldown(31884), -- Avenging Wrath (Holy) + CreateSpellCooldown(86659), -- Guardian of Ancient Kings + CreateSpellCooldown(54428), -- Divine Plea + CreateSpellCooldown(20066), -- Repentance + CreateSpellCooldown(115750), -- Blinding Light + CreateSpellCooldown(85499), -- Speed of Light + CreateSpellCooldown(114039), -- Hand of Purity + CreateSpellCooldown(105809), -- Holy Avenger + CreateSpellCooldown(114158), -- Light's Hammer + CreateSpellCooldown(114157), -- Execution Sentence + + -- Retribution + CreateSpellCooldown(96231), -- Rebuke + + CreateSpellCooldown(1038), -- Hand of Salvation }, ["PRIEST"] = { -- General - CreateSpellCooldown(586), -- Fade - CreateSpellCooldown(6346), -- Fear Ward - CreateSpellCooldown(8122), -- Psychic Scream - CreateSpellCooldown(34433), -- Shadowfiend - CreateSpellCooldown(73325), -- Leap of Faith - CreateSpellCooldown(64901), -- Hymn of Hope + CreateSpellCooldown(586), -- Fade + CreateSpellCooldown(6346), -- Fear Ward + CreateSpellCooldown(8122), -- Psychic Scream + CreateSpellCooldown(34433), -- Shadowfiend + CreateSpellCooldown(73325), -- Leap of Faith + CreateSpellCooldown(64901), -- Hymn of Hope -- Talents - CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(19236), -- Desperate Prayer + CreateSpellCooldown(108920), -- Void Tendrils + CreateSpellCooldown(112833), -- Spectral Guise + CreateSpellCooldown(121135), -- Cascade + CreateSpellCooldown(120517), -- Halo + CreateSpellCooldown(32375), -- Mass Dispel + CreateSpellCooldown(108968), -- Void Shift -- Discipline - CreateSpellCooldown(33206), -- Pain Suppression - CreateSpellCooldown(62618), -- Power Word: Barrier - CreateSpellCooldown(81700), -- Archangel - CreateSpellCooldown(89485), -- Inner Focus + CreateSpellCooldown(33206), -- Pain Suppression + CreateSpellCooldown(62618), -- Power Word: Barrier + CreateSpellCooldown(81700), -- Archangel + CreateSpellCooldown(89485), -- Inner Focus CreateSpellCooldown(109964), -- Spirit Shell - + -- Holy - CreateSpellCooldown(64843), -- Divine Hymn - CreateSpellCooldown(47788), -- Guardian Spirit - + CreateSpellCooldown(64843), -- Divine Hymn + CreateSpellCooldown(47788), -- Guardian Spirit + CreateSpellCooldown(724), -- Lightwell + CreateSpellCooldown(88625), -- Holy Word: Chastise + -- Shadow - CreateSpellCooldown(15487), -- Silence - CreateSpellCooldown(15286), -- Vampiric Embrace - CreateSpellCooldown(47585), -- Dispersion - CreateSpellCooldown(64044), -- Psychic Horror + CreateSpellCooldown(15487), -- Silence + CreateSpellCooldown(15286), -- Vampiric Embrace + CreateSpellCooldown(47585), -- Dispersion + CreateSpellCooldown(64044), -- Psychic Horror CreateSpellCooldown(123040), -- Mind Bender + + CreateSpellCooldown(121093), -- Gift of the Naaru + CreateSpellCooldown(108921), -- Psyfiend + }, + ["ROGUE"] = { + -- General + CreateSpellCooldown(1766), -- Kick + CreateSpellCooldown(31224), -- Cloak of Shadows + CreateSpellCooldown(5277), -- Evasion + CreateSpellCooldown(1856), -- Vanish + CreateSpellCooldown(2094), -- Blind + CreateSpellCooldown(2983), -- Sprint + CreateSpellCooldown(74001), -- Combat Readiness + CreateSpellCooldown(76577), -- Smoke Bomb + CreateSpellCooldown(121471), -- Shadow Blades + CreateSpellCooldown(114018), -- Shroud of Concealment + CreateSpellCooldown(57934), -- Tricks of the Trade + + -- Talents + CreateSpellCooldown(14185), -- Preparation + CreateSpellCooldown(36554), -- Shadowstep + + -- Assassination + CreateSpellCooldown(79140), -- Vendetta + + -- Combat + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(51690), -- Killing Spree + + -- Subtlety + CreateSpellCooldown(51713), -- Shadow Dance + + CreateSpellCooldown(51722), -- Dismantle + CreateSpellCooldown(137619), -- Marked for Death + CreateSpellCooldown(107079), -- Quaking Palm + CreateSpellCooldown(73981), -- Redirect + CreateSpellCooldown(114842), -- Shadow Walk }, ["SHAMAN"] = { -- General - CreateSpellCooldown(8143), -- Tremor Totem - CreateSpellCooldown(32182), -- Heroism - CreateSpellCooldown(79206), -- Spiritwalker's Grace + CreateSpellCooldown(8143), -- Tremor Totem + CreateSpellCooldown(32182), -- Heroism + CreateSpellCooldown(79206), -- Spiritwalker's Grace CreateSpellCooldown(108269), -- Capacitor Totem CreateSpellCooldown(108280), -- Healing Tide Totem CreateSpellCooldown(114049), -- Ascendance CreateSpellCooldown(120668), -- Stormlash Totem + CreateSpellCooldown(57994), -- Wind Shear + CreateSpellCooldown(51514), -- Hex + CreateSpellCooldown(2825), -- Bloodlust + CreateSpellCooldown(2062), -- Earth Elemental Totem + CreateSpellCooldown(2894), -- Fire Elemental Totem + + -- Talents + CreateSpellCooldown(108271), -- Astral Shift + CreateSpellCooldown(108270), -- Stone Bulwark Totem + CreateSpellCooldown(108273), -- Windwalk Totem + CreateSpellCooldown(108285), -- Call of the Elements + CreateSpellCooldown(16166), -- Elemental Mastery + CreateSpellCooldown(16188), -- Ancestral Swiftness + CreateSpellCooldown(108281), -- Ancestral Guidance + + -- Elemental + CreateSpellCooldown(51490), -- Thunderstorm + + -- Enhancement + CreateSpellCooldown(30823), -- Shamanistic Rage + CreateSpellCooldown(51533), -- Feral Spirit + + -- Restoration + CreateSpellCooldown(98008), -- Spirit Link Totem + CreateSpellCooldown(16190), -- Mana Tide Totem + + CreateSpellCooldown(556), -- Astral Recall + CreateSpellCooldown(20608), -- Reincarnation + CreateSpellCooldown(58875), -- Spirit Walk + }, + ["WARLOCK"] = { + -- General + CreateSpellCooldown(104773), -- Unending Resolve + CreateSpellCooldown(48020), -- Demonic Circle: Teleport + CreateSpellCooldown(20707), -- Soulstone + CreateSpellCooldown(1122), -- Summon Infernal + CreateSpellCooldown(18540), -- Summon Doomguard + + -- Talents + CreateSpellCooldown(108359), -- Dark Regeneration + CreateSpellCooldown(5484), -- Howl of Terror + CreateSpellCooldown(6789), -- Mortal Coil + CreateSpellCooldown(30283), -- Shadowfury + CreateSpellCooldown(108416), -- Sacrificial Pact + CreateSpellCooldown(110913), -- Dark Bargain + CreateSpellCooldown(108482), -- Unbound Will + + -- Specializations + CreateSpellCooldown(113860), -- Dark Soul: Misery + CreateSpellCooldown(113861), -- Dark Soul: Knowledge + CreateSpellCooldown(113858), -- Dark Soul: Instability + + CreateSpellCooldown(29893), -- Create Soulwell + CreateSpellCooldown(120451), -- Flames of Xoroth + CreateSpellCooldown(108501), -- Grimoire of Service + CreateSpellCooldown(108508), -- Mannoroth's Fury + CreateSpellCooldown(698), -- Ritual of Summoning + CreateSpellCooldown(87385), -- Seed of Corruption + CreateSpellCooldown(29858), -- Soulshatter }, ["WARRIOR"] = { -- General - CreateSpellCooldown(871), -- Shield Wall - CreateSpellCooldown(1719), -- Recklessness - CreateSpellCooldown(3411), -- Intervene - CreateSpellCooldown(5246), -- Intimidating Shout - CreateSpellCooldown(23920), -- Spell Reflection - CreateSpellCooldown(64382), -- Shattering Throw - CreateSpellCooldown(97462), -- Rallying Cry + CreateSpellCooldown(871), -- Shield Wall + CreateSpellCooldown(1719), -- Recklessness + CreateSpellCooldown(3411), -- Intervene + CreateSpellCooldown(5246), -- Intimidating Shout + CreateSpellCooldown(23920), -- Spell Reflection + CreateSpellCooldown(64382), -- Shattering Throw + CreateSpellCooldown(97462), -- Rallying Cry CreateSpellCooldown(114192), -- Mocking Banner CreateSpellCooldown(114203), -- Demoralizing Banner CreateSpellCooldown(114207), -- Skull Banner + CreateSpellCooldown(6552), -- Pummel + CreateSpellCooldown(102060), -- Disrupting Shout + CreateSpellCooldown(12975), -- Last Stand + CreateSpellCooldown(118038), -- Die by the Sword + CreateSpellCooldown(18499), -- Berserker Rage + CreateSpellCooldown(6544), -- Heroic Leap + CreateSpellCooldown(1160), -- Demoralizing Shout + CreateSpellCooldown(676), -- Disarm -- Talents - CreateSpellCooldown(12292), -- Bloodbath - CreateSpellCooldown(46924), -- Bladestorm - CreateSpellCooldown(46968), -- Shockwave - CreateSpellCooldown(55694), -- Enraged Regeneration + CreateSpellCooldown(12292), -- Bloodbath + CreateSpellCooldown(46924), -- Bladestorm + CreateSpellCooldown(46968), -- Shockwave + CreateSpellCooldown(55694), -- Enraged Regeneration CreateSpellCooldown(107570), -- Storm Bolt CreateSpellCooldown(107574), -- Avatar CreateSpellCooldown(114028), -- Mass Spell Reflection CreateSpellCooldown(114030), -- Vigilance CreateSpellCooldown(118000), -- Dragon Roar + CreateSpellCooldown(112873), -- War Banner + + CreateSpellCooldown(6673), -- Battle Shout + CreateSpellCooldown(469), -- Commanding Shout + CreateSpellCooldown(107566), -- Staggering Shout } } diff --git a/data/Mists/spells.lua b/data/Mists/spells.lua index ba35444..98a5329 100644 --- a/data/Mists/spells.lua +++ b/data/Mists/spells.lua @@ -8,19 +8,19 @@ local AddSpells = ns.data.AddSpells -------------------------------------------------- local data = { ["PRIEST"] = { - + }, ["MONK"] = { - [129914] = CreateSpellPriority(false), -- Power Strike + [115080] = CreateSpellPriority(false), -- Touch of Death [117666] = CreateSpellPriority(false), -- Legacy of the Emperor - [121125] = CreateSpellPriority(false), -- Touch of Death + [129914] = CreateSpellPriority(false), -- Power Strike -- Brewmaster - [123402] = CreateSpellPriority(9), -- Guard - [125359] = CreateSpellPriority(8), -- Tiger Power - [128636] = CreateSpellPriority(8), -- Power Guard - [128939] = CreateSpellPriority(9), -- Elusive Brew - [132365] = CreateSpellPriority(10), -- Vengeance + [118636] = CreateSpellPriority(8), -- Power Guard + [123402] = CreateSpellPriority(9), -- Guard + [125359] = CreateSpellPriority(8), -- Tiger Power + [128939] = CreateSpellPriority(9), -- Elusive Brew + [132365] = CreateSpellPriority(10), -- Vengeance } } diff --git a/data/Standard/blacklist.lua b/data/Standard/blacklist.lua index d236ad6..9ceffe1 100644 --- a/data/Standard/blacklist.lua +++ b/data/Standard/blacklist.lua @@ -5,226 +5,241 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Retail -------------------------------------------------- -do - local data = { - -- Classes - -- DEMONHUNTER - [452550] = true, -- Monster Rising - [453314] = true, -- Enduring Torment - [1214887] = true, -- Cycle of Hatred - - -- EVOKER - [369459] = true, -- Source of Magic - [381753] = true, -- Blessing of the Bronze - [372014] = true, -- Visage - - -- DRUID - [400734] = true, -- After the Wildfire - - -- MAGE - [1217242] = true, -- Enlightened - - -- MONK - [383733] = true, -- Training of Niuzao - [450552] = true, -- Jade Walk - [450572] = true, -- Flow of Chi - [450574] = true, -- Flow of Chi - [443574] = true, -- Ox Stance - [443575] = true, -- Tiger Stance - [166646] = true, -- Windwalking - [129914] = true, -- Combat Wisdom - [450380] = true, -- Chi Wave - [451021] = true, -- Flurry Charge - [454494] = true, -- August Blessing - - -- PRIEST - [21562] = true, -- Power Word: Fortitude - - -- SHAMAN - [462854] = true, -- Skyfury - - -- WARRIOR - [386196] = true, -- Berserker Stance - - -- Mount - [404464] = true, -- Flight Style: Skyriding - [404468] = true, -- Flight Style: Steady - [456820] = true, -- Ride Along - - -- Mythic+ - [206150] = true, -- Challenger's Might - - -- Items - [447962] = true, -- Stance - Surekian Flourish - [447978] = true, -- Stance - Surekian Decimation - [448036] = true, -- Stance - Surekian Barrage - [448433] = true, -- Surekian Grace - [450696] = true, -- "The 50 Verses of Radiance" (Tome of Light's Devotion) - [450699] = true, -- "The 50 Verses of Radiance" (Tome of Light's Devotion) - [450706] = false, -- Inner Radiance (Tome of Light's Devotion) - [450720] = true, -- Inner Radiance (Tome of Light's Devotion) - [452226] = true, -- Spiderling (Ara-Kara Sacbrood) - [457925] = true, -- Venomous Potential (Seal of the Poisoned Pact) - [451369] = true, -- Empowering Darkness - - -- Costumes - [452533] = true, -- Magical Mischief - - -- Warband - [430191] = true, -- Warband Mentored Leveling - - -- Professions - [442981] = true, -- Weaver's Tutelage - [462810] = true, -- Weaver's Prodigy - - -- Factions - [442983] = true, -- Vizier's Savvy - [462806] = true, -- Vizier's Supremacy - [440645] = true, -- Fire Flies - [443248] = true, -- Azj-Kahet Pheromones - [462821] = true, -- General's Bulwark - - -- Consumables - [454188] = true, -- Hearty Well Fed - [462180] = true, -- Hearty Well Fed - [462181] = true, -- Hearty Well Fed - [462182] = true, -- Hearty Well Fed - [462183] = true, -- Hearty Well Fed - [462184] = true, -- Hearty Well Fed - [462185] = true, -- Hearty Well Fed - [462186] = true, -- Hearty Well Fed - [462187] = true, -- Hearty Well Fed - [462188] = true, -- Hearty Well Fed - [462189] = true, -- Hearty Well Fed - [462190] = true, -- Hearty Well Fed - [462191] = true, -- Hearty Well Fed - [462192] = true, -- Hearty Well Fed - [462193] = true, -- Hearty Well Fed - [462194] = true, -- Hearty Well Fed - [462195] = true, -- Hearty Well Fed - [462196] = true, -- Hearty Well Fed - [462197] = true, -- Hearty Well Fed - [462198] = true, -- Hearty Well Fed - [462199] = true, -- Hearty Well Fed - [462200] = true, -- Hearty Well Fed - [462201] = true, -- Hearty Well Fed - [462202] = true, -- Hearty Well Fed - [462203] = true, -- Hearty Well Fed - [462204] = true, -- Hearty Well Fed - [462205] = true, -- Hearty Well Fed - [462206] = true, -- Hearty Well Fed - [462207] = true, -- Hearty Well Fed - [462208] = true, -- Hearty Well Fed - [462209] = true, -- Hearty Well Fed - [462210] = true, -- Hearty Well Fed - - [431971] = true, -- Flask of Tempered Aggression - [431972] = true, -- Flask of Tempered Swiftness - [431973] = true, -- Flask of Tempered Versatility - [431974] = true, -- Flask of Tempered Mastery - - -------------------------------------------------- - -- Patch 11.0.0 - -------------------------------------------------- - -- Delves - [423852] = true, -- Dormouse Ecila - [448868] = true, -- Lucky Cursed Potion - [459058] = true, -- Miniature - [459059] = true, -- Massive - [459254] = true, -- Loader Signal - - -- Professions - [457674] = true, -- Duskthread Lining - [457666] = true, -- Dawnthread Lining - - -------------------------------------------------- - -- Patch 11.0.2 - -------------------------------------------------- - -- World Buffs - [471521] = true, -- Sign of the Explorer - - -------------------------------------------------- - -- Patch 11.0.5 - -------------------------------------------------- - -- World Buffs - [452307] = true, -- Sign of the Past - [455020] = true, -- WoW's Anniversary - - -- Events - [455050] = true, -- Blessing of the Brozen Drgonflight - - -- Items - [465642] = true, -- Blizzard Bling - - -------------------------------------------------- - -- Patch 11.0.7 - -------------------------------------------------- - -- Items - [1215495] = true, -- Cyrce's Circlet - - -------------------------------------------------- - -- Patch 11.1.5 - -------------------------------------------------- - -- World Buffs - [1214848] = true, -- Winds of Mysterious Fortune - [1227124] = true, -- Sacred Flame's Ward - - -- Horric Visions - [472265] = true, -- Vision Hunter - [472266] = true, -- Vision Hunter - [472267] = true, -- Vision Hunter - [472261] = true, -- Experimental Destabilization - [472263] = true, -- Experimental Destabilization - [472264] = true, -- Experimental Destabilization - [1215082] = true, -- Experimental Destabilization - [471497] = true, -- Singular Sanitation Expertise - [472160] = true, -- Singular Sanitation Expertise - [472152] = true, -- Singular Sanitation Expertise - [472238] = true, -- Clear Sight - [472248] = true, -- Clear Sight - [472246] = true, -- Clear Sight - [472241] = true, -- Elite Extermination - [1215782] = true, -- Elite Extermination - [1215783] = true, -- Elite Extermination - [471317] = true, -- Steeled Mind - [471318] = true, -- Steeled Mind - [471320] = true, -- Steeled Mind - [471321] = true, -- Steeled Mind - [471322] = true, -- Steeled Mind - [1216153] = true, -- Steeled Mind - [1221899] = true, -- Tattered Wold Rider Gear - - -------------------------------------------------- - -- Patch 11.1.7 - -------------------------------------------------- - -- World Buffs - [1223878] = true, -- Sign of Azeroth - - [1250683] = true, -- Collector's Bounty - [1250685] = true, -- Greedy Emisarry - - [1229050] = true, -- Mastery of Timeways - [1220736] = true, -- Mysterious Revivification - [1218497] = true, -- Mysterious Tenacity - [1218388] = true, -- Mysterious Celerity - [1218454] = true, -- Mysterious Swiftstrike - - -------------------------------------------------- - -- Patch 11.2.0 - -------------------------------------------------- - [1244018] = true, -- Tazavesh, the Vailed Market, Hard Mode - [1246366] = true, -- Stree Smart - - -------------------------------------------------- - -- Legion Remix - -------------------------------------------------- - [1232454] = true, -- Initife Power - [1238465] = true, -- Heroic World Tier - [1213439] = true, -- WoW Remix: Legion - - [440361] = true, -- Timeless Scroll of the Wild - - } - - AddBlacklist(data) -end +local data = { + -- Classes + -- DEMONHUNTER + [452550] = true, -- Monster Rising + [453314] = true, -- Enduring Torment + [1214887] = true, -- Cycle of Hatred + + -- EVOKER + [369459] = true, -- Source of Magic + [381753] = true, -- Blessing of the Bronze + [372014] = true, -- Visage + + -- DRUID + [400734] = true, -- After the Wildfire + [783] = true, -- Travel Form + [210053] = true, -- Mount Form + + -- MAGE + [1217242] = true, -- Enlightened + + -- MONK + [383733] = true, -- Training of Niuzao + [450552] = true, -- Jade Walk + [450572] = true, -- Flow of Chi + [450574] = true, -- Flow of Chi + [443574] = true, -- Ox Stance + [443575] = true, -- Tiger Stance + [166646] = true, -- Windwalking + [129914] = true, -- Combat Wisdom + [450380] = true, -- Chi Wave + [451021] = true, -- Flurry Charge + [454494] = true, -- August Blessing + + -- PALADIN + [53563] = true, -- Beacon of Light + [156910] = true, -- Beacon of Faith + [317920] = true, -- Concentration Aura + + -- PRIEST + [21562] = true, -- Power Word: Fortitude + [194384] = true, -- Atonement + + -- ROGUE + [315584] = true, -- Instant Poison + [8679] = true, -- Wound Poison + [5761] = true, -- Numbing Poison + [381637] = true, -- Atrophic Poison + [381664] = true, -- Amplifying Poison + + -- SHAMAN + [462854] = true, -- Skyfury + [52127] = true, -- Water Shield + + -- WARRIOR + [386196] = true, -- Berserker Stance + [386164] = true, -- Battle Stance + [386208] = true, -- Defensive Stance + + -- Mount + [404464] = true, -- Flight Style: Skyriding + [404468] = true, -- Flight Style: Steady + [456820] = true, -- Ride Along + + -- Mythic+ + [206150] = true, -- Challenger's Might + + -- Items + [447962] = true, -- Stance - Surekian Flourish + [447978] = true, -- Stance - Surekian Decimation + [448036] = true, -- Stance - Surekian Barrage + [448433] = true, -- Surekian Grace + [450696] = true, -- "The 50 Verses of Radiance" (Tome of Light's Devotion) + [450699] = true, -- "The 50 Verses of Radiance" (Tome of Light's Devotion) + [450706] = false, -- Inner Radiance (Tome of Light's Devotion) + [450720] = true, -- Inner Radiance (Tome of Light's Devotion) + [452226] = true, -- Spiderling (Ara-Kara Sacbrood) + [457925] = true, -- Venomous Potential (Seal of the Poisoned Pact) + [451369] = true, -- Empowering Darkness + + -- Costumes + [452533] = true, -- Magical Mischief + + -- Warband + [430191] = true, -- Warband Mentored Leveling + + -- Professions + [442981] = true, -- Weaver's Tutelage + [462810] = true, -- Weaver's Prodigy + + -- Factions + [442983] = true, -- Vizier's Savvy + [462806] = true, -- Vizier's Supremacy + [440645] = true, -- Fire Flies + [443248] = true, -- Azj-Kahet Pheromones + [462821] = true, -- General's Bulwark + + -- Consumables + [454188] = true, -- Hearty Well Fed + [462180] = true, -- Hearty Well Fed + [462181] = true, -- Hearty Well Fed + [462182] = true, -- Hearty Well Fed + [462183] = true, -- Hearty Well Fed + [462184] = true, -- Hearty Well Fed + [462185] = true, -- Hearty Well Fed + [462186] = true, -- Hearty Well Fed + [462187] = true, -- Hearty Well Fed + [462188] = true, -- Hearty Well Fed + [462189] = true, -- Hearty Well Fed + [462190] = true, -- Hearty Well Fed + [462191] = true, -- Hearty Well Fed + [462192] = true, -- Hearty Well Fed + [462193] = true, -- Hearty Well Fed + [462194] = true, -- Hearty Well Fed + [462195] = true, -- Hearty Well Fed + [462196] = true, -- Hearty Well Fed + [462197] = true, -- Hearty Well Fed + [462198] = true, -- Hearty Well Fed + [462199] = true, -- Hearty Well Fed + [462200] = true, -- Hearty Well Fed + [462201] = true, -- Hearty Well Fed + [462202] = true, -- Hearty Well Fed + [462203] = true, -- Hearty Well Fed + [462204] = true, -- Hearty Well Fed + [462205] = true, -- Hearty Well Fed + [462206] = true, -- Hearty Well Fed + [462207] = true, -- Hearty Well Fed + [462208] = true, -- Hearty Well Fed + [462209] = true, -- Hearty Well Fed + [462210] = true, -- Hearty Well Fed + + [431971] = true, -- Flask of Tempered Aggression + [431972] = true, -- Flask of Tempered Swiftness + [431973] = true, -- Flask of Tempered Versatility + [431974] = true, -- Flask of Tempered Mastery + + -------------------------------------------------- + -- Patch 11.0.0 + -------------------------------------------------- + -- Delves + [423852] = true, -- Dormouse Ecila + [448868] = true, -- Lucky Cursed Potion + [459058] = true, -- Miniature + [459059] = true, -- Massive + [459254] = true, -- Loader Signal + + -- Professions + [457674] = true, -- Duskthread Lining + [457666] = true, -- Dawnthread Lining + + -------------------------------------------------- + -- Patch 11.0.2 + -------------------------------------------------- + -- World Buffs + [471521] = true, -- Sign of the Explorer + + -------------------------------------------------- + -- Patch 11.0.5 + -------------------------------------------------- + -- World Buffs + [452307] = true, -- Sign of the Past + [455020] = true, -- WoW's Anniversary + + -- Events + [455050] = true, -- Blessing of the Brozen Drgonflight + + -- Items + [465642] = true, -- Blizzard Bling + + -------------------------------------------------- + -- Patch 11.0.7 + -------------------------------------------------- + -- Items + [1215495] = true, -- Cyrce's Circlet + + -------------------------------------------------- + -- Patch 11.1.5 + -------------------------------------------------- + -- World Buffs + [1214848] = true, -- Winds of Mysterious Fortune + [1227124] = true, -- Sacred Flame's Ward + + -- Horric Visions + [472265] = true, -- Vision Hunter + [472266] = true, -- Vision Hunter + [472267] = true, -- Vision Hunter + [472261] = true, -- Experimental Destabilization + [472263] = true, -- Experimental Destabilization + [472264] = true, -- Experimental Destabilization + [1215082] = true, -- Experimental Destabilization + [471497] = true, -- Singular Sanitation Expertise + [472160] = true, -- Singular Sanitation Expertise + [472152] = true, -- Singular Sanitation Expertise + [472238] = true, -- Clear Sight + [472248] = true, -- Clear Sight + [472246] = true, -- Clear Sight + [472241] = true, -- Elite Extermination + [1215782] = true, -- Elite Extermination + [1215783] = true, -- Elite Extermination + [471317] = true, -- Steeled Mind + [471318] = true, -- Steeled Mind + [471320] = true, -- Steeled Mind + [471321] = true, -- Steeled Mind + [471322] = true, -- Steeled Mind + [1216153] = true, -- Steeled Mind + [1221899] = true, -- Tattered Wold Rider Gear + + -------------------------------------------------- + -- Patch 11.1.7 + -------------------------------------------------- + -- World Buffs + [1223878] = true, -- Sign of Azeroth + + [1250683] = true, -- Collector's Bounty + [1250685] = true, -- Greedy Emisarry + + [1229050] = true, -- Mastery of Timeways + [1220736] = true, -- Mysterious Revivification + [1218497] = true, -- Mysterious Tenacity + [1218388] = true, -- Mysterious Celerity + [1218454] = true, -- Mysterious Swiftstrike + + -------------------------------------------------- + -- Patch 11.2.0 + -------------------------------------------------- + [1244018] = true, -- Tazavesh, the Vailed Market, Hard Mode + [1246366] = true, -- Stree Smart + + -------------------------------------------------- + -- Legion Remix + -------------------------------------------------- + [1232454] = true, -- Initife Power + [1238465] = true, -- Heroic World Tier + [1213439] = true, -- WoW Remix: Legion + + [440361] = true, -- Timeless Scroll of the Wild +} + +AddBlacklist(data) diff --git a/data/Standard/cooldowns.lua b/data/Standard/cooldowns.lua index c43a3af..4e7c726 100644 --- a/data/Standard/cooldowns.lua +++ b/data/Standard/cooldowns.lua @@ -15,12 +15,16 @@ local data = { CreateSpellCooldown(207684), -- Sigil of Misery CreateSpellCooldown(370965), -- The Hunt CreateSpellCooldown(390163), -- Sigil of Spite + CreateSpellCooldown(183752), -- Disrupt + CreateSpellCooldown(179057), -- Chaos Nova + CreateSpellCooldown(217832), -- Imprison -- Havoc - CreateSpellCooldown(196555), -- Netherwalk CreateSpellCooldown(198589), -- Blur CreateSpellCooldown(258925), -- Fel Barrage - + CreateSpellCooldown(191427), -- Metamorphosis (Havoc) + CreateSpellCooldown(198013), -- Eye Beam + -- Vengeance CreateSpellCooldown(202137), -- Sigil of Silence CreateSpellCooldown(202138), -- Sigil of Chains @@ -28,46 +32,77 @@ local data = { CreateSpellCooldown(207407), -- Soul Carver CreateSpellCooldown(263648), -- Soul Barrier CreateSpellCooldown(320341), -- Bulk Extraction + CreateSpellCooldown(212084), -- Fel Devastation + + CreateSpellCooldown(258860), -- Essence Break + CreateSpellCooldown(1234441), -- Power Siphon + CreateSpellCooldown(1241937), -- Soul Immolation + CreateSpellCooldown(1226339), -- Spinning Death + CreateSpellCooldown(1235552), -- Sunder + CreateSpellCooldown(1234195), -- Void Nova }, ["DEATHKNIGHT"] = { -- General CreateSpellCooldown(48707), -- Anti-Magic Shell CreateSpellCooldown(61999), -- Raise Ally + CreateSpellCooldown(47528), -- Mind Freeze + CreateSpellCooldown(49576), -- Death Grip + CreateSpellCooldown(48265), -- Death's Advance + CreateSpellCooldown(49039), -- Lichborne -- Talents CreateSpellCooldown(51052), -- Anti-Magic Zone - + CreateSpellCooldown(108199), -- Gorefiend's Grasp + CreateSpellCooldown(221562), -- Asphyxiate + -- Blood CreateSpellCooldown(48743), -- Death Pact CreateSpellCooldown(48792), -- Icebound Fortitude CreateSpellCooldown(49028), -- Dancing Rune Weapon CreateSpellCooldown(55233), -- Vampiric Blood CreateSpellCooldown(219809), -- Tombstone - CreateSpellCooldown(383269), -- Abomination Limb - + CreateSpellCooldown(1263569), -- Abomination Limb + -- Frost CreateSpellCooldown(47568), -- Empower Rune Weapon CreateSpellCooldown(51271), -- Pillar of Frost CreateSpellCooldown(152279), -- Breath of Sindragosa CreateSpellCooldown(196770), -- Remorseless Winter CreateSpellCooldown(279302), -- Forstwyrm's Fury - + -- Unholy CreateSpellCooldown(42650), -- Army of the Dead - CreateSpellCooldown(49206), -- Summon Gargoyle + CreateSpellCooldown(207289), -- Unholy Assault + CreateSpellCooldown(275699), -- Apocalypse + CreateSpellCooldown(1233448), -- Dark Transformation -- CreateSpellCooldown(455395), -- Rise Abomination + + CreateSpellCooldown(207167), -- Blinding Sleet + CreateSpellCooldown(205223), -- Consumption + CreateSpellCooldown(1263824), -- Consumption + CreateSpellCooldown(50977), -- Death Gate + CreateSpellCooldown(46585), -- Raise Dead + CreateSpellCooldown(439843), -- Reaper's Mark + CreateSpellCooldown(327574), -- Sacrificial Pact + CreateSpellCooldown(190778), -- Sindragosa's Fury + CreateSpellCooldown(390279), -- Vile Contagion + CreateSpellCooldown(212552), -- Wraith Walk }, ["DRUID"] = { -- General CreateSpellCooldown(20484), -- Rebirth CreateSpellCooldown(22812), -- Barkskin - + -- Talents CreateSpellCooldown(29166), -- Innervate CreateSpellCooldown(102359), -- Mass Entanglement CreateSpellCooldown(102793), -- Ursol's Vortex CreateSpellCooldown(108238), -- Renewal CreateSpellCooldown(124974), -- Mature's Vigil + CreateSpellCooldown(106839), -- Skull Bash + CreateSpellCooldown(99), -- Incapacitating Roar + CreateSpellCooldown(132469), -- Typhoon + CreateSpellCooldown(106898), -- Stampeding Roar -- All CreateSpellCooldown(391528), -- Convoke the Spirits @@ -79,9 +114,12 @@ local data = { CreateSpellCooldown(202425, false), -- Warrior of Elune CreateSpellCooldown(202770), -- Fury of Elune CreateSpellCooldown(205636), -- Force of Nature - + -- Feral - + CreateSpellCooldown(5217), -- Tiger's Fury + CreateSpellCooldown(106951), -- Berserk + CreateSpellCooldown(102543), -- Incarnation: Avatar of Ashamane + -- Guardian CreateSpellCooldown(50334), -- Berserkl: Ravage CreateSpellCooldown(61336), -- Survival Instincts @@ -89,15 +127,102 @@ local data = { CreateSpellCooldown(102558), -- Incarnation: Guardian of Ursoc CreateSpellCooldown(200851), -- Rage of the Sleeper CreateSpellCooldown(204066), -- Lunar Beam - + -- Restoration CreateSpellCooldown(740), -- Tranquility CreateSpellCooldown(33891), -- Incarnation: Tree of Life CreateSpellCooldown(102342), -- Ironbark CreateSpellCooldown(132158), -- Nature's Swiftness - CreateSpellCooldown(203651), -- Overgrowth + + CreateSpellCooldown(155835), -- Bristling Fur + CreateSpellCooldown(274837), -- Feral Frenzy + CreateSpellCooldown(1243807), -- Frantic Frenzy + CreateSpellCooldown(22842), -- Frenzied Regeneration + CreateSpellCooldown(1261867), -- Heart of the Wild + CreateSpellCooldown(5211), -- Mighty Bash + CreateSpellCooldown(1253799), -- Sundering Roar + CreateSpellCooldown(252216), -- Tiger Dash + }, + ["EVOKER"] = { + -- General + CreateSpellCooldown(351338), -- Quell + CreateSpellCooldown(363916), -- Obsidian Scales + CreateSpellCooldown(370665), -- Rescue + CreateSpellCooldown(374227), -- Zephyr + CreateSpellCooldown(358385), -- Landslide + CreateSpellCooldown(374968), -- Time Spiral + CreateSpellCooldown(370553), -- Tip the Scales + + -- Devastation + CreateSpellCooldown(375087), -- Dragonrage + CreateSpellCooldown(357210), -- Deep Breath + + -- Preservation + CreateSpellCooldown(363534), -- Rewind + CreateSpellCooldown(359816), -- Dream Flight + CreateSpellCooldown(370960), -- Emerald Communion + CreateSpellCooldown(357170), -- Time Dilation + + -- Augmentation + CreateSpellCooldown(403631), -- Breath of Eons + CreateSpellCooldown(360827), -- Blistering Scales + + CreateSpellCooldown(408233), -- Bestow Weyrnstone + CreateSpellCooldown(374251), -- Cauterizing Flame + CreateSpellCooldown(1259173), -- Duplicate + CreateSpellCooldown(1259174), -- Duplicate + CreateSpellCooldown(1259175), -- Duplicate + CreateSpellCooldown(390386), -- Fury of the Aspects + CreateSpellCooldown(358267), -- Hover + CreateSpellCooldown(372048), -- Oppressing Roar + CreateSpellCooldown(406732), -- Spatial Paradox + CreateSpellCooldown(370537), -- Stasis + CreateSpellCooldown(368970), -- Tail Swipe + CreateSpellCooldown(404977), -- Time Skip + CreateSpellCooldown(368412), -- Time of Need + CreateSpellCooldown(396286), -- Upheaval + }, + ["HUNTER"] = { + -- General + CreateSpellCooldown(186265), -- Aspect of the Turtle + CreateSpellCooldown(109304), -- Exhilaration + CreateSpellCooldown(264735), -- Survival of the Fittest + CreateSpellCooldown(5384), -- Feign Death + CreateSpellCooldown(186257), -- Aspect of the Cheetah + CreateSpellCooldown(147362), -- Counter Shot + CreateSpellCooldown(187707), -- Muzzle + CreateSpellCooldown(187650), -- Freezing Trap + CreateSpellCooldown(109248), -- Binding Shot + CreateSpellCooldown(19577), -- Intimidation + + -- Beast Mastery + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(359844), -- Call of the Wild + + -- Marksmanship + CreateSpellCooldown(288613), -- Trueshot + + -- Survival + CreateSpellCooldown(360952), -- Coordinated Assault + + CreateSpellCooldown(131894), -- A Murder of Crows + CreateSpellCooldown(186289), -- Aspect of the Eagle + CreateSpellCooldown(321530), -- Bloodshed + CreateSpellCooldown(1261193), -- Boomstick + CreateSpellCooldown(186387), -- Bursting Shot + CreateSpellCooldown(199483), -- Camouflage + CreateSpellCooldown(375891), -- Chakram + CreateSpellCooldown(203415), -- Fury of the Eagle + CreateSpellCooldown(466904), -- Harrier's Cry + CreateSpellCooldown(236776), -- High Explosive Trap + CreateSpellCooldown(462031), -- Implosive Trap + CreateSpellCooldown(53271), -- Master's Call + CreateSpellCooldown(264667), -- Primal Rage + CreateSpellCooldown(53480), -- Roar of Sacrifice + CreateSpellCooldown(360966), -- Spearhead + CreateSpellCooldown(1250646), -- Takedown + CreateSpellCooldown(260243), -- Volley }, - ["EVOKER"] = {}, ["MAGE"] = { -- Talents CreateSpellCooldown(31661), -- Dragon's Breath @@ -108,11 +233,33 @@ local data = { CreateSpellCooldown(157980), -- Supernova CreateSpellCooldown(382440), -- Shifting Power CreateSpellCooldown(414660), -- Mass Barrier - + CreateSpellCooldown(2139), -- Counterspell + CreateSpellCooldown(342245), -- Alter Time + CreateSpellCooldown(113724), -- Ring of Frost + + -- Arcane + CreateSpellCooldown(365350), -- Arcane Surge + CreateSpellCooldown(321507), -- Touch of the Magi + CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(205025), -- Presence of Mind + + -- Fire + CreateSpellCooldown(190319), -- Combustion + -- Frost CreateSpellCooldown(12472), -- Icy Veins CreateSpellCooldown(84714), -- Frozen Orb CreateSpellCooldown(235219), -- Cold Snap + + CreateSpellCooldown(235870), -- Alexstrasza's Fury + CreateSpellCooldown(214634), -- Ebonbolt + CreateSpellCooldown(414658), -- Ice Cold + CreateSpellCooldown(66), -- Invisibility + CreateSpellCooldown(224968), -- Mark of Aluneth + CreateSpellCooldown(414664), -- Mass Invisibility + CreateSpellCooldown(383121), -- Mass Polymorph + CreateSpellCooldown(153561), -- Meteor + CreateSpellCooldown(205021), -- Ray of Frost }, ["MONK"] = { -- Talents @@ -125,15 +272,18 @@ local data = { CreateSpellCooldown(123986, false), -- Chi Burst CreateSpellCooldown(322109), -- Touch of Death CreateSpellCooldown(324312, false), -- Clash + CreateSpellCooldown(115078), -- Paralysis + CreateSpellCooldown(119381), -- Leg Sweep -- Mistweaver - CreateSpellCooldown(115310), -- Revival - CreateSpellCooldown(116849), -- Life Cocoon - CreateSpellCooldown(197908), -- Mana Tea - CreateSpellCooldown(322118), -- Invoke Yu'lon, the Jade Serpent - CreateSpellCooldown(325197), -- Invoke Chi-ji, The Red Crane - CreateSpellCooldown(388193), -- Faeline Stomp - CreateSpellCooldown(388615), -- Restoral + CreateSpellCooldown(115310), -- Revival + CreateSpellCooldown(116849), -- Life Cocoon + CreateSpellCooldown(197908), -- Mana Tea + CreateSpellCooldown(322118), -- Invoke Yu'lon, the Jade Serpent + CreateSpellCooldown(325197), -- Invoke Chi-ji, The Red Crane + CreateSpellCooldown(388193), -- Faeline Stomp + CreateSpellCooldown(388615), -- Restoral + CreateSpellCooldown(116680), -- Thunder Focus Tea -- Brewmaster CreateSpellCooldown(119582, false), -- Purifiying Brew @@ -144,6 +294,20 @@ local data = { CreateSpellCooldown(325153), -- Exploding Keg CreateSpellCooldown(387184), -- Weapons of Order CreateSpellCooldown(1241059), -- Celestial Infusion + + -- Windwalker + CreateSpellCooldown(137639), -- Storm, Earth, and Fire + CreateSpellCooldown(123904), -- Invoke Xuen, the White Tiger + CreateSpellCooldown(122470), -- Touch of Karma + + CreateSpellCooldown(325216), -- Bonedust Brew + CreateSpellCooldown(386276), -- Bonedust Brew + CreateSpellCooldown(443028), -- Celestial Conduit + CreateSpellCooldown(326860), -- Fallen Order + CreateSpellCooldown(196725), -- Refreshing Jade Wind + CreateSpellCooldown(392983), -- Strike of the Windlord + CreateSpellCooldown(152175), -- Whirling Dragon Punch + CreateSpellCooldown(1249625), -- Zenith }, ["PALADIN"] = { CreateSpellCooldown(633), -- Lay on Hands @@ -159,17 +323,16 @@ local data = { CreateSpellCooldown(96231, false), -- Rebuke CreateSpellCooldown(115750), -- Blinding Light CreateSpellCooldown(375576), -- Divine Toll - + -- Holy CreateSpellCooldown(498), -- Divine Protection - CreateSpellCooldown(85222), -- Aura Mastery + CreateSpellCooldown(31821), -- Aura Mastery CreateSpellCooldown(114165, false), -- Holy Prism CreateSpellCooldown(148039, false), -- Barrier of Faith CreateSpellCooldown(200025, false), -- Beacon of Virtue - CreateSpellCooldown(200672), -- Tyr's Deliverance CreateSpellCooldown(388007), -- Blessim of Summer - CreateSpellCooldown(414273), -- Hand of Divinity - + CreateSpellCooldown(216331), -- Avenging Crusader + -- Protection CreateSpellCooldown(31850), -- Ardent Defender CreateSpellCooldown(86659), -- Guardian of Ancient Kings @@ -178,12 +341,17 @@ local data = { CreateSpellCooldown(378974), -- Bastion of Light CreateSpellCooldown(389539), -- Sentinel CreateSpellCooldown(387174), -- Eye of Tyr - + -- Retribution CreateSpellCooldown(403876), -- Divine Protection CreateSpellCooldown(255937, false), -- Wake of Ashes CreateSpellCooldown(343721), -- Final Reckoning CreateSpellCooldown(343527, false), -- Execution Sentence + + CreateSpellCooldown(190784), -- Divine Steed + CreateSpellCooldown(405397), -- Hammer of Retribution + CreateSpellCooldown(105809), -- Holy Avenger + CreateSpellCooldown(432459), -- Holy Bulwark }, ["PRIEST"] = { -- All @@ -195,7 +363,6 @@ local data = { CreateSpellCooldown(10060), -- Power Infusion CreateSpellCooldown(15286), -- Vampiric Embrace CreateSpellCooldown(32375), -- Mass Dispel - CreateSpellCooldown(34433), -- Shadowfiennd CreateSpellCooldown(73325), -- Leap of Faith -- CreateSpellCooldown(108920), -- Void Tendrils CreateSpellCooldown(108968), -- Void Shift @@ -203,6 +370,7 @@ local data = { CreateSpellCooldown(120644), -- Halo (Shadow) CreateSpellCooldown(205364), -- Dominate Mind CreateSpellCooldown(373481, false), -- Power Word: Life + CreateSpellCooldown(375901), -- Mindgames -- Discipline CreateSpellCooldown(33206), -- Pain Suppression @@ -228,8 +396,50 @@ local data = { CreateSpellCooldown(47585), -- Dispersion CreateSpellCooldown(64044), -- Psychic Horror CreateSpellCooldown(200174), -- Mindbender - CreateSpellCooldown(228260), -- Void Eruption CreateSpellCooldown(391109), -- Dark Ascension + CreateSpellCooldown(263165), -- Void Torrent + + CreateSpellCooldown(472433), -- Evangelism + CreateSpellCooldown(265202), -- Holy Word: Salvation + CreateSpellCooldown(421453), -- Ultimate Penitence + CreateSpellCooldown(228260), -- Voidform + }, + ["ROGUE"] = { + -- General + CreateSpellCooldown(1766), -- Kick + CreateSpellCooldown(31224), -- Cloak of Shadows + CreateSpellCooldown(5277), -- Evasion + CreateSpellCooldown(1856), -- Vanish + CreateSpellCooldown(2094), -- Blind + CreateSpellCooldown(2983), -- Sprint + CreateSpellCooldown(114018), -- Shroud of Concealment + CreateSpellCooldown(57934), -- Tricks of the Trade + CreateSpellCooldown(36554), -- Shadowstep + + -- Assassination + CreateSpellCooldown(360194), -- Deathmark + + -- Outlaw + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(51690), -- Killing Spree + + -- Subtlety + CreateSpellCooldown(121471), -- Shadow Blades + CreateSpellCooldown(185313), -- Shadow Dance + + CreateSpellCooldown(315341), -- Between the Eyes + CreateSpellCooldown(271877), -- Blade Rush + CreateSpellCooldown(426591), -- Goremaw's Bite + CreateSpellCooldown(195457), -- Grappling Hook + CreateSpellCooldown(381989), -- Keep It Rolling + CreateSpellCooldown(385627), -- Kingsbane + CreateSpellCooldown(137619), -- Marked for Death + CreateSpellCooldown(1277933), -- Preparation + CreateSpellCooldown(107079), -- Quaking Palm + CreateSpellCooldown(315508), -- Roll the Bones + CreateSpellCooldown(1214909), -- Roll the Bones + CreateSpellCooldown(385408), -- Sepsis + CreateSpellCooldown(1298826), -- Thistle Tea }, ["SHAMAN"] = { -- General @@ -243,6 +453,11 @@ local data = { CreateSpellCooldown(192077), -- Wind Rush Totem CreateSpellCooldown(198103), -- Earth Elemental CreateSpellCooldown(383013), -- Poison Cleansing Totem + CreateSpellCooldown(57994), -- Wind Shear + CreateSpellCooldown(51514), -- Hex + CreateSpellCooldown(2825), -- Bloodlust + CreateSpellCooldown(32182), -- Heroism + CreateSpellCooldown(51490), -- Thunderstorm -- Elemental CreateSpellCooldown(114050), -- Ascendance @@ -255,7 +470,6 @@ local data = { CreateSpellCooldown(98008), -- Spirit Link Totem CreateSpellCooldown(108280), -- Healing Tide Totem CreateSpellCooldown(114052), -- Ascendance - -- CreateSpellCooldown(157153), -- Cloudburst Totem CreateSpellCooldown(198838), -- Eartheb Wall Totem CreateSpellCooldown(207399), -- Ancestral Protection Totem @@ -264,20 +478,96 @@ local data = { CreateSpellCooldown(114051), -- Ascendance CreateSpellCooldown(197214), -- Sundering CreateSpellCooldown(384352), -- Doom Winds + + CreateSpellCooldown(556), -- Astral Recall + CreateSpellCooldown(305483), -- Lightning Lasso + CreateSpellCooldown(378081), -- Nature's Swiftness + CreateSpellCooldown(20608), -- Reincarnation + CreateSpellCooldown(58875), -- Spirit Walk + CreateSpellCooldown(383019), -- Tranquil Air Totem + }, + ["WARLOCK"] = { + -- General + CreateSpellCooldown(5484), -- Howl of Terror + CreateSpellCooldown(6789), -- Mortal Coil + CreateSpellCooldown(20707), -- Soulstone + CreateSpellCooldown(30283), -- Shadowfury + CreateSpellCooldown(48020), -- Demonic Circle: Teleport + CreateSpellCooldown(104773), -- Unending Resolve + CreateSpellCooldown(108416), -- Dark Pact + CreateSpellCooldown(333889), -- Fel Domination + + -- Affliction + CreateSpellCooldown(205180), -- Summon Darkglare + + -- Demonology + CreateSpellCooldown(265187), -- Summon Demonic Tyrant + CreateSpellCooldown(111898), -- Grimoire: Felguard + + -- Destruction + CreateSpellCooldown(1122), -- Summon Infernal + + CreateSpellCooldown(698), -- Ritual of Summoning + CreateSpellCooldown(6353), -- Soul Fire + CreateSpellCooldown(29893), -- Create Soulwell + CreateSpellCooldown(205179), -- Phantom Singularity + CreateSpellCooldown(267171), -- Demonic Strength + CreateSpellCooldown(267217), -- Nether Portal + CreateSpellCooldown(328774), -- Amplify Curse + CreateSpellCooldown(342601), -- Ritual of Doom + CreateSpellCooldown(386696), -- Decimating Bolt + CreateSpellCooldown(386833), -- Guillotine + CreateSpellCooldown(386997), -- Soul Rot + CreateSpellCooldown(387976), -- Dimensional Rift + CreateSpellCooldown(417537), -- Oblivion + CreateSpellCooldown(1257052), -- Dark Harvest + CreateSpellCooldown(1271802), -- Blight of Tongues + CreateSpellCooldown(1276452), -- Grimoire: Imp Lord + CreateSpellCooldown(1276467), -- Grimoire: Fel Ravager + CreateSpellCooldown(1276672), -- Summon Doomguard }, ["WARRIOR"] = { -- Talent + CreateSpellCooldown(3411), -- Intervene + CreateSpellCooldown(5246), -- Intimidating Shout + CreateSpellCooldown(6552), -- Pummel + CreateSpellCooldown(18499), -- Berserker Rage + CreateSpellCooldown(23920), -- Spell Reflection + CreateSpellCooldown(46968), -- Shockwave CreateSpellCooldown(97462), -- Rallying Cry - -- CreateSpellCooldown(401150), -- Avatar - CreateSpellCooldown(384318), -- Thunderous Roar + CreateSpellCooldown(107570), -- Storm Bolt + CreateSpellCooldown(107574), -- Avatar CreateSpellCooldown(376079), -- Champion's Spear - + CreateSpellCooldown(383762), -- Bitter Immunity + CreateSpellCooldown(384318), -- Thunderous Roar + -- Arms + CreateSpellCooldown(118038), -- Die by the Sword + CreateSpellCooldown(167105), -- Colossus Smash + CreateSpellCooldown(227847), -- Bladestorm + -- Fury + CreateSpellCooldown(1719), -- Recklessness + CreateSpellCooldown(184364), -- Enraged Regeneration + -- Protection CreateSpellCooldown(871), -- Shield Wall CreateSpellCooldown(12975), -- Last Stand CreateSpellCooldown(228920), -- Ravager + CreateSpellCooldown(1160), -- Demoralizing Shout + + CreateSpellCooldown(1161), -- Challenging Shout + CreateSpellCooldown(6544), -- Heroic Leap + CreateSpellCooldown(12323), -- Piercing Howl + CreateSpellCooldown(64382), -- Shattering Throw + CreateSpellCooldown(262161), -- Warbreaker + CreateSpellCooldown(384100), -- Berserker Shout + CreateSpellCooldown(384110), -- Wrecking Throw + CreateSpellCooldown(385059), -- Odyn's Fury + CreateSpellCooldown(385952), -- Shield Charge + CreateSpellCooldown(386071), -- Disrupting Shout + CreateSpellCooldown(392966), -- Spell Block + CreateSpellCooldown(1223268), -- Neltharion's Fury } } diff --git a/data/Standard/spells.lua b/data/Standard/spells.lua index 87ce8b3..db972b7 100644 --- a/data/Standard/spells.lua +++ b/data/Standard/spells.lua @@ -8,161 +8,278 @@ local AddSpells = ns.data.AddSpells -------------------------------------------------- local data = { ["DEMONHUNTER"] = { + -- Havoc + [162264] = CreateSpellPriority(9), -- Metamorphosis + [212800] = CreateSpellPriority(8), -- Blur + -- Vengeance - [203719] = CreateSpellPriority(6), -- Demon Spikes - [212988] = CreateSpellPriority(8), -- Painbringer - [258920] = CreateSpellPriority(8), -- Immolation Aura - [263648] = CreateSpellPriority(7), -- Soul Barrier - [391234] = CreateSpellPriority(8), -- Soulmonger + [187827] = CreateSpellPriority(9), -- Metamorphosis + [203720] = CreateSpellPriority(6), -- Demon Spikes + [212988] = CreateSpellPriority(8), -- Painbringer + [258920] = CreateSpellPriority(8), -- Immolation Aura + [263648] = CreateSpellPriority(7), -- Soul Barrier + [391234] = CreateSpellPriority(8), -- Soulmonger }, ["DEATHKNIGHT"] = { -- Blood - [48743] = CreateSpellPriority(5), -- Death Pact - [195181] = CreateSpellPriority(8), -- Bone Shield - [219809] = CreateSpellPriority(8), -- Tombstone - [194679] = CreateSpellPriority(8), -- Rune Tap + [48743] = CreateSpellPriority(5), -- Death Pact + [195181] = CreateSpellPriority(8), -- Bone Shield + [219809] = CreateSpellPriority(8), -- Tombstone + [194679] = CreateSpellPriority(8), -- Rune Tap + [81256] = CreateSpellPriority(9), -- Dancing Rune Weapon + [55233] = CreateSpellPriority(9), -- Vampiric Blood + + -- All + [48707] = CreateSpellPriority(9), -- Anti-Magic Shell + [48792] = CreateSpellPriority(9), -- Icebound Fortitude + + -- Frost + [51271] = CreateSpellPriority(9), -- Pillar of Frost + [152279] = CreateSpellPriority(9), -- Breath of Sindragosa + [47568] = CreateSpellPriority(8), -- Empower Rune Weapon + [51124] = CreateSpellPriority(7), -- Killing Machine + [59052] = CreateSpellPriority(7), -- Rime }, ["DRUID"] = { -- All - [22812] = CreateSpellPriority(2), -- Barkskin + [22812] = CreateSpellPriority(2), -- Barkskin + [61336] = CreateSpellPriority(9), -- Survival Instincts -- Balance - [48517] = CreateSpellPriority(5), -- Elipse (Solar) - [48518] = CreateSpellPriority(5), -- Elipse (Lunar) - [191034] = CreateSpellPriority(2), -- Starfall - + [48517] = CreateSpellPriority(5), -- Elipse (Solar) + [48518] = CreateSpellPriority(5), -- Elipse (Lunar) + [191034] = CreateSpellPriority(2), -- Starfall + [102560] = CreateSpellPriority(8), -- Incarnation: Chosen of Elune + [194223] = CreateSpellPriority(8), -- Celestial Alignment + -- Feral - + [106951] = CreateSpellPriority(8), -- Berserk + [5217] = CreateSpellPriority(7), -- Tiger's Fury + [135700] = CreateSpellPriority(6), -- Clearcasting + -- Guardian - [192081] = CreateSpellPriority(6), -- Ironfur - + [192081] = CreateSpellPriority(6), -- Ironfur + [50334] = CreateSpellPriority(8), -- Berserk + -- Restoration - [16870] = CreateSpellPriority(6), -- Clearcasting - [117679] = CreateSpellPriority(8), -- Incarnetion - [102342] = CreateSpellPriority(3), -- Ironbark - [102351] = CreateSpellPriority(2), -- Cenarion Ward + [16870] = CreateSpellPriority(6), -- Clearcasting + [117679] = CreateSpellPriority(8), -- Incarnetion + [102342] = CreateSpellPriority(3), -- Ironbark + [102351] = CreateSpellPriority(2), -- Cenarion Ward + }, + ["EVOKER"] = { + [359618] = CreateSpellPriority(6), -- Essence Burst + [363916] = CreateSpellPriority(9), -- Obsidian Scales + [370553] = CreateSpellPriority(7), -- Tip the Scales + [374349] = CreateSpellPriority(9), -- Renewing Blaze + [375087] = CreateSpellPriority(8), -- Dragonrage }, ["HUNTER"] = { + -- All + [186265] = CreateSpellPriority(10), -- Aspect of the Turtle + [264735] = CreateSpellPriority(9), -- Survival of the Fittest + + -- Beast Mastery + [19574] = CreateSpellPriority(8), -- Bestial Wrath + [268877] = CreateSpellPriority(6), -- Beast Cleave + -- Marksmanship - [260242] = CreateSpellPriority(7), -- Precise Shot - [342076] = CreateSpellPriority(7), -- Streamline + [260242] = CreateSpellPriority(7), -- Precise Shot + [342076] = CreateSpellPriority(7), -- Streamline + [288613] = CreateSpellPriority(8), -- Trueshot + + -- Survival + [360952] = CreateSpellPriority(8), -- Coordinated Assault }, ["MAGE"] = { - [384267] = CreateSpellPriority(3), -- Siphon Storm + [384267] = CreateSpellPriority(3), -- Siphon Storm + [45438] = CreateSpellPriority(10), -- Ice Block + [342246] = CreateSpellPriority(8), -- Alter Time + + -- Arcane + [365362] = CreateSpellPriority(8), -- Arcane Surge + [263725] = CreateSpellPriority(6), -- Clearcasting + + -- Fire + [190319] = CreateSpellPriority(8), -- Combustion + [48108] = CreateSpellPriority(7), -- Hot Streak! + [48107] = CreateSpellPriority(6), -- Heating Up + + -- Frost + [12472] = CreateSpellPriority(8), -- Icy Veins + [44544] = CreateSpellPriority(7), -- Fingers of Frost + [190446] = CreateSpellPriority(7), -- Brain Freeze }, ["MONK"] = { -- All - [101643] = CreateSpellPriority(1), -- Transcendence + [101643] = CreateSpellPriority(1), -- Transcendence -- Mistweaver - [432180] = CreateSpellPriority(false), -- Dance of the Wind - [388193] = CreateSpellPriority(10), -- Jadefire Stomp + [432180] = CreateSpellPriority(false), -- Dance of the Wind + [388193] = CreateSpellPriority(10), -- Jadefire Stomp -- Brewmaster - [120954] = CreateSpellPriority(1), -- Fortifying Brew - [122278] = CreateSpellPriority(1), -- Dampen Harm - [122783] = CreateSpellPriority(1), -- Diffuse Magic - [322507] = CreateSpellPriority(3), -- Celestial Brew - [1260619] = CreateSpellPriority(3), -- Elevated Stagger - [325092] = CreateSpellPriority(10), -- Purified Chi - [1241059] = CreateSpellPriority(3), -- Celestial Infusion + [120954] = CreateSpellPriority(1), -- Fortifying Brew + [122278] = CreateSpellPriority(1), -- Dampen Harm + [122783] = CreateSpellPriority(1), -- Diffuse Magic + [322507] = CreateSpellPriority(3), -- Celestial Brew + [1260619] = CreateSpellPriority(3), -- Elevated Stagger + [325092] = CreateSpellPriority(10), -- Purified Chi + [1241059] = CreateSpellPriority(3), -- Celestial Infusion + + -- Windwalker + [137639] = CreateSpellPriority(8), -- Storm, Earth, and Fire + [125174] = CreateSpellPriority(9), -- Touch of Karma + [116768] = CreateSpellPriority(6), -- Blackout Kick! }, ["PALADIN"] = { -- Holy - [216331] = CreateSpellPriority(1), -- Avenging Crusader - [388007] = CreateSpellPriority(1), -- Blessing of Summer - [388010] = CreateSpellPriority(1), -- Blessing of Autumn - [388011] = CreateSpellPriority(1), -- Blessing of Winter - [388013] = CreateSpellPriority(1), -- Blessing of Spring - [414204] = CreateSpellPriority(1), -- Rising Sunlight - [414273] = CreateSpellPriority(1), -- Hand of Divinity + [216331] = CreateSpellPriority(1), -- Avenging Crusader + [388007] = CreateSpellPriority(1), -- Blessing of Summer + [388010] = CreateSpellPriority(1), -- Blessing of Autumn + [388011] = CreateSpellPriority(1), -- Blessing of Winter + [388013] = CreateSpellPriority(1), -- Blessing of Spring + [414204] = CreateSpellPriority(1), -- Rising Sunlight + [414273] = CreateSpellPriority(1), -- Hand of Divinity -- Protection - [642] = CreateSpellPriority(9), -- Divine Shield - [31850] = CreateSpellPriority(9), -- Ardent Defender - [86659] = CreateSpellPriority(9), -- Guardian of Ancient Kings - [31884] = CreateSpellPriority(8), -- Avenging Wrath - [132403] = CreateSpellPriority(8), -- Shield of Righteous - [432502] = CreateSpellPriority(7), -- Sacred Weapon - [432496] = CreateSpellPriority(7), -- Holy Bulwark - [432607] = CreateSpellPriority(7), -- Holy Bulwark - [400745] = CreateSpellPriority(false), -- Afterimage - [433550] = CreateSpellPriority(false), -- Afterimage - - [387174] = CreateSpellPriority(7), -- Eye of Tyr (target) + [642] = CreateSpellPriority(9), -- Divine Shield + [31850] = CreateSpellPriority(9), -- Ardent Defender + [86659] = CreateSpellPriority(9), -- Guardian of Ancient Kings + [31884] = CreateSpellPriority(8), -- Avenging Wrath + [132403] = CreateSpellPriority(8), -- Shield of Righteous + [432502] = CreateSpellPriority(7), -- Sacred Weapon + [432496] = CreateSpellPriority(7), -- Holy Bulwark + [432607] = CreateSpellPriority(7), -- Holy Bulwark + [400745] = CreateSpellPriority(false), -- Afterimage + + [387174] = CreateSpellPriority(7), -- Eye of Tyr (target) + + -- Retribution + [403876] = CreateSpellPriority(9), -- Divine Protection + [184662] = CreateSpellPriority(8), -- Shield of Vengeance + [223819] = CreateSpellPriority(6), -- Divine Purpose }, ["PRIEST"] = { -- All - [586] = CreateSpellPriority(10), -- Fade - [10060] = CreateSpellPriority(7), -- Power Infusion + [586] = CreateSpellPriority(10), -- Fade + [10060] = CreateSpellPriority(7), -- Power Infusion + [19236] = CreateSpellPriority(9), -- Desperate Prayer -- Discipline - [33206] = CreateSpellPriority(10), -- Pain Suppression - [322105] = CreateSpellPriority(9), -- Shadow Covenant - [214621] = CreateSpellPriority(8), -- Schism (Debuff) - [455033] = CreateSpellPriority(7), -- Darkness from Light - [198069] = CreateSpellPriority(9), -- Power of the Dark Side + [33206] = CreateSpellPriority(10), -- Pain Suppression + [322105] = CreateSpellPriority(9), -- Shadow Covenant + [424509] = CreateSpellPriority(8), -- Schism (Debuff) + [455033] = CreateSpellPriority(7), -- Darkness from Light + [198069] = CreateSpellPriority(9), -- Power of the Dark Side - [428933] = CreateSpellPriority(10), -- Premonition of Insight (-cooldown) + [428933] = CreateSpellPriority(10), -- Premonition of Insight (-cooldown) -- [428930] = CreateSpellPriority(10), -- Premonition of Piety (+ healing) - [428934] = CreateSpellPriority(10), -- Premonition of Solace (single heal to shield) + [428934] = CreateSpellPriority(10), -- Premonition of Solace (single heal to shield) -- Holy - [47788] = CreateSpellPriority(10), -- Guardian Spirit - [200183] = CreateSpellPriority(3), -- Apotheosis - + [47788] = CreateSpellPriority(10), -- Guardian Spirit + [200183] = CreateSpellPriority(3), -- Apotheosis + -- Shadow - [47585] = CreateSpellPriority(10), -- Dispersion - [15286] = CreateSpellPriority(3), -- Vampiric Embrace - [194249] = CreateSpellPriority(10), -- Voidform - [391109] = CreateSpellPriority(10), -- Dark Ascension - [391401] = CreateSpellPriority(7), -- Mind Flay: Insanity - [391099] = CreateSpellPriority(8), -- Dark Evangelism - [373204] = CreateSpellPriority(8), -- Mind Devourer - [454638] = CreateSpellPriority(8), -- Devouring Chorus + [47585] = CreateSpellPriority(10), -- Dispersion + [15286] = CreateSpellPriority(3), -- Vampiric Embrace + [194249] = CreateSpellPriority(10), -- Voidform + [391109] = CreateSpellPriority(10), -- Dark Ascension + [391401] = CreateSpellPriority(7), -- Mind Flay: Insanity + [391099] = CreateSpellPriority(8), -- Dark Evangelism + [373204] = CreateSpellPriority(8), -- Mind Devourer + [454638] = CreateSpellPriority(8), -- Devouring Chorus + }, + ["ROGUE"] = { + [31224] = CreateSpellPriority(10), -- Cloak of Shadows + [5277] = CreateSpellPriority(10), -- Evasion + [1966] = CreateSpellPriority(9), -- Feint + [11327] = CreateSpellPriority(8), -- Vanish + [2983] = CreateSpellPriority(5), -- Sprint + [315496] = CreateSpellPriority(4), -- Slice and Dice + + -- Outlaw + [13750] = CreateSpellPriority(8), -- Adrenaline Rush + + -- Subtlety + [121471] = CreateSpellPriority(8), -- Shadow Blades + [185422] = CreateSpellPriority(8), -- Shadow Dance }, ["SHAMAN"] = { -- General - [108270] = CreateSpellPriority(10), -- Stone Bulwark Totem - [108271] = CreateSpellPriority(10), -- Astral Shift - [192106] = CreateSpellPriority(false), -- Lightning Shield - [381684] = CreateSpellPriority(false), -- Brimming with Life + [108270] = CreateSpellPriority(10), -- Stone Bulwark Totem + [108271] = CreateSpellPriority(10), -- Astral Shift + [192106] = CreateSpellPriority(false), -- Lightning Shield + [381684] = CreateSpellPriority(false), -- Brimming with Life + + -- Elemental + [114050] = CreateSpellPriority(8), -- Ascendance + [191634] = CreateSpellPriority(8), -- Stormkeeper + [77762] = CreateSpellPriority(7), -- Lava Surge + + -- Restoration + [53390] = CreateSpellPriority(5), -- Tidal Waves -- Enhancement - [344179] = CreateSpellPriority(9), -- Maelstrom Weapon - [454015] = CreateSpellPriority(9), -- Tempest - [333957] = CreateSpellPriority(8), -- Feral Spirit - [466772] = CreateSpellPriority(7), -- Doom Winds - [470532] = CreateSpellPriority(7), -- Arc Discharge - [375986] = CreateSpellPriority(7), -- Primordial Wave - [187878] = CreateSpellPriority(7), -- Crash Lightning + [344179] = CreateSpellPriority(9), -- Maelstrom Weapon + [454015] = CreateSpellPriority(9), -- Tempest + [333957] = CreateSpellPriority(8), -- Feral Spirit + [466772] = CreateSpellPriority(7), -- Doom Winds + [470532] = CreateSpellPriority(7), -- Arc Discharge + [375986] = CreateSpellPriority(7), -- Primordial Wave + [187878] = CreateSpellPriority(7), -- Crash Lightning -- [470058] = CreateSpellPriority(1), -- Vulcanic Blaze - [201900] = CreateSpellPriority(1), -- Hot Hand - [384411] = CreateSpellPriority(1), -- Static Accumulation - [455110] = CreateSpellPriority(1), -- Supercharge - [469344] = CreateSpellPriority(1), -- Molten Thunder - [224127] = CreateSpellPriority(false), -- Crackling Surge + [201900] = CreateSpellPriority(1), -- Hot Hand + [384411] = CreateSpellPriority(1), -- Static Accumulation + [455110] = CreateSpellPriority(1), -- Supercharge + [469344] = CreateSpellPriority(1), -- Molten Thunder + [224127] = CreateSpellPriority(false), -- Crackling Surge + }, + ["WARLOCK"] = { + [104773] = CreateSpellPriority(10), -- Unending Resolve + [108416] = CreateSpellPriority(9), -- Dark Pact + + -- Demonology + [264173] = CreateSpellPriority(7), -- Demonic Core + + -- Destruction + [117828] = CreateSpellPriority(6), -- Backdraft }, ["WARRIOR"] = { + -- All + [107574] = CreateSpellPriority(8), -- Avatar + [18499] = CreateSpellPriority(6), -- Berserker Rage + [97463] = CreateSpellPriority(8), -- Rallying Cry + [52437] = CreateSpellPriority(7), -- Sudden Death + + -- Arms + [118038] = CreateSpellPriority(10), -- Die by the Sword + + -- Fury + [1719] = CreateSpellPriority(8), -- Recklessness + [184364] = CreateSpellPriority(10), -- Enraged Regeneration + [184362] = CreateSpellPriority(5), -- Enrage + -- Protection - [871] = CreateSpellPriority(1), -- Shield Wall - [12975] = CreateSpellPriority(1), -- Last Stand - [23920] = CreateSpellPriority(7), -- Spell Reflect - [132404] = CreateSpellPriority(9), -- Shield Block - [190456] = CreateSpellPriority(10), -- Ignore Pain + [871] = CreateSpellPriority(1), -- Shield Wall + [12975] = CreateSpellPriority(1), -- Last Stand + [23920] = CreateSpellPriority(7), -- Spell Reflect + [132404] = CreateSpellPriority(9), -- Shield Block + [190456] = CreateSpellPriority(10), -- Ignore Pain }, ["ALL"] = { -- Items - [449578] = CreateSpellPriority(false), -- Deliberate Incubation (Ovi'nax Mercurial Egg) - [449581] = CreateSpellPriority(false), -- Reckless Incubation (Ovi'nax Mercurial Egg) - [452226] = CreateSpellPriority(false), -- Spiderling (Ara-Kara Sacbrood) - [457925] = CreateSpellPriority(false), -- Venomous Potential (Seal of the Poisoned Pact) - [462513] = CreateSpellPriority(8, 1), -- Severed Strands (Spymaster's Web) - [449947] = CreateSpellPriority(20), -- Realigning Nexus Convergence Divergence (Treacherous Transmitter) - [1219102] = CreateSpellPriority(8), -- Mudborne (trinket) + [449578] = CreateSpellPriority(false), -- Deliberate Incubation (Ovi'nax Mercurial Egg) + [449581] = CreateSpellPriority(false), -- Reckless Incubation (Ovi'nax Mercurial Egg) + [452226] = CreateSpellPriority(false), -- Spiderling (Ara-Kara Sacbrood) + [457925] = CreateSpellPriority(false), -- Venomous Potential (Seal of the Poisoned Pact) + [462513] = CreateSpellPriority(8, 1), -- Severed Strands (Spymaster's Web) + [449947] = CreateSpellPriority(20), -- Realigning Nexus Convergence Divergence (Treacherous Transmitter) + [1219102] = CreateSpellPriority(8), -- Mudborne (trinket) -- Consumables - [431932] = CreateSpellPriority(5), -- Tempered Potion + [431932] = CreateSpellPriority(5), -- Tempered Potion } } diff --git a/data/TBC/blacklist.lua b/data/TBC/blacklist.lua index 9f4255b..6ac1a5a 100644 --- a/data/TBC/blacklist.lua +++ b/data/TBC/blacklist.lua @@ -5,77 +5,112 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- The Burning Crusade Classic -------------------------------------------------- -do - local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - [26990] = true, -- Mark of the Wild (Rank 8) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - [26992] = true, -- Thorns (Rank 7) - - -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - [27126] = true, -- Arcane Intellect (Rank 6) - - -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - [25389] = true, -- Power Word: Fortitude (Rank 7) - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11787] = true, -- Blood Pact (Rank 5) - [27267] = true, -- Blood Pact (Rank 6) - - -- Consumables - [17629] = true, -- Flask of Chromatic Resistance - - -- Scrolls - [33079] = true, -- Armor (Scroll of Protection V) - - [33078] = true, -- Intellect (Scroll of Intellect V) - - [33081] = true, -- Stamina (Scroll of Stamina V) - - [33080] = true, -- Spirit Magic (Scroll of Spirit V) - - [33077] = true, -- Agility (Scroll of Agility V) - - [33082] = true, -- Strength (Scroll of Strength V) - } - - AddBlacklist(data) -end - -do - local data = { - -- PRIEST - [25431] = true, -- Inner Fire (Rank 7) - [32999] = true, -- Prayer of Spirit (Rank 2) - } - - AddBlacklist(data) -end +local data = { + -- DRUID + [5232] = true, -- Mark of the Wild (Rank 2) + [6756] = true, -- Mark of the Wild (Rank 3) + [5234] = true, -- Mark of the Wild (Rank 4) + [8907] = true, -- Mark of the Wild (Rank 5) + [9884] = true, -- Mark of the Wild (Rank 6) + [9885] = true, -- Mark of the Wild (Rank 7) + [26990] = true, -- Mark of the Wild (Rank 8) + + [782] = true, -- Thorns (Rank 2) + [1075] = true, -- Thorns (Rank 3) + [8914] = true, -- Thorns (Rank 4) + [9756] = true, -- Thorns (Rank 5) + [9910] = true, -- Thorns (Rank 6) + [26992] = true, -- Thorns (Rank 7) + + [21849] = "name", -- Gift of the Wild + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [9634] = true, -- Dire Bear Form + [33943] = true, -- Flight Form + [40120] = true, -- Swift Flight Form + + -- HUNTER + [13165] = "name", -- Aspect of the Hawk + [13163] = true, -- Aspect of the Monkey + + -- MAGE + [1460] = true, -- Arcane Intellect (Rank 2) + [1461] = true, -- Arcane Intellect (Rank 3) + [10156] = true, -- Arcane Intellect (Rank 4) + [10157] = true, -- Arcane Intellect (Rank 5) + [27126] = true, -- Arcane Intellect (Rank 6) + + [23028] = "name", -- Arcane Brilliance + [168] = "name", -- Frost Armor + [7302] = "name", -- Ice Armor + [6117] = "name", -- Mage Armor + [30482] = "name", -- Molten Armor + + -- PALADIN + [465] = "name", -- Devotion Aura + [25780] = true, -- Righteous Fury + [20217] = true, -- Blessing of Kings + [19742] = "name", -- Blessing of Wisdom + [19740] = "name", -- Blessing of Might + [25782] = "name", -- Greater Blessing of Might + [25894] = "name", -- Greater Blessing of Wisdom + [25898] = true, -- Greater Blessing of Kings + [21084] = "name", -- Seal of Righteousness + + -- PRIEST + [1243] = true, -- Power Word: Fortitude (Rank 1) + [1244] = true, -- Power Word: Fortitude (Rank 2) + [1245] = true, -- Power Word: Fortitude (Rank 3) + [2791] = true, -- Power Word: Fortitude (Rank 4) + [10937] = true, -- Power Word: Fortitude (Rank 5) + [10938] = true, -- Power Word: Fortitude (Rank 6) + [25389] = true, -- Power Word: Fortitude (Rank 7) + + [25431] = true, -- Inner Fire (Rank 7) + [32999] = true, -- Prayer of Spirit (Rank 2) + [588] = "name", -- Inner Fire + [15473] = true, -- Shadowform + + -- SHAMAN + [324] = "name", -- Lightning Shield + [24398] = "name", -- Water Shield + + -- WARLOCK + [687] = true, -- Demon Skin (Rank 1) + [696] = true, -- Demon Skin (Rank 2) + + [6307] = true, -- Blood Pact (Rank 1) + [7804] = true, -- Blood Pact (Rank 2) + [7805] = true, -- Blood Pact (Rank 3) + [11766] = true, -- Blood Pact (Rank 4) + [11767] = true, -- Blood Pact (Rank 5) + [27268] = true, -- Blood Pact (Rank 6) + + [706] = "name", -- Demon Armor + [28176] = "name", -- Fel Armor + + -- WARRIOR + [2457] = true, -- Battle Stance + [71] = true, -- Defensive Stance + [2458] = true, -- Berserker Stance + [6673] = "name", -- Battle Shout + [469] = "name", -- Commanding Shout + + -- Consumables + [17629] = true, -- Flask of Chromatic Resistance + + -- Scrolls + [33079] = true, -- Armor (Scroll of Protection V) + + [33078] = true, -- Intellect (Scroll of Intellect V) + + [33081] = true, -- Stamina (Scroll of Stamina V) + + [33080] = true, -- Spirit Magic (Scroll of Spirit V) + + [33077] = true, -- Agility (Scroll of Agility V) + + [33082] = true, -- Strength (Scroll of Strength V) +} + +AddBlacklist(data) diff --git a/data/TBC/cooldowns.lua b/data/TBC/cooldowns.lua index db96fa9..18ab832 100644 --- a/data/TBC/cooldowns.lua +++ b/data/TBC/cooldowns.lua @@ -7,69 +7,251 @@ local AddCooldowns = ns.data.AddCooldowns -- The Burning Crusade Classic -------------------------------------------------- local data = { + ["DRUID"] = { + -- General + CreateSpellCooldown(20484), -- Rebirth (Rank 1) + CreateSpellCooldown(740), -- Tranquility (Rank 1) + CreateSpellCooldown(22812), -- Barkskin + CreateSpellCooldown(29166), -- Innervate + CreateSpellCooldown(1850), -- Dash (Rank 1) + CreateSpellCooldown(5229), -- Enrage + CreateSpellCooldown(5209), -- Challenging Roar + CreateSpellCooldown(22842), -- Frenzied Regeneration (Rank 1) + + -- Talents + CreateSpellCooldown(17116), -- Nature's Swiftness + CreateSpellCooldown(16979), -- Feral Charge + CreateSpellCooldown(33831), -- Force of Nature + + CreateSpellCooldown(5211), -- Bash (Rank 1) + CreateSpellCooldown(6798), -- Bash (Rank 2) + CreateSpellCooldown(8983), -- Bash (Rank 3) + CreateSpellCooldown(16914), -- Hurricane (Rank 1) + CreateSpellCooldown(17401), -- Hurricane (Rank 2) + CreateSpellCooldown(17402), -- Hurricane (Rank 3) + CreateSpellCooldown(27012), -- Hurricane (Rank 4) + CreateSpellCooldown(16689), -- Nature's Grasp (Rank 1) + CreateSpellCooldown(16810), -- Nature's Grasp (Rank 2) + CreateSpellCooldown(16811), -- Nature's Grasp (Rank 3) + CreateSpellCooldown(16812), -- Nature's Grasp (Rank 4) + CreateSpellCooldown(16813), -- Nature's Grasp (Rank 5) + CreateSpellCooldown(17329), -- Nature's Grasp (Rank 6) + CreateSpellCooldown(27009), -- Nature's Grasp (Rank 7) + }, + ["HUNTER"] = { + -- General + CreateSpellCooldown(3045), -- Rapid Fire + CreateSpellCooldown(5384), -- Feign Death + CreateSpellCooldown(1499), -- Freezing Trap (Rank 1) + CreateSpellCooldown(19801), -- Tranquilizing Shot + CreateSpellCooldown(34477), -- Misdirection + + -- Talents + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(19263), -- Deterrence + CreateSpellCooldown(23989), -- Readiness + CreateSpellCooldown(34490), -- Silencing Shot + CreateSpellCooldown(19386), -- Wyvern Sting (Rank 1) + + CreateSpellCooldown(1510), -- Volley (Rank 1) + CreateSpellCooldown(14294), -- Volley (Rank 2) + CreateSpellCooldown(14295), -- Volley (Rank 3) + CreateSpellCooldown(27022), -- Volley (Rank 4) + }, ["MAGE"] = { + -- General + CreateSpellCooldown(2139), -- Counterspell + CreateSpellCooldown(45438), -- Ice Block + CreateSpellCooldown(66), -- Invisibility + -- Arcane - CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(12042), -- Arcane Power + CreateSpellCooldown(12043), -- Presence of Mind + + -- Fire + CreateSpellCooldown(11129), -- Combustion -- Frost - CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(11958), -- Cold Snap + CreateSpellCooldown(31687), -- Summon Water Elemental + + CreateSpellCooldown(43987), -- Ritual of Refreshment + }, + ["PALADIN"] = { + -- General + CreateSpellCooldown(498), -- Divine Protection + CreateSpellCooldown(642), -- Divine Shield + CreateSpellCooldown(633), -- Lay on Hands + CreateSpellCooldown(1022), -- Blessing of Protection + CreateSpellCooldown(1044), -- Blessing of Freedom + CreateSpellCooldown(6940), -- Blessing of Sacrifice + CreateSpellCooldown(853), -- Hammer of Justice (Rank 1) + CreateSpellCooldown(31884), -- Avenging Wrath + + -- Talents + CreateSpellCooldown(20216), -- Divine Favor + CreateSpellCooldown(31842), -- Divine Illumination + CreateSpellCooldown(20066), -- Repentance + + CreateSpellCooldown(19752), -- Divine Intervention + CreateSpellCooldown(2812), -- Holy Wrath (Rank 1) + CreateSpellCooldown(10318), -- Holy Wrath (Rank 2) + CreateSpellCooldown(27139), -- Holy Wrath (Rank 3) }, ["PRIEST"] = { -- Discipline - CreateSpellCooldown(10060), -- Power Infusion - CreateSpellCooldown(14751), -- Inner Focus + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(14751), -- Inner Focus -- Holy - CreateSpellCooldown(724), -- Lightwell (Rank 1) - CreateSpellCooldown(27870), -- Lightwell (Rank 2) - CreateSpellCooldown(27871), -- Lightwell (Rank 3) + CreateSpellCooldown(724), -- Lightwell (Rank 1) + CreateSpellCooldown(27870), -- Lightwell (Rank 2) + CreateSpellCooldown(27871), -- Lightwell (Rank 3) -- Shadow - CreateSpellCooldown(15286, false), -- Vampiric Embrace - CreateSpellCooldown(15487), -- Silence - - CreateSpellCooldown(586), -- Fade (Rank 1) - CreateSpellCooldown(9578), -- Fade (Rank 2) - CreateSpellCooldown(9579), -- Fade (Rank 3) - CreateSpellCooldown(9592), -- Fade (Rank 4) - CreateSpellCooldown(10941), -- Fade (Rank 5) - CreateSpellCooldown(10942), -- Fade (Rank 6) - - CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) - CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) - CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) - CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) - - CreateSpellCooldown(6346), -- Fear Ward (Rank 1) + CreateSpellCooldown(15487), -- Silence + + CreateSpellCooldown(586), -- Fade (Rank 1) + CreateSpellCooldown(9578), -- Fade (Rank 2) + CreateSpellCooldown(9579), -- Fade (Rank 3) + CreateSpellCooldown(9592), -- Fade (Rank 4) + CreateSpellCooldown(10941), -- Fade (Rank 5) + CreateSpellCooldown(10942), -- Fade (Rank 6) + + CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) + CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) + CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) + CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) + + CreateSpellCooldown(6346), -- Fear Ward (Rank 1) -- Night Elf - CreateSpellCooldown(2651), -- Elune's Grace + CreateSpellCooldown(2651), -- Elune's Grace - -- Human - CreateSpellCooldown(13896), -- Feedback (Rank 1) - CreateSpellCooldown(19271), -- Feedback (Rank 2) - CreateSpellCooldown(19273), -- Feedback (Rank 3) - CreateSpellCooldown(19274), -- Feedback (Rank 4) - CreateSpellCooldown(19275), -- Feedback (Rank 5) - CreateSpellCooldown(25441), -- Feedback (Rank 6) + -- Human + CreateSpellCooldown(13896), -- Feedback (Rank 1) + CreateSpellCooldown(19271), -- Feedback (Rank 2) + CreateSpellCooldown(19273), -- Feedback (Rank 3) + CreateSpellCooldown(19274), -- Feedback (Rank 4) + CreateSpellCooldown(19275), -- Feedback (Rank 5) + CreateSpellCooldown(25441), -- Feedback (Rank 6) -- Dwarf / Humman - CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) - CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) - CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) - CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) - CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) - CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) - CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) - CreateSpellCooldown(25437), -- Desperate Prayer (Rank 8) - + CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) + CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) + CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) + CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) + CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) + CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) + CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) + CreateSpellCooldown(25437), -- Desperate Prayer (Rank 8) + -- Undead - CreateSpellCooldown(2944), -- Devouring Plague(Rank 1) - CreateSpellCooldown(19276), -- Devouring Plague(Rank 2) - CreateSpellCooldown(19277), -- Devouring Plague(Rank 3) - CreateSpellCooldown(19278), -- Devouring Plague(Rank 4) - CreateSpellCooldown(19279), -- Devouring Plague(Rank 5) - CreateSpellCooldown(19280), -- Devouring Plague(Rank 6) + CreateSpellCooldown(2944), -- Devouring Plague(Rank 1) + CreateSpellCooldown(19276), -- Devouring Plague(Rank 2) + CreateSpellCooldown(19277), -- Devouring Plague(Rank 3) + CreateSpellCooldown(19278), -- Devouring Plague(Rank 4) + CreateSpellCooldown(19279), -- Devouring Plague(Rank 5) + CreateSpellCooldown(19280), -- Devouring Plague(Rank 6) + + -- Talents + CreateSpellCooldown(33206), -- Pain Suppression + CreateSpellCooldown(34433), -- Shadowfiend + + CreateSpellCooldown(28880), -- Gift of the Naaru + }, + ["ROGUE"] = { + -- General + CreateSpellCooldown(1766), -- Kick (Rank 1) + CreateSpellCooldown(2094), -- Blind + CreateSpellCooldown(5277), -- Evasion (Rank 1) + CreateSpellCooldown(1856), -- Vanish (Rank 1) + CreateSpellCooldown(2983), -- Sprint (Rank 1) + CreateSpellCooldown(31224), -- Cloak of Shadows + + -- Talents + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry + CreateSpellCooldown(14177), -- Cold Blood + CreateSpellCooldown(14185), -- Preparation + CreateSpellCooldown(14183), -- Premeditation + CreateSpellCooldown(36554), -- Shadowstep + }, + ["SHAMAN"] = { + -- General + CreateSpellCooldown(8177), -- Grounding Totem + CreateSpellCooldown(20608), -- Reincarnation + CreateSpellCooldown(2825), -- Bloodlust + CreateSpellCooldown(32182), -- Heroism + CreateSpellCooldown(2062), -- Earth Elemental Totem + CreateSpellCooldown(2894), -- Fire Elemental Totem + + -- Talents + CreateSpellCooldown(16166), -- Elemental Mastery + CreateSpellCooldown(16188), -- Nature's Swiftness + CreateSpellCooldown(30823), -- Shamanistic Rage + CreateSpellCooldown(16190), -- Mana Tide Totem + }, + ["WARLOCK"] = { + -- General + CreateSpellCooldown(1122), -- Inferno + CreateSpellCooldown(6789), -- Death Coil (Rank 1) + CreateSpellCooldown(5484), -- Howl of Terror (Rank 1) + CreateSpellCooldown(29858), -- Soulshatter + + -- Talents + CreateSpellCooldown(18288), -- Amplify Curse + CreateSpellCooldown(18708), -- Fel Domination + + CreateSpellCooldown(603), -- Curse of Doom (Rank 1) + CreateSpellCooldown(30910), -- Curse of Doom (Rank 2) + CreateSpellCooldown(18540), -- Ritual of Doom + CreateSpellCooldown(29893), -- Ritual of Souls + CreateSpellCooldown(6353), -- Soul Fire (Rank 1) + CreateSpellCooldown(17924), -- Soul Fire (Rank 2) + CreateSpellCooldown(27211), -- Soul Fire (Rank 3) + CreateSpellCooldown(30545), -- Soul Fire (Rank 4) + CreateSpellCooldown(17735), -- Suffering (Rank 1) + CreateSpellCooldown(17750), -- Suffering (Rank 2) + CreateSpellCooldown(17751), -- Suffering (Rank 3) + CreateSpellCooldown(17752), -- Suffering (Rank 4) + CreateSpellCooldown(27271), -- Suffering (Rank 5) + CreateSpellCooldown(33701), -- Suffering (Rank 6) + }, + ["WARRIOR"] = { + -- General + CreateSpellCooldown(871), -- Shield Wall + CreateSpellCooldown(1719), -- Recklessness + CreateSpellCooldown(20230), -- Retaliation + CreateSpellCooldown(18499), -- Berserker Rage + CreateSpellCooldown(3411), -- Intervene + CreateSpellCooldown(5246), -- Intimidating Shout + CreateSpellCooldown(1161), -- Challenging Shout + CreateSpellCooldown(676), -- Disarm + CreateSpellCooldown(2687), -- Bloodrage + CreateSpellCooldown(6552), -- Pummel (Rank 1) + CreateSpellCooldown(20252), -- Intercept (Rank 1) + + -- Talents + CreateSpellCooldown(12292), -- Death Wish + CreateSpellCooldown(12328), -- Sweeping Strikes + CreateSpellCooldown(12809), -- Concussion Blow + CreateSpellCooldown(12975), -- Last Stand + + CreateSpellCooldown(694), -- Mocking Blow (Rank 1) + CreateSpellCooldown(7400), -- Mocking Blow (Rank 2) + CreateSpellCooldown(7402), -- Mocking Blow (Rank 3) + CreateSpellCooldown(20559), -- Mocking Blow (Rank 4) + CreateSpellCooldown(20560), -- Mocking Blow (Rank 5) + CreateSpellCooldown(25266), -- Mocking Blow (Rank 6) + CreateSpellCooldown(26090), -- Thunderstomp (Rank 1) + CreateSpellCooldown(26187), -- Thunderstomp (Rank 2) + CreateSpellCooldown(26188), -- Thunderstomp (Rank 3) + CreateSpellCooldown(27063), -- Thunderstomp (Rank 4) } } + AddCooldowns(data) diff --git a/data/Vanilla/blacklist.lua b/data/Vanilla/blacklist.lua index 56a3e62..00e22b9 100644 --- a/data/Vanilla/blacklist.lua +++ b/data/Vanilla/blacklist.lua @@ -5,103 +5,191 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Classic Era -------------------------------------------------- -do - local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - - -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - - -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - - [21562] = true, -- Prayer of Fortitude (Rank 1) - [21564] = true, -- Prayer of Fortitude (Rank 2) - - [14819] = true, -- Divine Spirit - [27681] = true, -- Prayer of Spirit - - [976] = true, -- Shadow Protection (Rank 1) - [10957] = true, -- Shadow Protection (Rank 2) - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11787] = true, -- Blood Pact (Rank 5) - - -- Consumables - [17629] = true, -- Flask of Chromatic Resistance - - -- Scrolls - [8091] = true, -- Armor (Scroll of Protection) - [8094] = true, -- Armor (Scroll of Protection II) - [8095] = true, -- Armor (Scroll of Protection III) - [12175] = true, -- Armor (Scroll of Protection IV) - - [8096] = true, -- Intellect (Scroll of Intellect) - [8097] = true, -- Intellect (Scroll of Intellect II) - [8098] = true, -- Intellect (Scroll of Intellect III) - [12176] = true, -- Intellect (Scroll of Intellect IV) - - [8099] = true, -- Stamina (Scroll of Stamina) - [8100] = true, -- Stamina (Scroll of Stamina II) - [8101] = true, -- Stamina (Scroll of Stamina III) - [12178] = true, -- Stamina (Scroll of Stamina IV) - - [8112] = true, -- Spirit Magic (Scroll of Spirit) - [8113] = true, -- Spirit Magic (Scroll of Spirit II) - [8114] = true, -- Spirit Magic (Scroll of Spirit III) - [12177] = true, -- Spirit Magic (Scroll of Spirit IV) - - [8115] = true, -- Agility (Scroll of Agility) - [8116] = true, -- Agility (Scroll of Agility II) - [8117] = true, -- Agility (Scroll of Agility III) - [12174] = true, -- Agility (Scroll of Agility IV) - - [8118] = true, -- Strength (Scroll of Strength) - [8119] = true, -- Strength (Scroll of Strength II) - [8120] = true, -- Strength (Scroll of Strength III) - [12179] = true, -- Strength (Scroll of Strength IV) - - -- Christimas - [26218] = true, -- Mistletoe - - -------------------------------------------------- - -- Season of Discovery - -------------------------------------------------- - [349981] = true, -- Supercharged Chronoboon Displacer - [410935] = true, -- Meditation on the Light - [417316] = true, -- Meditation on the Loa - [418459] = true, -- Meditation on Undeath - [419307] = true, -- Meditation on Elune - [430947] = true, -- Boon of Blackfathom (World Buff) - [436412] = true, -- Discoverer's Delight - } - - AddBlacklist(data) -end +local data = { + -- DRUID + [5232] = true, -- Mark of the Wild (Rank 2) + [6756] = true, -- Mark of the Wild (Rank 3) + [5234] = true, -- Mark of the Wild (Rank 4) + [8907] = true, -- Mark of the Wild (Rank 5) + [9884] = true, -- Mark of the Wild (Rank 6) + [9885] = true, -- Mark of the Wild (Rank 7) + + [782] = true, -- Thorns (Rank 2) + [1075] = true, -- Thorns (Rank 3) + [8914] = true, -- Thorns (Rank 4) + [9756] = true, -- Thorns (Rank 5) + [9910] = true, -- Thorns (Rank 6) + + [21849] = true, -- Gift of the Wild (Rank 1) + [21850] = true, -- Gift of the Wild (Rank 2) + + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [9634] = true, -- Dire Bear Form + + -- HUNTER + [13165] = "name", -- Aspect of the Hawk (Rank 1 - 7) + [13163] = true, -- Aspect of the Monkey + + -- MAGE + [1459] = true, -- Arcane Intellect (Rank 1) + [1460] = true, -- Arcane Intellect (Rank 2) + [1461] = true, -- Arcane Intellect (Rank 3) + [10156] = true, -- Arcane Intellect (Rank 4) + [10157] = true, -- Arcane Intellect (Rank 5) + + [23028] = true, -- Arcane Brilliance + + [168] = true, -- Frost Armor (Rank 1) + [7300] = true, -- Frost Armor (Rank 2) + [7301] = true, -- Frost Armor (Rank 3) + + [7302] = true, -- Ice Armor (Rank 1) + [7320] = true, -- Ice Armor (Rank 2) + [10219] = true, -- Ice Armor (Rank 3) + [10220] = true, -- Ice Armor (Rank 4) + + [6117] = true, -- Mage Armor (Rank 1) + [22782] = true, -- Mage Armor (Rank 2) + [22783] = true, -- Mage Armor (Rank 3) + + -- PALADIN + [465] = "name", -- Devotion Aura (Rank 1 - 7) + + [19891] = true, -- Fire Resistence Aura (Rank 1) + [19899] = true, -- Fire Resistence Aura (Rank 2) + [19900] = true, -- Fire Resistence Aura (Ranl 3) + + [25780] = true, -- Righteous Fury + [20217] = true, -- Blessing of Kings + [19742] = "name", -- Blessing of Wisdom (Rank 1 - 6) + [19740] = "name", -- Blessing of Might (Rank 1 - 6) + [25782] = true, -- Greater Blessing of Might (Rank 1) + [25916] = true, -- Greater Blessing of Might (Rank 2) + [25894] = true, -- Greater Blessing of Wisdom (Rank 1) + [25918] = true, -- Greater Blessing of Wisdom (Rank 2) + [25898] = true, -- Greater Blessing of Kings + [21084] = "name", -- Seal of Righteousness (Rank 1 - 8) + + -- PRIEST + [1243] = true, -- Power Word: Fortitude (Rank 1) + [1244] = true, -- Power Word: Fortitude (Rank 2) + [1245] = true, -- Power Word: Fortitude (Rank 3) + [2791] = true, -- Power Word: Fortitude (Rank 4) + [10937] = true, -- Power Word: Fortitude (Rank 5) + [10938] = true, -- Power Word: Fortitude (Rank 6) + + [21562] = true, -- Prayer of Fortitude (Rank 1) + [21564] = true, -- Prayer of Fortitude (Rank 2) + + [976] = true, -- Shadow Protection (Rank 1) + [10957] = true, -- Shadow Protection (Rank 2) + + [27683] = true, -- Prayer of Shadow Protection + + [588] = "name", -- Inner Fire (Rank 1 - 6) + [14819] = true, -- Divine Spirit + [15473] = true, -- Shadowform + [27681] = true, -- Prayer of Spirit + + -- SHAMAN + [324] = "name", -- Lightning Shield (Rank 1 - 7) + + -- WARRIOR + [71] = true, -- Defensive Stance + [2457] = true, -- Battle Stance + [2458] = true, -- Berserker Stance + [6673] = "name", -- Battle Shout (Rank 1 - 7) + + -- WARLOCK + [687] = true, -- Demon Skin (Rank 1) + [696] = true, -- Demon Skin (Rank 2) + + [6307] = true, -- Blood Pact (Rank 1) + [7804] = true, -- Blood Pact (Rank 2) + [7805] = true, -- Blood Pact (Rank 3) + [11766] = true, -- Blood Pact (Rank 4) + [11767] = true, -- Blood Pact (Rank 5) + + [706] = "name", -- Demon Armor (Rank 1 - 5) + + -- Consumables + [17629] = true, -- Flask of Chromatic Resistance + + -- Scrolls + [8091] = true, -- Armor (Scroll of Protection) + [8094] = true, -- Armor (Scroll of Protection II) + [8095] = true, -- Armor (Scroll of Protection III) + [12175] = true, -- Armor (Scroll of Protection IV) + + [8096] = true, -- Intellect (Scroll of Intellect) + [8097] = true, -- Intellect (Scroll of Intellect II) + [8098] = true, -- Intellect (Scroll of Intellect III) + [12176] = true, -- Intellect (Scroll of Intellect IV) + + [8099] = true, -- Stamina (Scroll of Stamina) + [8100] = true, -- Stamina (Scroll of Stamina II) + [8101] = true, -- Stamina (Scroll of Stamina III) + [12178] = true, -- Stamina (Scroll of Stamina IV) + + [8112] = true, -- Spirit Magic (Scroll of Spirit) + [8113] = true, -- Spirit Magic (Scroll of Spirit II) + [8114] = true, -- Spirit Magic (Scroll of Spirit III) + [12177] = true, -- Spirit Magic (Scroll of Spirit IV) + + [8115] = true, -- Agility (Scroll of Agility) + [8116] = true, -- Agility (Scroll of Agility II) + [8117] = true, -- Agility (Scroll of Agility III) + [12174] = true, -- Agility (Scroll of Agility IV) + + [8118] = true, -- Strength (Scroll of Strength) + [8119] = true, -- Strength (Scroll of Strength II) + [8120] = true, -- Strength (Scroll of Strength III) + [12179] = true, -- Strength (Scroll of Strength IV) + + -- Christimas + [26218] = true, -- Mistletoe + + -- Hallowen + [24755] = true, -- Tricked or Treated + + -- Booms + [15366] = true, -- Songflower Serenade + [22817] = true, -- Fengus' Ferocity + [22818] = true, -- Mol'dar's Moxie + [22820] = true, -- Slip'kik's Savvy + [22888] = true, -- Rallying Cry of the Dragonslayer + [355363] = true, -- Rallying Cry of the Dragonslayer + [23768] = true, -- Sayge's Dark Fortune of Damage + [24425] = true, -- Spirit of Zandalar + [11371] = true, -- Gift of Arthas + [355365] = true, -- Spirit of Zandalar + + [16363] = true, -- Juju Power + + -------------------------------------------------- + -- Hardcore + -------------------------------------------------- + [364001] = true, -- Soul of Iron + + -------------------------------------------------- + -- Season of Discovery + -------------------------------------------------- + [349981] = true, -- Supercharged Chronoboon Displacer + [410935] = true, -- Meditation on the Light + [417316] = true, -- Meditation on the Loa + [418459] = true, -- Meditation on Undeath + [419307] = true, -- Meditation on Elune + [430947] = true, -- Boon of Blackfathom (World Buff) + [436412] = true, -- Discoverer's Delight + + -- PALADIN + [407627] = true, -- Righteous Fury + + [430947] = true, -- Boon of Blackfathom + [438536] = true, -- Spark of Inspiration + [446695] = true, -- Fervor of the Temple Explorer + [460940] = true, -- Might of Stormwind +} + +AddBlacklist(data) diff --git a/data/Vanilla/cooldowns.lua b/data/Vanilla/cooldowns.lua index 4c396cc..0637dfc 100644 --- a/data/Vanilla/cooldowns.lua +++ b/data/Vanilla/cooldowns.lua @@ -7,100 +7,256 @@ local AddCooldowns = ns.data.AddCooldowns -- Classic Era -------------------------------------------------- local data = { + ["DRUID"] = { + -- General + CreateSpellCooldown(20484), -- Rebirth (Rank 1) + CreateSpellCooldown(20739), -- Rebirth (Rank 2) + CreateSpellCooldown(20742), -- Rebirth (Rank 3) + CreateSpellCooldown(20747), -- Rebirth (Rank 4) + CreateSpellCooldown(20748), -- Rebirth (Rank 5) + + CreateSpellCooldown(740), -- Tranquility (Rank 1) + CreateSpellCooldown(8918), -- Tranquility (Rank 2) + CreateSpellCooldown(9862), -- Tranquility (Rank 3) + CreateSpellCooldown(9863), -- Tranquility (Rank 4) + + CreateSpellCooldown(22812), -- Barkskin + + CreateSpellCooldown(1850), -- Dash (Rank 1) + CreateSpellCooldown(9821), -- Dash (Rank 2) + + CreateSpellCooldown(5229), -- Enrage + CreateSpellCooldown(5209), -- Challenging Roar + + CreateSpellCooldown(22842), -- Frenzied Regeneration (Rank 1) + CreateSpellCooldown(22895), -- Frenzied Regeneration (Rank 2) + CreateSpellCooldown(22896), -- Frenzied Regeneration (Rank 3) + + -- Talents + CreateSpellCooldown(16979), -- Feral Charge + CreateSpellCooldown(17116), -- Nature's Swiftness + CreateSpellCooldown(29166), -- Innervate + + CreateSpellCooldown(417141), -- Berserk + CreateSpellCooldown(439748), -- Starfall + CreateSpellCooldown(408024), -- Survival Instincts + }, + ["HUNTER"] = { + -- General + CreateSpellCooldown(1499), -- Freezing Trap + CreateSpellCooldown(3045), -- Rapid Fire + CreateSpellCooldown(5384), -- Feign Death + -- CreateSpellCooldown(19801), -- Tranquilizing Shot + + -- Talents + CreateSpellCooldown(19263), -- Deterrence + CreateSpellCooldown(19386), -- Wyvern Sting + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(19577), -- Intimidation + + CreateSpellCooldown(409379), -- Kill Command + }, ["MAGE"] = { + -- General + CreateSpellCooldown(2139), -- Counterspell + -- Arcane - CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(12042), -- Arcane Power + CreateSpellCooldown(12043), -- Presence of Mind + CreateSpellCooldown(12051), -- Evocation + + -- Fire + CreateSpellCooldown(11129), -- Combustion -- Frost - CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(11958), -- Ice Block + CreateSpellCooldown(12472), -- Icy Veins + + CreateSpellCooldown(425124), -- Arcane Surge + CreateSpellCooldown(440802), -- Frozen Orb + CreateSpellCooldown(425121), -- Icy Veins }, ["PALADIN"] = { -- General - CreateSpellCooldown(498), -- Divine Protection - CreateSpellCooldown(642), -- Divine Shield - CreateSpellCooldown(633), -- Lay on Hands - CreateSpellCooldown(1022), -- Blessing of Protection - CreateSpellCooldown(1044), -- Blessing of Freedom - CreateSpellCooldown(6940), -- Blessing of Sacrifice + CreateSpellCooldown(498), -- Divine Protection + CreateSpellCooldown(642), -- Divine Shield + CreateSpellCooldown(633), -- Lay on Hands + + CreateSpellCooldown(853), -- Hammer of Justice (Rank 1) + CreateSpellCooldown(5588), -- Hammer of Justice (Rank 2) + CreateSpellCooldown(5589), -- Hammer of Justice (Rank 3) + CreateSpellCooldown(10308), -- Hammer of Justice (Rank 4) + + CreateSpellCooldown(1022), -- Blessing of Protection (Rank 1) + CreateSpellCooldown(5599), -- Blessing of Protection (Rank 2) + CreateSpellCooldown(10278), -- Blessing of Protection (Rank 3) + + CreateSpellCooldown(1044), -- Blessing of Freedom + + -- Holy + CreateSpellCooldown(20216), -- Divine Favor + + -- Retribution + CreateSpellCooldown(20066), -- Repentance + + CreateSpellCooldown(409324), -- Ancestral Guidance + CreateSpellCooldown(407804), -- Divine Sacrifice }, ["PRIEST"] = { -- Discipline - CreateSpellCooldown(10060), -- Power Infusion - CreateSpellCooldown(14751), -- Inner Focus + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(14751), -- Inner Focus -- Holy - CreateSpellCooldown(724), -- Lightwell (Rank 1) - CreateSpellCooldown(27870), -- Lightwell (Rank 2) - CreateSpellCooldown(27871), -- Lightwell (Rank 3) + CreateSpellCooldown(724), -- Lightwell (Rank 1) + CreateSpellCooldown(27870), -- Lightwell (Rank 2) + CreateSpellCooldown(27871), -- Lightwell (Rank 3) -- Shadow - CreateSpellCooldown(15286, false), -- Vampiric Embrace - CreateSpellCooldown(15487), -- Silence + CreateSpellCooldown(15487), -- Silence - CreateSpellCooldown(586), -- Fade (Rank 1) - CreateSpellCooldown(9578), -- Fade (Rank 2) - CreateSpellCooldown(9579), -- Fade (Rank 3) - CreateSpellCooldown(9592), -- Fade (Rank 4) - CreateSpellCooldown(10941), -- Fade (Rank 5) - CreateSpellCooldown(10942), -- Fade (Rank 6) + CreateSpellCooldown(586), -- Fade (Rank 1) + CreateSpellCooldown(9578), -- Fade (Rank 2) + CreateSpellCooldown(9579), -- Fade (Rank 3) + CreateSpellCooldown(9592), -- Fade (Rank 4) + CreateSpellCooldown(10941), -- Fade (Rank 5) + CreateSpellCooldown(10942), -- Fade (Rank 6) - CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) - CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) - CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) - CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) + CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) + CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) + CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) + CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) -- Night Elf - CreateSpellCooldown(2651), -- Elune's Grace (Rank 1) - CreateSpellCooldown(19289), -- Elune's Grace (Rank 2) - CreateSpellCooldown(19291), -- Elune's Grace (Rank 3) - CreateSpellCooldown(19292), -- Elune's Grace (Rank 4) - CreateSpellCooldown(19293), -- Elune's Grace (Rank 5) - - -- Human - CreateSpellCooldown(13896), -- Feedback (Rank 1) - CreateSpellCooldown(19271), -- Feedback (Rank 2) - CreateSpellCooldown(19273), -- Feedback (Rank 3) - CreateSpellCooldown(19274), -- Feedback (Rank 4) - CreateSpellCooldown(19275), -- Feedback (Rank 5) + CreateSpellCooldown(2651), -- Elune's Grace (Rank 1) + CreateSpellCooldown(19289), -- Elune's Grace (Rank 2) + CreateSpellCooldown(19291), -- Elune's Grace (Rank 3) + CreateSpellCooldown(19292), -- Elune's Grace (Rank 4) + CreateSpellCooldown(19293), -- Elune's Grace (Rank 5) + + -- Human + CreateSpellCooldown(13896), -- Feedback (Rank 1) + CreateSpellCooldown(19271), -- Feedback (Rank 2) + CreateSpellCooldown(19273), -- Feedback (Rank 3) + CreateSpellCooldown(19274), -- Feedback (Rank 4) + CreateSpellCooldown(19275), -- Feedback (Rank 5) -- Dwarf - CreateSpellCooldown(6346), -- Fear Ward (Rank 1) + CreateSpellCooldown(6346), -- Fear Ward (Rank 1) -- Dwarf / Humman - CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) - CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) - CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) - CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) - CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) - CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) - CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) - + CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) + CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) + CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) + CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) + CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) + CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) + CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) + -- Undead - CreateSpellCooldown(2944), -- Devouring Plague(Rank 1) - CreateSpellCooldown(19276), -- Devouring Plague(Rank 2) - CreateSpellCooldown(19277), -- Devouring Plague(Rank 3) - CreateSpellCooldown(19278), -- Devouring Plague(Rank 4) - CreateSpellCooldown(19279), -- Devouring Plague(Rank 5) - CreateSpellCooldown(19280), -- Devouring Plague(Rank 6) + CreateSpellCooldown(2944), -- Devouring Plague(Rank 1) + CreateSpellCooldown(19276), -- Devouring Plague(Rank 2) + CreateSpellCooldown(19277), -- Devouring Plague(Rank 3) + CreateSpellCooldown(19278), -- Devouring Plague(Rank 4) + CreateSpellCooldown(19279), -- Devouring Plague(Rank 5) + CreateSpellCooldown(19280), -- Devouring Plague(Rank 6) + + CreateSpellCooldown(425294), -- Dispersion + CreateSpellCooldown(402789), -- Eye of the Void + CreateSpellCooldown(402799), -- Homunculi + CreateSpellCooldown(402004), -- Pain Suppression + CreateSpellCooldown(425207), -- Power Word: Barrier + }, + ["ROGUE"] = { + -- General + CreateSpellCooldown(2094), -- Blind + CreateSpellCooldown(5277), -- Evasion + + CreateSpellCooldown(1856), -- Vanish (Rank 1) + CreateSpellCooldown(1857), -- Vanish (Rank 2) + + CreateSpellCooldown(2983), -- Sprint (Rank 1) + CreateSpellCooldown(8696), -- Sprint (Rank 2) + CreateSpellCooldown(11305), -- Sprint (Rank 3) + + -- Talents + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry + CreateSpellCooldown(14177), -- Cold Blood + CreateSpellCooldown(14183), -- Premeditation + CreateSpellCooldown(14185), -- Preparation + }, + ["SHAMAN"] = { + -- General + -- CreateSpellCooldown(8177), -- Grounding Totem + CreateSpellCooldown(20608), -- Reincarnation + + -- Restoration + CreateSpellCooldown(16188), -- Nature's Swiftness + CreateSpellCooldown(16190), -- Mana Tide Totem (Rank 1) + CreateSpellCooldown(17354), -- Mana Tide Totem (Rank 2) + CreateSpellCooldown(17359), -- Mana Tide Totem (Rank 3) + + -- Elemental + CreateSpellCooldown(16166), -- Elemental Mastery + + -- Enhancement + CreateSpellCooldown(17364), -- Stormstrike + }, + ["WARLOCK"] = { + -- General + CreateSpellCooldown(1122), -- Inferno + + CreateSpellCooldown(6789), -- Death Coil (Rank 1) + CreateSpellCooldown(17925), -- Death Coil (Rank 2) + CreateSpellCooldown(17926), -- Death Coil (Rank 3) + + CreateSpellCooldown(5484), -- Howl of Terror (Rank 1) + CreateSpellCooldown(17928), -- Howl of Terror (Rank 2) + + -- Affliction + CreateSpellCooldown(18288), -- Amplify Curse + + -- Demonologist + CreateSpellCooldown(18708), -- Fel Domination + + CreateSpellCooldown(412789), -- Demonic Howl + CreateSpellCooldown(426195), -- Vengeance }, ["WARRIOR"] = { + -- General + CreateSpellCooldown(1719), -- Recklessness + + CreateSpellCooldown(6552), -- Pummel (Rank 1) + CreateSpellCooldown(6554), -- Pummel (Rank 2) + + -- Talents + CreateSpellCooldown(12292), -- Sweeping Strikes + CreateSpellCooldown(12328), -- Death Wish + -- Arms - CreateSpellCooldown(6178), -- Charge - CreateSpellCooldown(7400), -- Mocking Blow - CreateSpellCooldown(20230), -- Retaliation - + CreateSpellCooldown(6178), -- Charge + CreateSpellCooldown(7400), -- Mocking Blow + CreateSpellCooldown(20230), -- Retaliation + -- Fury - CreateSpellCooldown(1161), -- Challenging Shout - CreateSpellCooldown(5246), -- Intimidating Shout - CreateSpellCooldown(18499), -- Berserker Rage - CreateSpellCooldown(20252), -- Intercept + CreateSpellCooldown(1161), -- Challenging Shout + CreateSpellCooldown(5246), -- Intimidating Shout + CreateSpellCooldown(18499), -- Berserker Rage + CreateSpellCooldown(20252), -- Intercept -- Protection - CreateSpellCooldown(355), -- Taunt - CreateSpellCooldown(676), -- Disarm - CreateSpellCooldown(871), -- Shield Wall - CreateSpellCooldown(1671), -- Shield Bash - CreateSpellCooldown(2687), -- Bloodrage + CreateSpellCooldown(676), -- Disarm + CreateSpellCooldown(871), -- Shield Wall + CreateSpellCooldown(1671), -- Shield Bash + CreateSpellCooldown(2687), -- Bloodrage + CreateSpellCooldown(12809), -- Concussion Blow + CreateSpellCooldown(12975), -- Last Stand + + -- Season of Discovery + CreateSpellCooldown(402913), -- Enraged Regeneration + CreateSpellCooldown(426490), -- Rallying Cry } } + AddCooldowns(data) diff --git a/data/Wrath/blacklist.lua b/data/Wrath/blacklist.lua index b56e24d..2979846 100644 --- a/data/Wrath/blacklist.lua +++ b/data/Wrath/blacklist.lua @@ -3,80 +3,118 @@ local _, ns = ... local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- --- Wrath of the Lich King Classic (Titan) +-- Wrath of the Lich King -------------------------------------------------- -do - local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - [26990] = true, -- Mark of the Wild (Rank 8) - [48469] = true, -- Mark of the Wild (Rank 9) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - [26992] = true, -- Thorns (Rank 7) - [53307] = true, -- Thorns (Rank 8) - - -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - [27126] = true, -- Arcane Intellect (Rank 6) - [42995] = true, -- Arcane Intellect (Rank 7) - - -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - [25389] = true, -- Power Word: Fortitude (Rank 7) - [48161] = true, -- Power Word: Fortitude (Rank 8) - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11787] = true, -- Blood Pact (Rank 5) - [27267] = true, -- Blood Pact (Rank 6) - [47982] = true, -- Blood Pact (Rank 7) - } - - AddBlacklist(data) -end - -do - local data = { - -- DEATHKNIGHT - [55610] = true, -- Improved Icy Talons - - -- MAGE - [61316] = true, -- Dalaran Brilliance - - -- PRIEST - [48040] = true, -- Inner Fire (Rank 8) - [48168] = true, -- Inner Fire (Rank 9) - [48074] = true, -- Prayer of Spirit (Rank 3) - [49868] = true, -- Mind Quickening - - -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath - } - - AddBlacklist(data) -end +local data = { + -- DEATHKNIGHT + [48263] = true, -- Frost Presence + [48265] = true, -- Unholy Presence + [48266] = true, -- Blood Presence + [55610] = true, -- Improved Icy Talons + [57330] = "name", -- Horn of Winter + + -- DRUID + [5232] = true, -- Mark of the Wild (Rank 2) + [6756] = true, -- Mark of the Wild (Rank 3) + [5234] = true, -- Mark of the Wild (Rank 4) + [8907] = true, -- Mark of the Wild (Rank 5) + [9884] = true, -- Mark of the Wild (Rank 6) + [9885] = true, -- Mark of the Wild (Rank 7) + [26990] = true, -- Mark of the Wild (Rank 8) + [48469] = true, -- Mark of the Wild (Rank 9) + + [782] = true, -- Thorns (Rank 2) + [1075] = true, -- Thorns (Rank 3) + [8914] = true, -- Thorns (Rank 4) + [9756] = true, -- Thorns (Rank 5) + [9910] = true, -- Thorns (Rank 6) + [26992] = true, -- Thorns (Rank 7) + [53307] = true, -- Thorns (Rank 8) + + [21849] = "name", -- Gift of the Wild + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [9634] = true, -- Dire Bear Form + [33943] = true, -- Flight Form + [40120] = true, -- Swift Flight Form + + -- HUNTER + [13165] = "name", -- Aspect of the Hawk + [61846] = "name", -- Aspect of the Dragonhawk + [13163] = true, -- Aspect of the Monkey + + -- MAGE + [1460] = true, -- Arcane Intellect (Rank 2) + [1461] = true, -- Arcane Intellect (Rank 3) + [10156] = true, -- Arcane Intellect (Rank 4) + [10157] = true, -- Arcane Intellect (Rank 5) + [27126] = true, -- Arcane Intellect (Rank 6) + [42995] = true, -- Arcane Intellect (Rank 7) + + [61316] = true, -- Dalaran Brilliance + [23028] = "name", -- Arcane Brilliance + [7302] = "name", -- Ice Armor + [6117] = "name", -- Mage Armor + [30482] = "name", -- Molten Armor + + -- PALADIN + [465] = "name", -- Devotion Aura + [25780] = true, -- Righteous Fury + [20217] = true, -- Blessing of Kings + [19742] = "name", -- Blessing of Wisdom + [19740] = "name", -- Blessing of Might + [20911] = true, -- Blessing of Sanctuary + [25782] = "name", -- Greater Blessing of Might + [25894] = "name", -- Greater Blessing of Wisdom + [25898] = true, -- Greater Blessing of Kings + [25899] = true, -- Greater Blessing of Sanctuary + [21084] = true, -- Seal of Righteousness + + -- PRIEST + [1243] = true, -- Power Word: Fortitude (Rank 1) + [1244] = true, -- Power Word: Fortitude (Rank 2) + [1245] = true, -- Power Word: Fortitude (Rank 3) + [2791] = true, -- Power Word: Fortitude (Rank 4) + [10937] = true, -- Power Word: Fortitude (Rank 5) + [10938] = true, -- Power Word: Fortitude (Rank 6) + [25389] = true, -- Power Word: Fortitude (Rank 7) + [48161] = true, -- Power Word: Fortitude (Rank 8) + + [588] = "name", -- Inner Fire + [48040] = true, -- Inner Fire (Rank 8) + [48168] = true, -- Inner Fire (Rank 9) + [48074] = true, -- Prayer of Spirit (Rank 3) + [15473] = true, -- Shadowform + [23723] = true, -- Mind Quickening + + -- SHAMAN + [30809] = true, -- Unleashed Rage + [51470] = true, -- Elemental Oath + [324] = "name", -- Lightning Shield + [24398] = "name", -- Water Shield + + -- WARLOCK + [687] = true, -- Demon Skin (Rank 1) + [696] = true, -- Demon Skin (Rank 2) + + [6307] = true, -- Blood Pact (Rank 1) + [7804] = true, -- Blood Pact (Rank 2) + [7805] = true, -- Blood Pact (Rank 3) + [11766] = true, -- Blood Pact (Rank 4) + [11767] = true, -- Blood Pact (Rank 5) + [27267] = true, -- Blood Pact (Rank 6) + [47982] = true, -- Blood Pact (Rank 7) + + [706] = "name", -- Demon Armor + [28176] = "name", -- Fel Armor + + -- WARRIOR + [2457] = true, -- Battle Stance + [71] = true, -- Defensive Stance + [2458] = true, -- Berserker Stance + + [469] = "name", -- Commanding Shout + [6673] = "name", -- Battle Shout +} + +AddBlacklist(data) diff --git a/data/Wrath/cooldowns.lua b/data/Wrath/cooldowns.lua index ac770a9..0253714 100644 --- a/data/Wrath/cooldowns.lua +++ b/data/Wrath/cooldowns.lua @@ -7,51 +7,385 @@ local AddCooldowns = ns.data.AddCooldowns -- Wrath of the Lich King Classic (Titan) -------------------------------------------------- local data = { + ["DEATHKNIGHT"] = { + -- General + CreateSpellCooldown(47528), -- Mind Freeze + CreateSpellCooldown(49576), -- Death Grip + CreateSpellCooldown(47476), -- Strangulate + CreateSpellCooldown(48707), -- Anti-Magic Shell + CreateSpellCooldown(48792), -- Icebound Fortitude + CreateSpellCooldown(47568), -- Empower Rune Weapon + CreateSpellCooldown(42650), -- Army of the Dead + CreateSpellCooldown(61999), -- Raise Ally + CreateSpellCooldown(48743), -- Death Pact + + -- Blood + CreateSpellCooldown(49028), -- Dancing Rune Weapon + CreateSpellCooldown(55233), -- Vampiric Blood + CreateSpellCooldown(48982), -- Rune Tap + + -- Frost + CreateSpellCooldown(49039), -- Lichborne + CreateSpellCooldown(51271), -- Unbreakable Armor + CreateSpellCooldown(49203), -- Hungering Cold + + -- Unholy + CreateSpellCooldown(49206), -- Summon Gargoyle + CreateSpellCooldown(49222), -- Bone Shield + CreateSpellCooldown(51052), -- Anti-Magic Zone + + CreateSpellCooldown(45529), -- Blood Tap + CreateSpellCooldown(1314847), -- Death From Above + CreateSpellCooldown(50033), -- Death Rune Mastery (Rank 2) + CreateSpellCooldown(50034), -- Death Rune Mastery (Rank 3) + CreateSpellCooldown(49796), -- Deathchill + CreateSpellCooldown(49005), -- Mark of Blood + CreateSpellCooldown(46584), -- Raise Dead + CreateSpellCooldown(49016), -- Unholy Frenzy + }, + ["DRUID"] = { + -- General + CreateSpellCooldown(20484), -- Rebirth (Rank 1) + CreateSpellCooldown(740), -- Tranquility (Rank 1) + CreateSpellCooldown(22812), -- Barkskin + CreateSpellCooldown(29166), -- Innervate + CreateSpellCooldown(1850), -- Dash (Rank 1) + CreateSpellCooldown(5229), -- Enrage + CreateSpellCooldown(5209), -- Challenging Roar + CreateSpellCooldown(22842), -- Frenzied Regeneration + + -- Talents + CreateSpellCooldown(17116), -- Nature's Swiftness + CreateSpellCooldown(16979), -- Feral Charge - Bear + CreateSpellCooldown(49376), -- Feral Charge - Cat + CreateSpellCooldown(61336), -- Survival Instincts + CreateSpellCooldown(50334), -- Berserk + CreateSpellCooldown(33831), -- Force of Nature + CreateSpellCooldown(48505), -- Starfall (Rank 1) + + CreateSpellCooldown(5211), -- Bash (Rank 1) + CreateSpellCooldown(6798), -- Bash (Rank 2) + CreateSpellCooldown(8983), -- Bash (Rank 3) + CreateSpellCooldown(1309397), -- Elune's Orbital Cannon + CreateSpellCooldown(16689), -- Nature's Grasp (Rank 1) + CreateSpellCooldown(16810), -- Nature's Grasp (Rank 2) + CreateSpellCooldown(16811), -- Nature's Grasp (Rank 3) + CreateSpellCooldown(16812), -- Nature's Grasp (Rank 4) + CreateSpellCooldown(16813), -- Nature's Grasp (Rank 5) + CreateSpellCooldown(17329), -- Nature's Grasp (Rank 6) + CreateSpellCooldown(27009), -- Nature's Grasp (Rank 7) + CreateSpellCooldown(53312), -- Nature's Grasp (Rank 8) + }, + ["HUNTER"] = { + -- General + CreateSpellCooldown(3045), -- Rapid Fire + CreateSpellCooldown(5384), -- Feign Death + CreateSpellCooldown(19263), -- Deterrence + CreateSpellCooldown(1499), -- Freezing Trap (Rank 1) + CreateSpellCooldown(34477), -- Misdirection + CreateSpellCooldown(53271), -- Master's Call + + -- Talents + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(23989), -- Readiness + CreateSpellCooldown(34490), -- Silencing Shot + CreateSpellCooldown(19386), -- Wyvern Sting (Rank 1) + + CreateSpellCooldown(50433), -- Bad Attitude (Rank 1) + CreateSpellCooldown(52395), -- Bad Attitude (Rank 2) + CreateSpellCooldown(52396), -- Bad Attitude (Rank 3) + CreateSpellCooldown(52397), -- Bad Attitude (Rank 4) + CreateSpellCooldown(52398), -- Bad Attitude (Rank 5) + CreateSpellCooldown(52399), -- Bad Attitude (Rank 6) + CreateSpellCooldown(53490), -- Bullheaded + CreateSpellCooldown(62757), -- Call Stabled Pet + CreateSpellCooldown(53434), -- Call of the Wild + CreateSpellCooldown(1742), -- Cower + CreateSpellCooldown(61684), -- Dash + CreateSpellCooldown(23145), -- Dive + CreateSpellCooldown(50285), -- Dust Cloud + CreateSpellCooldown(24604), -- Furious Howl (Rank 1) + CreateSpellCooldown(64491), -- Furious Howl (Rank 2) + CreateSpellCooldown(64492), -- Furious Howl (Rank 3) + CreateSpellCooldown(64493), -- Furious Howl (Rank 4) + CreateSpellCooldown(64494), -- Furious Howl (Rank 5) + CreateSpellCooldown(64495), -- Furious Howl (Rank 6) + CreateSpellCooldown(55709), -- Heart of the Phoenix + CreateSpellCooldown(34026), -- Kill Command + CreateSpellCooldown(53478), -- Last Stand + CreateSpellCooldown(53426), -- Lick Your Wounds + CreateSpellCooldown(50479), -- Nether Shock (Rank 1) + CreateSpellCooldown(53584), -- Nether Shock (Rank 2) + CreateSpellCooldown(53586), -- Nether Shock (Rank 3) + CreateSpellCooldown(53587), -- Nether Shock (Rank 4) + CreateSpellCooldown(53588), -- Nether Shock (Rank 5) + CreateSpellCooldown(53589), -- Nether Shock (Rank 6) + CreateSpellCooldown(50245), -- Pin (Rank 1) + CreateSpellCooldown(53544), -- Pin (Rank 2) + CreateSpellCooldown(53545), -- Pin (Rank 3) + CreateSpellCooldown(53546), -- Pin (Rank 4) + CreateSpellCooldown(53547), -- Pin (Rank 5) + CreateSpellCooldown(53548), -- Pin (Rank 6) + CreateSpellCooldown(53401), -- Rabid + CreateSpellCooldown(50518), -- Ravage (Rank 1) + CreateSpellCooldown(53558), -- Ravage (Rank 2) + CreateSpellCooldown(53559), -- Ravage (Rank 3) + CreateSpellCooldown(53560), -- Ravage (Rank 4) + CreateSpellCooldown(53561), -- Ravage (Rank 5) + CreateSpellCooldown(53562), -- Ravage (Rank 6) + CreateSpellCooldown(53517), -- Roar of Recovery + CreateSpellCooldown(53480), -- Roar of Sacrifice + CreateSpellCooldown(50498), -- Savage Rend (Rank 1) + CreateSpellCooldown(53578), -- Savage Rend (Rank 2) + CreateSpellCooldown(53579), -- Savage Rend (Rank 3) + CreateSpellCooldown(53580), -- Savage Rend (Rank 4) + CreateSpellCooldown(53581), -- Savage Rend (Rank 5) + CreateSpellCooldown(53582), -- Savage Rend (Rank 6) + CreateSpellCooldown(50318), -- Serenity Dust (Rank 1) + CreateSpellCooldown(52012), -- Serenity Dust (Rank 2) + CreateSpellCooldown(52013), -- Serenity Dust (Rank 3) + CreateSpellCooldown(52014), -- Serenity Dust (Rank 4) + CreateSpellCooldown(52015), -- Serenity Dust (Rank 5) + CreateSpellCooldown(52016), -- Serenity Dust (Rank 6) + CreateSpellCooldown(26064), -- Shell Shield + CreateSpellCooldown(50541), -- Snatch (Rank 1) + CreateSpellCooldown(53537), -- Snatch (Rank 2) + CreateSpellCooldown(53538), -- Snatch (Rank 3) + CreateSpellCooldown(53540), -- Snatch (Rank 4) + CreateSpellCooldown(53542), -- Snatch (Rank 5) + CreateSpellCooldown(53543), -- Snatch (Rank 6) + CreateSpellCooldown(50519), -- Sonic Blast (Rank 1) + CreateSpellCooldown(53564), -- Sonic Blast (Rank 2) + CreateSpellCooldown(53565), -- Sonic Blast (Rank 3) + CreateSpellCooldown(53566), -- Sonic Blast (Rank 4) + CreateSpellCooldown(53567), -- Sonic Blast (Rank 5) + CreateSpellCooldown(53568), -- Sonic Blast (Rank 6) + CreateSpellCooldown(57386), -- Stampede (Rank 1) + CreateSpellCooldown(57389), -- Stampede (Rank 2) + CreateSpellCooldown(57390), -- Stampede (Rank 3) + CreateSpellCooldown(57391), -- Stampede (Rank 4) + CreateSpellCooldown(57392), -- Stampede (Rank 5) + CreateSpellCooldown(57393), -- Stampede (Rank 6) + CreateSpellCooldown(53477), -- Taunt + CreateSpellCooldown(54706), -- Venom Web Spray (Rank 1) + CreateSpellCooldown(55505), -- Venom Web Spray (Rank 2) + CreateSpellCooldown(55506), -- Venom Web Spray (Rank 3) + CreateSpellCooldown(55507), -- Venom Web Spray (Rank 4) + CreateSpellCooldown(55508), -- Venom Web Spray (Rank 5) + CreateSpellCooldown(55509), -- Venom Web Spray (Rank 6) + CreateSpellCooldown(4167), -- Web + }, + ["MAGE"] = { + -- General + CreateSpellCooldown(2139), -- Counterspell + CreateSpellCooldown(45438), -- Ice Block + CreateSpellCooldown(66), -- Invisibility + CreateSpellCooldown(12051), -- Evocation + CreateSpellCooldown(55342), -- Mirror Image + + -- Arcane + CreateSpellCooldown(12042), -- Arcane Power + CreateSpellCooldown(12043), -- Presence of Mind + + -- Fire + CreateSpellCooldown(11129), -- Combustion + + -- Frost + CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(11958), -- Cold Snap + CreateSpellCooldown(31687), -- Summon Water Elemental + CreateSpellCooldown(44572), -- Deep Freeze + + CreateSpellCooldown(53142), -- Portal: Dalaran + CreateSpellCooldown(43987), -- Ritual of Refreshment (Rank 1) + CreateSpellCooldown(58659), -- Ritual of Refreshment (Rank 2) + CreateSpellCooldown(70909), -- Summon Water Elemental (Prototype) + }, + ["PALADIN"] = { + -- General + CreateSpellCooldown(498), -- Divine Protection + CreateSpellCooldown(642), -- Divine Shield + CreateSpellCooldown(633), -- Lay on Hands (Rank 1) + CreateSpellCooldown(1022), -- Hand of Protection (Rank 1) + CreateSpellCooldown(1044), -- Hand of Freedom + CreateSpellCooldown(6940), -- Hand of Sacrifice + CreateSpellCooldown(853), -- Hammer of Justice (Rank 1) + CreateSpellCooldown(31884), -- Avenging Wrath + CreateSpellCooldown(54428), -- Divine Plea + + -- Talents + CreateSpellCooldown(20216), -- Divine Favor + CreateSpellCooldown(31842), -- Divine Illumination + CreateSpellCooldown(31821), -- Aura Mastery + CreateSpellCooldown(64205), -- Divine Sacrifice + CreateSpellCooldown(20066), -- Repentance + + CreateSpellCooldown(19752), -- Divine Intervention + CreateSpellCooldown(1038), -- Hand of Salvation + }, ["PRIEST"] = { -- Discipline - CreateSpellCooldown(10060), -- Power Infusion - CreateSpellCooldown(14751), -- Inner Focus + CreateSpellCooldown(10060), -- Power Infusion + CreateSpellCooldown(14751), -- Inner Focus -- Holy - CreateSpellCooldown(724), -- Lightwell (Rank 1) - CreateSpellCooldown(27870), -- Lightwell (Rank 2) - CreateSpellCooldown(27871), -- Lightwell (Rank 3) + CreateSpellCooldown(724), -- Lightwell (Rank 1) + CreateSpellCooldown(27870), -- Lightwell (Rank 2) + CreateSpellCooldown(27871), -- Lightwell (Rank 3) -- Shadow - CreateSpellCooldown(15286, false), -- Vampiric Embrace - CreateSpellCooldown(15487), -- Silence - - CreateSpellCooldown(586), -- Fade (Rank 1) - CreateSpellCooldown(9578), -- Fade (Rank 2) - CreateSpellCooldown(9579), -- Fade (Rank 3) - CreateSpellCooldown(9592), -- Fade (Rank 4) - CreateSpellCooldown(10941), -- Fade (Rank 5) - CreateSpellCooldown(10942), -- Fade (Rank 6) - - CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) - CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) - CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) - CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) - - CreateSpellCooldown(6346), -- Fear Ward (Rank 1) - - CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) - CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) - CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) - CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) - CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) - CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) - CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) - CreateSpellCooldown(25437), -- Desperate Prayer (Rank 8) - CreateSpellCooldown(48173), -- Desperate Prayer (Rank 9) - - -- Undead - CreateSpellCooldown(2944), -- Devouring Plague(Rank 1) - CreateSpellCooldown(19276), -- Devouring Plague(Rank 2) - CreateSpellCooldown(19277), -- Devouring Plague(Rank 3) - CreateSpellCooldown(19278), -- Devouring Plague(Rank 4) - CreateSpellCooldown(19279), -- Devouring Plague(Rank 5) - CreateSpellCooldown(19280), -- Devouring Plague(Rank 6) + CreateSpellCooldown(15487), -- Silence + + CreateSpellCooldown(586), -- Fade (Rank 1) + CreateSpellCooldown(9578), -- Fade (Rank 2) + CreateSpellCooldown(9579), -- Fade (Rank 3) + CreateSpellCooldown(9592), -- Fade (Rank 4) + CreateSpellCooldown(10941), -- Fade (Rank 5) + CreateSpellCooldown(10942), -- Fade (Rank 6) + + CreateSpellCooldown(8122), -- Psychic Scream (Rank 1) + CreateSpellCooldown(8124), -- Psychic Scream (Rank 2) + CreateSpellCooldown(10888), -- Psychic Scream (Rank 3) + CreateSpellCooldown(10890), -- Psychic Scream (Rank 4) + + CreateSpellCooldown(6346), -- Fear Ward (Rank 1) + + CreateSpellCooldown(13908), -- Desperate Prayer (Rank 1) + CreateSpellCooldown(19236), -- Desperate Prayer (Rank 2) + CreateSpellCooldown(19238), -- Desperate Prayer (Rank 3) + CreateSpellCooldown(19240), -- Desperate Prayer (Rank 4) + CreateSpellCooldown(19241), -- Desperate Prayer (Rank 5) + CreateSpellCooldown(19242), -- Desperate Prayer (Rank 6) + CreateSpellCooldown(19243), -- Desperate Prayer (Rank 7) + CreateSpellCooldown(25437), -- Desperate Prayer (Rank 8) + CreateSpellCooldown(48173), -- Desperate Prayer (Rank 9) + + -- Talents + CreateSpellCooldown(47585), -- Dispersion + CreateSpellCooldown(33206), -- Pain Suppression + CreateSpellCooldown(47788), -- Guardian Spirit + CreateSpellCooldown(64843), -- Divine Hymn + CreateSpellCooldown(64901), -- Hymn of Hope + CreateSpellCooldown(34433), -- Shadowfiend + + CreateSpellCooldown(64044), -- Psychic Horror + }, + ["ROGUE"] = { + -- General + CreateSpellCooldown(1766), -- Kick (Rank 1) + CreateSpellCooldown(2094), -- Blind + CreateSpellCooldown(5277), -- Evasion (Rank 1) + CreateSpellCooldown(1856), -- Vanish (Rank 1) + CreateSpellCooldown(2983), -- Sprint (Rank 1) + CreateSpellCooldown(31224), -- Cloak of Shadows + CreateSpellCooldown(57934), -- Tricks of the Trade + + -- Talents + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry + CreateSpellCooldown(51690), -- Killing Spree + CreateSpellCooldown(14177), -- Cold Blood + CreateSpellCooldown(14185), -- Preparation + CreateSpellCooldown(14183), -- Premeditation + CreateSpellCooldown(36554), -- Shadowstep + CreateSpellCooldown(51713), -- Shadow Dance + + CreateSpellCooldown(51722), -- Dismantle + }, + ["SHAMAN"] = { + -- General + CreateSpellCooldown(57994), -- Wind Shear + CreateSpellCooldown(51514), -- Hex + CreateSpellCooldown(8177), -- Grounding Totem + CreateSpellCooldown(20608), -- Reincarnation + CreateSpellCooldown(2825), -- Bloodlust + CreateSpellCooldown(32182), -- Heroism + CreateSpellCooldown(2062), -- Earth Elemental Totem + CreateSpellCooldown(2894), -- Fire Elemental Totem + + -- Talents + CreateSpellCooldown(16166), -- Elemental Mastery + CreateSpellCooldown(16188), -- Nature's Swiftness + CreateSpellCooldown(30823), -- Shamanistic Rage + CreateSpellCooldown(51533), -- Feral Spirit + CreateSpellCooldown(16190), -- Mana Tide Totem + CreateSpellCooldown(55198), -- Tidal Force + + CreateSpellCooldown(556), -- Astral Recall + CreateSpellCooldown(51490), -- Thunderstorm (Rank 1) + CreateSpellCooldown(59156), -- Thunderstorm (Rank 2) + CreateSpellCooldown(59158), -- Thunderstorm (Rank 3) + CreateSpellCooldown(59159), -- Thunderstorm (Rank 4) + CreateSpellCooldown(1320276), -- Volcano + }, + ["WARLOCK"] = { + -- General + CreateSpellCooldown(1122), -- Inferno + CreateSpellCooldown(6789), -- Death Coil (Rank 1) + CreateSpellCooldown(5484), -- Howl of Terror (Rank 1) + CreateSpellCooldown(29858), -- Soulshatter + CreateSpellCooldown(48020), -- Demonic Circle: Teleport + + -- Talents + CreateSpellCooldown(18708), -- Fel Domination + CreateSpellCooldown(47193), -- Demonic Empowerment + CreateSpellCooldown(47241), -- Metamorphosis + + CreateSpellCooldown(603), -- Curse of Doom (Rank 1) + CreateSpellCooldown(30910), -- Curse of Doom (Rank 2) + CreateSpellCooldown(47867), -- Curse of Doom (Rank 3) + CreateSpellCooldown(18540), -- Ritual of Doom + CreateSpellCooldown(29893), -- Ritual of Souls (Rank 1) + CreateSpellCooldown(58887), -- Ritual of Souls (Rank 2) + CreateSpellCooldown(698), -- Ritual of Summoning + CreateSpellCooldown(7812), -- Sacrifice (Rank 1) + CreateSpellCooldown(19438), -- Sacrifice (Rank 2) + CreateSpellCooldown(19440), -- Sacrifice (Rank 3) + CreateSpellCooldown(19441), -- Sacrifice (Rank 4) + CreateSpellCooldown(19442), -- Sacrifice (Rank 5) + CreateSpellCooldown(19443), -- Sacrifice (Rank 6) + CreateSpellCooldown(27273), -- Sacrifice (Rank 7) + CreateSpellCooldown(47985), -- Sacrifice (Rank 8) + CreateSpellCooldown(47986), -- Sacrifice (Rank 9) + CreateSpellCooldown(17735), -- Suffering (Rank 1) + CreateSpellCooldown(17750), -- Suffering (Rank 2) + CreateSpellCooldown(17751), -- Suffering (Rank 3) + CreateSpellCooldown(17752), -- Suffering (Rank 4) + CreateSpellCooldown(27271), -- Suffering (Rank 5) + CreateSpellCooldown(33701), -- Suffering (Rank 6) + CreateSpellCooldown(47989), -- Suffering (Rank 7) + CreateSpellCooldown(47990), -- Suffering (Rank 8) + }, + ["WARRIOR"] = { + -- General + CreateSpellCooldown(871), -- Shield Wall + CreateSpellCooldown(1719), -- Recklessness + CreateSpellCooldown(20230), -- Retaliation + CreateSpellCooldown(18499), -- Berserker Rage + CreateSpellCooldown(3411), -- Intervene + CreateSpellCooldown(5246), -- Intimidating Shout + CreateSpellCooldown(1161), -- Challenging Shout + CreateSpellCooldown(676), -- Disarm + CreateSpellCooldown(2687), -- Bloodrage + CreateSpellCooldown(6552), -- Pummel + CreateSpellCooldown(20252), -- Intercept + CreateSpellCooldown(64382), -- Shattering Throw + + -- Talents + CreateSpellCooldown(12292), -- Death Wish + CreateSpellCooldown(12328), -- Sweeping Strikes + CreateSpellCooldown(12809), -- Concussion Blow + CreateSpellCooldown(12975), -- Last Stand + CreateSpellCooldown(46924), -- Bladestorm + CreateSpellCooldown(46968), -- Shockwave + CreateSpellCooldown(55694), -- Enraged Regeneration + + CreateSpellCooldown(57755), -- Heroic Throw + CreateSpellCooldown(694), -- Mocking Blow + CreateSpellCooldown(1282056), -- Rallying Cry + CreateSpellCooldown(2565), -- Shield Block } } + AddCooldowns(data) diff --git a/data/shared/blacklist.lua b/data/shared/blacklist.lua index 186c422..eb276e8 100644 --- a/data/shared/blacklist.lua +++ b/data/shared/blacklist.lua @@ -21,32 +21,32 @@ local LE_EXPANSION_MIDNIGHT = _G.LE_EXPANSION_MIDNIGHT or 11 -------------------------------------------------- -- "name": also hide every aura sharing this spell's localized name (all ranks, new food buffs) local general = { - [19705] = "name", -- Well Fed - [430] = "name", -- Drink - [433] = "name", -- Food - + [430] = "name", -- Drink + [433] = "name", -- Food + [19705] = "name", -- Well Fed + -- Lust - [57723] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Exhaustion (Heroism) - [57724] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Sated (Bloodlust) - [80354] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Temporal Displacement (Mage) - [264689] = (EXPANSION >= LE_EXPANSION_SHADOWLANDS), -- Fatigued (Hunter) - [390435] = (EXPANSION >= LE_EXPANSION_DRAGONFLIGHT), -- Exhaustion (Evoker - Fury of the Aspects) + [57723] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Exhaustion (Heroism) + [57724] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Sated (Bloodlust) + [80354] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Temporal Displacement (Mage) + [264689] = (EXPANSION >= LE_EXPANSION_SHADOWLANDS), -- Fatigued (Hunter) + [390435] = (EXPANSION >= LE_EXPANSION_DRAGONFLIGHT), -- Exhaustion (Evoker - Fury of the Aspects) -- DRUID - [1126] = "name", -- Mark of the Wild - [768] = true, -- Cat Form - [5487] = true, -- Bear Form - [24858] = true, -- Moonkin Form - [114282] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Treant Form + [1126] = "name", -- Mark of the Wild + [768] = true, -- Cat Form + [5487] = true, -- Bear Form + [24858] = true, -- Moonkin Form + [114282] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Treant Form -- MAGE - [1459] = "name", -- Arcane Intellect + [1459] = "name", -- Arcane Intellect -- PALADIN - [7294] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Retribution Aura - [19746] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Concentration Aura - [19891] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Resistance Aura - [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura + [7294] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Retribution Aura + [19746] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Concentration Aura + [19891] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Resistance Aura + [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura -- PRIEST [1243] = (EXPANSION < LE_EXPANSION_MISTS_OF_PANDARIA) and "name", -- Power Word: Fortitude (Retail uses 21562) @@ -57,82 +57,80 @@ AddBlacklist(general) -------------------------------------------------- -- Classic -------------------------------------------------- -do - local data = { - -- DRUID - [1126] = true, -- Mark of the Wild (Rank 1) +local classic = { + -- DRUID + [1126] = true, -- Mark of the Wild (Rank 1) - [467] = (EXPANSION < LE_EXPANSION_CATACLYSM), -- Thorns (Rank 1) + [467] = (EXPANSION < LE_EXPANSION_CATACLYSM), -- Thorns (Rank 1) - [24907] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Moonkin Aura + [24907] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Moonkin Aura - -- HUNTER - [19506] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Trueshot Aura + -- HUNTER + [19506] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Trueshot Aura - -- MAGE - [1459] = true, -- Arcane Intellect (Rank 1) + -- MAGE + [1459] = true, -- Arcane Intellect (Rank 1) - -- PALADIN - [19740] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Blessing of Might - - -- ROGUE - [1784] = false, -- Stealth - [2823] = true, -- Deadly Poison - [3408] = true, -- Crippling Poison - - -- Consumables - [673] = true, -- Elixir of Minor Defense - [2367] = true, -- Elixir of Lion's Strength - [2374] = true, -- Elixir of Minor Agility - [2378] = true, -- Elixir of Minor Fortitude - [3160] = true, -- Elixir of Lesser Agility - [3164] = true, -- Elixir of Ogre's Strength - [3166] = true, -- Elixir of Wisdom - [3220] = true, -- Elixir of Defense - [3593] = true, -- Elixir of Fortitude - [6512] = true, -- Elixir of Detect Lesser Invisibility - [7178] = true, -- Elixir of Water Breathing - [7844] = true, -- Elixir of Fire Power - [8212] = true, -- Elixir of Giant Growth - [11319] = true, -- Elixir of Water Walking - [11328] = true, -- Elixir of Agility - [11334] = true, -- Elixir of Greater Agility - [11348] = true, -- Elixir of Superior Defense - [11349] = true, -- Elixir of Greater Defense - [11389] = true, -- Elixir of Detect Undead - [11390] = true, -- Arcane Elixir - [11396] = true, -- Elixir of Greater Intellect - [11403] = true, -- Elixir of Dream Vision - [11405] = true, -- Elixir of the Giants - [11406] = true, -- Elixir of Demonslaying - [11407] = true, -- Elixir of Detect Demon - [11474] = true, -- Elixir of Shadow Power - [12608] = true, -- Catseye Elixir - [17535] = true, -- Elixir of the Sages - [17537] = true, -- Elixir of Brute Force - [17538] = true, -- Elixir of the Mongoose - [17539] = true, -- Greater Arcane Elixir - [21920] = true, -- Elixir of Frost Power - [22807] = false, -- Elixir Greater Water Breathing - [26276] = true, -- Elixir of Greater Firepower - [26677] = true, -- Elixir of Poison Resistance - - [17624] = false, -- Flask of Petrification - [17626] = true, -- Flask of the Titans - [17627] = true, -- Flask of Distilled Wisdom - [17628] = true, -- Flask od Supreme Power - - -- Costumes - [8220] = true, -- Flip Out! - [8222] = true, -- Yaaarrrr - [16739] = true, -- Orb of Deception + -- PALADIN + [19740] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Blessing of Might + + -- ROGUE + [1784] = false, -- Stealth + [2823] = true, -- Deadly Poison + [3408] = true, -- Crippling Poison + + -- Consumables + [673] = true, -- Elixir of Minor Defense + [2367] = true, -- Elixir of Lion's Strength + [2374] = true, -- Elixir of Minor Agility + [2378] = true, -- Elixir of Minor Fortitude + [3160] = true, -- Elixir of Lesser Agility + [3164] = true, -- Elixir of Ogre's Strength + [3166] = true, -- Elixir of Wisdom + [3220] = true, -- Elixir of Defense + [3593] = true, -- Elixir of Fortitude + [6512] = true, -- Elixir of Detect Lesser Invisibility + [7178] = true, -- Elixir of Water Breathing + [7844] = true, -- Elixir of Fire Power + [8212] = true, -- Elixir of Giant Growth + [11319] = true, -- Elixir of Water Walking + [11328] = true, -- Elixir of Agility + [11334] = true, -- Elixir of Greater Agility + [11348] = true, -- Elixir of Superior Defense + [11349] = true, -- Elixir of Greater Defense + [11389] = true, -- Elixir of Detect Undead + [11390] = true, -- Arcane Elixir + [11396] = true, -- Elixir of Greater Intellect + [11403] = true, -- Elixir of Dream Vision + [11405] = true, -- Elixir of the Giants + [11406] = true, -- Elixir of Demonslaying + [11407] = true, -- Elixir of Detect Demon + [11474] = true, -- Elixir of Shadow Power + [12608] = true, -- Catseye Elixir + [17535] = true, -- Elixir of the Sages + [17537] = true, -- Elixir of Brute Force + [17538] = true, -- Elixir of the Mongoose + [17539] = true, -- Greater Arcane Elixir + [21920] = true, -- Elixir of Frost Power + [22807] = false, -- Elixir Greater Water Breathing + [26276] = true, -- Elixir of Greater Firepower + [26677] = true, -- Elixir of Poison Resistance + + [17624] = false, -- Flask of Petrification + [17626] = true, -- Flask of the Titans + [17627] = true, -- Flask of Distilled Wisdom + [17628] = true, -- Flask od Supreme Power + + -- Costumes + [8220] = true, -- Flip Out! + [8222] = true, -- Yaaarrrr + [16739] = true, -- Orb of Deception + + -- Items + [17619] = true, -- Alchemist Stone +} - -- Items - [17619] = true, -- Alchemist Stone - } - - AddBlacklist(data) -end +AddBlacklist(classic) -------------------------------------------------- -- The Burning Crusade @@ -160,6 +158,7 @@ if EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING then -- World Buffs [57940] = true, -- Essence of Wintergrasp } + AddBlacklist(data) end @@ -172,17 +171,18 @@ if EXPANSION >= LE_EXPANSION_CATACLYSM then [108503] = true, -- Grimoire of Sacrifice -- Items - [93337] = true, -- Champion of Ramkahen - [93795] = true, -- Stormwind Champion - [93806] = true, -- Darnassus Champion - [93825] = true, -- Orgrimmar Champion - [93828] = true, -- Silvermoon Champion - [97341] = true, -- Guild Champion + [93337] = true, -- Champion of Ramkahen + [93795] = true, -- Stormwind Champion + [93806] = true, -- Darnassus Champion + [93825] = true, -- Orgrimmar Champion + [93828] = true, -- Silvermoon Champion + [97341] = true, -- Guild Champion -- Customes - [74589] = true, -- Identity Crisis (Faded Wizard Hat) - [96312] = true, -- Kalytha's Haunted Locket + [74589] = true, -- Identity Crisis (Faded Wizard Hat) + [96312] = true, -- Kalytha's Haunted Locket } + AddBlacklist(data) end @@ -224,6 +224,7 @@ if EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA then [114800] = true, -- Polyformic Acid Potion [110880] = true, -- 1st Place } + AddBlacklist(data) end @@ -240,6 +241,7 @@ if EXPANSION >= LE_EXPANSION_WARLORDS_OF_DRAENOR then -- ??? [182422] = true, -- Training Gear } + AddBlacklist(data) end @@ -264,6 +266,7 @@ if EXPANSION >= LE_EXPANSION_LEGION then -- Mythic+ [206151] = true, -- Challenger's Burden } + AddBlacklist(data) end @@ -317,6 +320,7 @@ if EXPANSION >= LE_EXPANSION_BATTLE_FOR_AZEROTH then [312456] = true, -- Elite Extermination [310720] = true, -- Elite Extermination } + AddBlacklist(data) end @@ -334,6 +338,7 @@ if EXPANSION >= LE_EXPANSION_SHADOWLANDS then [368510] = true, -- So'leash's Secret Technique [368512] = true, -- So'leash's Secret Technique } + AddBlacklist(data) end @@ -343,23 +348,23 @@ end if EXPANSION >= LE_EXPANSION_DRAGONFLIGHT then local data = { -- DEATHKNIGHT - + -- MONK [166646] = true, -- Windwalking -- PALADIN - [465] = true, -- Devotion Aura + [465] = true, -- Devotion Aura [32223] = true, -- Crusader Aura -- PRIEST - [21562] = true, -- Power Word: Fortitude + [21562] = true, -- Power Word: Fortitude [280398] = true, -- Sins of the Many -- SHAMAN [395197] = true, -- Mana Spring -- WARRIOR - [6673] = true, -- Battle Shout + [6673] = true, -- Battle Shout [202602] = true, -- Into the Fray -- Dragons Island diff --git a/data/shared/cooldowns.lua b/data/shared/cooldowns.lua index a41017b..40bb832 100644 --- a/data/shared/cooldowns.lua +++ b/data/shared/cooldowns.lua @@ -20,23 +20,23 @@ local LE_EXPANSION_MIDNIGHT = _G.LE_EXPANSION_MIDNIGHT or 11 local racials = { -- Horde - CreateSpellCooldown(7744), -- Will of the Forsaken (Undead) - CreateSpellCooldown(20549), -- War Stomp (Tauren) - CreateSpellCooldown(20572), -- Blood Fury (Orc) - CreateSpellCooldown(26297), -- Berserking (Troll) - CreateSpellCooldown(28730, expansion >= LE_EXPANSION_BURNING_CRUSADE), -- Arcane Torrent (Blood Elf) - CreateSpellCooldown(255654, expansion >= LE_EXPANSION_LEGION), -- Bull Rush (Highmountain Tauren) + CreateSpellCooldown(7744), -- Will of the Forsaken (Undead) + CreateSpellCooldown(20549), -- War Stomp (Tauren) + CreateSpellCooldown(20572), -- Blood Fury (Orc) + CreateSpellCooldown(26297), -- Berserking (Troll) + CreateSpellCooldown(28730, expansion >= LE_EXPANSION_BURNING_CRUSADE), -- Arcane Torrent (Blood Elf) + CreateSpellCooldown(255654, expansion >= LE_EXPANSION_LEGION), -- Bull Rush (Highmountain Tauren) -- Alliance - CreateSpellCooldown(20594), -- Stoneform (Dwarf) - CreateSpellCooldown(265221, expansion >= LE_EXPANSION_BATTLE_FOR_AZEROTH), -- Fireblood Fury (Dark Iron Dwarf) + CreateSpellCooldown(20594), -- Stoneform (Dwarf) + CreateSpellCooldown(265221, expansion >= LE_EXPANSION_BATTLE_FOR_AZEROTH), -- Fireblood Fury (Dark Iron Dwarf) } local gear = { - CreateSlotCooldown(2), -- Neck - CreateSlotCooldown(6), -- Waist - CreateSlotCooldown(13), -- Trinket 1 - CreateSlotCooldown(14), -- Trinket 2 + CreateSlotCooldown(2), -- Neck + CreateSlotCooldown(6), -- Waist + CreateSlotCooldown(13), -- Trinket 1 + CreateSlotCooldown(14), -- Trinket 2 } -- racials and gear slots go after the player class cooldowns From 5ea455d528a31e3f81e95979e15a87b42693629f Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Thu, 29 Oct 2026 08:38:10 -0300 Subject: [PATCH 17/19] update spell tables #2 --- CLAUDE.md | 2 + data/Camelot/blacklist.lua | 130 ++++++++++++- data/Camelot/cooldowns.lua | 2 + data/Cata/blacklist.lua | 56 ++++-- data/Cata/cooldowns.lua | 76 ++++++++ data/Mists/cooldowns.lua | 11 ++ data/Mists/spells.lua | 9 +- data/Standard/cooldowns.lua | 3 + data/TBC/blacklist.lua | 47 +++++ data/TBC/cooldowns.lua | 3 + data/Vanilla/blacklist.lua | 3 + data/Wrath/blacklist.lua | 11 ++ data/Wrath/cooldowns.lua | 4 + docs/audit-plan.md | 373 ++++++++++++++++++++++++++++++++++++ docs/references.md | 20 ++ elements/cooldowns.lua | 3 +- 16 files changed, 735 insertions(+), 18 deletions(-) create mode 100644 docs/audit-plan.md diff --git a/CLAUDE.md b/CLAUDE.md index 23cc90c..45fd7d9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,6 +51,8 @@ architecture win when they conflict. - Blizzard `wow-ui-source` (local clone in `../refs`, read-only) is the API authority. Use targeted searches, not broad exploration. Map: [docs/references.md](docs/references.md). +- `../spellbook` (separate tool) caches per-client spell DB2 tables and checks `data/` spell IDs. + Use it to verify IDs instead of memory: [docs/references.md](docs/references.md#spellbook-spell-db2-data-and-checks). ## Git & GitHub diff --git a/data/Camelot/blacklist.lua b/data/Camelot/blacklist.lua index ab262a0..5a3ebbb 100644 --- a/data/Camelot/blacklist.lua +++ b/data/Camelot/blacklist.lua @@ -5,6 +5,134 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- -- Classic Forever -------------------------------------------------- -local data = {} +local data = { + -- DRUID + [5232] = true, -- Mark of the Wild (Rank 2) + [6756] = true, -- Mark of the Wild (Rank 3) + [5234] = true, -- Mark of the Wild (Rank 4) + [8907] = true, -- Mark of the Wild (Rank 5) + [9884] = true, -- Mark of the Wild (Rank 6) + [9885] = true, -- Mark of the Wild (Rank 7) + + [782] = true, -- Thorns (Rank 2) + [1075] = true, -- Thorns (Rank 3) + [8914] = true, -- Thorns (Rank 4) + [9756] = true, -- Thorns (Rank 5) + [9910] = true, -- Thorns (Rank 6) + + [21849] = true, -- Gift of the Wild (Rank 1) + [21850] = true, -- Gift of the Wild (Rank 2) + + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [9634] = true, -- Dire Bear Form + + -- HUNTER + [13165] = "name", -- Aspect of the Hawk (Rank 1 - 7) + [13163] = true, -- Aspect of the Monkey + + -- MAGE + [1460] = true, -- Arcane Intellect (Rank 2) + [1461] = true, -- Arcane Intellect (Rank 3) + [10156] = true, -- Arcane Intellect (Rank 4) + [10157] = true, -- Arcane Intellect (Rank 5) + + [23028] = true, -- Arcane Brilliance + + [168] = true, -- Frost Armor (Rank 1) + [7300] = true, -- Frost Armor (Rank 2) + [7301] = true, -- Frost Armor (Rank 3) + + [7302] = true, -- Ice Armor (Rank 1) + [7320] = true, -- Ice Armor (Rank 2) + [10219] = true, -- Ice Armor (Rank 3) + [10220] = true, -- Ice Armor (Rank 4) + + [6117] = true, -- Mage Armor (Rank 1) + [22782] = true, -- Mage Armor (Rank 2) + [22783] = true, -- Mage Armor (Rank 3) + + -- PALADIN + [465] = "name", -- Devotion Aura (Rank 1 - 7) + + [19899] = true, -- Fire Resistance Aura (Rank 2) + [19900] = true, -- Fire Resistance Aura (Rank 3) + + [25780] = true, -- Righteous Fury + [20217] = true, -- Blessing of Kings + [19742] = "name", -- Blessing of Wisdom (Rank 1 - 6) + [25782] = true, -- Greater Blessing of Might (Rank 1) + [25916] = true, -- Greater Blessing of Might (Rank 2) + [25894] = true, -- Greater Blessing of Wisdom (Rank 1) + [25918] = true, -- Greater Blessing of Wisdom (Rank 2) + [25898] = true, -- Greater Blessing of Kings + [21084] = "name", -- Seal of Righteousness (Rank 1 - 8) + + -- PRIEST + [21562] = true, -- Prayer of Fortitude (Rank 1) + [21564] = true, -- Prayer of Fortitude (Rank 2) + + [976] = true, -- Shadow Protection (Rank 1) + [10957] = true, -- Shadow Protection (Rank 2) + + [27683] = true, -- Prayer of Shadow Protection + + [588] = "name", -- Inner Fire (Rank 1 - 6) + [14819] = true, -- Divine Spirit + [15473] = true, -- Shadowform + [27681] = true, -- Prayer of Spirit + + -- SHAMAN + [324] = "name", -- Lightning Shield (Rank 1 - 7) + + -- WARRIOR + [71] = true, -- Defensive Stance + [2457] = true, -- Battle Stance + [2458] = true, -- Berserker Stance + [6673] = "name", -- Battle Shout (Rank 1 - 7) + + -- WARLOCK + [687] = true, -- Demon Skin (Rank 1) + [696] = true, -- Demon Skin (Rank 2) + + [6307] = true, -- Blood Pact (Rank 1) + [7804] = true, -- Blood Pact (Rank 2) + [7805] = true, -- Blood Pact (Rank 3) + [11766] = true, -- Blood Pact (Rank 4) + [11767] = true, -- Blood Pact (Rank 5) + + [706] = "name", -- Demon Armor (Rank 1 - 5) + + -- Scrolls + [8091] = true, -- Armor (Scroll of Protection) + [8094] = true, -- Armor (Scroll of Protection II) + [8095] = true, -- Armor (Scroll of Protection III) + [12175] = true, -- Armor (Scroll of Protection IV) + + [8096] = true, -- Intellect (Scroll of Intellect) + [8097] = true, -- Intellect (Scroll of Intellect II) + [8098] = true, -- Intellect (Scroll of Intellect III) + [12176] = true, -- Intellect (Scroll of Intellect IV) + + [8099] = true, -- Stamina (Scroll of Stamina) + [8100] = true, -- Stamina (Scroll of Stamina II) + [8101] = true, -- Stamina (Scroll of Stamina III) + [12178] = true, -- Stamina (Scroll of Stamina IV) + + [8112] = true, -- Spirit Magic (Scroll of Spirit) + [8113] = true, -- Spirit Magic (Scroll of Spirit II) + [8114] = true, -- Spirit Magic (Scroll of Spirit III) + [12177] = true, -- Spirit Magic (Scroll of Spirit IV) + + [8115] = true, -- Agility (Scroll of Agility) + [8116] = true, -- Agility (Scroll of Agility II) + [8117] = true, -- Agility (Scroll of Agility III) + [12174] = true, -- Agility (Scroll of Agility IV) + + [8118] = true, -- Strength (Scroll of Strength) + [8119] = true, -- Strength (Scroll of Strength II) + [8120] = true, -- Strength (Scroll of Strength III) + [12179] = true, -- Strength (Scroll of Strength IV) +} AddBlacklist(data) diff --git a/data/Camelot/cooldowns.lua b/data/Camelot/cooldowns.lua index ea13ca6..2f48447 100644 --- a/data/Camelot/cooldowns.lua +++ b/data/Camelot/cooldowns.lua @@ -63,6 +63,7 @@ local data = { CreateSpellCooldown(16190), -- Mana Tide Totem CreateSpellCooldown(16188), -- Nature's Swiftness CreateSpellCooldown(425336), -- Rage of the Farseer + CreateSpellCooldown(17364), -- Stormstrike }, ["WARLOCK"] = { CreateSpellCooldown(18288), -- Amplify Curse @@ -77,6 +78,7 @@ local data = { CreateSpellCooldown(12975), -- Last Stand CreateSpellCooldown(403228), -- Meathook CreateSpellCooldown(426490), -- Rallying Cry + CreateSpellCooldown(12292), -- Sweeping Strikes } } diff --git a/data/Cata/blacklist.lua b/data/Cata/blacklist.lua index 7498969..9b7f4a2 100644 --- a/data/Cata/blacklist.lua +++ b/data/Cata/blacklist.lua @@ -7,36 +7,62 @@ local AddBlacklist = ns.data.AddBlacklist -------------------------------------------------- local data = { -- DEATHKNIGHT - [55610] = true, -- Improved Icy Talons + [55610] = true, -- Improved Icy Talons + [48265] = true, -- Unholy Presence + [57330] = "name", -- Horn of Winter + + -- DRUID + [783] = true, -- Travel Form + [1066] = true, -- Aquatic Form + [33943] = true, -- Flight Form + [40120] = true, -- Swift Flight Form -- HUNTER - [77769] = true, -- Trap Launcher + [77769] = true, -- Trap Launcher + [13165] = "name", -- Aspect of the Hawk -- MAGE - [61316] = true, -- Dalaran Brilliance + [61316] = true, -- Dalaran Brilliance + [6117] = "name", -- Mage Armor + [30482] = "name", -- Molten Armor -- PALADIN - [79102] = true, -- Blessing of Might - [20165] = true, -- Seal of Insight + [79102] = true, -- Blessing of Might + [20165] = true, -- Seal of Insight + [465] = "name", -- Devotion Aura + [25780] = true, -- Righteous Fury + [20217] = true, -- Blessing of Kings -- PRIEST - [588] = true, -- Inner Fire - [49868] = true, -- Mind Quickening - [79107] = true, -- Shadow Protection - [73413] = true, -- Inner Will + [588] = true, -- Inner Fire + [49868] = true, -- Mind Quickening + [79107] = true, -- Shadow Protection + [73413] = true, -- Inner Will + [15473] = true, -- Shadowform -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath - [77747] = true, -- Totemic Wrath + [30809] = true, -- Unleashed Rage + [51470] = true, -- Elemental Oath + [77747] = true, -- Totemic Wrath + [324] = "name", -- Lightning Shield -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) + [687] = true, -- Demon Skin (Rank 1) + + [6307] = true, -- Blood Pact (Rank 1) + + [28176] = "name", -- Fel Armor + + -- WARRIOR + [2457] = true, -- Battle Stance + [71] = true, -- Defensive Stance + [2458] = true, -- Berserker Stance - [6307] = true, -- Blood Pact (Rank 1) + [469] = "name", -- Commanding Shout + [6673] = "name", -- Battle Shout -- Consumables - [17629] = true, -- Flask of Chromatic Resistance + [17629] = true, -- Flask of Chromatic Resistance } AddBlacklist(data) diff --git a/data/Cata/cooldowns.lua b/data/Cata/cooldowns.lua index 4fb6f86..4cad85c 100644 --- a/data/Cata/cooldowns.lua +++ b/data/Cata/cooldowns.lua @@ -20,11 +20,51 @@ local data = { -- Blood CreateSpellCooldown(55233), -- Vampiric Blood CreateSpellCooldown(48982), -- Rune Tap + CreateSpellCooldown(49028), -- Dancing Rune Weapon -- Frost + CreateSpellCooldown(49203), -- Hungering Cold -- Unholy CreateSpellCooldown(49206), -- Summon Gargoyle + CreateSpellCooldown(49016), -- Unholy Frenzy + CreateSpellCooldown(51052), -- Anti-Magic Zone + }, + ["DRUID"] = { + CreateSpellCooldown(17116), -- Nature's Swiftness + CreateSpellCooldown(33831), -- Force of Nature + CreateSpellCooldown(48505), -- Starfall + CreateSpellCooldown(50334), -- Berserk + CreateSpellCooldown(61336), -- Survival Instincts + }, + ["HUNTER"] = { + CreateSpellCooldown(19386), -- Wyvern Sting + CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(23989), -- Readiness + CreateSpellCooldown(34490), -- Silencing Shot + + -- Pet + CreateSpellCooldown(23145), -- Dive + CreateSpellCooldown(53401), -- Rabid + CreateSpellCooldown(53426), -- Lick Your Wounds + CreateSpellCooldown(53434), -- Call of the Wild + CreateSpellCooldown(53477), -- Taunt + CreateSpellCooldown(53478), -- Last Stand + CreateSpellCooldown(53480), -- Roar of Sacrifice + CreateSpellCooldown(53490), -- Bullheaded + CreateSpellCooldown(53517), -- Roar of Recovery + CreateSpellCooldown(55709), -- Heart of the Phoenix + CreateSpellCooldown(61684), -- Dash + }, + ["MAGE"] = { + CreateSpellCooldown(11129), -- Combustion + CreateSpellCooldown(11958), -- Cold Snap + CreateSpellCooldown(12042), -- Arcane Power + CreateSpellCooldown(12043), -- Presence of Mind + CreateSpellCooldown(12472), -- Icy Veins + CreateSpellCooldown(31687), -- Summon Water Elemental + CreateSpellCooldown(44572), -- Deep Freeze }, ["PALADIN"] = { -- All @@ -44,9 +84,11 @@ local data = { CreateSpellCooldown(31850), -- Ardent Defender CreateSpellCooldown(70940), -- Divine Guardian CreateSpellCooldown(86669), -- Guardian of Ancient Kings + CreateSpellCooldown(64205), -- Divine Sacrifice -- Retribution CreateSpellCooldown(31884), -- Avenging Wrath + CreateSpellCooldown(20066), -- Repentance }, ["PRIEST"] = { -- All @@ -56,6 +98,7 @@ local data = { CreateSpellCooldown(34433), -- Shadowfiend CreateSpellCooldown(64901), -- Hymn of Hope CreateSpellCooldown(73325), -- Leap of Faith + CreateSpellCooldown(19236), -- Desperate Prayer -- Discipline CreateSpellCooldown(10060), -- Power Infusion @@ -66,11 +109,44 @@ local data = { -- Holy CreateSpellCooldown(47788), -- Guardian Spirit CreateSpellCooldown(64843), -- Divine Hymn + CreateSpellCooldown(724), -- Lightwell -- Shadow CreateSpellCooldown(15286), -- Vampiric Embrace CreateSpellCooldown(15487), -- Silence CreateSpellCooldown(47585), -- Dispersion + CreateSpellCooldown(64044), -- Psychic Horror + }, + ["ROGUE"] = { + CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry + CreateSpellCooldown(14177), -- Cold Blood + CreateSpellCooldown(14183), -- Premeditation + CreateSpellCooldown(14185), -- Preparation + CreateSpellCooldown(36554), -- Shadowstep + CreateSpellCooldown(51690), -- Killing Spree + CreateSpellCooldown(51713), -- Shadow Dance + }, + ["SHAMAN"] = { + CreateSpellCooldown(16166), -- Elemental Mastery + CreateSpellCooldown(16188), -- Nature's Swiftness + CreateSpellCooldown(16190), -- Mana Tide Totem + CreateSpellCooldown(30823), -- Shamanistic Rage + CreateSpellCooldown(51490), -- Thunderstorm + CreateSpellCooldown(51533), -- Feral Spirit + CreateSpellCooldown(55198), -- Tidal Force + }, + ["WARLOCK"] = { + CreateSpellCooldown(18708), -- Fel Domination + CreateSpellCooldown(47193), -- Demonic Empowerment + }, + ["WARRIOR"] = { + CreateSpellCooldown(12292), -- Death Wish + CreateSpellCooldown(12328), -- Sweeping Strikes + CreateSpellCooldown(12809), -- Concussion Blow + CreateSpellCooldown(12975), -- Last Stand + CreateSpellCooldown(46924), -- Bladestorm + CreateSpellCooldown(46968), -- Shockwave } } diff --git a/data/Mists/cooldowns.lua b/data/Mists/cooldowns.lua index ba36c0b..eff9346 100644 --- a/data/Mists/cooldowns.lua +++ b/data/Mists/cooldowns.lua @@ -33,6 +33,7 @@ local data = { -- Guardian / Feral CreateSpellCooldown(61336), -- Survival Instincts + CreateSpellCooldown(22842), -- Frenzied Regeneration CreateSpellCooldown(102795), -- Bear Hug CreateSpellCooldown(106922), -- Might of Ursoc CreateSpellCooldown(106952), -- Berkserk @@ -57,6 +58,7 @@ local data = { CreateSpellCooldown(48792), -- Icebound Fortitude CreateSpellCooldown(48707), -- Anti-Magic Shell CreateSpellCooldown(49028), -- Dancing Rune Weapon + CreateSpellCooldown(48982), -- Rune Tap CreateSpellCooldown(49039), -- Lichborne CreateSpellCooldown(55233), -- Vampiric Blood CreateSpellCooldown(42650), -- Army of the Dead @@ -94,6 +96,7 @@ local data = { CreateSpellCooldown(147362), -- Counter Shot CreateSpellCooldown(3045), -- Rapid Fire CreateSpellCooldown(19574), -- Bestial Wrath + CreateSpellCooldown(34026), -- Kill Command -- Talents CreateSpellCooldown(34490), -- Silencing Shot @@ -109,8 +112,10 @@ local data = { CreateSpellCooldown(24604), -- Furious Howl CreateSpellCooldown(26064), -- Shell Shield CreateSpellCooldown(50245), -- Pin + CreateSpellCooldown(50285), -- Dust Cloud CreateSpellCooldown(50318), -- Serenity Dust CreateSpellCooldown(50479), -- Nether Shock + CreateSpellCooldown(50518), -- Ravage CreateSpellCooldown(50519), -- Sonic Blast CreateSpellCooldown(50541), -- Clench CreateSpellCooldown(51753), -- Camouflage @@ -313,6 +318,7 @@ local data = { CreateSpellCooldown(121471), -- Shadow Blades CreateSpellCooldown(114018), -- Shroud of Concealment CreateSpellCooldown(57934), -- Tricks of the Trade + CreateSpellCooldown(14183), -- Premeditation -- Talents CreateSpellCooldown(14185), -- Preparation @@ -323,6 +329,7 @@ local data = { -- Combat CreateSpellCooldown(13750), -- Adrenaline Rush + CreateSpellCooldown(13877), -- Blade Flurry CreateSpellCooldown(51690), -- Killing Spree -- Subtlety @@ -337,6 +344,7 @@ local data = { ["SHAMAN"] = { -- General CreateSpellCooldown(8143), -- Tremor Totem + CreateSpellCooldown(8177), -- Grounding Totem CreateSpellCooldown(32182), -- Heroism CreateSpellCooldown(79206), -- Spiritwalker's Grace CreateSpellCooldown(108269), -- Capacitor Totem @@ -423,6 +431,9 @@ local data = { CreateSpellCooldown(6544), -- Heroic Leap CreateSpellCooldown(1160), -- Demoralizing Shout CreateSpellCooldown(676), -- Disarm + CreateSpellCooldown(2565), -- Shield Block + CreateSpellCooldown(12328), -- Sweeping Strikes + CreateSpellCooldown(57755), -- Heroic Throw -- Talents CreateSpellCooldown(12292), -- Bloodbath diff --git a/data/Mists/spells.lua b/data/Mists/spells.lua index 98a5329..dc58d68 100644 --- a/data/Mists/spells.lua +++ b/data/Mists/spells.lua @@ -7,8 +7,15 @@ local AddSpells = ns.data.AddSpells -- Mists of Pandaria Classic -------------------------------------------------- local data = { + ["PALADIN"] = { + -- Holy + [82327] = CreateSpellPriority(5), -- Holy Radiance + [86273] = CreateSpellPriority(5), -- Illuminated Healing + }, ["PRIEST"] = { - + -- Discipline + [81661] = CreateSpellPriority(8), -- Evangelism + [59889] = CreateSpellPriority(7), -- Borrowed Time }, ["MONK"] = { [115080] = CreateSpellPriority(false), -- Touch of Death diff --git a/data/Standard/cooldowns.lua b/data/Standard/cooldowns.lua index 4e7c726..dc1ac4e 100644 --- a/data/Standard/cooldowns.lua +++ b/data/Standard/cooldowns.lua @@ -194,6 +194,7 @@ local data = { CreateSpellCooldown(187650), -- Freezing Trap CreateSpellCooldown(109248), -- Binding Shot CreateSpellCooldown(19577), -- Intimidation + CreateSpellCooldown(34477), -- Misdirection -- Beast Mastery CreateSpellCooldown(19574), -- Bestial Wrath @@ -250,6 +251,7 @@ local data = { CreateSpellCooldown(12472), -- Icy Veins CreateSpellCooldown(84714), -- Frozen Orb CreateSpellCooldown(235219), -- Cold Snap + CreateSpellCooldown(31687), -- Summon Water Elemental CreateSpellCooldown(235870), -- Alexstrasza's Fury CreateSpellCooldown(214634), -- Ebonbolt @@ -289,6 +291,7 @@ local data = { CreateSpellCooldown(119582, false), -- Purifiying Brew CreateSpellCooldown(132578), -- Invoke Niuzao, the Black Ox CreateSpellCooldown(115399), -- Black Ox Brew + CreateSpellCooldown(115315), -- Summon Black Ox Statue CreateSpellCooldown(322507), -- Celestial Brew CreateSpellCooldown(115176), -- Zen Meditation CreateSpellCooldown(325153), -- Exploding Keg diff --git a/data/TBC/blacklist.lua b/data/TBC/blacklist.lua index 6ac1a5a..e72a9f1 100644 --- a/data/TBC/blacklist.lua +++ b/data/TBC/blacklist.lua @@ -32,6 +32,8 @@ local data = { -- HUNTER [13165] = "name", -- Aspect of the Hawk [13163] = true, -- Aspect of the Monkey + [34074] = true, -- Aspect of the Viper + [24529] = true, -- Spirit Bond -- MAGE [1460] = true, -- Arcane Intellect (Rank 2) @@ -55,6 +57,8 @@ local data = { [25782] = "name", -- Greater Blessing of Might [25894] = "name", -- Greater Blessing of Wisdom [25898] = true, -- Greater Blessing of Kings + [19899] = true, -- Fire Resistance Aura (Rank 2) + [19900] = true, -- Fire Resistance Aura (Rank 3) [21084] = "name", -- Seal of Righteousness -- PRIEST @@ -66,7 +70,17 @@ local data = { [10938] = true, -- Power Word: Fortitude (Rank 6) [25389] = true, -- Power Word: Fortitude (Rank 7) + [21562] = true, -- Prayer of Fortitude (Rank 1) + [21564] = true, -- Prayer of Fortitude (Rank 2) + + [976] = true, -- Shadow Protection (Rank 1) + [10957] = true, -- Shadow Protection (Rank 2) + + [27683] = true, -- Prayer of Shadow Protection + [25431] = true, -- Inner Fire (Rank 7) + [14819] = true, -- Divine Spirit + [27681] = true, -- Prayer of Spirit (Rank 1) [32999] = true, -- Prayer of Spirit (Rank 2) [588] = "name", -- Inner Fire [15473] = true, -- Shadowform @@ -100,17 +114,50 @@ local data = { [17629] = true, -- Flask of Chromatic Resistance -- Scrolls + [8091] = true, -- Armor (Scroll of Protection) + [8094] = true, -- Armor (Scroll of Protection II) + [8095] = true, -- Armor (Scroll of Protection III) + [12175] = true, -- Armor (Scroll of Protection IV) [33079] = true, -- Armor (Scroll of Protection V) + [8096] = true, -- Intellect (Scroll of Intellect) + [8097] = true, -- Intellect (Scroll of Intellect II) + [8098] = true, -- Intellect (Scroll of Intellect III) + [12176] = true, -- Intellect (Scroll of Intellect IV) [33078] = true, -- Intellect (Scroll of Intellect V) + [8099] = true, -- Stamina (Scroll of Stamina) + [8100] = true, -- Stamina (Scroll of Stamina II) + [8101] = true, -- Stamina (Scroll of Stamina III) + [12178] = true, -- Stamina (Scroll of Stamina IV) [33081] = true, -- Stamina (Scroll of Stamina V) + [8112] = true, -- Spirit Magic (Scroll of Spirit) + [8113] = true, -- Spirit Magic (Scroll of Spirit II) + [8114] = true, -- Spirit Magic (Scroll of Spirit III) + [12177] = true, -- Spirit Magic (Scroll of Spirit IV) [33080] = true, -- Spirit Magic (Scroll of Spirit V) + [8115] = true, -- Agility (Scroll of Agility) + [8116] = true, -- Agility (Scroll of Agility II) + [8117] = true, -- Agility (Scroll of Agility III) + [12174] = true, -- Agility (Scroll of Agility IV) [33077] = true, -- Agility (Scroll of Agility V) + [8118] = true, -- Strength (Scroll of Strength) + [8119] = true, -- Strength (Scroll of Strength II) + [8120] = true, -- Strength (Scroll of Strength III) + [12179] = true, -- Strength (Scroll of Strength IV) [33082] = true, -- Strength (Scroll of Strength V) + + -- Reputation + [17670] = true, -- Agent Dawn Commission + + -- Christimas + [26218] = true, -- Mistletoe + + -- Hallowen + [24755] = true, -- Tricked or Treated } AddBlacklist(data) diff --git a/data/TBC/cooldowns.lua b/data/TBC/cooldowns.lua index 18ab832..2ffc843 100644 --- a/data/TBC/cooldowns.lua +++ b/data/TBC/cooldowns.lua @@ -190,6 +190,7 @@ local data = { CreateSpellCooldown(2894), -- Fire Elemental Totem -- Talents + CreateSpellCooldown(17364), -- Stormstrike CreateSpellCooldown(16166), -- Elemental Mastery CreateSpellCooldown(16188), -- Nature's Swiftness CreateSpellCooldown(30823), -- Shamanistic Rage @@ -234,6 +235,8 @@ local data = { CreateSpellCooldown(2687), -- Bloodrage CreateSpellCooldown(6552), -- Pummel (Rank 1) CreateSpellCooldown(20252), -- Intercept (Rank 1) + CreateSpellCooldown(1671), -- Shield Bash (Rank 2) + CreateSpellCooldown(6178), -- Charge (Rank 2) -- Talents CreateSpellCooldown(12292), -- Death Wish diff --git a/data/Vanilla/blacklist.lua b/data/Vanilla/blacklist.lua index 00e22b9..3893ea6 100644 --- a/data/Vanilla/blacklist.lua +++ b/data/Vanilla/blacklist.lua @@ -147,6 +147,9 @@ local data = { [8120] = true, -- Strength (Scroll of Strength III) [12179] = true, -- Strength (Scroll of Strength IV) + -- Reputation + [17670] = true, -- Agent Dawn Commission + -- Christimas [26218] = true, -- Mistletoe diff --git a/data/Wrath/blacklist.lua b/data/Wrath/blacklist.lua index 2979846..55a3979 100644 --- a/data/Wrath/blacklist.lua +++ b/data/Wrath/blacklist.lua @@ -53,6 +53,7 @@ local data = { [61316] = true, -- Dalaran Brilliance [23028] = "name", -- Arcane Brilliance + [168] = "name", -- Frost Armor [7302] = "name", -- Ice Armor [6117] = "name", -- Mage Armor [30482] = "name", -- Molten Armor @@ -83,6 +84,7 @@ local data = { [588] = "name", -- Inner Fire [48040] = true, -- Inner Fire (Rank 8) [48168] = true, -- Inner Fire (Rank 9) + [32999] = true, -- Prayer of Spirit (Rank 2) [48074] = true, -- Prayer of Spirit (Rank 3) [15473] = true, -- Shadowform [23723] = true, -- Mind Quickening @@ -103,6 +105,7 @@ local data = { [11766] = true, -- Blood Pact (Rank 4) [11767] = true, -- Blood Pact (Rank 5) [27267] = true, -- Blood Pact (Rank 6) + [27268] = true, -- Blood Pact (Rank 6) [47982] = true, -- Blood Pact (Rank 7) [706] = "name", -- Demon Armor @@ -115,6 +118,14 @@ local data = { [469] = "name", -- Commanding Shout [6673] = "name", -- Battle Shout + + -- Scrolls + [33079] = true, -- Armor (Scroll of Protection V) + [33078] = true, -- Intellect (Scroll of Intellect V) + [33081] = true, -- Stamina (Scroll of Stamina V) + [33080] = true, -- Spirit Magic (Scroll of Spirit V) + [33077] = true, -- Agility (Scroll of Agility V) + [33082] = true, -- Strength (Scroll of Strength V) } AddBlacklist(data) diff --git a/data/Wrath/cooldowns.lua b/data/Wrath/cooldowns.lua index 0253714..38d591d 100644 --- a/data/Wrath/cooldowns.lua +++ b/data/Wrath/cooldowns.lua @@ -84,6 +84,7 @@ local data = { CreateSpellCooldown(1499), -- Freezing Trap (Rank 1) CreateSpellCooldown(34477), -- Misdirection CreateSpellCooldown(53271), -- Master's Call + CreateSpellCooldown(19801), -- Tranquilizing Shot -- Talents CreateSpellCooldown(19574), -- Bestial Wrath @@ -213,6 +214,9 @@ local data = { CreateSpellCooldown(853), -- Hammer of Justice (Rank 1) CreateSpellCooldown(31884), -- Avenging Wrath CreateSpellCooldown(54428), -- Divine Plea + CreateSpellCooldown(2812), -- Holy Wrath (Rank 1) + CreateSpellCooldown(10318), -- Holy Wrath (Rank 2) + CreateSpellCooldown(27139), -- Holy Wrath (Rank 3) -- Talents CreateSpellCooldown(20216), -- Divine Favor diff --git a/docs/audit-plan.md b/docs/audit-plan.md new file mode 100644 index 0000000..7e4e7ac --- /dev/null +++ b/docs/audit-plan.md @@ -0,0 +1,373 @@ +# Filger improvement plan + +## 1. Summary + +**State (5.4.0):** the restructure into `core/`, `elements/` and `data/` is done. +luacheck is clean. The TOC Interface versions match all six clients in `../refs` (Retail 12.1.5, +Forever 1.60.1, MoP 5.5.4, Titan 3.80.2, TBC 2.5.6, Era 1.15.9). Most behaviour is still +unverified in-game. + +**Goals, in order:** +1. Fix the real bugs found in the aura and tooltip code. +2. Make spell data verifiable in-game (`/filger validate`) instead of relying on memory. +3. Close the Retail secret-value gaps in cooldowns. +4. Refresh the spell data. +5. Cleanup, performance, tests and release automation, without adding configuration or frameworks. + +Effort: **S** < 1h, **M** a few hours, **L** a day or more. Risk = the chance of breaking current behaviour. + +--- + +## 2. Tasks + +### Phase 1: Quick wins + +- [x] **T1: A reused aura button keeps a stale timer and hides permanent auras** — done in c67c811 + - When a button last showed a timed aura, its `OnUpdate` stays set. If the button is then reused + for a permanent aura (`expirationTime = 0`), the timer sees it as expired and calls `Hide()`. + The old `Time` text also stays. As a result, permanent buffs vanish on Classic clients. + - S / low. Files: `elements/Classic/auras.lua` + - Steps: + 1. In `aura_proto:Update`, when `duration` is 0: `SetScript("OnUpdate", nil)` and `Time:SetText("")`. + - Verify: `make check`. On Classic, with a timed buff and a permanent one (a form or aura), let + the timed one expire; the permanent icon must stay. + - Deps: none. + +- [x] **T2: Updated auras are filtered against stale data and never removed** — done in 266f5a9 + - The `updatedAuraInstanceIDs` branch calls `FilterAura` on the old cached table and never clears + an aura that stops passing the filter (for example, stacks dropping below `stackThreshold`). + - S / low. Files: `elements/Classic/auras.lua` + - Steps: + 1. Filter the refreshed data. When it fails, clear the aura from `actives` and set `changed`. + - Verify: `make check`. On Classic, use an aura with a `stackThreshold` and watch it appear and + disappear as its stacks cross the threshold. + - Deps: none. + +- [x] **T3: Full update can index a nil aura** — done in 5352def + - `GetAuraDataBySlot` can return nil, and the full-update loop then indexes + `data.auraInstanceID`. + - S / low. Files: `elements/Classic/auras.lua` + - Steps: + 1. Skip the slot when the data is nil. + - Verify: `make check`. Watch for no new Lua errors. + - Deps: none. + +- [x] **T4: The tooltip guard uses `and` where it means `or`** — done in a8a0ddc + - The check is `IsForbidden() and not IsVisible()`, so a forbidden GameTooltip still gets used. + - S / low. Files: `core/button.lua` + - Steps: + 1. Change `and` to `or`. + - Verify: `make check`. Hover icons on every client and confirm the tooltips still show. + - Deps: none. + +- [x] **T5: Building frames mutates the shared class spell table** — done in df51d9a + - `Mixin(spells[class] or {}, spells["ALL"] or {})` writes the `ALL` entries into the class table + itself. + - S / low. Files: `elements/Mainline/auras.lua`, `elements/Classic/auras.lua` + - Steps: + 1. Mix into a new table: `Mixin({}, spells[class] or {}, spells["ALL"] or {})`. + - Verify: `make check`. `PLAYER_AURAS` shows the same spells as before. + - Deps: none. + +- [x] **T6: Remove dead code** — done in b0ab67b + - Covers the `itemId` cooldown path (no data creates item rows), `util.print`, `util.error`, + `ns.player.name`, and the unused `button.name` and `button.duration`. + - S / low. Files: `elements/cooldowns.lua`, `core/button.lua`, `core/util.lua`, `core/init.lua` + - Steps: + 1. Remove the `itemId` path and the `SetItemByID` tooltip branch. + 2. Remove the unused util functions and fields. + - Verify: `make check`. Cooldowns and tooltips work on Retail and on one Classic client. + - Deps: none. D1 decides whether the compat fallbacks also go. + +- [x] **T7: Small hygiene fixes** — done in d4aa68b + - `/filger help` lists commands in random order. `data/shared/cooldowns.lua` lacks the + `or -1` fallback that `blacklist.lua` has. `dev/development.lua` links to the missing + `docs/secret-values-options.md`. + - S / none. Files: `core/commands.lua`, `data/shared/cooldowns.lua`, `dev/development.lua` + - Steps: + 1. Print the help entries in sorted order. + 2. Add the `or -1` fallback. + 3. Drop the dead doc reference. + - Verify: `make check`, then run `/filger help`. + - Deps: none. + +- [x] **T8: README fixes** — done in 73991e6 + - The ElvUI deferral isn't mentioned. The repo owner differs between the TOC (`wow-lua`) and the + README (`lua-wow`). Only `/filger help` is documented. + - S / none. Files: `README.md`, maybe `Filger.toc` + - Steps: + 1. Fix the dependencies list and the URLs. + 2. Document `auras` (and `validate` once T10 lands). + - Verify: read it through. + - Deps: D4. + +### Phase 2: Medium + +- [x] **T9: `Finalize` collects invalid entries instead of printing them** — done in 2d25f88 + - Every invalid ID currently prints a warning at every login. Cooldowns are validated only for + the player's class. + - M / low. Files: `core/data.lua` + - Steps: + 1. Store problems in `data.invalid = { { kind, class, id } }` instead of calling `warn`. + 2. Validate cooldown rows for every class, while still building the active list only for the + player. + 3. Print at most one summary line, and only when `ns.config.general.dev` is set. + - Verify: `make check` and the T15 tests. After `/reload`, no per-ID spam in chat. + - Deps: none. + +- [x] **T10: `/filger validate` command** + - Lists every configured ID that doesn't resolve on this client, so data is checked in-game + rather than from memory. + - M / low. Files: `core/commands.lua` + - Steps: + 1. Add a `validate` command that prints `data.invalid`, grouped by kind and class. + 2. ~~Also list the player's own cooldown rows where `C_SpellBook.IsSpellKnown` is false~~ + Dropped: it depends on talents and race, not on whether the ID exists. + - Verify: `/filger validate` on every client. Temporarily add a fake ID, confirm it is reported, + then remove it. + - Deps: T9. + - Note: `C_Spell.DoesSpellExist` is in all six clients' API docs and can serve as a second check. + +- [x] **T11: Blacklist names only work on English clients** + - `"Well Fed"`, `"Food"`, `"Drink"`, `"Mark of the Wild"`, `"Arcane Intellect"` and + `"Power Word: Fortitude"` don't match on other locales, and Mainline drops name keys entirely. + - M / low. Files: `data/shared/blacklist.lua`, `data/Standard/blacklist.lua`, `core/data.lua` + - Steps (D6: keep name matching): + 1. Replace each English name key with one representative spell ID flagged as a name entry. + Done: the value is `"name"` instead of `true`. + 2. At `Finalize`, resolve it with `GetSpellInfo(id).name` and store the localized name in + `data.blacklist`. An ID that doesn't resolve goes into `data.invalid`. Done: the ID itself + is also blacklisted, and string keys are no longer accepted. + 3. Mainline is unchanged: its aura containers filter by spell ID only. The `"Well Fed"` and + `"Hearty Well Fed"` keys in `data/Standard/blacklist.lua` never matched, so they were removed. + - Verify: `/filger validate`. On a non-English client, or by checking `GetSpellInfo(id).name`, + the buffs are hidden on Classic clients. + - Deps: T9, D6, U8. + +- [x] **T12: Retail cooldown secret-value gaps** + - Outcome: U1 and U2 both came back no, so steps 1 and 2 need no change. The secret path already + shows active, off-GCD rows without `casted`. As a fallback for an untested secret `spellID` + (instances/M+), a row shown through the secret path is now recorded in `casted`. + - A cast made while restricted may not be recorded in `casted`, so a cooldown still running + vanishes after combat. Slot cooldowns may return secret values, so the arithmetic in + `ProcessCooldownData` may raise errors. + - M / med. Files: `elements/cooldowns.lua` + - Steps: + 1. Apply the fix the U1 result calls for: either drop the `casted` gate for rows that are + active and off GCD, or record casts by another means. + 2. If U2 confirms slot cooldowns are secret, guard them with `IsSecret` and use a duration + object or skip them. + - Verify: Retail, in combat, cast a tracked CD, leave combat mid-cooldown, and confirm the icon + stays. Use a trinket in combat and confirm there's no Lua error. + - Deps: U1, U2. + +- [x] **T13: Cooldown update performance** + - `SPELL_UPDATE_COOLDOWN` fires on every GCD. Each event allocates a table per row and repeats + the same spell-info lookups. + - M / low. Files: `elements/cooldowns.lua` + - Steps: + 1. Cache name and icon per row once (they're static per spell). + 2. Reuse a per-row data table instead of allocating a new one. + - Verify: `make check`. Behaviour is unchanged. Optionally compare memory with `/dump collectgarbage("count")` + before and after a few minutes of combat. + - Deps: none, but T12 edits the same function, so don't run them in parallel. Land T12 first + unless U1 or U2 is still open. + +- [x] **T14: Missing refresh events for cooldowns** + - Rows go stale until the next cooldown event after a gear swap, a talent change or a trinket use. + - S–M / low. Files: `elements/cooldowns.lua` + - Steps: + 1. Register `PLAYER_EQUIPMENT_CHANGED` and force an update. + 2. Register `SPELLS_CHANGED` and re-check `isKnown`. + 3. Add whichever item-cooldown event U3 identifies. + - Verify: swap a trinket, change a talent, use a trinket. The icons update immediately. + - Deps: U3, T13. + +- [x] **T15: Minimal test harness for pure logic** + - No tests exist yet. + - M / none. Files: new `tests/run.lua`, `Makefile`, `.github/workflows/lint.yml`, `exclude.lst` + - Steps: + 1. Write a plain Lua 5.1 runner with stubbed `ns`, `GetSpellInfo` and `Mixin`, covering + `util.FormatTime`, the `data.Create*` constructors and `Finalize` (dedupe, ordering, + class+ALL, `invalid`). + 2. Add a `make test` target. + 3. Run it in CI and exclude `tests/` from packaging. + - Verify: `mise exec -- make test` and `make check` both pass, and CI is green. + - Deps: none, but it is most useful together with T9. + +- [x] **T16: Replace `MergeAPI` with a direct backdrop call** — done in a2cbd94 + - `MergeAPI` writes `CreateBackdrop` into every widget metatable. Filger only needs it on its + own buttons, and other addons may read the method as a sign that Tukui is loaded. + - S–M / med. Files: `core/api.lua`, `core/button.lua`, `Filger.lua` + - Steps: + 1. Make `ns.CreateBackdrop(frame)` call the Tukui/ElvUI method when one exists, or Filger's own. + 2. Have `StyleButton` call it. + 3. Delete `MergeAPI`. + - Verify: test standalone, with ElvUI and with Tukui/Tainted. Borders and backdrops look + identical to before, and Mainline container buttons are styled. + - Deps: none. + +- [ ] **T17: Release publishing to CurseForge and Wago** — deferred (D5) + - The TOC has no `X-Curse-Project-ID` or `X-Wago-ID`. + - S–M / low. Files: `Filger.toc`, `.github/workflows/release.yml` + - Steps: + 1. Add the IDs and secrets as chosen in D5. + 2. Use the CHANGELOG section as the release notes. + - Verify: push a test tag on a fork, or check the dry-run output. + - Deps: D5, U7. + +### Phase 3: Larger work + +- [x] **T18: Refresh the Retail spell data for 12.x** — done in 6d6552c + - M–L / low (data only). Files: `data/Standard/spells.lua`, `data/Standard/cooldowns.lua`, + `data/Standard/blacklist.lua` + - Steps: work one class per commit: + 1. Run `/filger validate`. + 2. Use `/filger auras player buffs` on each spec to get the IDs actually applied. + 3. Fix or remove entries. + - Verify: `/filger validate` is clean for that class. + - Deps: T10, U9. + +- [x] **T19: Refresh the Classic spell data** + - L / low. Files: `data/{Vanilla,TBC,Wrath,Mists,Camelot}/*.lua` + - Steps: one client per commit, validate only (no per-class `/filger auras` runs): + 1. Run `/filger validate`. + 2. Fix or remove the reported entries. + - Progress: Vanilla and TBC clean, no changes needed. Wrath skipped: no client to test on. + Mists: shared Fortitude `1243` doesn't exist, limited to before MoP. + Camelot pending: no client access yet. + - Verify: `/filger validate` is clean on that client. + - Deps: T10, U9. Per D1, `data/Cata` stays too. + +- [x] **T20 (optional): Dev logger for listed aura IDs never seen** — done in 094f502 + - Catches cases where the cast ID was listed instead of the aura ID. + - M / none. Files: `dev/development.lua` + - Steps: + 1. While toggled on, record every listed `spellId` seen in `UNIT_AURA`. + 2. `/filger unseen` prints the listed IDs that never appeared. + - Verify: play a spec for a while and review the output. + - Deps: T9. Only works on Retail outside combat, while auras aren't secret. + +### Added after the decisions + +- [x] **T21: Remove the unused `FilgerData` SavedVariable** (D2) + - S / none. Files: `Filger.toc`, `CLAUDE.md` + - Steps: + 1. Delete the `## SavedVariables` line. + 2. Update the `CLAUDE.md` sentence that mentions `FilgerData`. + - Verify: `/reload` on one client and check that `/dump FilgerData` prints nil. + - Deps: none. + +- [x] **T22: Prune dev experiment commands** (D3) — done in f9d6024 + - `dev/` keeps shipping, but experiments whose answers are recorded here are dead weight. + - S / none. Files: `dev/development.lua` + - Steps: + 1. Remove each `exp*` command whose question is answered in §3 or elsewhere in this file. + 2. Keep `exp7` and `exp10` until U1, U2, U3 and U6 are answered. + - Verify: `make check`, then `/filger help` with `dev = true`. + - Deps: the U items each experiment serves. + +--- + +## 3. Blocked: needs a decision or in-game verification + +**Decisions (yours):** +- **D1 Cata.** Drop `data/Cata/`, `ns.client.isCata` and the legacy fallbacks in `compat.GetSpellInfo` and + `GetSpellCooldown`? The `C_Spell` versions exist on all six supported clients, so the fallbacks + only serve Cata. **Answer:** keep `ns.client.isCata`, `data/Cata` and the fallbacks. The blacklist is + incremental across expansions (Mists builds on the Cata entries), so the Cata data stays. +- **D2 `FilgerData`.** Remove the unused SavedVariable from the TOC? It creates a global for nothing. + **Answer:** remove it (T21). +- **D3 `dev/`.** Keep shipping it (gated by `config.general.dev`) or exclude it in `exclude.lst`? + Also, delete exp4–exp10 once their results are recorded? **Answer:** keep shipping it, so the TOC + doesn't change whenever `dev/` is needed. Remove the commands that are no longer needed (T22). +- **D4 Repo URL.** Is the owner `wow-lua` or `lua-wow`? **Answer:** `lua-wow` (matches the git remote). +- **D5 Publishing.** CurseForge, Wago, or GitHub releases only? This needs the project IDs and API + tokens. **Answer:** not publishing to CurseForge or Wago for now. T17 is deferred. +- **D6 Blacklist names.** Replace them with spell ID lists, or resolve the localized name from + one representative ID at `Finalize`? **Answer:** keep name matching. Names exist so buffs with + many IDs (Well Fed gains more every patch) are hidden without listing every ID. Resolve the + localized name from one representative ID (T11). + +**UNVERIFIED (check before starting the dependent task):** +- **U1** (blocks T12): is the `spellID` in `UNIT_SPELLCAST_SUCCEEDED` secret for player + casts in combat on Retail? Check with `/filger exp7` (set `dev = true`), enter combat, cast. + **Answer:** no. Every cast logged a readable `spellID` while `InCombatLockdown()` was true (open + world; instanced/M+ content not tested). +- **U2** (blocks T12): does `GetInventoryItemCooldown` return secret values in combat on + Retail? It isn't in the generated API docs. Check with `/filger exp7`, using a trinket in combat. + **Answer:** no. Slot 14 read `161793.5/120.0/1` in combat right after the trinket use. +- **U3** (blocks T14): which event refreshes trinket and item cooldowns + (`SPELL_UPDATE_COOLDOWN`, `BAG_UPDATE_COOLDOWN` or `ACTIONBAR_UPDATE_COOLDOWN`)? Check with + `/filger exp10`. + **Answer:** all three, in the same frame, at both the start and the end of the slot 14 cooldown. + `SPELL_UPDATE_COOLDOWN` carried the trinket's spell (1221146) with `itemID` nil, so the already + registered `SPELL_UPDATE_COOLDOWN` covers slot cooldowns. Bag items (potions) not tested. +- **U4:** does `C_Secrets.ShouldAurasBeSecret()` stay false in combat on Classic clients? + The API exists there. Check with `/run print(C_Secrets.ShouldAurasBeSecret())` in combat on each + Classic client. + **Answer:** yes, it prints `false` on Classic Era, TBC and MoP. WotLK (Titan) not tested. +- **U5 UNVERIFIED (deferred):** does the Mainline aura and cooldown path work at runtime on Forever? All the + required APIs are in the forever docs. Check with `/reload` on Forever and look at every frame. + Forever client not available yet. +- **U6 PARTIAL:** does `SPELL_UPDATE_COOLDOWN` fire when a cooldown ends? The code comment says + no. Check by logging with `/filger exp10`, or a quick event print, as a cooldown expires. + **Answer (trinket only):** the 120 s cooldown was due to end at 162268.8. All three events + fired at 162269.4 and showed it cleared, but `SPELL_UPDATE_COOLDOWN` carried spell 431462 + (also seen before the trinket use), not the trinket's spell. An event arrived about 0.6 s after + the end, but it may have been triggered by something else. Spell cooldown ends not tested. +- **U7:** which inputs do `lua-wow/packager@v1` and the `forever` flavor token in + `p3lim/toc-interface-updater@v4` accept? Check each action's README, or run the workflow manually. + **Answer:** done. +- **U8 UNVERIFIED:** the representative spell IDs for the D6 name entries. Pick IDs in-game + (`/filger auras player buffs` while the buff is up) on each client. + **Candidates (T11, from memory):** Well Fed 19705, Drink 430, Food 433, Mark of the Wild 1126, + Arcane Intellect 1459, Power Word: Fortitude 1243 (not 21562, which is Prayer of Fortitude on + Classic). On each client, confirm with `/filger validate` and + `/dump C_Spell.GetSpellInfo().name`. On Retail, 1243, 430 and 433 may not resolve; if so, + gate them to Classic. +- **U9:** every spell ID in `data/`. None are trusted from memory; `/filger validate` + (T10) and in-game observation are the source of truth. + **Answer:** done. + +--- + +## 4. Deferred or rejected + +| Idea | Status | Reason | +|------|--------|--------| +| Options UI, slash config, profiles, per-character settings | Rejected | Contradicts the no-configuration philosophy. | +| UI string localization | Rejected | The UI shows no user-facing strings, only icons and numbers. | +| busted or another test framework | Rejected | A plain Lua runner (T15) is enough. | +| Showing Stagger in Retail `PLAYER_DEBUFFS` | Rejected | Stagger is contextually secret, and the container can't filter it by ID. | +| Sorting secret cooldowns by remaining time | Rejected | Secret values can't be compared. | +| One `OnUpdate` ticker per element instead of per button | Deferred | Fine at the current scale (≤ ~60 buttons). | +| Sharing the expansion constant ladder in `core/` | Deferred | Cosmetic. Two copies are still readable. | +| Moving the inline Classic Stagger IDs into `data/` | Deferred | They only matter on Mists and aren't class-list data. | +| Linting `dev/` | Deferred | It is experimental code. Revisit after D3. | +| Re-adding Cata support | Deferred | Not in the TOC, and there are no refs for it. Its data and fallbacks stay (D1). | +| Publishing to CurseForge and Wago (T17) | Deferred | GitHub releases only for now (D5). | + +--- + +## 5. How to work through this + +- One task per session, in the order below, unless its deps or blockers say otherwise. +- Order: + 1. ~~Decide D1, D2, D3, D5, D6.~~ Done. T21 done. + 2. One in-game session for U1, U2, U3, U6 on Retail (`exp7`, `exp10`), plus U4 on each Classic + client and U5 on Forever. Then T22. + 3. T9 → T15 → T10. T15 tests `Finalize` after T9 changes it; T10 unblocks all data work. + 4. T16 on its own, so a visual regression is easy to trace. + 5. T12 → T13 → T14. If U1 or U2 is still open, do T13 before T12 (no logic overlap). + 6. T11, once D6 and U8 are resolved. + 7. T18 → T19. + 8. T20 last (optional). T17 is deferred (D5). +- You create the branch (`t-short-name`). Claude edits the working tree only and never commits. +- Before starting a task, its D and U items must be resolved. Record the answer next to the item + in §3. +- Each task ends with `mise exec -- make check` (plus `make test` once T15 exists) and the listed + in-game checks, with `/reload` on the named clients. +- When done: tick the checkbox and append the commit, for example `— done in abc1234`. +- New findings go into §2 as new task IDs, or into §4 with a reason. Don't renumber existing IDs. + diff --git a/docs/references.md b/docs/references.md index 0ad245d..fead3b0 100644 --- a/docs/references.md +++ b/docs/references.md @@ -36,3 +36,23 @@ Each worktree's build is in its `version.txt`. | Cooldowns | `Blizzard_CooldownViewer` (retail); `C_Spell.GetSpellCooldown` / `GetItemCooldown` in API docs | | Spell API | `C_Spell` vs legacy `GetSpellInfo` in API docs and `Blizzard_Deprecated*` | | Tooltips | `Blizzard_GameTooltip` (`GameTooltip:SetUnitAura`) | + +## `../spellbook` (spell DB2 data and checks) + +A separate tool, not part of Filger. Don't edit it unless asked. It caches Blizzard's spell DB2 +tables from wago.tools per client build in `../spellbook/data//` and merges them into +`spells.csv` (`ID,Name,Subtext,Class,Learnable,Dispel,Cooldown,CategoryCooldown,Charges,ChargeRecovery,Labels,Description`). +Use it to verify spell IDs offline instead of relying on memory. Usage is in `../spellbook/README.md`. + +```sh +lua ../spellbook/check.lua [Game ...] # run from Filger's root: MISSING / NAME / NOCD / CLASS +lua ../spellbook/check.lua --cooldowns # learnable spells with a cooldown > 30s not in cooldowns.lua (CSV) +``` + +- Clients map to builds by version prefix in the `clients` table at the top of `check.lua`. + A missing build is downloaded (network); use the cached `data/` when it is enough. +- To look up a single ID: `grep '^,' ../spellbook/data//spells.csv`. +- Caveats: an ID present in DB2 isn't necessarily obtainable (Retail keeps many removed spells). + `Learnable` has false negatives (for example Retail Barkskin = 0) and is sparse on Era and + Forever, so `1` is evidence and `0` is not. A Retail `Cooldown` of 0 doesn't prove there is no + cooldown. Treat DB2-only conclusions as **unverified** until they're checked in-game. diff --git a/elements/cooldowns.lua b/elements/cooldowns.lua index a5bd5df..99bdbcc 100644 --- a/elements/cooldowns.lua +++ b/elements/cooldowns.lua @@ -198,7 +198,8 @@ do end else self.active[row] = nil - if data.spellId then + -- an on-hold cooldown (e.g. Inner Focus) starts later; keep the cast so it shows then + if data.spellId and data.enabled then self.casted[data.spellId] = nil end end From 3b64c8c0ed7a49118922a2ce059a51f83507de04 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Thu, 29 Oct 2026 09:59:34 -0300 Subject: [PATCH 18/19] wip --- .luacheckrc | 17 ++- Filger.toc | 2 +- config.lua | 2 +- core/data.lua | 9 +- core/init.lua | 22 +++ data/Camelot/blacklist.lua | 127 ---------------- data/Mists/blacklist.lua | 38 ----- data/Standard/blacklist.lua | 5 - data/TBC/blacklist.lua | 147 ------------------- data/Vanilla/blacklist.lua | 165 --------------------- data/Wrath/blacklist.lua | 94 ------------ data/shared/blacklist.lua | 278 +++++++++++++++++++++++++++++------- data/shared/cooldowns.lua | 21 +-- dev/development.lua | 33 +++++ docs/blacklist-plan.md | 171 ++++++++++++++++++++++ docs/compatibility.md | 28 +++- tests/dump.lua | 130 +++++++++++++++++ tests/run.lua | 13 ++ 18 files changed, 652 insertions(+), 650 deletions(-) create mode 100644 docs/blacklist-plan.md create mode 100644 tests/dump.lua diff --git a/.luacheckrc b/.luacheckrc index a330cb7..a3fd1e1 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -24,10 +24,6 @@ ignore = { '631', -- line is too long } --- data files keep the full expansion ladder for authoring entries -files['data/shared/blacklist.lua'] = { ignore = { '211/LE_EXPANSION_.*' } } -files['data/shared/cooldowns.lua'] = { ignore = { '211/LE_EXPANSION_.*' } } - -- globals Filger is allowed to set or mutate globals = { -- slash commands @@ -48,6 +44,19 @@ read_globals = { 'C_UnitAuras', -- constants + 'LE_EXPANSION_BATTLE_FOR_AZEROTH', + 'LE_EXPANSION_BURNING_CRUSADE', + 'LE_EXPANSION_CATACLYSM', + 'LE_EXPANSION_CLASSIC', + 'LE_EXPANSION_DRAGONFLIGHT', + 'LE_EXPANSION_LEGION', + 'LE_EXPANSION_LEVEL_CURRENT', + 'LE_EXPANSION_MIDNIGHT', + 'LE_EXPANSION_MISTS_OF_PANDARIA', + 'LE_EXPANSION_SHADOWLANDS', + 'LE_EXPANSION_WAR_WITHIN', + 'LE_EXPANSION_WARLORDS_OF_DRAENOR', + 'LE_EXPANSION_WRATH_OF_THE_LICH_KING', 'WOW_PROJECT_BURNING_CRUSADE_CLASSIC', 'WOW_PROJECT_CAMELOT', 'WOW_PROJECT_CATACLYSM_CLASSIC', diff --git a/Filger.toc b/Filger.toc index 096af52..d87fed4 100644 --- a/Filger.toc +++ b/Filger.toc @@ -18,12 +18,12 @@ libs\LibDispel\LibDispel.xml [AllowLoadGameType classic] core\compat.lua core\util.lua core\data.lua +core\init.xml data\[Game]\blacklist.lua data\[Game]\cooldowns.lua data\[Game]\spells.lua data\shared\blacklist.lua data\shared\cooldowns.lua -core\init.xml config.lua elements\cooldowns.lua elements\[Family]\auras.lua diff --git a/config.lua b/config.lua index a672947..c621d83 100644 --- a/config.lua +++ b/config.lua @@ -14,7 +14,7 @@ ns.config = { ["size"] = 1 }, ["gametooltip"] = true, -- enabled tooltips - ["dev"] = false, -- enables dev/development.lua commands + ["dev"] = true, -- enables dev/development.lua commands } } diff --git a/core/data.lua b/core/data.lua index db77c21..c782cce 100644 --- a/core/data.lua +++ b/core/data.lua @@ -3,7 +3,7 @@ local _, ns = ... ------------------------------------------------------------ -- Data ------------------------------------------------------------ --- Loaded before core\init.xml: data files only collect tables here. +-- Loaded before the data files, which only collect tables here. -- Validation runs in Finalize() at ADDON_LOADED; it fills data.blacklist/spells/cooldowns, -- and records unresolved or duplicated IDs in data.invalid as { kind, class, id }. -- A blacklist value of "name" also blacklists the spell's localized name (Classic filters only). @@ -50,6 +50,13 @@ function data.CreateSlotCooldown(slotId, enabled) return { slotId = slotId, enabled = enabled } end +-- true when the client's expansion is within from..to (inclusive; `to` optional); +-- reads ns.client at call time, since core\init.xml loads after this file +function data.In(from, to) + local expansion = ns.client.expansion + return expansion >= from and (to == nil or expansion <= to) +end + function data.AddBlacklist(source) table.insert(blacklistSources, source) end diff --git a/core/init.lua b/core/init.lua index 2368b59..1fa7822 100644 --- a/core/init.lua +++ b/core/init.lua @@ -29,7 +29,29 @@ client.isCamelot = (WOW_PROJECT_ID == WOW_PROJECT_CAMELOT) client.isClassic = (client.isVanilla or client.isTBC or client.isWrath or client.isCata or client.isMists) client.isMainline = not client.isClassic +client.interface = select(4, GetBuildInfo()) + +-- expansion levels for gating shared data +-- reference: https://warcraft.wiki.gg/wiki/LE_EXPANSION +local expansions = { + Classic = LE_EXPANSION_CLASSIC, + BurningCrusade = LE_EXPANSION_BURNING_CRUSADE, + Wrath = LE_EXPANSION_WRATH_OF_THE_LICH_KING, + Cataclysm = LE_EXPANSION_CATACLYSM, + Mists = LE_EXPANSION_MISTS_OF_PANDARIA, + Warlords = LE_EXPANSION_WARLORDS_OF_DRAENOR, + Legion = LE_EXPANSION_LEGION, + BattleForAzeroth = LE_EXPANSION_BATTLE_FOR_AZEROTH, + Shadowlands = LE_EXPANSION_SHADOWLANDS, + Dragonflight = LE_EXPANSION_DRAGONFLIGHT, + WarWithin = LE_EXPANSION_WAR_WITHIN, + Midnight = LE_EXPANSION_MIDNIGHT, +} + +client.expansion = LE_EXPANSION_LEVEL_CURRENT + ns.client = client +ns.expansions = expansions -- player ns.player = { diff --git a/data/Camelot/blacklist.lua b/data/Camelot/blacklist.lua index 5a3ebbb..69fa827 100644 --- a/data/Camelot/blacklist.lua +++ b/data/Camelot/blacklist.lua @@ -6,133 +6,6 @@ local AddBlacklist = ns.data.AddBlacklist -- Classic Forever -------------------------------------------------- local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - - [21849] = true, -- Gift of the Wild (Rank 1) - [21850] = true, -- Gift of the Wild (Rank 2) - - [783] = true, -- Travel Form - [1066] = true, -- Aquatic Form - [9634] = true, -- Dire Bear Form - - -- HUNTER - [13165] = "name", -- Aspect of the Hawk (Rank 1 - 7) - [13163] = true, -- Aspect of the Monkey - - -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - - [23028] = true, -- Arcane Brilliance - - [168] = true, -- Frost Armor (Rank 1) - [7300] = true, -- Frost Armor (Rank 2) - [7301] = true, -- Frost Armor (Rank 3) - - [7302] = true, -- Ice Armor (Rank 1) - [7320] = true, -- Ice Armor (Rank 2) - [10219] = true, -- Ice Armor (Rank 3) - [10220] = true, -- Ice Armor (Rank 4) - - [6117] = true, -- Mage Armor (Rank 1) - [22782] = true, -- Mage Armor (Rank 2) - [22783] = true, -- Mage Armor (Rank 3) - - -- PALADIN - [465] = "name", -- Devotion Aura (Rank 1 - 7) - - [19899] = true, -- Fire Resistance Aura (Rank 2) - [19900] = true, -- Fire Resistance Aura (Rank 3) - - [25780] = true, -- Righteous Fury - [20217] = true, -- Blessing of Kings - [19742] = "name", -- Blessing of Wisdom (Rank 1 - 6) - [25782] = true, -- Greater Blessing of Might (Rank 1) - [25916] = true, -- Greater Blessing of Might (Rank 2) - [25894] = true, -- Greater Blessing of Wisdom (Rank 1) - [25918] = true, -- Greater Blessing of Wisdom (Rank 2) - [25898] = true, -- Greater Blessing of Kings - [21084] = "name", -- Seal of Righteousness (Rank 1 - 8) - - -- PRIEST - [21562] = true, -- Prayer of Fortitude (Rank 1) - [21564] = true, -- Prayer of Fortitude (Rank 2) - - [976] = true, -- Shadow Protection (Rank 1) - [10957] = true, -- Shadow Protection (Rank 2) - - [27683] = true, -- Prayer of Shadow Protection - - [588] = "name", -- Inner Fire (Rank 1 - 6) - [14819] = true, -- Divine Spirit - [15473] = true, -- Shadowform - [27681] = true, -- Prayer of Spirit - - -- SHAMAN - [324] = "name", -- Lightning Shield (Rank 1 - 7) - - -- WARRIOR - [71] = true, -- Defensive Stance - [2457] = true, -- Battle Stance - [2458] = true, -- Berserker Stance - [6673] = "name", -- Battle Shout (Rank 1 - 7) - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11767] = true, -- Blood Pact (Rank 5) - - [706] = "name", -- Demon Armor (Rank 1 - 5) - - -- Scrolls - [8091] = true, -- Armor (Scroll of Protection) - [8094] = true, -- Armor (Scroll of Protection II) - [8095] = true, -- Armor (Scroll of Protection III) - [12175] = true, -- Armor (Scroll of Protection IV) - - [8096] = true, -- Intellect (Scroll of Intellect) - [8097] = true, -- Intellect (Scroll of Intellect II) - [8098] = true, -- Intellect (Scroll of Intellect III) - [12176] = true, -- Intellect (Scroll of Intellect IV) - - [8099] = true, -- Stamina (Scroll of Stamina) - [8100] = true, -- Stamina (Scroll of Stamina II) - [8101] = true, -- Stamina (Scroll of Stamina III) - [12178] = true, -- Stamina (Scroll of Stamina IV) - - [8112] = true, -- Spirit Magic (Scroll of Spirit) - [8113] = true, -- Spirit Magic (Scroll of Spirit II) - [8114] = true, -- Spirit Magic (Scroll of Spirit III) - [12177] = true, -- Spirit Magic (Scroll of Spirit IV) - - [8115] = true, -- Agility (Scroll of Agility) - [8116] = true, -- Agility (Scroll of Agility II) - [8117] = true, -- Agility (Scroll of Agility III) - [12174] = true, -- Agility (Scroll of Agility IV) - - [8118] = true, -- Strength (Scroll of Strength) - [8119] = true, -- Strength (Scroll of Strength II) - [8120] = true, -- Strength (Scroll of Strength III) - [12179] = true, -- Strength (Scroll of Strength IV) } AddBlacklist(data) diff --git a/data/Mists/blacklist.lua b/data/Mists/blacklist.lua index bc81f27..fc88728 100644 --- a/data/Mists/blacklist.lua +++ b/data/Mists/blacklist.lua @@ -9,28 +9,8 @@ local data = { [128943] = true, -- Cyclonic Inspiration [81744] = true, -- Horde - -- DEATHKNIGHT - [48263] = true, -- Blood Presence - [48265] = true, -- Unholy Presence - [48266] = true, -- Frost Presence - [55610] = true, -- Unholy Aura - [57330] = true, -- Horn of Winter - - -- DRUID - [783] = true, -- Travel Form - [1066] = true, -- Aquatic Form - [33943] = true, -- Flight Form - [40120] = true, -- Swift Flight Form - -- HUNTER [77769] = true, -- Trap Launcher - [13165] = true, -- Aspect of the Hawk - - -- MAGE - [61316] = true, -- Dalaran Brilliance - [30482] = true, -- Molten Armor - [7302] = true, -- Frost Armor - [6117] = true, -- Mage Armor -- MONK [117666] = true, -- Legacy of the Emperor @@ -40,46 +20,28 @@ local data = { [115070] = true, -- Stance of the Wise Serpent -- PALADIN - [20217] = true, -- Blessing of Kings - [25780] = true, -- Righteous Fury [20165] = true, -- Seal of Insight [20154] = true, -- Seal of Righteousness [31801] = true, -- Seal of Truth [20164] = true, -- Seal of Justice -- PRIEST - [21562] = true, -- Power Word: Fortitude [49868] = true, -- Mind Quickening - [588] = true, -- Inner Fire [73413] = true, -- Inner Will - [15473] = true, -- Shadowform -- ROGUE [113742] = true, -- Swiftblade's Cunning [112942] = true, -- Shadow Focus - [8679] = true, -- Wound Poison - [5761] = true, -- Mind-numbing Poison [108211] = true, -- Leeching Poison [108215] = true, -- Paralytic Poison -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath [77747] = true, -- Burning Wrath [116956] = true, -- Grace of Air - [324] = true, -- Lightning Shield - [52127] = true, -- Water Shield -- WARLOCK [109773] = true, -- Dark Intent [108446] = true, -- Soul Link - - -- WARRIOR - [2457] = true, -- Battle Stance - [71] = true, -- Defensive Stance - [2458] = true, -- Berserker Stance - [6673] = true, -- Battle Shout - [469] = true, -- Commanding Shout } AddBlacklist(data) diff --git a/data/Standard/blacklist.lua b/data/Standard/blacklist.lua index 9ceffe1..6ecb7c9 100644 --- a/data/Standard/blacklist.lua +++ b/data/Standard/blacklist.lua @@ -19,7 +19,6 @@ local data = { -- DRUID [400734] = true, -- After the Wildfire - [783] = true, -- Travel Form [210053] = true, -- Mount Form -- MAGE @@ -44,19 +43,15 @@ local data = { [317920] = true, -- Concentration Aura -- PRIEST - [21562] = true, -- Power Word: Fortitude [194384] = true, -- Atonement -- ROGUE [315584] = true, -- Instant Poison - [8679] = true, -- Wound Poison - [5761] = true, -- Numbing Poison [381637] = true, -- Atrophic Poison [381664] = true, -- Amplifying Poison -- SHAMAN [462854] = true, -- Skyfury - [52127] = true, -- Water Shield -- WARRIOR [386196] = true, -- Berserker Stance diff --git a/data/TBC/blacklist.lua b/data/TBC/blacklist.lua index e72a9f1..f3d03a4 100644 --- a/data/TBC/blacklist.lua +++ b/data/TBC/blacklist.lua @@ -6,158 +6,11 @@ local AddBlacklist = ns.data.AddBlacklist -- The Burning Crusade Classic -------------------------------------------------- local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - [26990] = true, -- Mark of the Wild (Rank 8) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - [26992] = true, -- Thorns (Rank 7) - - [21849] = "name", -- Gift of the Wild - [783] = true, -- Travel Form - [1066] = true, -- Aquatic Form - [9634] = true, -- Dire Bear Form - [33943] = true, -- Flight Form - [40120] = true, -- Swift Flight Form - -- HUNTER - [13165] = "name", -- Aspect of the Hawk - [13163] = true, -- Aspect of the Monkey [34074] = true, -- Aspect of the Viper [24529] = true, -- Spirit Bond - -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - [27126] = true, -- Arcane Intellect (Rank 6) - - [23028] = "name", -- Arcane Brilliance - [168] = "name", -- Frost Armor - [7302] = "name", -- Ice Armor - [6117] = "name", -- Mage Armor - [30482] = "name", -- Molten Armor - - -- PALADIN - [465] = "name", -- Devotion Aura - [25780] = true, -- Righteous Fury - [20217] = true, -- Blessing of Kings - [19742] = "name", -- Blessing of Wisdom - [19740] = "name", -- Blessing of Might - [25782] = "name", -- Greater Blessing of Might - [25894] = "name", -- Greater Blessing of Wisdom - [25898] = true, -- Greater Blessing of Kings - [19899] = true, -- Fire Resistance Aura (Rank 2) - [19900] = true, -- Fire Resistance Aura (Rank 3) - [21084] = "name", -- Seal of Righteousness - - -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - [25389] = true, -- Power Word: Fortitude (Rank 7) - - [21562] = true, -- Prayer of Fortitude (Rank 1) - [21564] = true, -- Prayer of Fortitude (Rank 2) - - [976] = true, -- Shadow Protection (Rank 1) - [10957] = true, -- Shadow Protection (Rank 2) - - [27683] = true, -- Prayer of Shadow Protection - [25431] = true, -- Inner Fire (Rank 7) - [14819] = true, -- Divine Spirit - [27681] = true, -- Prayer of Spirit (Rank 1) - [32999] = true, -- Prayer of Spirit (Rank 2) - [588] = "name", -- Inner Fire - [15473] = true, -- Shadowform - - -- SHAMAN - [324] = "name", -- Lightning Shield - [24398] = "name", -- Water Shield - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11767] = true, -- Blood Pact (Rank 5) - [27268] = true, -- Blood Pact (Rank 6) - - [706] = "name", -- Demon Armor - [28176] = "name", -- Fel Armor - - -- WARRIOR - [2457] = true, -- Battle Stance - [71] = true, -- Defensive Stance - [2458] = true, -- Berserker Stance - [6673] = "name", -- Battle Shout - [469] = "name", -- Commanding Shout - - -- Consumables - [17629] = true, -- Flask of Chromatic Resistance - - -- Scrolls - [8091] = true, -- Armor (Scroll of Protection) - [8094] = true, -- Armor (Scroll of Protection II) - [8095] = true, -- Armor (Scroll of Protection III) - [12175] = true, -- Armor (Scroll of Protection IV) - [33079] = true, -- Armor (Scroll of Protection V) - - [8096] = true, -- Intellect (Scroll of Intellect) - [8097] = true, -- Intellect (Scroll of Intellect II) - [8098] = true, -- Intellect (Scroll of Intellect III) - [12176] = true, -- Intellect (Scroll of Intellect IV) - [33078] = true, -- Intellect (Scroll of Intellect V) - - [8099] = true, -- Stamina (Scroll of Stamina) - [8100] = true, -- Stamina (Scroll of Stamina II) - [8101] = true, -- Stamina (Scroll of Stamina III) - [12178] = true, -- Stamina (Scroll of Stamina IV) - [33081] = true, -- Stamina (Scroll of Stamina V) - - [8112] = true, -- Spirit Magic (Scroll of Spirit) - [8113] = true, -- Spirit Magic (Scroll of Spirit II) - [8114] = true, -- Spirit Magic (Scroll of Spirit III) - [12177] = true, -- Spirit Magic (Scroll of Spirit IV) - [33080] = true, -- Spirit Magic (Scroll of Spirit V) - - [8115] = true, -- Agility (Scroll of Agility) - [8116] = true, -- Agility (Scroll of Agility II) - [8117] = true, -- Agility (Scroll of Agility III) - [12174] = true, -- Agility (Scroll of Agility IV) - [33077] = true, -- Agility (Scroll of Agility V) - - [8118] = true, -- Strength (Scroll of Strength) - [8119] = true, -- Strength (Scroll of Strength II) - [8120] = true, -- Strength (Scroll of Strength III) - [12179] = true, -- Strength (Scroll of Strength IV) - [33082] = true, -- Strength (Scroll of Strength V) - - -- Reputation - [17670] = true, -- Agent Dawn Commission - - -- Christimas - [26218] = true, -- Mistletoe - - -- Hallowen - [24755] = true, -- Tricked or Treated } AddBlacklist(data) diff --git a/data/Vanilla/blacklist.lua b/data/Vanilla/blacklist.lua index 3893ea6..b3e676d 100644 --- a/data/Vanilla/blacklist.lua +++ b/data/Vanilla/blacklist.lua @@ -6,170 +6,6 @@ local AddBlacklist = ns.data.AddBlacklist -- Classic Era -------------------------------------------------- local data = { - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - - [21849] = true, -- Gift of the Wild (Rank 1) - [21850] = true, -- Gift of the Wild (Rank 2) - - [783] = true, -- Travel Form - [1066] = true, -- Aquatic Form - [9634] = true, -- Dire Bear Form - - -- HUNTER - [13165] = "name", -- Aspect of the Hawk (Rank 1 - 7) - [13163] = true, -- Aspect of the Monkey - - -- MAGE - [1459] = true, -- Arcane Intellect (Rank 1) - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - - [23028] = true, -- Arcane Brilliance - - [168] = true, -- Frost Armor (Rank 1) - [7300] = true, -- Frost Armor (Rank 2) - [7301] = true, -- Frost Armor (Rank 3) - - [7302] = true, -- Ice Armor (Rank 1) - [7320] = true, -- Ice Armor (Rank 2) - [10219] = true, -- Ice Armor (Rank 3) - [10220] = true, -- Ice Armor (Rank 4) - - [6117] = true, -- Mage Armor (Rank 1) - [22782] = true, -- Mage Armor (Rank 2) - [22783] = true, -- Mage Armor (Rank 3) - - -- PALADIN - [465] = "name", -- Devotion Aura (Rank 1 - 7) - - [19891] = true, -- Fire Resistence Aura (Rank 1) - [19899] = true, -- Fire Resistence Aura (Rank 2) - [19900] = true, -- Fire Resistence Aura (Ranl 3) - - [25780] = true, -- Righteous Fury - [20217] = true, -- Blessing of Kings - [19742] = "name", -- Blessing of Wisdom (Rank 1 - 6) - [19740] = "name", -- Blessing of Might (Rank 1 - 6) - [25782] = true, -- Greater Blessing of Might (Rank 1) - [25916] = true, -- Greater Blessing of Might (Rank 2) - [25894] = true, -- Greater Blessing of Wisdom (Rank 1) - [25918] = true, -- Greater Blessing of Wisdom (Rank 2) - [25898] = true, -- Greater Blessing of Kings - [21084] = "name", -- Seal of Righteousness (Rank 1 - 8) - - -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - - [21562] = true, -- Prayer of Fortitude (Rank 1) - [21564] = true, -- Prayer of Fortitude (Rank 2) - - [976] = true, -- Shadow Protection (Rank 1) - [10957] = true, -- Shadow Protection (Rank 2) - - [27683] = true, -- Prayer of Shadow Protection - - [588] = "name", -- Inner Fire (Rank 1 - 6) - [14819] = true, -- Divine Spirit - [15473] = true, -- Shadowform - [27681] = true, -- Prayer of Spirit - - -- SHAMAN - [324] = "name", -- Lightning Shield (Rank 1 - 7) - - -- WARRIOR - [71] = true, -- Defensive Stance - [2457] = true, -- Battle Stance - [2458] = true, -- Berserker Stance - [6673] = "name", -- Battle Shout (Rank 1 - 7) - - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11767] = true, -- Blood Pact (Rank 5) - - [706] = "name", -- Demon Armor (Rank 1 - 5) - - -- Consumables - [17629] = true, -- Flask of Chromatic Resistance - - -- Scrolls - [8091] = true, -- Armor (Scroll of Protection) - [8094] = true, -- Armor (Scroll of Protection II) - [8095] = true, -- Armor (Scroll of Protection III) - [12175] = true, -- Armor (Scroll of Protection IV) - - [8096] = true, -- Intellect (Scroll of Intellect) - [8097] = true, -- Intellect (Scroll of Intellect II) - [8098] = true, -- Intellect (Scroll of Intellect III) - [12176] = true, -- Intellect (Scroll of Intellect IV) - - [8099] = true, -- Stamina (Scroll of Stamina) - [8100] = true, -- Stamina (Scroll of Stamina II) - [8101] = true, -- Stamina (Scroll of Stamina III) - [12178] = true, -- Stamina (Scroll of Stamina IV) - - [8112] = true, -- Spirit Magic (Scroll of Spirit) - [8113] = true, -- Spirit Magic (Scroll of Spirit II) - [8114] = true, -- Spirit Magic (Scroll of Spirit III) - [12177] = true, -- Spirit Magic (Scroll of Spirit IV) - - [8115] = true, -- Agility (Scroll of Agility) - [8116] = true, -- Agility (Scroll of Agility II) - [8117] = true, -- Agility (Scroll of Agility III) - [12174] = true, -- Agility (Scroll of Agility IV) - - [8118] = true, -- Strength (Scroll of Strength) - [8119] = true, -- Strength (Scroll of Strength II) - [8120] = true, -- Strength (Scroll of Strength III) - [12179] = true, -- Strength (Scroll of Strength IV) - - -- Reputation - [17670] = true, -- Agent Dawn Commission - - -- Christimas - [26218] = true, -- Mistletoe - - -- Hallowen - [24755] = true, -- Tricked or Treated - - -- Booms - [15366] = true, -- Songflower Serenade - [22817] = true, -- Fengus' Ferocity - [22818] = true, -- Mol'dar's Moxie - [22820] = true, -- Slip'kik's Savvy - [22888] = true, -- Rallying Cry of the Dragonslayer - [355363] = true, -- Rallying Cry of the Dragonslayer - [23768] = true, -- Sayge's Dark Fortune of Damage - [24425] = true, -- Spirit of Zandalar - [11371] = true, -- Gift of Arthas - [355365] = true, -- Spirit of Zandalar - - [16363] = true, -- Juju Power - -------------------------------------------------- -- Hardcore -------------------------------------------------- @@ -189,7 +25,6 @@ local data = { -- PALADIN [407627] = true, -- Righteous Fury - [430947] = true, -- Boon of Blackfathom [438536] = true, -- Spark of Inspiration [446695] = true, -- Fervor of the Temple Explorer [460940] = true, -- Might of Stormwind diff --git a/data/Wrath/blacklist.lua b/data/Wrath/blacklist.lua index 55a3979..13fd3c0 100644 --- a/data/Wrath/blacklist.lua +++ b/data/Wrath/blacklist.lua @@ -6,126 +6,32 @@ local AddBlacklist = ns.data.AddBlacklist -- Wrath of the Lich King -------------------------------------------------- local data = { - -- DEATHKNIGHT - [48263] = true, -- Frost Presence - [48265] = true, -- Unholy Presence - [48266] = true, -- Blood Presence - [55610] = true, -- Improved Icy Talons - [57330] = "name", -- Horn of Winter - -- DRUID - [5232] = true, -- Mark of the Wild (Rank 2) - [6756] = true, -- Mark of the Wild (Rank 3) - [5234] = true, -- Mark of the Wild (Rank 4) - [8907] = true, -- Mark of the Wild (Rank 5) - [9884] = true, -- Mark of the Wild (Rank 6) - [9885] = true, -- Mark of the Wild (Rank 7) - [26990] = true, -- Mark of the Wild (Rank 8) [48469] = true, -- Mark of the Wild (Rank 9) - [782] = true, -- Thorns (Rank 2) - [1075] = true, -- Thorns (Rank 3) - [8914] = true, -- Thorns (Rank 4) - [9756] = true, -- Thorns (Rank 5) - [9910] = true, -- Thorns (Rank 6) - [26992] = true, -- Thorns (Rank 7) [53307] = true, -- Thorns (Rank 8) - [21849] = "name", -- Gift of the Wild - [783] = true, -- Travel Form - [1066] = true, -- Aquatic Form - [9634] = true, -- Dire Bear Form - [33943] = true, -- Flight Form - [40120] = true, -- Swift Flight Form - -- HUNTER - [13165] = "name", -- Aspect of the Hawk [61846] = "name", -- Aspect of the Dragonhawk - [13163] = true, -- Aspect of the Monkey -- MAGE - [1460] = true, -- Arcane Intellect (Rank 2) - [1461] = true, -- Arcane Intellect (Rank 3) - [10156] = true, -- Arcane Intellect (Rank 4) - [10157] = true, -- Arcane Intellect (Rank 5) - [27126] = true, -- Arcane Intellect (Rank 6) [42995] = true, -- Arcane Intellect (Rank 7) - [61316] = true, -- Dalaran Brilliance - [23028] = "name", -- Arcane Brilliance - [168] = "name", -- Frost Armor - [7302] = "name", -- Ice Armor - [6117] = "name", -- Mage Armor - [30482] = "name", -- Molten Armor - -- PALADIN - [465] = "name", -- Devotion Aura - [25780] = true, -- Righteous Fury - [20217] = true, -- Blessing of Kings - [19742] = "name", -- Blessing of Wisdom - [19740] = "name", -- Blessing of Might [20911] = true, -- Blessing of Sanctuary - [25782] = "name", -- Greater Blessing of Might - [25894] = "name", -- Greater Blessing of Wisdom - [25898] = true, -- Greater Blessing of Kings [25899] = true, -- Greater Blessing of Sanctuary - [21084] = true, -- Seal of Righteousness -- PRIEST - [1243] = true, -- Power Word: Fortitude (Rank 1) - [1244] = true, -- Power Word: Fortitude (Rank 2) - [1245] = true, -- Power Word: Fortitude (Rank 3) - [2791] = true, -- Power Word: Fortitude (Rank 4) - [10937] = true, -- Power Word: Fortitude (Rank 5) - [10938] = true, -- Power Word: Fortitude (Rank 6) - [25389] = true, -- Power Word: Fortitude (Rank 7) [48161] = true, -- Power Word: Fortitude (Rank 8) - [588] = "name", -- Inner Fire [48040] = true, -- Inner Fire (Rank 8) [48168] = true, -- Inner Fire (Rank 9) - [32999] = true, -- Prayer of Spirit (Rank 2) [48074] = true, -- Prayer of Spirit (Rank 3) - [15473] = true, -- Shadowform [23723] = true, -- Mind Quickening - -- SHAMAN - [30809] = true, -- Unleashed Rage - [51470] = true, -- Elemental Oath - [324] = "name", -- Lightning Shield - [24398] = "name", -- Water Shield - -- WARLOCK - [687] = true, -- Demon Skin (Rank 1) - [696] = true, -- Demon Skin (Rank 2) - - [6307] = true, -- Blood Pact (Rank 1) - [7804] = true, -- Blood Pact (Rank 2) - [7805] = true, -- Blood Pact (Rank 3) - [11766] = true, -- Blood Pact (Rank 4) - [11767] = true, -- Blood Pact (Rank 5) [27267] = true, -- Blood Pact (Rank 6) - [27268] = true, -- Blood Pact (Rank 6) [47982] = true, -- Blood Pact (Rank 7) - - [706] = "name", -- Demon Armor - [28176] = "name", -- Fel Armor - - -- WARRIOR - [2457] = true, -- Battle Stance - [71] = true, -- Defensive Stance - [2458] = true, -- Berserker Stance - - [469] = "name", -- Commanding Shout - [6673] = "name", -- Battle Shout - - -- Scrolls - [33079] = true, -- Armor (Scroll of Protection V) - [33078] = true, -- Intellect (Scroll of Intellect V) - [33081] = true, -- Stamina (Scroll of Stamina V) - [33080] = true, -- Spirit Magic (Scroll of Spirit V) - [33077] = true, -- Agility (Scroll of Agility V) - [33082] = true, -- Strength (Scroll of Strength V) } AddBlacklist(data) diff --git a/data/shared/blacklist.lua b/data/shared/blacklist.lua index eb276e8..cb1ec92 100644 --- a/data/shared/blacklist.lua +++ b/data/shared/blacklist.lua @@ -1,55 +1,241 @@ local _, ns = ... local AddBlacklist = ns.data.AddBlacklist +local In = ns.data.In -local EXPANSION = _G.LE_EXPANSION_LEVEL_CURRENT or -1 -local LE_EXPANSION_CLASSIC = _G.LE_EXPANSION_CLASSIC or 0 -local LE_EXPANSION_BURNING_CRUSADE = _G.LE_EXPANSION_BURNING_CRUSADE or 1 -local LE_EXPANSION_WRATH_OF_THE_LICH_KING = _G.LE_EXPANSION_WRATH_OF_THE_LICH_KING or 2 -local LE_EXPANSION_CATACLYSM = _G.LE_EXPANSION_CATACLYSM or 3 -local LE_EXPANSION_MISTS_OF_PANDARIA = _G.LE_EXPANSION_MISTS_OF_PANDARIA or 4 -local LE_EXPANSION_WARLORDS_OF_DRAENOR = _G.LE_EXPANSION_WARLORDS_OF_DRAENOR or 5 -local LE_EXPANSION_LEGION = _G.LE_EXPANSION_LEGION or 6 -local LE_EXPANSION_BATTLE_FOR_AZEROTH = _G.LE_EXPANSION_BATTLE_FOR_AZEROTH or 7 -local LE_EXPANSION_SHADOWLANDS = _G.LE_EXPANSION_SHADOWLANDS or 8 -local LE_EXPANSION_DRAGONFLIGHT = _G.LE_EXPANSION_DRAGONFLIGHT or 9 -local LE_EXPANSION_WAR_WITHIN = _G.LE_EXPANSION_WAR_WITHIN or 10 -local LE_EXPANSION_MIDNIGHT = _G.LE_EXPANSION_MIDNIGHT or 11 +local EXPANSION = ns.client.expansion +local LE = ns.expansions -------------------------------------------------- -- Black List -------------------------------------------------- -- "name": also hide every aura sharing this spell's localized name (all ranks, new food buffs) local general = { - [430] = "name", -- Drink - [433] = "name", -- Food - [19705] = "name", -- Well Fed + [430] = "name", -- Drink + [433] = "name", -- Food + [19705] = "name", -- Well Fed -- Lust - [57723] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Exhaustion (Heroism) - [57724] = (EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING), -- Sated (Bloodlust) - [80354] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Temporal Displacement (Mage) - [264689] = (EXPANSION >= LE_EXPANSION_SHADOWLANDS), -- Fatigued (Hunter) - [390435] = (EXPANSION >= LE_EXPANSION_DRAGONFLIGHT), -- Exhaustion (Evoker - Fury of the Aspects) + [57723] = In(LE.Wrath), -- Exhaustion (Heroism) + [57724] = In(LE.Wrath), -- Sated (Bloodlust) + [80354] = In(LE.Mists), -- Temporal Displacement (Mage) + [264689] = In(LE.Shadowlands), -- Fatigued (Hunter) + [390435] = In(LE.Dragonflight), -- Exhaustion (Evoker - Fury of the Aspects) + + -- DEATHKNIGHT + [48263] = In(LE.Wrath, LE.Mists), -- Frost Presence (Blood Presence on Cata, Mists) + [48265] = In(LE.Wrath, LE.Mists), -- Unholy Presence + [48266] = In(LE.Wrath, LE.Mists), -- Blood Presence (Frost Presence on Cata, Mists) + [55610] = In(LE.Wrath, LE.Mists), -- Improved Icy Talons + [57330] = In(LE.Wrath, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Horn of Winter -- DRUID - [1126] = "name", -- Mark of the Wild - [768] = true, -- Cat Form - [5487] = true, -- Bear Form - [24858] = true, -- Moonkin Form - [114282] = (EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA), -- Treant Form + [1126] = "name", -- Mark of the Wild + [768] = true, -- Cat Form + [5487] = true, -- Bear Form + [24858] = true, -- Moonkin Form + [114282] = In(LE.Mists), -- Treant Form + + [5232] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 2) + [6756] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 3) + [5234] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 4) + [8907] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 5) + [9884] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 6) + [9885] = In(LE.Classic, LE.Wrath), -- Mark of the Wild (Rank 7) + [26990] = In(LE.BurningCrusade, LE.Wrath), -- Mark of the Wild (Rank 8) + + [782] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 2) + [1075] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 3) + [8914] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 4) + [9756] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 5) + [9910] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 6) + [26992] = In(LE.BurningCrusade, LE.Wrath), -- Thorns (Rank 7) + + [783] = true, -- Travel Form + [1066] = In(LE.Classic, LE.Mists), -- Aquatic Form + [9634] = In(LE.Classic, LE.Wrath), -- Dire Bear Form + [33943] = In(LE.BurningCrusade, LE.Mists), -- Flight Form + [40120] = In(LE.BurningCrusade, LE.Mists), -- Swift Flight Form + + [21849] = In(LE.Classic, LE.Wrath) and "name", -- Gift of the Wild + [21850] = In(LE.Classic, LE.Classic), -- Gift of the Wild (Rank 2) + + -- HUNTER + [13165] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Aspect of the Hawk + [13163] = In(LE.Classic, LE.Wrath), -- Aspect of the Monkey -- MAGE - [1459] = "name", -- Arcane Intellect + [1459] = "name", -- Arcane Intellect + + [1460] = In(LE.Classic, LE.Wrath), -- Arcane Intellect (Rank 2) + [1461] = In(LE.Classic, LE.Wrath), -- Arcane Intellect (Rank 3) + [10156] = In(LE.Classic, LE.Wrath), -- Arcane Intellect (Rank 4) + [10157] = In(LE.Classic, LE.Wrath), -- Arcane Intellect (Rank 5) + [27126] = In(LE.BurningCrusade, LE.Wrath), -- Arcane Intellect (Rank 6) + + [30482] = In(LE.BurningCrusade, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Molten Armor + + [61316] = In(LE.Wrath, LE.Mists), -- Dalaran Brilliance + + [23028] = In(LE.Classic, LE.Wrath) and "name", -- Arcane Brilliance + + [168] = In(LE.Classic, LE.Wrath) and "name", -- Frost Armor + [7300] = In(LE.Classic, LE.Classic), -- Frost Armor (Rank 2) + [7301] = In(LE.Classic, LE.Classic), -- Frost Armor (Rank 3) + + [7302] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Ice Armor + [7320] = In(LE.Classic, LE.Classic), -- Ice Armor (Rank 2) + [10219] = In(LE.Classic, LE.Classic), -- Ice Armor (Rank 3) + [10220] = In(LE.Classic, LE.Classic), -- Ice Armor (Rank 4) + + [6117] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Mage Armor + [22782] = In(LE.Classic, LE.Classic), -- Mage Armor (Rank 2) + [22783] = In(LE.Classic, LE.Classic), -- Mage Armor (Rank 3) -- PALADIN - [7294] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Retribution Aura - [19746] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Concentration Aura - [19891] = (EXPANSION <= LE_EXPANSION_CATACLYSM), -- Resistance Aura - [32223] = (EXPANSION >= LE_EXPANSION_BURNING_CRUSADE), -- Crusader Aura + [7294] = In(LE.Classic, LE.Cataclysm), -- Retribution Aura + [19746] = In(LE.Classic, LE.Cataclysm), -- Concentration Aura + [19891] = In(LE.Classic, LE.Cataclysm), -- Resistance Aura + [32223] = In(LE.BurningCrusade), -- Crusader Aura + + [465] = In(LE.Classic, LE.Wrath) and "name", -- Devotion Aura + [25780] = In(LE.Classic, LE.Mists), -- Righteous Fury + [20217] = In(LE.Classic, LE.Mists), -- Blessing of Kings + [19740] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Cataclysm, LE.Mists), -- Blessing of Might + [19742] = In(LE.Classic, LE.Wrath) and "name", -- Blessing of Wisdom + [25782] = In(LE.Classic, LE.Wrath) and "name", -- Greater Blessing of Might + [25916] = In(LE.Classic, LE.Classic), -- Greater Blessing of Might (Rank 2) + [25894] = In(LE.Classic, LE.Wrath) and "name", -- Greater Blessing of Wisdom + [25918] = In(LE.Classic, LE.Classic), -- Greater Blessing of Wisdom (Rank 2) + [25898] = In(LE.Classic, LE.Wrath), -- Greater Blessing of Kings + [19899] = In(LE.Classic, LE.BurningCrusade), -- Fire Resistance Aura (Rank 2) + [19900] = In(LE.Classic, LE.BurningCrusade), -- Fire Resistance Aura (Rank 3) + [21084] = In(LE.Classic, LE.Wrath) and "name", -- Seal of Righteousness -- PRIEST - [1243] = (EXPANSION < LE_EXPANSION_MISTS_OF_PANDARIA) and "name", -- Power Word: Fortitude (Retail uses 21562) + [1243] = In(LE.Classic, LE.Cataclysm) and "name", -- Power Word: Fortitude (Retail uses 21562) + + [25389] = In(LE.BurningCrusade, LE.Wrath), -- Power Word: Fortitude (Rank 7) + + [21562] = In(LE.Classic, LE.Wrath) and "name" or true, -- Prayer of Fortitude (Power Word: Fortitude from Cata) + [21564] = In(LE.Classic, LE.BurningCrusade), -- Prayer of Fortitude (Rank 2) + + [976] = In(LE.Classic, LE.BurningCrusade), -- Shadow Protection (Rank 1) + [10957] = In(LE.Classic, LE.BurningCrusade), -- Shadow Protection (Rank 2) + + [27683] = In(LE.Classic, LE.BurningCrusade), -- Prayer of Shadow Protection + + [14819] = In(LE.Classic, LE.BurningCrusade), -- Divine Spirit + [27681] = In(LE.Classic, LE.BurningCrusade), -- Prayer of Spirit (Rank 1) + [32999] = In(LE.BurningCrusade, LE.Wrath), -- Prayer of Spirit (Rank 2) + [588] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Inner Fire + [15473] = In(LE.Classic, LE.Mists), -- Shadowform + + [1244] = In(LE.Classic, LE.Wrath), -- Power Word: Fortitude (Rank 2) + [1245] = In(LE.Classic, LE.Wrath), -- Power Word: Fortitude (Rank 3) + [2791] = In(LE.Classic, LE.Wrath), -- Power Word: Fortitude (Rank 4) + [10937] = In(LE.Classic, LE.Wrath), -- Power Word: Fortitude (Rank 5) + [10938] = In(LE.Classic, LE.Wrath), -- Power Word: Fortitude (Rank 6) + + -- ROGUE + [8679] = In(LE.Mists), -- Wound Poison + [5761] = In(LE.Mists), -- Mind-numbing Poison + + -- SHAMAN + [324] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Lightning Shield + [24398] = In(LE.BurningCrusade, LE.Wrath) and "name", -- Water Shield + + -- Windfury Weapon has 3 IDs per rank on Era: cast, effect, and one with no class + -- (R1 8232/8233/8234, R2 8235/8236/8237, R3 10486/10484/10488, R4 16362/16361/16363) + [8232] = In(LE.Classic, LE.Classic) and "name", -- Windfury Weapon + + [30809] = In(LE.Wrath, LE.Mists), -- Unleashed Rage + [51470] = In(LE.Wrath, LE.Mists), -- Elemental Oath + + [52127] = In(LE.Mists), -- Water Shield + + -- WARLOCK + [687] = In(LE.Classic, LE.Wrath), -- Demon Skin (Rank 1) + [696] = In(LE.Classic, LE.Wrath), -- Demon Skin (Rank 2) + + [6307] = In(LE.Classic, LE.Wrath), -- Blood Pact (Rank 1) + [7804] = In(LE.Classic, LE.Wrath), -- Blood Pact (Rank 2) + [7805] = In(LE.Classic, LE.Wrath), -- Blood Pact (Rank 3) + [11766] = In(LE.Classic, LE.Wrath), -- Blood Pact (Rank 4) + [11767] = In(LE.Classic, LE.Wrath), -- Blood Pact (Rank 5) + [27268] = In(LE.BurningCrusade, LE.Wrath), -- Blood Pact (Rank 6) + + [706] = In(LE.Classic, LE.Wrath) and "name", -- Demon Armor + [28176] = In(LE.BurningCrusade, LE.Wrath) and "name", -- Fel Armor + + -- WARRIOR + [2457] = In(LE.Classic, LE.Mists), -- Battle Stance + [71] = In(LE.Classic, LE.Mists), -- Defensive Stance + [2458] = In(LE.Classic, LE.Mists), -- Berserker Stance + [6673] = In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Battle Shout + [469] = In(LE.BurningCrusade, LE.Wrath) and "name" or In(LE.Mists, LE.Mists), -- Commanding Shout + + -- Scrolls + [8091] = In(LE.Classic, LE.BurningCrusade), -- Armor (Scroll of Protection) + [8094] = In(LE.Classic, LE.BurningCrusade), -- Armor (Scroll of Protection II) + [8095] = In(LE.Classic, LE.BurningCrusade), -- Armor (Scroll of Protection III) + [12175] = In(LE.Classic, LE.BurningCrusade), -- Armor (Scroll of Protection IV) + [33079] = In(LE.BurningCrusade, LE.Wrath), -- Armor (Scroll of Protection V) + + [8096] = In(LE.Classic, LE.BurningCrusade), -- Intellect (Scroll of Intellect) + [8097] = In(LE.Classic, LE.BurningCrusade), -- Intellect (Scroll of Intellect II) + [8098] = In(LE.Classic, LE.BurningCrusade), -- Intellect (Scroll of Intellect III) + [12176] = In(LE.Classic, LE.BurningCrusade), -- Intellect (Scroll of Intellect IV) + [33078] = In(LE.BurningCrusade, LE.Wrath), -- Intellect (Scroll of Intellect V) + + [8099] = In(LE.Classic, LE.BurningCrusade), -- Stamina (Scroll of Stamina) + [8100] = In(LE.Classic, LE.BurningCrusade), -- Stamina (Scroll of Stamina II) + [8101] = In(LE.Classic, LE.BurningCrusade), -- Stamina (Scroll of Stamina III) + [12178] = In(LE.Classic, LE.BurningCrusade), -- Stamina (Scroll of Stamina IV) + [33081] = In(LE.BurningCrusade, LE.Wrath), -- Stamina (Scroll of Stamina V) + + [8112] = In(LE.Classic, LE.BurningCrusade), -- Spirit Magic (Scroll of Spirit) + [8113] = In(LE.Classic, LE.BurningCrusade), -- Spirit Magic (Scroll of Spirit II) + [8114] = In(LE.Classic, LE.BurningCrusade), -- Spirit Magic (Scroll of Spirit III) + [12177] = In(LE.Classic, LE.BurningCrusade), -- Spirit Magic (Scroll of Spirit IV) + [33080] = In(LE.BurningCrusade, LE.Wrath), -- Spirit Magic (Scroll of Spirit V) + + [8115] = In(LE.Classic, LE.BurningCrusade), -- Agility (Scroll of Agility) + [8116] = In(LE.Classic, LE.BurningCrusade), -- Agility (Scroll of Agility II) + [8117] = In(LE.Classic, LE.BurningCrusade), -- Agility (Scroll of Agility III) + [12174] = In(LE.Classic, LE.BurningCrusade), -- Agility (Scroll of Agility IV) + [33077] = In(LE.BurningCrusade, LE.Wrath), -- Agility (Scroll of Agility V) + + [8118] = In(LE.Classic, LE.BurningCrusade), -- Strength (Scroll of Strength) + [8119] = In(LE.Classic, LE.BurningCrusade), -- Strength (Scroll of Strength II) + [8120] = In(LE.Classic, LE.BurningCrusade), -- Strength (Scroll of Strength III) + [12179] = In(LE.Classic, LE.BurningCrusade), -- Strength (Scroll of Strength IV) + [33082] = In(LE.BurningCrusade, LE.Wrath), -- Strength (Scroll of Strength V) + + -- Consumables + [17629] = In(LE.Classic, LE.BurningCrusade), -- Flask of Chromatic Resistance + + -- Reputation + [17670] = In(LE.Classic, LE.BurningCrusade), -- Agent Dawn Commission + + -- Christimas + [26218] = In(LE.Classic, LE.BurningCrusade), -- Mistletoe + + -- Hallowen + [24755] = In(LE.Classic, LE.BurningCrusade), -- Tricked or Treated + + -- Booms + [15366] = In(LE.Classic, LE.Classic), -- Songflower Serenade + [22817] = In(LE.Classic, LE.Classic), -- Fengus' Ferocity + [22818] = In(LE.Classic, LE.Classic), -- Mol'dar's Moxie + [22820] = In(LE.Classic, LE.Classic), -- Slip'kik's Savvy + [22888] = In(LE.Classic, LE.Classic), -- Rallying Cry of the Dragonslayer + [355363] = In(LE.Classic, LE.Classic), -- Rallying Cry of the Dragonslayer + [23768] = In(LE.Classic, LE.Classic), -- Sayge's Dark Fortune of Damage + [24425] = In(LE.Classic, LE.Classic), -- Spirit of Zandalar + [11371] = In(LE.Classic, LE.Classic), -- Gift of Arthas + [355365] = In(LE.Classic, LE.Classic), -- Spirit of Zandalar + [16323] = In(LE.Classic, LE.Classic), -- Juju Power } AddBlacklist(general) @@ -61,19 +247,16 @@ local classic = { -- DRUID [1126] = true, -- Mark of the Wild (Rank 1) - [467] = (EXPANSION < LE_EXPANSION_CATACLYSM), -- Thorns (Rank 1) + [467] = In(LE.Classic, LE.Wrath), -- Thorns (Rank 1) - [24907] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Moonkin Aura + [24907] = In(LE.Classic, LE.Mists), -- Moonkin Aura -- HUNTER - [19506] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Trueshot Aura + [19506] = In(LE.Classic, LE.Mists), -- Trueshot Aura -- MAGE [1459] = true, -- Arcane Intellect (Rank 1) - -- PALADIN - [19740] = (EXPANSION <= LE_EXPANSION_MISTS_OF_PANDARIA), -- Blessing of Might - -- ROGUE [1784] = false, -- Stealth [2823] = true, -- Deadly Poison @@ -135,7 +318,7 @@ AddBlacklist(classic) -------------------------------------------------- -- The Burning Crusade -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_BURNING_CRUSADE then +if EXPANSION >= LE.BurningCrusade then local data = { -- Events [44185] = true, -- Jack-o'-Lanterned! @@ -147,7 +330,7 @@ end -------------------------------------------------- -- Wrath of the Lich King -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_WRATH_OF_THE_LICH_KING then +if EXPANSION >= LE.Wrath then local data = { -- Items [72968] = true, -- Precious's Ribbon @@ -165,7 +348,7 @@ end -------------------------------------------------- -- Cataclysm -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_CATACLYSM then +if EXPANSION >= LE.Cataclysm then local data = { -- WARLOCK [108503] = true, -- Grimoire of Sacrifice @@ -189,7 +372,7 @@ end -------------------------------------------------- -- Mists of Pandaria -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_MISTS_OF_PANDARIA then +if EXPANSION >= LE.Mists then local data = { -- HUNTER [109260] = true, -- Aspect of the Iron Hawk @@ -231,7 +414,7 @@ end -------------------------------------------------- -- Warlords of Draenor -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_WARLORDS_OF_DRAENOR then +if EXPANSION >= LE.Warlords then local data = { -- World Buffs [186401] = true, -- Sign of the Skirmisher @@ -248,7 +431,7 @@ end -------------------------------------------------- -- Legion -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_LEGION then +if EXPANSION >= LE.Legion then local data = { -- PvP [282559] = true, -- Enlisted @@ -273,7 +456,7 @@ end -------------------------------------------------- -- Battle for Azeroth -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_BATTLE_FOR_AZEROTH then +if EXPANSION >= LE.BattleForAzeroth then local data = { -- World Buffs [335148] = true, -- Sign of the Twisting Nether @@ -327,7 +510,7 @@ end -------------------------------------------------- -- Shadowlands -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_SHADOWLANDS then +if EXPANSION >= LE.Shadowlands then local data = { -- World Buffs [347600] = true, -- Infused Ruby Tracking @@ -345,7 +528,7 @@ end -------------------------------------------------- -- Dragonflight -------------------------------------------------- -if EXPANSION >= LE_EXPANSION_DRAGONFLIGHT then +if EXPANSION >= LE.Dragonflight then local data = { -- DEATHKNIGHT @@ -357,7 +540,6 @@ if EXPANSION >= LE_EXPANSION_DRAGONFLIGHT then [32223] = true, -- Crusader Aura -- PRIEST - [21562] = true, -- Power Word: Fortitude [280398] = true, -- Sins of the Many -- SHAMAN diff --git a/data/shared/cooldowns.lua b/data/shared/cooldowns.lua index 40bb832..3c587ce 100644 --- a/data/shared/cooldowns.lua +++ b/data/shared/cooldowns.lua @@ -4,19 +4,8 @@ local CreateSpellCooldown = ns.data.CreateSpellCooldown local CreateSlotCooldown = ns.data.CreateSlotCooldown local AddCooldowns = ns.data.AddCooldowns -local expansion = _G.LE_EXPANSION_LEVEL_CURRENT or -1 -local LE_EXPANSION_CLASSIC = _G.LE_EXPANSION_CLASSIC or 0 -local LE_EXPANSION_BURNING_CRUSADE = _G.LE_EXPANSION_BURNING_CRUSADE or 1 -local LE_EXPANSION_WRATH_OF_THE_LICH_KING = _G.LE_EXPANSION_WRATH_OF_THE_LICH_KING or 2 -local LE_EXPANSION_CATACLYSM = _G.LE_EXPANSION_CATACLYSM or 3 -local LE_EXPANSION_MISTS_OF_PANDARIA = _G.LE_EXPANSION_MISTS_OF_PANDARIA or 4 -local LE_EXPANSION_WARLORDS_OF_DRAENOR = _G.LE_EXPANSION_WARLORDS_OF_DRAENOR or 5 -local LE_EXPANSION_LEGION = _G.LE_EXPANSION_LEGION or 6 -local LE_EXPANSION_BATTLE_FOR_AZEROTH = _G.LE_EXPANSION_BATTLE_FOR_AZEROTH or 7 -local LE_EXPANSION_SHADOWLANDS = _G.LE_EXPANSION_SHADOWLANDS or 8 -local LE_EXPANSION_DRAGONFLIGHT = _G.LE_EXPANSION_DRAGONFLIGHT or 9 -local LE_EXPANSION_WAR_WITHIN = _G.LE_EXPANSION_WAR_WITHIN or 10 -local LE_EXPANSION_MIDNIGHT = _G.LE_EXPANSION_MIDNIGHT or 11 +local expansion = ns.client.expansion +local LE = ns.expansions local racials = { -- Horde @@ -24,12 +13,12 @@ local racials = { CreateSpellCooldown(20549), -- War Stomp (Tauren) CreateSpellCooldown(20572), -- Blood Fury (Orc) CreateSpellCooldown(26297), -- Berserking (Troll) - CreateSpellCooldown(28730, expansion >= LE_EXPANSION_BURNING_CRUSADE), -- Arcane Torrent (Blood Elf) - CreateSpellCooldown(255654, expansion >= LE_EXPANSION_LEGION), -- Bull Rush (Highmountain Tauren) + CreateSpellCooldown(28730, expansion >= LE.BurningCrusade), -- Arcane Torrent (Blood Elf) + CreateSpellCooldown(255654, expansion >= LE.Legion), -- Bull Rush (Highmountain Tauren) -- Alliance CreateSpellCooldown(20594), -- Stoneform (Dwarf) - CreateSpellCooldown(265221, expansion >= LE_EXPANSION_BATTLE_FOR_AZEROTH), -- Fireblood Fury (Dark Iron Dwarf) + CreateSpellCooldown(265221, expansion >= LE.BattleForAzeroth), -- Fireblood Fury (Dark Iron Dwarf) } local gear = { diff --git a/dev/development.lua b/dev/development.lua index 9a67925..bc51ff1 100644 --- a/dev/development.lua +++ b/dev/development.lua @@ -117,3 +117,36 @@ local unseen = function() end ns.AddCommand("unseen", unseen, "dev: logs listed aura IDs; run again to list the ones never seen") + +-- fingerprint of the final data, to compare a client before and after moving blacklist IDs +-- usage: /filger dump; name checksums depend on the client locale +local function checksum(values) + local h = 0 + for _, v in ipairs(values) do + local s = tostring(v) + for i = 1, #s do h = (h * 31 + s:byte(i)) % 2147483647 end + h = (h * 31 + 10) % 2147483647 -- separator, so {1,23} ~= {12,3} + end + return format("%08x", h) +end + +local dump = function() + -- sorted, so the checksum doesn't depend on table iteration order + local ids, names = {}, {} + for key in next, ns.data.blacklist do + table.insert(type(key) == "number" and ids or names, key) + end + table.sort(ids) + table.sort(names) + + -- cooldown order is display order, so it is not sorted + local cooldowns = {} + for _, row in ipairs(ns.data.cooldowns) do + table.insert(cooldowns, row.spellId and ("spell" .. row.spellId) or ("slot" .. row.slotId)) + end + + print(Filger.title, "dump: blacklist", #ids, "ids", checksum(ids), "/", #names, "names", checksum(names)) + print(Filger.title, "dump: cooldowns", ns.player.class, #cooldowns, checksum(cooldowns)) +end + +ns.AddCommand("dump", dump, "dev: count and checksum of the final blacklist and cooldowns") diff --git a/docs/blacklist-plan.md b/docs/blacklist-plan.md new file mode 100644 index 0000000..ade1070 --- /dev/null +++ b/docs/blacklist-plan.md @@ -0,0 +1,171 @@ +# Blacklist consolidation plan + +## 1. Summary + +**Problem:** every `data//blacklist.lua` repeats IDs that other games also list. The 660 +entries across the game files hold only 339 distinct IDs, and the copies have drifted (15 IDs +differ between `true` and `"name"`). + +**Goal:** IDs that two or more games use move into `data/shared/blacklist.lua`, each gated by the +expansion range it applies to. IDs used by one game stay in that game's file. The final blacklist +of every client must stay identical, except for changes that are explicitly decided. + +**Scope:** +- Blacklist only. Class cooldowns stay in `data//cooldowns.lua`, because classes and builds + change often per game. `data/shared/cooldowns.lua` keeps only racials and gear slots. +- `data/Cata/` is not touched: its data has gaps and its client is dropped. `data/Camelot/` was + first out of scope, then Forever was decided to inherit Vanilla (see B7). +- `spells.lua` is not merged: only 4 IDs are shared between games. + +## 2. Facts + +- Verified in-game: every `LE_EXPANSION_*` constant exists on every supported client. + `LE_EXPANSION_LEVEL_CURRENT` is 0 on Era and Forever, 1 on TBC, 2 on Titan, 4 on MoP and 11 on + Retail. MoP `GetBuildInfo()` reports interface 50504. +- Shared data is gated by `ns.client.expansion` against `ns.expansions` (`core/init.lua`). Data + files load after `core\init.xml`. +- On the line Vanilla → TBC → Wrath → Mists → Standard, 336 of 337 blacklist IDs can be written as + a single from/to range. +- A `false` entry never un-hides an ID that another source hides (`core/data.lua`). "Hidden + everywhere except one game" is written as a range in shared, or kept in game files. +- A table literal can hold a key once, so an ID whose value changes by game needs one expression + or stays in the game files. +- Baseline before any data moves: no Lua errors and `/filger validate` reports nothing on every + client. + +## 3. Tasks + +- [x] **B1: Verify version values in-game** + - `/dump LE_EXPANSION_LEVEL_CURRENT` and the `LE_EXPANSION_*` constants on every client. + +- [x] **B2: Move `LE_EXPANSION_*` into `core/init.lua`** + - `ns.expansions` (`Classic`, `BurningCrusade`, `Wrath`, ...) and `ns.client.expansion`. The + per-file constants and `or N` fallbacks are gone. Data lines in the TOC moved after + `core\init.xml`. `.luacheckrc` and `docs/compatibility.md` are updated. + - Verify: `make check`. `tests/dump.lua` output equals HEAD's. `/reload` on every client with + no Lua errors. + +- [x] **B3: Offline diff tool `tests/dump.lua`** + - Loads the real `core/` and data files in TOC order for every game and class, runs + `Finalize()`, and prints one sorted line per blacklist, cooldown and spell entry, plus + duplicates. Every spell ID counts as valid. + - Usage: `lua tests/dump.lua > before.txt`, then after a change + `lua tests/dump.lua | diff before.txt -`. `lua tests/dump.lua ` dumps another tree, for + example one extracted with `git archive HEAD core data`. + +- [x] **B4: Range helper** + - Added `data.In(from, to)` (inclusive; `to` optional) in `core/data.lua`. The per-line + expressions in `data/shared/blacklist.lua` use it; the `if EXPANSION >= ...` section blocks + stay as they are. + - Example: `[5232] = In(LE.Classic, LE.Wrath)`, `[1126] = In(LE.Classic) and "name"`. + - Verify: `make check`, `make test` (test for `In`), the dump diff is empty. + +- [x] **B5: `/filger dump` dev command** + - Added to `dev/development.lua` (needs `config.general.dev`). Prints the count and a checksum + of `ns.data.blacklist` IDs and names (sorted, so table order doesn't matter), and of + `ns.data.cooldowns` for the logged-in class (in display order). Name checksums depend on + the client locale. + - Run it on every client before B7 and keep the output as the in-game baseline. + - Baseline (counts match `tests/dump.lua`): + + | Client | Blacklist IDs | Names | Cooldowns | + |---|---|---|---| + | Era | 182 `696d85c1` | 22 `77a82863` | PRIEST 54 `03c48323` | + | TBC | 172 `572f1d78` | 26 `3d81834a` | PRIEST 51 `1bd08cf3` | + | Titan | | | | + | MoP | 145 `493a032a` | 5 `2da120bc` | MONK 35 `6c84802e` | + | Retail | 332 `4660bdc8` | 5 `703b18bb` | MONK 47 `74962055` | + | Forever | | | | + +- [x] **B6: Decide the 15 conflicting IDs** + - Decided: `"name"` on Vanilla, TBC and Wrath; `true` on Mists. The conflicts come from ranks. + TBC and Wrath list only rank 1 and need `"name"`. Vanilla lists every rank. Mists has no ranks, + and on MoP `"name"` would also hide other auras with the same name (the DB2 has 36 Lightning + Shield and 20 Battle Shout IDs). + - Applied: Vanilla 21849, 23028, 168, 7302, 6117, 25782, 25894 and Wrath 21084 changed from + `true` to `"name"`. In B7, the 9 IDs that Mists lists use + `In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists)`. + - The Era names in the B5 baseline went from 15 `22c6c349` to 22 `77a82863`, as expected. + - For each one, choose unify on `"name"`, unify on `true`, or keep the per-game value. + `"name"` also hides every aura with the same localized name; that only matters on + Classic-family clients (Era, TBC, Titan, MoP). + + | ID | Spell | `"name"` in | `true` in | + |---|---|---|---| + | 13165 | Aspect of the Hawk | Vanilla, TBC, Wrath, Cata, Camelot | Mists | + | 6117 | Mage Armor | TBC, Wrath, Cata | Vanilla, Mists, Camelot | + | 324 | Lightning Shield | Vanilla, TBC, Wrath, Cata, Camelot | Mists | + | 25782 | Greater Blessing of Might | TBC, Wrath | Vanilla, Camelot | + | 25894 | Greater Blessing of Wisdom | TBC, Wrath | Vanilla, Camelot | + | 168 | Frost Armor | TBC, Wrath | Vanilla, Camelot | + | 6673 | Battle Shout | Vanilla, TBC, Wrath, Cata, Camelot | Mists | + | 588 | Inner Fire | Vanilla, TBC, Wrath, Camelot | Cata, Mists | + | 21849 | Gift of the Wild | TBC, Wrath | Vanilla, Camelot | + | 7302 | Frost Armor | TBC, Wrath | Vanilla, Mists, Camelot | + | 57330 | Horn of Winter | Wrath, Cata | Mists | + | 469 | Commanding Shout | TBC, Wrath, Cata | Mists | + | 21084 | Seal of Righteousness | Vanilla, TBC, Camelot | Wrath | + | 23028 | Arcane Brilliance | TBC, Wrath | Vanilla, Camelot | + | 30482 | Molten Armor | TBC, Wrath, Cata | Mists | + + - Apply the decisions in the game files first. The dump diff must show exactly the decided + changes and nothing else. + +- [x] **B7: Move multi-game IDs into `data/shared/blacklist.lua`, one class at a time** + - For each class: move every ID listed by two or more of Vanilla, TBC, Wrath, Mists and + Standard into shared with its range, and delete the copies from those game files. + Camelot and Cata files keep their entries. + - The dump diff must be empty after each class. If an ID's games don't form one range, leave + it in the game files. + - Done: 102 IDs moved into the `general` table; 1243 was already in shared, so only its game + copies were deleted. + - Forever inherits Vanilla (decided): shared ranges starting at `LE.Classic` also apply to + Forever (expansion 0), so Vanilla's entries moved into shared too, including the ones only + Vanilla lists (`In(LE.Classic, LE.Classic)`). Vanilla keeps only Hardcore and Season of + Discovery. Two IDs were resolved later: + - 21562: not in Wrath's file at first. Moved into shared as + `In(LE.Classic, LE.Wrath) and "name" or true`: Prayer of Fortitude Rank 1 up to Wrath + (`"name"` covers ranks 2-4, including 25392 and 48162 that TBC and Wrath never listed), + Power Word: Fortitude from Cata on. It is added to Wrath and Cata, and becomes `"name"` on + Vanilla, TBC and Forever. + - 16363: commented "Juju Power", but the Era and Forever DB2 name it Windfury Weapon (Rank 4, + no class). Replaced by Juju Power 16323 in shared as `In(LE.Classic, LE.Classic)`, so + Forever gets it too. Windfury Weapon is hidden instead by `[8232] = In(LE.Classic, + LE.Classic) and "name"`. + - Camelot's file is now empty. Forever gains 19 IDs (Priest PW:F ranks, world buffs, + events, 17629, 17670), all present in the Forever DB2 (1.60.1), and 8 IDs go from `true` + to `"name"` (168, 6117, 7302, 19740, 21849, 23028, 25782, 25894). Forever's dump now + equals Era's minus Hardcore and SoD. + - Other dump change: 48263 and 48266 (`In(LE.Wrath, LE.Mists)`) are added to Cata. Both exist + in the Cata DB2 (4.4.2), so this fills a gap in Cata's data (it already listed 48265 and + 55610). Their names swap between Wrath and Cata/Mists (Frost/Blood Presence). + - [x] General (food, drink, lust, events, world buffs): nothing to move + - [x] DEATHKNIGHT + - [x] DRUID + - [x] HUNTER + - [x] MAGE + - [x] MONK: nothing to move + - [x] PALADIN + - [x] PRIEST + - [x] ROGUE + - [x] SHAMAN + - [x] WARLOCK + - [x] WARRIOR + - [x] Others (DEMONHUNTER, EVOKER, consumables): scrolls + +- [x] **B8: Update docs** + - `docs/compatibility.md`: where a blacklist ID goes (shared with a range, or the game file). + +## 4. Open questions + +- ~~Should Forever inherit Vanilla's ranges?~~ Yes, excluding Hardcore and Season of Discovery + (see B7). Needs an in-game check on Forever. +- ~~21562 in Wrath~~ Moved into shared (see B7). +- ~~16363 in Vanilla~~ Replaced by Juju Power 16323 in shared (see B7). + +## 5. How to verify each step + +1. `mise exec -- make check` and `mise exec -- make test`. +2. `lua tests/dump.lua | diff before.txt -` is empty, or shows only the decided changes. +3. In game, on every client: `/reload` with no Lua errors, `/filger validate` reports nothing, + and from B5 on `/filger dump` matches the baseline for the logged-in class. diff --git a/docs/compatibility.md b/docs/compatibility.md index 7b5428d..1803d7b 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -31,11 +31,29 @@ One `Filger.toc` serves every client (`## Interface: 11509, 20506, 38002, 50504, (e.g. `[ExcludeLoadGameType tbc, wrath, mists, standard]`). - `core\compat.lua` and `core\util.lua` load first (Blizzard globals only), so `core\data.lua` can use them at load. -- Data is loaded before `core\init.xml` via `data\[Game]\.lua`; every `[Game]` folder must - contain every listed file (stubs are fine). `data/shared/` loads everywhere, gated by - `LE_EXPANSION_LEVEL_CURRENT`. `[Family]` is too coarse for spell data. +- Data is loaded after `core\init.xml` (it needs `ns.client`) via `data\[Game]\.lua`; every + `[Game]` folder must contain every listed file (stubs are fine). `data/shared/` loads everywhere, + gated by `ns.client.expansion` (`LE_EXPANSION_LEVEL_CURRENT`) against `ns.expansions`. + `[Family]` is too coarse for spell data. - `## Title` is one untagged line. +## Blacklist data + +- An ID listed for two or more games whose games form one range on + Vanilla → TBC → Wrath → Mists → Standard goes in the `general` table of + `data/shared/blacklist.lua` as `[id] = In(LE., LE.)` (`to` omitted: up to the current + expansion). Retail additions stay in the `if EXPANSION >= LE.` blocks. +- Otherwise (one game, or games that don't form one range) it stays in `data//blacklist.lua`. +- Forever (expansion 0) inherits every shared range starting at `LE.Classic`. Era-only content + (Hardcore, Season of Discovery) stays in `data/Vanilla/`. `data/Cata/` is not maintained. +- `"name"` also hides every aura with the same localized name. Use it where a game lists only + rank 1 (TBC, Wrath) or every rank (Vanilla); use `true` from Mists on, where `"name"` would + catch unrelated auras. An ID whose value differs by range is one expression: + `In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists)`. +- `false` never un-hides an ID that another source hides; write "everywhere except X" as a range. +- After moving IDs, `lua tests/dump.lua | diff before.txt -` must be empty unless the change is + intended; in game, compare `/filger dump`. + ## Libraries Git submodules in `libs/`: `LibStub` (loaded by `libs/init.xml`, every client) and `LibDispel` @@ -46,6 +64,10 @@ Git submodules in `libs/`: `LibStub` (loaded by `libs/init.xml`, every client) a Flags in `core/init.lua` (`ns.client`) compare `WOW_PROJECT_ID` (see table). `ns.client.isClassic` is any `classic` family client; `ns.client.isMainline` is its negation (Retail and Forever). +`ns.client.expansion` is `LE_EXPANSION_LEVEL_CURRENT`; `ns.expansions` holds the `LE_EXPANSION_*` +constants. Verified in-game: every `LE_EXPANSION_*` constant exists on every supported client, and +`LE_EXPANSION_LEVEL_CURRENT` is 0 on Era and Forever, 1 on TBC, 2 on Titan, 4 on MoP and 11 on Retail. + ## Secret values (Midnight / Retail) - Secret values allow no arithmetic, comparison, string operations or use as table keys. diff --git a/tests/dump.lua b/tests/dump.lua new file mode 100644 index 0000000..5070095 --- /dev/null +++ b/tests/dump.lua @@ -0,0 +1,130 @@ +-- Prints Filger's final spell data for every game and class, one sorted line per entry, so two +-- data trees can be diffed. Every spell ID counts as valid (no client DB here): /filger validate +-- covers missing IDs in game. +-- Run from the repository root: +-- lua tests/dump.lua [root] > dump.txt (root defaults to ".") + +local root = arg[1] or "." + +local classes = { + "DEATHKNIGHT", "DEMONHUNTER", "DRUID", "EVOKER", "HUNTER", "MAGE", "MONK", + "PALADIN", "PRIEST", "ROGUE", "SHAMAN", "WARLOCK", "WARRIOR", +} + +-- [Game] folder, WOW_PROJECT_ID, LE_EXPANSION_LEVEL_CURRENT and interface of each client +local games = { + { name = "Vanilla", project = 2, expansion = 0, interface = 11509 }, + { name = "TBC", project = 5, expansion = 1, interface = 20506 }, + { name = "Wrath", project = 11, expansion = 2, interface = 38002 }, + { name = "Cata", project = 14, expansion = 3, interface = 40000 }, -- not in the TOC; placeholder + { name = "Mists", project = 19, expansion = 4, interface = 50504 }, + { name = "Camelot", project = 18, expansion = 0, interface = 16001 }, + { name = "Standard", project = 1, expansion = 11, interface = 120105 }, +} + +local blizzard = { + WOW_PROJECT_MAINLINE = 1, + WOW_PROJECT_CLASSIC = 2, + WOW_PROJECT_BURNING_CRUSADE_CLASSIC = 5, + WOW_PROJECT_WRATH_CLASSIC = 11, + WOW_PROJECT_CATACLYSM_CLASSIC = 14, + WOW_PROJECT_CAMELOT = 18, + WOW_PROJECT_MISTS_CLASSIC = 19, + LE_EXPANSION_CLASSIC = 0, + LE_EXPANSION_BURNING_CRUSADE = 1, + LE_EXPANSION_WRATH_OF_THE_LICH_KING = 2, + LE_EXPANSION_CATACLYSM = 3, + LE_EXPANSION_MISTS_OF_PANDARIA = 4, + LE_EXPANSION_WARLORDS_OF_DRAENOR = 5, + LE_EXPANSION_LEGION = 6, + LE_EXPANSION_BATTLE_FOR_AZEROTH = 7, + LE_EXPANSION_SHADOWLANDS = 8, + LE_EXPANSION_DRAGONFLIGHT = 9, + LE_EXPANSION_WAR_WITHIN = 10, + LE_EXPANSION_MIDNIGHT = 11, + UIParent = {}, + CreateFrame = function() return {} end, + C_AddOns = { GetAddOnMetadata = function() return "" end }, + GetPhysicalScreenSize = function() return 1920, 1080 end, +} + +local function spellName(id) + return "spell" .. id +end + +local function load(ns, path) + assert(loadfile(root .. "/" .. path))("Filger", ns) +end + +-- loads the addon files that build ns.data, in TOC order, as `game` with player `class` +local function build(game, class) + for k, v in pairs(blizzard) do _G[k] = v end + _G.WOW_PROJECT_ID = game.project + _G.LE_EXPANSION_LEVEL_CURRENT = game.expansion + _G.GetBuildInfo = function() return "", "", "", game.interface end + _G.UnitClass = function() return class, class end + + local ns = { + config = { general = { dev = false } }, + compat = { GetSpellInfo = function(id) return { name = spellName(id) } end }, + } + load(ns, "core/util.lua") + load(ns, "core/data.lua") + load(ns, "core/init.lua") + for _, file in ipairs({ "blacklist", "cooldowns", "spells" }) do + load(ns, "data/" .. game.name .. "/" .. file .. ".lua") + end + for _, file in ipairs({ "blacklist", "cooldowns" }) do + load(ns, "data/shared/" .. file .. ".lua") + end + ns.data.Finalize() + return ns.data +end + +local function sortedKeys(t, keep) + local keys = {} + for k in pairs(t) do + if not keep or keep(k) then keys[#keys + 1] = k end + end + table.sort(keys, function(a, b) return tostring(a) < tostring(b) end) + return keys +end + +local function isNumber(k) return type(k) == "number" end + +local out = {} +local function emit(...) out[#out + 1] = table.concat({ ... }, " ") end + +for _, game in ipairs(games) do + local tag = "[" .. game.name .. "]" + local data = build(game, classes[1]) + + -- class independent + for _, id in ipairs(sortedKeys(data.blacklist, isNumber)) do + emit(tag, "blacklist", id, data.blacklist[spellName(id)] and "name" or "id") + end + for _, class in ipairs(sortedKeys(data.spells)) do + for _, id in ipairs(sortedKeys(data.spells[class])) do + local s = data.spells[class][id] + emit(tag, "spell", class, id, tostring(s.enabled), s.priority, s.stackThreshold) + end + end + + -- player class dependent + for _, class in ipairs(classes) do + if class ~= classes[1] then data = build(game, class) end + for i, row in ipairs(data.cooldowns) do + emit(tag, "cooldown", class, i, row.spellId and ("spell " .. row.spellId) or ("slot " .. row.slotId)) + end + local invalid = {} + for _, entry in ipairs(data.invalid) do + invalid[entry.kind .. " " .. (entry.class or "-") .. " " .. entry.id] = true + end + for _, key in ipairs(sortedKeys(invalid)) do + emit(tag, "invalid", class, key) + end + end +end + +table.sort(out) +print(table.concat(out, "\n")) diff --git a/tests/run.lua b/tests/run.lua index d9404ed..30b51d1 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -29,6 +29,7 @@ local function newData(known, class) local ns = { config = { general = { dev = false } }, player = { class = class or "MAGE" }, + client = { expansion = 2 }, compat = { GetSpellInfo = function(id) return known and known[id] and { name = known[id] } or nil @@ -102,6 +103,18 @@ test("CreateSlotCooldown", function() eq(pcall(data.CreateSlotCooldown, "x"), false, "non-numeric slotId errors") end) +test("In", function() + local data = newData() -- expansion 2 + + eq(data.In(0), true, "from below") + eq(data.In(2), true, "from equal") + eq(data.In(3), false, "from above") + eq(data.In(0, 2), true, "to equal") + eq(data.In(0, 1), false, "to below") + eq(data.In(2, 2), true, "single") + eq(data.In(3, 4), false, "range above") +end) + ------------------------------------------------------------ -- data.Finalize ------------------------------------------------------------ From af2114533ca92a3fe5912b57f2647f3c7b1af321 Mon Sep 17 00:00:00 2001 From: pedrozc90 Date: Thu, 29 Oct 2026 20:56:37 -0300 Subject: [PATCH 19/19] cleanup --- docs/audit-plan.md | 373 ----------------------------------------- docs/blacklist-plan.md | 171 ------------------- 2 files changed, 544 deletions(-) delete mode 100644 docs/audit-plan.md delete mode 100644 docs/blacklist-plan.md diff --git a/docs/audit-plan.md b/docs/audit-plan.md deleted file mode 100644 index 7e4e7ac..0000000 --- a/docs/audit-plan.md +++ /dev/null @@ -1,373 +0,0 @@ -# Filger improvement plan - -## 1. Summary - -**State (5.4.0):** the restructure into `core/`, `elements/` and `data/` is done. -luacheck is clean. The TOC Interface versions match all six clients in `../refs` (Retail 12.1.5, -Forever 1.60.1, MoP 5.5.4, Titan 3.80.2, TBC 2.5.6, Era 1.15.9). Most behaviour is still -unverified in-game. - -**Goals, in order:** -1. Fix the real bugs found in the aura and tooltip code. -2. Make spell data verifiable in-game (`/filger validate`) instead of relying on memory. -3. Close the Retail secret-value gaps in cooldowns. -4. Refresh the spell data. -5. Cleanup, performance, tests and release automation, without adding configuration or frameworks. - -Effort: **S** < 1h, **M** a few hours, **L** a day or more. Risk = the chance of breaking current behaviour. - ---- - -## 2. Tasks - -### Phase 1: Quick wins - -- [x] **T1: A reused aura button keeps a stale timer and hides permanent auras** — done in c67c811 - - When a button last showed a timed aura, its `OnUpdate` stays set. If the button is then reused - for a permanent aura (`expirationTime = 0`), the timer sees it as expired and calls `Hide()`. - The old `Time` text also stays. As a result, permanent buffs vanish on Classic clients. - - S / low. Files: `elements/Classic/auras.lua` - - Steps: - 1. In `aura_proto:Update`, when `duration` is 0: `SetScript("OnUpdate", nil)` and `Time:SetText("")`. - - Verify: `make check`. On Classic, with a timed buff and a permanent one (a form or aura), let - the timed one expire; the permanent icon must stay. - - Deps: none. - -- [x] **T2: Updated auras are filtered against stale data and never removed** — done in 266f5a9 - - The `updatedAuraInstanceIDs` branch calls `FilterAura` on the old cached table and never clears - an aura that stops passing the filter (for example, stacks dropping below `stackThreshold`). - - S / low. Files: `elements/Classic/auras.lua` - - Steps: - 1. Filter the refreshed data. When it fails, clear the aura from `actives` and set `changed`. - - Verify: `make check`. On Classic, use an aura with a `stackThreshold` and watch it appear and - disappear as its stacks cross the threshold. - - Deps: none. - -- [x] **T3: Full update can index a nil aura** — done in 5352def - - `GetAuraDataBySlot` can return nil, and the full-update loop then indexes - `data.auraInstanceID`. - - S / low. Files: `elements/Classic/auras.lua` - - Steps: - 1. Skip the slot when the data is nil. - - Verify: `make check`. Watch for no new Lua errors. - - Deps: none. - -- [x] **T4: The tooltip guard uses `and` where it means `or`** — done in a8a0ddc - - The check is `IsForbidden() and not IsVisible()`, so a forbidden GameTooltip still gets used. - - S / low. Files: `core/button.lua` - - Steps: - 1. Change `and` to `or`. - - Verify: `make check`. Hover icons on every client and confirm the tooltips still show. - - Deps: none. - -- [x] **T5: Building frames mutates the shared class spell table** — done in df51d9a - - `Mixin(spells[class] or {}, spells["ALL"] or {})` writes the `ALL` entries into the class table - itself. - - S / low. Files: `elements/Mainline/auras.lua`, `elements/Classic/auras.lua` - - Steps: - 1. Mix into a new table: `Mixin({}, spells[class] or {}, spells["ALL"] or {})`. - - Verify: `make check`. `PLAYER_AURAS` shows the same spells as before. - - Deps: none. - -- [x] **T6: Remove dead code** — done in b0ab67b - - Covers the `itemId` cooldown path (no data creates item rows), `util.print`, `util.error`, - `ns.player.name`, and the unused `button.name` and `button.duration`. - - S / low. Files: `elements/cooldowns.lua`, `core/button.lua`, `core/util.lua`, `core/init.lua` - - Steps: - 1. Remove the `itemId` path and the `SetItemByID` tooltip branch. - 2. Remove the unused util functions and fields. - - Verify: `make check`. Cooldowns and tooltips work on Retail and on one Classic client. - - Deps: none. D1 decides whether the compat fallbacks also go. - -- [x] **T7: Small hygiene fixes** — done in d4aa68b - - `/filger help` lists commands in random order. `data/shared/cooldowns.lua` lacks the - `or -1` fallback that `blacklist.lua` has. `dev/development.lua` links to the missing - `docs/secret-values-options.md`. - - S / none. Files: `core/commands.lua`, `data/shared/cooldowns.lua`, `dev/development.lua` - - Steps: - 1. Print the help entries in sorted order. - 2. Add the `or -1` fallback. - 3. Drop the dead doc reference. - - Verify: `make check`, then run `/filger help`. - - Deps: none. - -- [x] **T8: README fixes** — done in 73991e6 - - The ElvUI deferral isn't mentioned. The repo owner differs between the TOC (`wow-lua`) and the - README (`lua-wow`). Only `/filger help` is documented. - - S / none. Files: `README.md`, maybe `Filger.toc` - - Steps: - 1. Fix the dependencies list and the URLs. - 2. Document `auras` (and `validate` once T10 lands). - - Verify: read it through. - - Deps: D4. - -### Phase 2: Medium - -- [x] **T9: `Finalize` collects invalid entries instead of printing them** — done in 2d25f88 - - Every invalid ID currently prints a warning at every login. Cooldowns are validated only for - the player's class. - - M / low. Files: `core/data.lua` - - Steps: - 1. Store problems in `data.invalid = { { kind, class, id } }` instead of calling `warn`. - 2. Validate cooldown rows for every class, while still building the active list only for the - player. - 3. Print at most one summary line, and only when `ns.config.general.dev` is set. - - Verify: `make check` and the T15 tests. After `/reload`, no per-ID spam in chat. - - Deps: none. - -- [x] **T10: `/filger validate` command** - - Lists every configured ID that doesn't resolve on this client, so data is checked in-game - rather than from memory. - - M / low. Files: `core/commands.lua` - - Steps: - 1. Add a `validate` command that prints `data.invalid`, grouped by kind and class. - 2. ~~Also list the player's own cooldown rows where `C_SpellBook.IsSpellKnown` is false~~ - Dropped: it depends on talents and race, not on whether the ID exists. - - Verify: `/filger validate` on every client. Temporarily add a fake ID, confirm it is reported, - then remove it. - - Deps: T9. - - Note: `C_Spell.DoesSpellExist` is in all six clients' API docs and can serve as a second check. - -- [x] **T11: Blacklist names only work on English clients** - - `"Well Fed"`, `"Food"`, `"Drink"`, `"Mark of the Wild"`, `"Arcane Intellect"` and - `"Power Word: Fortitude"` don't match on other locales, and Mainline drops name keys entirely. - - M / low. Files: `data/shared/blacklist.lua`, `data/Standard/blacklist.lua`, `core/data.lua` - - Steps (D6: keep name matching): - 1. Replace each English name key with one representative spell ID flagged as a name entry. - Done: the value is `"name"` instead of `true`. - 2. At `Finalize`, resolve it with `GetSpellInfo(id).name` and store the localized name in - `data.blacklist`. An ID that doesn't resolve goes into `data.invalid`. Done: the ID itself - is also blacklisted, and string keys are no longer accepted. - 3. Mainline is unchanged: its aura containers filter by spell ID only. The `"Well Fed"` and - `"Hearty Well Fed"` keys in `data/Standard/blacklist.lua` never matched, so they were removed. - - Verify: `/filger validate`. On a non-English client, or by checking `GetSpellInfo(id).name`, - the buffs are hidden on Classic clients. - - Deps: T9, D6, U8. - -- [x] **T12: Retail cooldown secret-value gaps** - - Outcome: U1 and U2 both came back no, so steps 1 and 2 need no change. The secret path already - shows active, off-GCD rows without `casted`. As a fallback for an untested secret `spellID` - (instances/M+), a row shown through the secret path is now recorded in `casted`. - - A cast made while restricted may not be recorded in `casted`, so a cooldown still running - vanishes after combat. Slot cooldowns may return secret values, so the arithmetic in - `ProcessCooldownData` may raise errors. - - M / med. Files: `elements/cooldowns.lua` - - Steps: - 1. Apply the fix the U1 result calls for: either drop the `casted` gate for rows that are - active and off GCD, or record casts by another means. - 2. If U2 confirms slot cooldowns are secret, guard them with `IsSecret` and use a duration - object or skip them. - - Verify: Retail, in combat, cast a tracked CD, leave combat mid-cooldown, and confirm the icon - stays. Use a trinket in combat and confirm there's no Lua error. - - Deps: U1, U2. - -- [x] **T13: Cooldown update performance** - - `SPELL_UPDATE_COOLDOWN` fires on every GCD. Each event allocates a table per row and repeats - the same spell-info lookups. - - M / low. Files: `elements/cooldowns.lua` - - Steps: - 1. Cache name and icon per row once (they're static per spell). - 2. Reuse a per-row data table instead of allocating a new one. - - Verify: `make check`. Behaviour is unchanged. Optionally compare memory with `/dump collectgarbage("count")` - before and after a few minutes of combat. - - Deps: none, but T12 edits the same function, so don't run them in parallel. Land T12 first - unless U1 or U2 is still open. - -- [x] **T14: Missing refresh events for cooldowns** - - Rows go stale until the next cooldown event after a gear swap, a talent change or a trinket use. - - S–M / low. Files: `elements/cooldowns.lua` - - Steps: - 1. Register `PLAYER_EQUIPMENT_CHANGED` and force an update. - 2. Register `SPELLS_CHANGED` and re-check `isKnown`. - 3. Add whichever item-cooldown event U3 identifies. - - Verify: swap a trinket, change a talent, use a trinket. The icons update immediately. - - Deps: U3, T13. - -- [x] **T15: Minimal test harness for pure logic** - - No tests exist yet. - - M / none. Files: new `tests/run.lua`, `Makefile`, `.github/workflows/lint.yml`, `exclude.lst` - - Steps: - 1. Write a plain Lua 5.1 runner with stubbed `ns`, `GetSpellInfo` and `Mixin`, covering - `util.FormatTime`, the `data.Create*` constructors and `Finalize` (dedupe, ordering, - class+ALL, `invalid`). - 2. Add a `make test` target. - 3. Run it in CI and exclude `tests/` from packaging. - - Verify: `mise exec -- make test` and `make check` both pass, and CI is green. - - Deps: none, but it is most useful together with T9. - -- [x] **T16: Replace `MergeAPI` with a direct backdrop call** — done in a2cbd94 - - `MergeAPI` writes `CreateBackdrop` into every widget metatable. Filger only needs it on its - own buttons, and other addons may read the method as a sign that Tukui is loaded. - - S–M / med. Files: `core/api.lua`, `core/button.lua`, `Filger.lua` - - Steps: - 1. Make `ns.CreateBackdrop(frame)` call the Tukui/ElvUI method when one exists, or Filger's own. - 2. Have `StyleButton` call it. - 3. Delete `MergeAPI`. - - Verify: test standalone, with ElvUI and with Tukui/Tainted. Borders and backdrops look - identical to before, and Mainline container buttons are styled. - - Deps: none. - -- [ ] **T17: Release publishing to CurseForge and Wago** — deferred (D5) - - The TOC has no `X-Curse-Project-ID` or `X-Wago-ID`. - - S–M / low. Files: `Filger.toc`, `.github/workflows/release.yml` - - Steps: - 1. Add the IDs and secrets as chosen in D5. - 2. Use the CHANGELOG section as the release notes. - - Verify: push a test tag on a fork, or check the dry-run output. - - Deps: D5, U7. - -### Phase 3: Larger work - -- [x] **T18: Refresh the Retail spell data for 12.x** — done in 6d6552c - - M–L / low (data only). Files: `data/Standard/spells.lua`, `data/Standard/cooldowns.lua`, - `data/Standard/blacklist.lua` - - Steps: work one class per commit: - 1. Run `/filger validate`. - 2. Use `/filger auras player buffs` on each spec to get the IDs actually applied. - 3. Fix or remove entries. - - Verify: `/filger validate` is clean for that class. - - Deps: T10, U9. - -- [x] **T19: Refresh the Classic spell data** - - L / low. Files: `data/{Vanilla,TBC,Wrath,Mists,Camelot}/*.lua` - - Steps: one client per commit, validate only (no per-class `/filger auras` runs): - 1. Run `/filger validate`. - 2. Fix or remove the reported entries. - - Progress: Vanilla and TBC clean, no changes needed. Wrath skipped: no client to test on. - Mists: shared Fortitude `1243` doesn't exist, limited to before MoP. - Camelot pending: no client access yet. - - Verify: `/filger validate` is clean on that client. - - Deps: T10, U9. Per D1, `data/Cata` stays too. - -- [x] **T20 (optional): Dev logger for listed aura IDs never seen** — done in 094f502 - - Catches cases where the cast ID was listed instead of the aura ID. - - M / none. Files: `dev/development.lua` - - Steps: - 1. While toggled on, record every listed `spellId` seen in `UNIT_AURA`. - 2. `/filger unseen` prints the listed IDs that never appeared. - - Verify: play a spec for a while and review the output. - - Deps: T9. Only works on Retail outside combat, while auras aren't secret. - -### Added after the decisions - -- [x] **T21: Remove the unused `FilgerData` SavedVariable** (D2) - - S / none. Files: `Filger.toc`, `CLAUDE.md` - - Steps: - 1. Delete the `## SavedVariables` line. - 2. Update the `CLAUDE.md` sentence that mentions `FilgerData`. - - Verify: `/reload` on one client and check that `/dump FilgerData` prints nil. - - Deps: none. - -- [x] **T22: Prune dev experiment commands** (D3) — done in f9d6024 - - `dev/` keeps shipping, but experiments whose answers are recorded here are dead weight. - - S / none. Files: `dev/development.lua` - - Steps: - 1. Remove each `exp*` command whose question is answered in §3 or elsewhere in this file. - 2. Keep `exp7` and `exp10` until U1, U2, U3 and U6 are answered. - - Verify: `make check`, then `/filger help` with `dev = true`. - - Deps: the U items each experiment serves. - ---- - -## 3. Blocked: needs a decision or in-game verification - -**Decisions (yours):** -- **D1 Cata.** Drop `data/Cata/`, `ns.client.isCata` and the legacy fallbacks in `compat.GetSpellInfo` and - `GetSpellCooldown`? The `C_Spell` versions exist on all six supported clients, so the fallbacks - only serve Cata. **Answer:** keep `ns.client.isCata`, `data/Cata` and the fallbacks. The blacklist is - incremental across expansions (Mists builds on the Cata entries), so the Cata data stays. -- **D2 `FilgerData`.** Remove the unused SavedVariable from the TOC? It creates a global for nothing. - **Answer:** remove it (T21). -- **D3 `dev/`.** Keep shipping it (gated by `config.general.dev`) or exclude it in `exclude.lst`? - Also, delete exp4–exp10 once their results are recorded? **Answer:** keep shipping it, so the TOC - doesn't change whenever `dev/` is needed. Remove the commands that are no longer needed (T22). -- **D4 Repo URL.** Is the owner `wow-lua` or `lua-wow`? **Answer:** `lua-wow` (matches the git remote). -- **D5 Publishing.** CurseForge, Wago, or GitHub releases only? This needs the project IDs and API - tokens. **Answer:** not publishing to CurseForge or Wago for now. T17 is deferred. -- **D6 Blacklist names.** Replace them with spell ID lists, or resolve the localized name from - one representative ID at `Finalize`? **Answer:** keep name matching. Names exist so buffs with - many IDs (Well Fed gains more every patch) are hidden without listing every ID. Resolve the - localized name from one representative ID (T11). - -**UNVERIFIED (check before starting the dependent task):** -- **U1** (blocks T12): is the `spellID` in `UNIT_SPELLCAST_SUCCEEDED` secret for player - casts in combat on Retail? Check with `/filger exp7` (set `dev = true`), enter combat, cast. - **Answer:** no. Every cast logged a readable `spellID` while `InCombatLockdown()` was true (open - world; instanced/M+ content not tested). -- **U2** (blocks T12): does `GetInventoryItemCooldown` return secret values in combat on - Retail? It isn't in the generated API docs. Check with `/filger exp7`, using a trinket in combat. - **Answer:** no. Slot 14 read `161793.5/120.0/1` in combat right after the trinket use. -- **U3** (blocks T14): which event refreshes trinket and item cooldowns - (`SPELL_UPDATE_COOLDOWN`, `BAG_UPDATE_COOLDOWN` or `ACTIONBAR_UPDATE_COOLDOWN`)? Check with - `/filger exp10`. - **Answer:** all three, in the same frame, at both the start and the end of the slot 14 cooldown. - `SPELL_UPDATE_COOLDOWN` carried the trinket's spell (1221146) with `itemID` nil, so the already - registered `SPELL_UPDATE_COOLDOWN` covers slot cooldowns. Bag items (potions) not tested. -- **U4:** does `C_Secrets.ShouldAurasBeSecret()` stay false in combat on Classic clients? - The API exists there. Check with `/run print(C_Secrets.ShouldAurasBeSecret())` in combat on each - Classic client. - **Answer:** yes, it prints `false` on Classic Era, TBC and MoP. WotLK (Titan) not tested. -- **U5 UNVERIFIED (deferred):** does the Mainline aura and cooldown path work at runtime on Forever? All the - required APIs are in the forever docs. Check with `/reload` on Forever and look at every frame. - Forever client not available yet. -- **U6 PARTIAL:** does `SPELL_UPDATE_COOLDOWN` fire when a cooldown ends? The code comment says - no. Check by logging with `/filger exp10`, or a quick event print, as a cooldown expires. - **Answer (trinket only):** the 120 s cooldown was due to end at 162268.8. All three events - fired at 162269.4 and showed it cleared, but `SPELL_UPDATE_COOLDOWN` carried spell 431462 - (also seen before the trinket use), not the trinket's spell. An event arrived about 0.6 s after - the end, but it may have been triggered by something else. Spell cooldown ends not tested. -- **U7:** which inputs do `lua-wow/packager@v1` and the `forever` flavor token in - `p3lim/toc-interface-updater@v4` accept? Check each action's README, or run the workflow manually. - **Answer:** done. -- **U8 UNVERIFIED:** the representative spell IDs for the D6 name entries. Pick IDs in-game - (`/filger auras player buffs` while the buff is up) on each client. - **Candidates (T11, from memory):** Well Fed 19705, Drink 430, Food 433, Mark of the Wild 1126, - Arcane Intellect 1459, Power Word: Fortitude 1243 (not 21562, which is Prayer of Fortitude on - Classic). On each client, confirm with `/filger validate` and - `/dump C_Spell.GetSpellInfo().name`. On Retail, 1243, 430 and 433 may not resolve; if so, - gate them to Classic. -- **U9:** every spell ID in `data/`. None are trusted from memory; `/filger validate` - (T10) and in-game observation are the source of truth. - **Answer:** done. - ---- - -## 4. Deferred or rejected - -| Idea | Status | Reason | -|------|--------|--------| -| Options UI, slash config, profiles, per-character settings | Rejected | Contradicts the no-configuration philosophy. | -| UI string localization | Rejected | The UI shows no user-facing strings, only icons and numbers. | -| busted or another test framework | Rejected | A plain Lua runner (T15) is enough. | -| Showing Stagger in Retail `PLAYER_DEBUFFS` | Rejected | Stagger is contextually secret, and the container can't filter it by ID. | -| Sorting secret cooldowns by remaining time | Rejected | Secret values can't be compared. | -| One `OnUpdate` ticker per element instead of per button | Deferred | Fine at the current scale (≤ ~60 buttons). | -| Sharing the expansion constant ladder in `core/` | Deferred | Cosmetic. Two copies are still readable. | -| Moving the inline Classic Stagger IDs into `data/` | Deferred | They only matter on Mists and aren't class-list data. | -| Linting `dev/` | Deferred | It is experimental code. Revisit after D3. | -| Re-adding Cata support | Deferred | Not in the TOC, and there are no refs for it. Its data and fallbacks stay (D1). | -| Publishing to CurseForge and Wago (T17) | Deferred | GitHub releases only for now (D5). | - ---- - -## 5. How to work through this - -- One task per session, in the order below, unless its deps or blockers say otherwise. -- Order: - 1. ~~Decide D1, D2, D3, D5, D6.~~ Done. T21 done. - 2. One in-game session for U1, U2, U3, U6 on Retail (`exp7`, `exp10`), plus U4 on each Classic - client and U5 on Forever. Then T22. - 3. T9 → T15 → T10. T15 tests `Finalize` after T9 changes it; T10 unblocks all data work. - 4. T16 on its own, so a visual regression is easy to trace. - 5. T12 → T13 → T14. If U1 or U2 is still open, do T13 before T12 (no logic overlap). - 6. T11, once D6 and U8 are resolved. - 7. T18 → T19. - 8. T20 last (optional). T17 is deferred (D5). -- You create the branch (`t-short-name`). Claude edits the working tree only and never commits. -- Before starting a task, its D and U items must be resolved. Record the answer next to the item - in §3. -- Each task ends with `mise exec -- make check` (plus `make test` once T15 exists) and the listed - in-game checks, with `/reload` on the named clients. -- When done: tick the checkbox and append the commit, for example `— done in abc1234`. -- New findings go into §2 as new task IDs, or into §4 with a reason. Don't renumber existing IDs. - diff --git a/docs/blacklist-plan.md b/docs/blacklist-plan.md deleted file mode 100644 index ade1070..0000000 --- a/docs/blacklist-plan.md +++ /dev/null @@ -1,171 +0,0 @@ -# Blacklist consolidation plan - -## 1. Summary - -**Problem:** every `data//blacklist.lua` repeats IDs that other games also list. The 660 -entries across the game files hold only 339 distinct IDs, and the copies have drifted (15 IDs -differ between `true` and `"name"`). - -**Goal:** IDs that two or more games use move into `data/shared/blacklist.lua`, each gated by the -expansion range it applies to. IDs used by one game stay in that game's file. The final blacklist -of every client must stay identical, except for changes that are explicitly decided. - -**Scope:** -- Blacklist only. Class cooldowns stay in `data//cooldowns.lua`, because classes and builds - change often per game. `data/shared/cooldowns.lua` keeps only racials and gear slots. -- `data/Cata/` is not touched: its data has gaps and its client is dropped. `data/Camelot/` was - first out of scope, then Forever was decided to inherit Vanilla (see B7). -- `spells.lua` is not merged: only 4 IDs are shared between games. - -## 2. Facts - -- Verified in-game: every `LE_EXPANSION_*` constant exists on every supported client. - `LE_EXPANSION_LEVEL_CURRENT` is 0 on Era and Forever, 1 on TBC, 2 on Titan, 4 on MoP and 11 on - Retail. MoP `GetBuildInfo()` reports interface 50504. -- Shared data is gated by `ns.client.expansion` against `ns.expansions` (`core/init.lua`). Data - files load after `core\init.xml`. -- On the line Vanilla → TBC → Wrath → Mists → Standard, 336 of 337 blacklist IDs can be written as - a single from/to range. -- A `false` entry never un-hides an ID that another source hides (`core/data.lua`). "Hidden - everywhere except one game" is written as a range in shared, or kept in game files. -- A table literal can hold a key once, so an ID whose value changes by game needs one expression - or stays in the game files. -- Baseline before any data moves: no Lua errors and `/filger validate` reports nothing on every - client. - -## 3. Tasks - -- [x] **B1: Verify version values in-game** - - `/dump LE_EXPANSION_LEVEL_CURRENT` and the `LE_EXPANSION_*` constants on every client. - -- [x] **B2: Move `LE_EXPANSION_*` into `core/init.lua`** - - `ns.expansions` (`Classic`, `BurningCrusade`, `Wrath`, ...) and `ns.client.expansion`. The - per-file constants and `or N` fallbacks are gone. Data lines in the TOC moved after - `core\init.xml`. `.luacheckrc` and `docs/compatibility.md` are updated. - - Verify: `make check`. `tests/dump.lua` output equals HEAD's. `/reload` on every client with - no Lua errors. - -- [x] **B3: Offline diff tool `tests/dump.lua`** - - Loads the real `core/` and data files in TOC order for every game and class, runs - `Finalize()`, and prints one sorted line per blacklist, cooldown and spell entry, plus - duplicates. Every spell ID counts as valid. - - Usage: `lua tests/dump.lua > before.txt`, then after a change - `lua tests/dump.lua | diff before.txt -`. `lua tests/dump.lua ` dumps another tree, for - example one extracted with `git archive HEAD core data`. - -- [x] **B4: Range helper** - - Added `data.In(from, to)` (inclusive; `to` optional) in `core/data.lua`. The per-line - expressions in `data/shared/blacklist.lua` use it; the `if EXPANSION >= ...` section blocks - stay as they are. - - Example: `[5232] = In(LE.Classic, LE.Wrath)`, `[1126] = In(LE.Classic) and "name"`. - - Verify: `make check`, `make test` (test for `In`), the dump diff is empty. - -- [x] **B5: `/filger dump` dev command** - - Added to `dev/development.lua` (needs `config.general.dev`). Prints the count and a checksum - of `ns.data.blacklist` IDs and names (sorted, so table order doesn't matter), and of - `ns.data.cooldowns` for the logged-in class (in display order). Name checksums depend on - the client locale. - - Run it on every client before B7 and keep the output as the in-game baseline. - - Baseline (counts match `tests/dump.lua`): - - | Client | Blacklist IDs | Names | Cooldowns | - |---|---|---|---| - | Era | 182 `696d85c1` | 22 `77a82863` | PRIEST 54 `03c48323` | - | TBC | 172 `572f1d78` | 26 `3d81834a` | PRIEST 51 `1bd08cf3` | - | Titan | | | | - | MoP | 145 `493a032a` | 5 `2da120bc` | MONK 35 `6c84802e` | - | Retail | 332 `4660bdc8` | 5 `703b18bb` | MONK 47 `74962055` | - | Forever | | | | - -- [x] **B6: Decide the 15 conflicting IDs** - - Decided: `"name"` on Vanilla, TBC and Wrath; `true` on Mists. The conflicts come from ranks. - TBC and Wrath list only rank 1 and need `"name"`. Vanilla lists every rank. Mists has no ranks, - and on MoP `"name"` would also hide other auras with the same name (the DB2 has 36 Lightning - Shield and 20 Battle Shout IDs). - - Applied: Vanilla 21849, 23028, 168, 7302, 6117, 25782, 25894 and Wrath 21084 changed from - `true` to `"name"`. In B7, the 9 IDs that Mists lists use - `In(LE.Classic, LE.Wrath) and "name" or In(LE.Mists, LE.Mists)`. - - The Era names in the B5 baseline went from 15 `22c6c349` to 22 `77a82863`, as expected. - - For each one, choose unify on `"name"`, unify on `true`, or keep the per-game value. - `"name"` also hides every aura with the same localized name; that only matters on - Classic-family clients (Era, TBC, Titan, MoP). - - | ID | Spell | `"name"` in | `true` in | - |---|---|---|---| - | 13165 | Aspect of the Hawk | Vanilla, TBC, Wrath, Cata, Camelot | Mists | - | 6117 | Mage Armor | TBC, Wrath, Cata | Vanilla, Mists, Camelot | - | 324 | Lightning Shield | Vanilla, TBC, Wrath, Cata, Camelot | Mists | - | 25782 | Greater Blessing of Might | TBC, Wrath | Vanilla, Camelot | - | 25894 | Greater Blessing of Wisdom | TBC, Wrath | Vanilla, Camelot | - | 168 | Frost Armor | TBC, Wrath | Vanilla, Camelot | - | 6673 | Battle Shout | Vanilla, TBC, Wrath, Cata, Camelot | Mists | - | 588 | Inner Fire | Vanilla, TBC, Wrath, Camelot | Cata, Mists | - | 21849 | Gift of the Wild | TBC, Wrath | Vanilla, Camelot | - | 7302 | Frost Armor | TBC, Wrath | Vanilla, Mists, Camelot | - | 57330 | Horn of Winter | Wrath, Cata | Mists | - | 469 | Commanding Shout | TBC, Wrath, Cata | Mists | - | 21084 | Seal of Righteousness | Vanilla, TBC, Camelot | Wrath | - | 23028 | Arcane Brilliance | TBC, Wrath | Vanilla, Camelot | - | 30482 | Molten Armor | TBC, Wrath, Cata | Mists | - - - Apply the decisions in the game files first. The dump diff must show exactly the decided - changes and nothing else. - -- [x] **B7: Move multi-game IDs into `data/shared/blacklist.lua`, one class at a time** - - For each class: move every ID listed by two or more of Vanilla, TBC, Wrath, Mists and - Standard into shared with its range, and delete the copies from those game files. - Camelot and Cata files keep their entries. - - The dump diff must be empty after each class. If an ID's games don't form one range, leave - it in the game files. - - Done: 102 IDs moved into the `general` table; 1243 was already in shared, so only its game - copies were deleted. - - Forever inherits Vanilla (decided): shared ranges starting at `LE.Classic` also apply to - Forever (expansion 0), so Vanilla's entries moved into shared too, including the ones only - Vanilla lists (`In(LE.Classic, LE.Classic)`). Vanilla keeps only Hardcore and Season of - Discovery. Two IDs were resolved later: - - 21562: not in Wrath's file at first. Moved into shared as - `In(LE.Classic, LE.Wrath) and "name" or true`: Prayer of Fortitude Rank 1 up to Wrath - (`"name"` covers ranks 2-4, including 25392 and 48162 that TBC and Wrath never listed), - Power Word: Fortitude from Cata on. It is added to Wrath and Cata, and becomes `"name"` on - Vanilla, TBC and Forever. - - 16363: commented "Juju Power", but the Era and Forever DB2 name it Windfury Weapon (Rank 4, - no class). Replaced by Juju Power 16323 in shared as `In(LE.Classic, LE.Classic)`, so - Forever gets it too. Windfury Weapon is hidden instead by `[8232] = In(LE.Classic, - LE.Classic) and "name"`. - - Camelot's file is now empty. Forever gains 19 IDs (Priest PW:F ranks, world buffs, - events, 17629, 17670), all present in the Forever DB2 (1.60.1), and 8 IDs go from `true` - to `"name"` (168, 6117, 7302, 19740, 21849, 23028, 25782, 25894). Forever's dump now - equals Era's minus Hardcore and SoD. - - Other dump change: 48263 and 48266 (`In(LE.Wrath, LE.Mists)`) are added to Cata. Both exist - in the Cata DB2 (4.4.2), so this fills a gap in Cata's data (it already listed 48265 and - 55610). Their names swap between Wrath and Cata/Mists (Frost/Blood Presence). - - [x] General (food, drink, lust, events, world buffs): nothing to move - - [x] DEATHKNIGHT - - [x] DRUID - - [x] HUNTER - - [x] MAGE - - [x] MONK: nothing to move - - [x] PALADIN - - [x] PRIEST - - [x] ROGUE - - [x] SHAMAN - - [x] WARLOCK - - [x] WARRIOR - - [x] Others (DEMONHUNTER, EVOKER, consumables): scrolls - -- [x] **B8: Update docs** - - `docs/compatibility.md`: where a blacklist ID goes (shared with a range, or the game file). - -## 4. Open questions - -- ~~Should Forever inherit Vanilla's ranges?~~ Yes, excluding Hardcore and Season of Discovery - (see B7). Needs an in-game check on Forever. -- ~~21562 in Wrath~~ Moved into shared (see B7). -- ~~16363 in Vanilla~~ Replaced by Juju Power 16323 in shared (see B7). - -## 5. How to verify each step - -1. `mise exec -- make check` and `mise exec -- make test`. -2. `lua tests/dump.lua | diff before.txt -` is empty, or shows only the decided changes. -3. In game, on every client: `/reload` with no Lua errors, `/filger validate` reports nothing, - and from B5 on `/filger dump` matches the baseline for the logged-in class.