diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..f75ce25
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+### Vim ###
+# swap
+[._]*.s[a-v][a-z]
+[._]*.sw[a-p]
+[._]s[a-v][a-z]
+[._]sw[a-p]
+# session
+Session.vim
+# temporary
+.netrwhist
+*~
+# auto-generated tag files
+tags
diff --git a/README.md b/README.md
index 9ac66d2..1775c0c 100755
--- a/README.md
+++ b/README.md
@@ -1,55 +1,4 @@
-modui for Classic WoW
-======
-
-
-
-
-======
+modui for wotlk
-#### Stable Versions ####
-https://www.wowinterface.com/downloads/info25114-modui.html
-
-#### Elements ####
-- Actionbar: BfA-style small mainbar with compact menus & bags.
-- Bag: one-bag inventory and bank.
-- Chat: simple chat solution with modified text strings and style.
-- Enemy Castbars: on Target and Nameplate unitframes.
-- Nameplates: combo points for Rogues and Druids, icon-style totems, style changes.
-- Quest Tracker: click-through to Quest Log.
-- Theme: change the colour of your UI textures with a colour wheel. cleaner button skinning.
-- Tooltip: cleaner, prettier, more useful information.
-- UnitFrame: style changes, class information,
-- Worldmap: smaller panel, usable while playing, coordinates and better group pins.
-
-
-#### Options ####
-Click the M above the backpack button (bottom-right of the main actionbar) to open theme and display options. modui is designed to be modular and the different elements of the UI can be turned on and off.
-
-#### FAQ ####
-Q: I'm getting an error that says something about MODUI_VAR.
-
-A: try reloading the UI (type: _/rl_) and then deleting your cache before making an issue, particularly if you've recently used an older version of modui.
-
-
-
-Q: The UI won't load in my game!
-
-A: Make sure you're putting the directory in _WoW/Classic/Interface/AddOns/_, then rename the folder from *modui_classic-master* to *modui_classic*.
-
-
-
-Q: Why aren't my target and nameplate casting timers correct?
-
-A: Blizzard recently disabled accurate timer checking in their classic API in the run up to release, so now its no longer possible to check which spell rank is being used - so modui has to assume its the highest rank with the longest spell cast time for now.
-
-
-
-Q: I don't want a black UI, how do I change it back to normal?
-
-A: Open the theme option by hitting the *M* above the bag button or typing _/modui_, then choose *UI Colour*. Hit *Reset To Default* or move the colour wheel picker to white and hit Okay.
-
-#### To-do ####
-- Combat Text
-- PvP and Battleground support.
-- Raid Frames (?)
-- Other stuff i forgot about since I last worked on this thing.
+I just remove everything i dont use from modUI, hardcoded some things
+and stole a little bit of code from [RougeUI](https://github.com/XyzKangUI/RougeUI/)
diff --git a/actionbar/bars.lua b/actionbar/bars.lua
deleted file mode 100755
index 3377ef7..0000000
--- a/actionbar/bars.lua
+++ /dev/null
@@ -1,390 +0,0 @@
-
-
- local _, ns = ...
-
- local n = {
- 'Action',
- 'MultiBarBottomLeft',
- 'MultiBarBottomRight',
- 'MultiBarLeft',
- 'MultiBarRight',
- }
-
- local x = {
- 'Pet',
- 'Stance',
- }
-
- local h = {
- 'MultiBarLeft',
- 'MultiBarRight',
- }
-
- local events = {
- 'PLAYER_LOGIN',
- 'PLAYER_XP_UPDATE',
- 'UPDATE_EXHAUSTION',
- 'PLAYER_LEVEL_UP'
- }
-
- local MoveBars = function()
- if not InCombatLockdown() then
- MultiBarBottomLeft:ClearAllPoints()
- MultiBarBottomLeft:SetPoint('BOTTOMLEFT', ActionButton1, 'TOPLEFT', 0, 23)
-
- MultiBarBottomLeftButton1:ClearAllPoints()
- MultiBarBottomLeftButton1:SetPoint('BOTTOMLEFT', ActionButton1, 'TOPLEFT', 0, ReputationWatchBar:IsShown() and 30 or 23)
-
- MultiBarBottomRight:SetPoint('LEFT', MultiBarBottomLeft, 'RIGHT', 43, 6)
-
- SlidingActionBarTexture0:ClearAllPoints()
- SlidingActionBarTexture0:SetPoint('TOPLEFT', PetActionButton1, -34, 12)
-
- MultiBarBottomRightButton7:ClearAllPoints()
- MultiBarBottomRightButton7:SetPoint('BOTTOMLEFT', MultiBarBottomRightButton1, 'TOPLEFT', 0, ReputationWatchBar:IsShown() and 31 or 24)
-
- PetActionButton1:ClearAllPoints()
- PetActionButton1:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, 8)
-
- MainMenuBarVehicleLeaveButton:ClearAllPoints()
- MainMenuBarVehicleLeaveButton:SetPoint('BOTTOM', MainMenuBarBackpackButton, 'TOP', -5, 30)
- end
- end
-
- local SetBarLength = function(shorten)
- local bar = _G['modui_mainbar']
-
- ActionBarUpButton:ClearAllPoints()
- ActionBarUpButton:SetPoint('LEFT', ActionButton12, 'RIGHT', -1, 10)
-
- ActionBarDownButton:ClearAllPoints()
- ActionBarDownButton:SetPoint('TOP', ActionBarUpButton, 'BOTTOM', 0, 10)
-
- MainMenuBarPageNumber:ClearAllPoints()
- MainMenuBarPageNumber:SetPoint('LEFT', ActionBarUpButton, 'RIGHT', -2, -10)
-
- if shorten then
- MainMenuExpBar:SetSize(760, 8)
- ReputationWatchBar:SetSize(760, 6)
- ReputationWatchBar.StatusBar:SetSize(760, 6)
- ExhaustionLevelFillBar:SetSize(760, 6)
- bar.t:SetTexture[[Interface/Addons/modui_classic/art/mainbar/ActionBarArtLarge]]
- bar.t:SetPoint('BOTTOM', -111, -11)
- bar.caps:SetSize(950, 64)
- ActionButton1:ClearAllPoints()
- ActionButton1:SetPoint('BOTTOMLEFT', MainMenuBarArtFrame, 120, 7)
- else
- MainMenuExpBar:SetSize(500, 8)
- ReputationWatchBar:SetSize(500, 6)
- ReputationWatchBar.StatusBar:SetSize(500, 6)
- ExhaustionLevelFillBar:SetSize(500, 6)
- bar.t:SetTexture[[Interface/Addons/modui_classic/art/mainbar/ActionBarArtSmall]]
- bar.t:SetPoint('BOTTOM', -237, -11)
- bar.caps:SetSize(700, 64)
- ActionButton1:ClearAllPoints()
- ActionButton1:SetPoint('BOTTOMLEFT', MainMenuBarArtFrame, 245, 7)
- end
- end
-
- local UpdateWatchbar = function()
- if not ReputationWatchBar:IsShown() then return end
- local _, index = GetWatchedFactionInfo()
- local min, max = ReputationWatchBar.StatusBar:GetMinMaxValues()
- local v = ReputationWatchBar.StatusBar:GetValue()
- local x = (v/max)*ReputationWatchBar.StatusBar:GetWidth()
- local colour = FACTION_BAR_COLORS[index]
-
- ReputationWatchBar:ClearAllPoints()
- ReputationWatchBar:SetPoint('BOTTOMLEFT', MainMenuExpBar, 'TOPLEFT')
- ReputationWatchBar:SetPoint('BOTTOMRIGHT', MainMenuExpBar, 'TOPRIGHT')
-
- ReputationWatchBar.spark:SetPoint('CENTER', ReputationWatchBar.StatusBar, 'LEFT', x, 2)
- ReputationWatchBar.spark:SetVertexColor(colour.r, colour.g, colour.b)
-
- ReputationWatchBar:HookScript('OnShow', MoveBars)
- ReputationWatchBar:HookScript('OnHide', MoveBars)
- end
-
- local UpdateExhaustion = function()
- local xp, max = UnitXP'player', UnitXPMax'player'
- local threshold = GetXPExhaustion()
- if threshold then
- local x = ((xp + threshold)/max)*MainMenuExpBar:GetWidth()
- ExhaustionTick:SetPoint('CENTER', MainMenuExpBar, 'LEFT', x, 0)
- end
- end
-
- local HideMaxXP = function()
- for i = 0, 3 do
- local t = _G['MainMenuMaxLevelBar'..i]
- t:SetTexture''
- t:Hide()
- end
- end
-
- local UpdateXP = function()
- local xp, max = UnitXP'player', UnitXPMax'player'
- local x = (xp/max)*MainMenuExpBar:GetWidth()
- local rest = GetRestState()
- UpdateExhaustion()
- if _G['modui_mainbar'] then
- HideMaxXP()
- MainMenuExpBar.spark:SetPoint('CENTER', MainMenuExpBar, 'LEFT', x, 2)
- if rest == 1 then
- MainMenuExpBar.spark:SetVertexColor(0*1.5, .39*1.5, .88*1.5, 1)
- elseif rest == 2 then
- MainMenuExpBar.spark:SetVertexColor(.58*1.5, 0*1.5, .55*1.5, 1)
- end
- end
- end
-
- local UpdatePetBar = function()
- SlidingActionBarTexture0:ClearAllPoints()
- SlidingActionBarTexture0:SetPoint('BOTTOMLEFT', PetActionButton1, -14, -2)
-
- PetActionBarFrame:ClearAllPoints()
- PetActionButton1:ClearAllPoints()
- if MODUI_VAR['elements']['mainbar'].horiz and not MODUI_VAR['elements']['mainbar'].enable then
- PetActionBarFrame:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarRight:IsShown() and 56 or MultiBarBottomLeft:IsShown() and 8 or -40)
- PetActionButton1:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarRight:IsShown() and 56 or MultiBarBottomLeft:IsShown() and 8 or -40)
- else
- PetActionBarFrame:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarBottomLeft:IsShown() and 8 or -40)
- PetActionButton1:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarBottomLeft:IsShown() and 8 or -40)
- end
- end
-
- local UpdateStanceBar = function()
- StanceBarLeft:ClearAllPoints()
- StanceBarLeft:SetPoint('BOTTOMLEFT', StanceButton1, -14, -2)
- StanceButton1:ClearAllPoints()
- if MODUI_VAR['elements']['mainbar'].horiz and not MODUI_VAR['elements']['mainbar'].enable then
- StanceButton1:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarRight:IsShown() and 56 or MultiBarBottomLeft:IsShown() and 8 or -40)
- else
- StanceButton1:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 20, MultiBarBottomLeft:IsShown() and 8 or -40)
- end
- end
-
- local UpdatePetStance = function()
- if not InCombatLockdown() then
- UpdatePetBar()
- UpdateStanceBar()
- end
- end
-
- local UpdateBars = function()
- SetBarLength(MultiBar2_IsVisible() and true or false)
- UpdateXP()
- UpdateWatchbar()
- UpdatePetStance()
- end
-
- local AddXP = function()
- for i = 0, 3 do
- _G['MainMenuXPBarTexture'..i]:Hide()
- ReputationWatchBar.StatusBar['WatchBarTexture'..i]:SetAlpha(0)
- if MODUI_VAR['elements']['mainbar'].enable then
- _G['MainMenuBarTexture'..i]:Hide()
- end
- end
-
- ReputationWatchBar:SetSize(1024, 6)
- ReputationWatchBar.StatusBar:SetSize(1024, 6)
-
- ReputationWatchBar.spark = ReputationWatchBar:CreateTexture(nil, 'OVERLAY', nil, 7)
- ReputationWatchBar.spark:SetTexture[[Interface\CastingBar\UI-CastingBar-Spark]]
- ReputationWatchBar.spark:SetSize(35, 35)
- ReputationWatchBar.spark:SetBlendMode'ADD'
-
- MainMenuExpBar:SetSize(1024, 6)
- MainMenuExpBar:ClearAllPoints()
- MainMenuExpBar:SetPoint('BOTTOM', 0, MODUI_VAR['elements']['mainbar'].enable and 49 or 40)
-
- MainMenuExpBar.spark = MainMenuExpBar:CreateTexture(nil, 'OVERLAY', nil, 7)
- MainMenuExpBar.spark:SetTexture[[Interface\CastingBar\UI-CastingBar-Spark]]
- MainMenuExpBar.spark:SetVertexColor(.58*1.5, 0*1.5, .55*1.5, 1)
- MainMenuExpBar.spark:SetSize(35, 35)
- MainMenuExpBar.spark:SetBlendMode'ADD'
-
- MainMenuExpBar.sb = MainMenuExpBar:CreateTexture(nil, 'BACKGROUND', nil, -7)
- ns.SB(MainMenuExpBar.sb)
- MainMenuExpBar.sb:SetPoint('TOPLEFT', 0, -1)
- MainMenuExpBar.sb:SetPoint'BOTTOMRIGHT'
- MainMenuExpBar.sb:SetVertexColor(.5, .5, .5)
-
- MainMenuExpBar.t = MainMenuExpBar:CreateTexture(nil, 'BACKGROUND')
- ns.BD(MainMenuExpBar.t, 1, -.5)
- MainMenuExpBar.t:SetHeight(1)
- MainMenuExpBar.t:SetPoint('BOTTOMLEFT', MainMenuExpBar, 'TOPLEFT')
- MainMenuExpBar.t:SetPoint('BOTTOMRIGHT', MainMenuExpBar, 'TOPRIGHT')
-
- hooksecurefunc('MainMenuTrackingBar_Configure', UpdateWatchbar)
- hooksecurefunc('MainMenuBar_UpdateExperienceBars', UpdateWatchbar)
- end
-
- local AddButtonSkin = function()
- for _, v in pairs(n) do
- for i = 1, 12 do
- local bu = _G[v..'Button'..i]
- if bu then
- ns.BU(bu, .75, true, bu:GetHeight() - 2.25, bu:GetWidth() - 2.25)
- ns.BUBorder(bu)
- ns.BUElements(bu)
- end
- end
- end
- for _, v in pairs(x) do
- for i = 1, 10 do
- local bu = _G[v..'Button'..i]
- if bu then
- ns.BU(bu, .75, true, bu:GetHeight() - 2.25, bu:GetWidth() - 2.25)
- ns.BUBorder(bu)
- ns.BUElements(bu)
- end
- end
- end
- end
-
- local AddBars = function()
- local bar = CreateFrame('Frame', 'modui_mainbar', MainMenuBar)
- bar:SetSize(1024, 128)
- bar:SetPoint'BOTTOM'
-
- bar.t = bar:CreateTexture(nil, 'BACKGROUND')
- bar.t:SetAllPoints()
- tinsert(ns.skin, bar.t)
-
- bar.caps = CreateFrame('Frame', 'modui_endcaps', UIParent)
- bar.caps:SetPoint('BOTTOM', bar)
- bar.caps:SetFrameLevel(1)
-
- AddXP()
-
- MainMenuBarVehicleLeaveButton:SetSize(28, 28)
- ns.BUBorder(MainMenuBarVehicleLeaveButton, MainMenuBarVehicleLeaveButton:GetWidth() - 10, MainMenuBarVehicleLeaveButton:GetWidth() - 2, 3.5, 6)
-
- for _, v in pairs(n) do
- for i = 1, 12 do
- local bu = _G[v..'Button'..i]
- if bu then
- -- TODO: all our placement needs *MAJOR* streamlining
- -- but i dont have time rn
- if v == 'MultiBarBottomRight' then
- if i == 1 then
- bu:ClearAllPoints()
- bu:SetPoint('LEFT', ActionButton12, 'RIGHT', 46, 0)
- end
- end
-
- if i > 1 then
- bu:ClearAllPoints()
- -- pixel...
- if v == 'MultiBarRight' or v == 'MultiBarLeft' then
- bu:SetPoint('TOP', _G[v..'Button'..(i - 1)], 'BOTTOM', 0, -8.5)
- else
- bu:SetPoint('LEFT', _G[v..'Button'..(i - 1)], 'RIGHT', 8.5, 0)
- end
- -- PERFECTION!
- if i == 7 and v == 'MultiBarBottomRight' then
- bu:ClearAllPoints()
- bu:SetPoint('BOTTOMLEFT', _G[v..'Button1'], 'TOPLEFT', 0, 17)
- end
- end
- end
- end
- end
-
- for i, v in pairs(n) do
- if i > 1 then -- skip 'action'
- local bar = _G[v]
- bar:HookScript('OnShow', UpdateBars)
- bar:HookScript('OnHide', UpdateBars)
- end
- end
-
- for _, v in pairs(
- {
- MultiBarBottomLeft,
- PetActionBarFrame,
- StanceBarFrame,
- }
- ) do
- UIPARENT_MANAGED_FRAME_POSITIONS.v = nil
- end
-
- for _, v in pairs(
- {
- MainMenuBarLeftEndCap,
- MainMenuBarRightEndCap,
- -- fuck em, im just hiding these textures
- -- until i can be bothered to level hunter
- SlidingActionBarTexture0,
- SlidingActionBarTexture1,
- }
- ) do
- v:Hide()
- end
-
- hooksecurefunc('MultiActionBar_Update', MoveBars)
- hooksecurefunc('ActionBarController_UpdateAll', UpdateBars)
- hooksecurefunc('ShowPetActionBar', UpdatePetBar)
- end
-
- local AddHorizBars = function()
- for _, v in pairs(h) do
- for i = 1, 12 do
- local bu = _G[v..'Button'..i]
- if v == 'MultiBarRight' then
- if i == 1 then
- bu:ClearAllPoints()
- bu:SetPoint('BOTTOMLEFT', MultiBarBottomLeftButton1, 'TOPLEFT', 0, 8)
- else
- bu:ClearAllPoints()
- bu:SetPoint('LEFT', _G[v..'Button'..(i - 1)], 'RIGHT', 6, 0)
- end
- else
- if i == 1 then
- bu:ClearAllPoints()
- bu:SetPoint('BOTTOMLEFT', MultiBarBottomRightButton1, 'TOPLEFT', 0, 8)
- else
- bu:ClearAllPoints()
- bu:SetPoint('LEFT', _G[v..'Button'..(i - 1)], 'RIGHT', 6, 0)
- end
- end
- end
- end
- for i, v in pairs(n) do
- if i > 1 then
- local bar = _G[v]
- bar:HookScript('OnShow', UpdatePetStance)
- bar:HookScript('OnHide', UpdatePetStance)
- end
- end
- hooksecurefunc('ActionBarController_UpdateAll', UpdatePetStance)
- hooksecurefunc('ShowPetActionBar', UpdatePetBar)
- end
-
- local OnEvent = function(self, event)
- if MODUI_VAR['elements']['mainbar'].enable then
- if event == 'PLAYER_LOGIN' then
- AddBars()
- AddButtonSkin()
- MoveBars()
- UpdateBars()
- else
- UpdateXP()
- end
- elseif MODUI_VAR['elements']['mainbar'].xp then
- AddXP()
- UpdateXP()
- end
- if MODUI_VAR['elements']['mainbar'].horiz and not MODUI_VAR['elements']['mainbar'].enable then
- AddHorizBars()
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/actionbar/keypress.lua b/actionbar/keypress.lua
deleted file mode 100755
index 579415c..0000000
--- a/actionbar/keypress.lua
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
- local _, ns = ...
-
- local time = nil
-
- local SetButtonColour = function(self, r, g, b)
- for i = 1, 4 do
- self.bo[i]:SetVertexColor(r, g, b)
- end
- end
-
- local AddBorderColour = function(self, newtime)
- if self:GetChecked() then
- self.checked = true
- SetButtonColour(self, 255/255, 240/255, 0/255)
- end
- if self.keypress then
- local i = (newtime - self.keypress)*5
- SetButtonColour(self, .3*i, .3*i, .3*i)
- end
- if self.checked and not self:GetChecked() then
- SetButtonColour(self, MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b)
- self.checked = nil
- end
- if self.keypress and newtime > (self.keypress + .4) then
- SetButtonColour(self, MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b)
- self.keypress = nil
- end
- end
-
- local AddPetBorderColour = function()
- for i = 1, 10 do
- local bu = _G['PetActionButton'..i]
- local _, _, _, _, active = GetPetActionInfo(i)
- if active then
- SetButtonColour(bu, 255/255, 240/255, 0/255)
- else
- SetButtonColour(bu, MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b)
- end
- end
- end
-
- local AddKeyDown = function(bu)
- if not bu.keydown then
- local buttontype = string.upper(bu:GetName()) or bu:GetAttribute'binding'
- buttontype = replace(buttontype, 'BOTTOMLEFT', '1')
- buttontype = replace(buttontype, 'BOTTOMRIGHT', '2')
- buttontype = replace(buttontype, 'RIGHT', '3')
- buttontype = replace(buttontype, 'LEFT', '4')
- buttontype = replace(buttontype, 'MULTIBAR', 'MULTIACTIONBAR')
-
- local key = GetBindingKey(buttontype)
- if key then
- bu:RegisterForClicks'AnyDown'
- SetOverrideBinding(bu, true, key, 'CLICK '..bu:GetName()..':LeftButton')
- end
-
- bu.keydown = true
- end
- end
-
- local ButtonDown = function(id)
- local time = GetTime()
- local bu = GetActionButtonForID(id)
- if bu:GetButtonState() == 'PUSHED' then
- bu.keypress = time
- end
- end
-
- local OnUpdate = function(self, elapsed)
- if self.bo then
- AddBorderColour(self, GetTime())
- end
- end
-
- local PetOnUpdate = function(self, elapsed)
- if self.bo then
- AddPetBorderColour(self, GetTime())
- end
- end
-
- local OnEvent = function(self, event)
- hooksecurefunc('ActionButtonDown', ButtonDown)
- hooksecurefunc('ActionButton_OnUpdate', OnUpdate)
- hooksecurefunc('PetActionBarFrame_OnUpdate', PetOnUpdate)
-
- if MODUI_VAR['elements']['mainbar'].keypress then
- hooksecurefunc('ActionButton_Update', AddKeyDown)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/aura/aura.lua b/aura/aura.lua
index 93ad421..7241267 100755
--- a/aura/aura.lua
+++ b/aura/aura.lua
@@ -1,294 +1,296 @@
-
-
- local _, ns = ...
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local e = CreateFrame'Frame'
-
- local layout = {
- ['player|HELPFUL'] = {
- point = 'TOPRIGHT',
- sort = 'TIME',
- minWidth = 330,
- minHeight = 100,
- x = -38,
- y = 0,
- wrapAfter = 12,
- wrapY = -50,
- direction = '+',
- position = {
- 'TOPRIGHT',
- Minimap,
- 'TOPLEFT',
- -35,
- -8,
- },
+local _, ns = ...
+local FONT_REGULAR = ns.FONT_REGULAR
+
+local e = CreateFrame'Frame'
+
+local layout = {
+ ['player|HELPFUL'] = {
+ point = 'TOPRIGHT',
+ sort = 'TIME',
+ minWidth = 330,
+ minHeight = 100,
+ x = -38,
+ y = 0,
+ wrapAfter = 9,
+ wrapY = -50,
+ direction = '+',
+ position = {
+ 'TOPRIGHT',
+ MinimapCluster,
+ 'TOPLEFT',
+ -150,
+ -180,
},
- ['player|HARMFUL'] = {
- point = 'TOPRIGHT',
- sort = 'TIME',
- minWidth = 330,
- minHeight = 100,
- x = -50,
- wrapAfter = 1,
- wrapY = -50,
- direction = '+',
- position = {
- 'TOPRIGHT',
- QuestWatchFrame,
- 'TOPLEFT',
- -25,
- -20,
- },
+ },
+ ['player|HARMFUL'] = {
+ point = 'TOPRIGHT',
+ sort = 'TIME',
+ minWidth = 330,
+ minHeight = 100,
+ x = -38,
+ wrapAfter = 10,
+ wrapY = -50,
+ direction = '+',
+ position = {
+ 'TOPRIGHT',
+ MinimapCluster,
+ 'TOPLEFT',
+ -150,
+ -390,
},
- ['weapons|NA'] = {
- xOffset = 40,
- position = {
- 'TOPRIGHT',
- QuestWatchFrame,
- 'TOPLEFT',
- -25,
- -20,
- },
+ },
+ ['weapons|NA'] = {
+ xOffset = 40,
+ position = {
+ 'TOPRIGHT',
+ MinimapCluster,
+ 'TOPLEFT',
+ -25,
+ -20,
},
- }
-
- local AbbrevTime = function(bu, time)
- local h, m, s, text
- if time <= 0 then
- text = ''
- elseif time < 3600 and time > 60 then
- h = floor(time/3600)
- m = floor(mod(time, 3600)/60 + 1)
- s = mod(time, 60)
- text = format('|cffffffff%d|rm', m)
- elseif time < 60 then
- m = floor(time/60)
- s = mod(time, 60)
- text = m == 0 and format('|cffffffff%d|rs', s)
+ },
+}
+
+local AbbrevTime = function(bu, time)
+ local h, m, s, text
+ if time <= 0 then
+ text = ''
+ elseif time > 60 then
+ m = floor(time/60 + 1)
+ text = format('|cffffffff%d|rm', m)
+ elseif time < 60 then
+ m = floor(time/60)
+ s = mod(time, 60)
+ text = m == 0 and format('|cffffffff%d|rs', s)
+ end
+ return text
+end
+
+local UpdateSB = function(self, duration, expiration)
+ self.sb:Hide()
+ if MODUI_VAR['elements']['aura'].statusbars and expiration and duration > 0 then
+ -- local p = duration/expiration
+ self.sb:SetMinMaxValues(0, duration)
+ self.sb:SetValue(expiration)
+ self.sb:SetStatusBarColor(self.debuff and 1 or 0, self.debuff and 0 or 1, 0)
+ self.sb:Show()
+ end
+end
+
+local OnUpdate = function(self, elapsed)
+ if self.expiration then
+ self.expiration = max(self.expiration - elapsed, 0)
+ if MODUI_VAR['elements']['aura'].values then
+ self:SetText(self.expiration > 0 and AbbrevTime(self, self.expiration) or '')
else
- h = floor(time/3600 + 1)
- text = format('|cffffffff%d|rh', h)
+ self:SetFormattedText(SecondsToTimeAbbrev(self.expiration))
+ end
+ if self.duration then
+ UpdateSB(self, self.duration, self.expiration)
end
- return text
end
-
- local UpdateSB = function(self, duration, expiration)
- self.sb:Hide()
- if MODUI_VAR['elements']['aura'].statusbars and expiration and duration > 0 then
- -- local p = duration/expiration
- self.sb:SetMinMaxValues(0, duration)
- self.sb:SetValue(expiration)
- self.sb:SetStatusBarColor(self.debuff and 1 or 0, self.debuff and 0 or 1, 0)
- self.sb:Show()
+end
+
+local FormatDebuffs = function(self, name, dtype)
+ if name then
+ local colour = DebuffTypeColor[dtype or 'none']
+ --self.Name:SetText(strupper(name))
+ --self.Name:SetTextColor(colour.r*1.7, colour.g*1.7, colour.b*1.7) -- brighten up
+ --self.Name:SetWidth(150)
+ --self.Name:SetWordWrap(true)
+ for i, v in pairs(self.F.bo) do
+ self.F.bo[i]:SetVertexColor(colour.r, colour.g, colour.b)
+ end
+ else
+ self.Name:SetText''
+ for i, v in pairs(self.F.bo) do
+ self.F.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
end
end
+end
- local OnUpdate = function(self, elapsed)
- if self.expiration then
- self.expiration = max(self.expiration - elapsed, 0)
- if MODUI_VAR['elements']['aura'].values then
- self:SetText(self.expiration > 0 and AbbrevTime(self, self.expiration) or '')
- else
- self:SetFormattedText(SecondsToTimeAbbrev(self.expiration))
- end
- if self.duration then
- UpdateSB(self, self.duration, self.expiration)
- end
- end
- end
+local UpdateAura = function(self, index, filter)
+ local header = self:GetParent()
+ local unit, filter = header:GetAttribute'unit', header:GetAttribute'filter'
+ local name, icon, count, dtype, duration, expiration, _, __, shouldConsolidate = UnitAura(unit, index, filter)
+ if name then
+ self:SetNormalTexture(icon)
- local FormatDebuffs = function(self, name, dtype)
- if name then
- local colour = DebuffTypeColor[dtype or 'none']
- self.Name:SetText(strupper(name))
- self.Name:SetTextColor(colour.r*1.7, colour.g*1.7, colour.b*1.7) -- brighten up
- self.Name:SetWidth(150)
- self.Name:SetWordWrap(true)
- for i, v in pairs(self.F.bo) do
- self.F.bo[i]:SetVertexColor(colour.r, colour.g, colour.b)
- end
- else
- self.Name:SetText''
- for i, v in pairs(self.F.bo) do
- self.F.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
- end
+ self.Count:SetText(count > 1 and count or '')
+
+ self.debuff = false
+ self.duration = duration
+ self.expiration = expiration - GetTime()
+
+ if self.expiration and duration > 0 then
+ self.sb:SetMinMaxValues(0, duration)
end
- end
- local UpdateAura = function(self, index, filter)
- local header = self:GetParent()
- local unit, filter = header:GetAttribute'unit', header:GetAttribute'filter'
- local name, icon, count, dtype, duration, expiration = UnitAura(unit, index, filter)
- if name then
- self:SetNormalTexture(icon)
- self.Count:SetText(count > 1 and count or '')
-
- self.debuff = false
- self.duration = duration
- self.expiration = expiration - GetTime()
-
- if self.expiration and duration > 0 then
- self.sb:SetMinMaxValues(0, duration)
- end
-
- if filter == 'HARMFUL' then
- self.debuff = true
- FormatDebuffs(self, name, dtype)
- end
- end
+ if filter == 'HARMFUL' then
+ self.debuff = true
+ FormatDebuffs(self, name, dtype)
+ end
end
+end
+
+local UpdateTempEnchant = function(self, index)
+ local enchant = (index == 16 and 2) or 6
+ local expiration = select(enchant, GetWeaponEnchantInfo())
+ local duration = expiration/1e3
+ local icon = GetInventoryItemTexture('player', index)
- local UpdateTempEnchant = function(self, index)
- local enchant = (index == 16 and 2) or 6
- local expiration = select(enchant, GetWeaponEnchantInfo())
- local duration = expiration/1e3
- local icon = GetInventoryItemTexture('player', index)
-
- if expiration then
- self.expiration = expiration/1000
- self.enchant = enchant
- self.duration = duration
-
- if self.expiration and duration and duration > 0 then
- self.sb:SetMinMaxValues(0, duration)
- end
- else
- self.expiration = nil
- self.enchant = nil
- self.duration = nil
- end
-
- self:SetAlpha(icon and 1 or 0)
-
- if icon then
- self:SetNormalTexture(icon)
- for k = 1, 4 do
- self.F.bo[k]:SetVertexColor(.6, 0, 1)
- end
+ if expiration then
+ self.expiration = expiration/1000
+ self.enchant = enchant
+ self.duration = duration
+
+ if self.expiration and duration and duration > 0 then
+ self.sb:SetMinMaxValues(0, duration)
end
+ else
+ self.expiration = nil
+ self.enchant = nil
+ self.duration = nil
end
- local OnAttributeChanged = function(self, attribute, index)
- if attribute == 'index' then
- UpdateAura(self, index, filter)
- elseif attribute == 'target-slot' then
- UpdateTempEnchant(self, index)
+ self:SetAlpha(icon and 1 or 0)
+
+ if icon then
+ self:SetNormalTexture(icon)
+ for k = 1, 4 do
+ self.F.bo[k]:SetVertexColor(.6, 0, 1)
end
end
+end
- local AddButton = function(self, name, bu)
- --print(name)
- if name:match'^child' or name:find'tempenchant' then
- bu:SetScript('OnUpdate', OnUpdate)
- bu:SetScript('OnAttributeChanged', OnAttributeChanged)
-
- bu.F = CreateFrame('Frame', nil, bu)
- bu.F:SetAllPoints()
- ns.BD(bu)
-
- ns.BUBorder(bu.F, 20)
- for i = 1, 4 do
- tinsert(ns.skinbu, bu.F[i])
- bu.F.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
- end
-
- local icon = bu:CreateTexture('$parentTexture', 'ARTWORK')
- icon:SetAllPoints()
- icon:SetTexCoord(.1, .9, .1, .9)
-
- local name = bu:CreateFontString('$parentName', nil, 'GameFontNormal')
- name:SetFont(FONT_REGULAR, 14)
- name:SetShadowOffset(1, -1)
- name:SetShadowColor(0, 0, 0)
- name:SetJustifyH'RIGHT'
- name:SetPoint('RIGHT', bu, 'LEFT', -15, 0)
-
- local d = bu:CreateFontString('$parentDuration', nil, 'GameFontNormalSmall')
- d:SetPoint('TOP', bu, 'BOTTOM', 0, -8)
-
- local count = bu:CreateFontString('$parentCount', nil, 'GameFontNormal')
- count:SetParent(bu.F)
- count:SetJustifyH'CENTER'
- count:SetPoint('CENTER', bu, 'TOP', 0, 2)
-
- local sb = CreateFrame('StatusBar', nil, bu)
- ns.BD(sb, 1, -2)
- ns.SB(sb)
- sb:SetHeight(5)
- sb:SetPoint'LEFT'
- sb:SetPoint'RIGHT'
- sb:SetPoint'BOTTOM'
- sb:SetMinMaxValues(0, 1)
- sb:Hide()
-
- sb.bg = sb:CreateTexture(nil, 'BORDER')
- ns.SB(sb.bg)
- sb.bg:SetAllPoints()
- sb.bg:SetVertexColor(.2, .2, .2)
-
- bu:SetFontString(d)
- bu:SetNormalTexture(icon)
-
- bu.Count = count
- bu.Name = name
- bu.sb = sb
- end
+local OnAttributeChanged = function(self, attribute, index)
+ if attribute == 'index' then
+ UpdateAura(self, index, filter)
+ elseif attribute == 'target-slot' then
+ UpdateTempEnchant(self, index)
end
+end
- local AddHeader = function(unit, filter, attribute)
- local Header = CreateFrame('Frame', 'modauras'..filter, Minimap, 'SecureAuraHeaderTemplate')
- Header:SetAttribute('template', 'modauraTemplate')
- Header:SetAttribute('unit', unit)
- Header:SetAttribute('filter', filter)
- Header:SetAttribute('xOffset', attribute.x)
- Header:SetPoint(unpack(attribute.position))
-
- if filter == 'HELPFUL' then
- Header:SetAttribute('weaponTemplate', 'modauraTemplate')
- Header:SetAttribute('includeWeapons', 1)
- end
+local AddButton = function(self, name, bu)
+ if name:match'^child' or name:find'tempenchant' then
- Header:SetAttribute('sortDirection', attribute.direction)
- Header:SetAttribute('sortMethod', attribute.sort)
- Header:SetAttribute('sortDirection', attribute.direction)
- Header:SetAttribute('point', attribute.point)
- Header:SetAttribute('minWidth', attribute.minWidth)
- Header:SetAttribute('minHeight', attribute.minHeight)
- Header:SetAttribute('xOffset', attribute.x)
- Header:SetAttribute('wrapYOffset', attribute.wrapY)
- Header:SetAttribute('wrapAfter', attribute.wrapAfter)
+ bu:SetScript('OnUpdate', OnUpdate)
+ bu:SetScript('OnAttributeChanged', OnAttributeChanged)
- Header:HookScript('OnAttributeChanged', AddButton)
- Header:Show()
+ ns.BD(bu)
+ bu.F = CreateFrame('Frame', nil, bu, "BackdropTemplate")
+ bu.F:SetAllPoints()
- RegisterAttributeDriver(Header, 'unit', '[vehicleui] vehicle; player')
- end
+ ns.BUBorder(bu.F, 20)
+ for i = 1, 4 do
+ tinsert(ns.skinbu, bu.F[i])
+ bu.F.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
- local RemoveBuffFrame = function()
- for _, v in pairs(
- {
- BuffFrame,
- TemporaryEnchantFrame
- }
- ) do
- v:UnregisterAllEvents()
- v:Hide()
+ local icon = bu:CreateTexture('$parentTexture', 'ARTWORK')
+ icon:SetAllPoints()
+ icon:SetTexCoord(.1, .9, .1, .9)
+
+ local name = bu:CreateFontString('$parentName', nil, 'GameFontNormal')
+ name:SetFont(FONT_REGULAR, 14)
+ name:SetShadowOffset(1, -1)
+ name:SetShadowColor(0, 0, 0)
+ name:SetJustifyH'RIGHT'
+ name:SetPoint('RIGHT', bu, 'LEFT', -15, 0)
+
+ local d = bu:CreateFontString('$parentDuration', nil, 'GameFontNormalSmall')
+ d:SetPoint('TOP', bu, 'BOTTOM', 0, -8)
+
+ local count = bu:CreateFontString('$parentCount', nil, 'GameFontNormal')
+ count:SetParent(bu.F)
+ count:SetJustifyH'CENTER'
+ count:SetPoint('CENTER', bu, 'TOP', 0, 2)
+
+ local sb = CreateFrame('StatusBar', nil, bu, "BackdropTemplate")
+ ns.BD(sb, 1, -2)
+ ns.SB(sb)
+ sb:SetHeight(5)
+ sb:SetPoint'LEFT'
+ sb:SetPoint'RIGHT'
+ sb:SetPoint'BOTTOM'
+ sb:SetMinMaxValues(0, 1)
+ sb:Hide()
+
+ sb.bg = sb:CreateTexture(nil, 'BORDER')
+ ns.SB(sb.bg)
+ sb.bg:SetAllPoints()
+ sb.bg:SetVertexColor(.2, .2, .2)
+
+ bu:SetFontString(d)
+ bu:SetNormalTexture(icon)
+
+ bu.Count = count
+ bu.Name = name
+ bu.sb = sb
+ end
+end
+
+local AddHeader = function(unit, filter, attribute)
+ local Header = CreateFrame('Frame', 'modauras'..filter, Minimap, 'SecureAuraHeaderTemplate')
+ Header:SetAttribute('template', 'modauraTemplate')
+ Header:SetAttribute('unit', unit)
+ Header:SetAttribute('filter', filter)
+ Header:SetAttribute('xOffset', attribute.x)
+ Header:SetPoint(unpack(attribute.position))
+
+ if filter == 'HELPFUL' then
+ Header:SetAttribute('weaponTemplate', 'modauraTemplate')
+ Header:SetAttribute('includeWeapons', 1)
+
+ local buffsAreConsolidated = GetCVarBool("consolidateBuffs")
+ if buffsAreConsolidated then
+ Header:SetAttribute("consolidateTo", 1)
+ Header:SetAttribute("consolidateDuration", -1)
end
end
- local AddHeader = function()
- if not MODUI_VAR['elements']['aura'].enable then return end
- RemoveBuffFrame()
- for i ,v in pairs(layout) do
- local unit, filter = i:match'(.-)|(.+)'
- if unit then
- AddHeader(unit, filter, v)
- end
+
+ Header:SetAttribute('sortDirection', attribute.direction)
+ Header:SetAttribute('sortMethod', attribute.sort)
+ Header:SetAttribute('sortDirection', attribute.direction)
+ Header:SetAttribute('point', attribute.point)
+ Header:SetAttribute('minWidth', attribute.minWidth)
+ Header:SetAttribute('minHeight', attribute.minHeight)
+ Header:SetAttribute('xOffset', attribute.x)
+ Header:SetAttribute('wrapYOffset', attribute.wrapY)
+ Header:SetAttribute('wrapAfter', attribute.wrapAfter)
+
+ Header:HookScript('OnAttributeChanged', AddButton)
+ Header:Show()
+
+ RegisterAttributeDriver(Header, 'unit', '[vehicleui] vehicle; player')
+end
+
+local RemoveBuffFrame = function()
+ for _, v in pairs(
+ {
+ BuffFrame,
+ TemporaryEnchantFrame
+ }
+ ) do
+ v:UnregisterAllEvents()
+ v:Hide()
+ end
+end
+
+local AddHeader = function()
+ if not MODUI_VAR['elements']['aura'].enable then return end
+ RemoveBuffFrame()
+ for i ,v in pairs(layout) do
+ local unit, filter = i:match'(.-)|(.+)'
+ if unit then
+ AddHeader(unit, filter, v)
end
end
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', AddHeader)
+ ConsolidatedBuffs:ClearAllPoints();
+ ConsolidatedBuffs:SetPoint('TOPRIGHT', MinimapCluster, 'TOPLEFT', -147, -130);
+end
- --
+e:RegisterEvent'PLAYER_LOGIN'
+e:SetScript('OnEvent', AddHeader)
diff --git a/bag/bag/bag.lua b/bag/bag/bag.lua
deleted file mode 100755
index e4470ee..0000000
--- a/bag/bag/bag.lua
+++ /dev/null
@@ -1,225 +0,0 @@
-
-
- local _, ns = ...
-
- local FONT_REGULAR = ns.FONT_REGULAR
- local e = CreateFrame'Frame'
-
- local AddSparkle = function(bu)
- bu.sparkle = CreateFrame('Button', bu:GetName()..'sparkle', bu, 'AutoCastShineTemplate')
- bu.sparkle:RegisterForClicks'NONE'
- bu.sparkle:SetAllPoints()
- bu.sparkle:Hide()
- end
-
- local ToggleSparkle = function(i, j, enter)
- local bu = _G['ContainerFrame'..i..'Item'..j]
-
- if not bu.sparkle then AddSparkle(bu) end
-
- if enter then
- bu.sparkle:SetFrameStrata'HIGH'
- bu.sparkle:Show()
- AutoCastShine_AutoCastStart(bu.sparkle, 0, 1, 0)
- else
- bu.sparkle:SetFrameStrata'LOW'
- bu.sparkle:Hide()
- AutoCastShine_AutoCastStop(bu.sparkle)
- end
- end
-
- local IterateForSparkle = function(self, enter)
- if self.isMainBag then
- for j = 1, GetContainerNumSlots(0) do
- ToggleSparkle(1, j, enter)
- end
- else
- local id = self:GetID() - CharacterBag0Slot:GetID() + 1
- for i = 1, NUM_CONTAINER_FRAMES do
- local frame = _G['ContainerFrame'..i]
- if frame:GetID() == id then
- for j = 1, GetContainerNumSlots(id) do
- ToggleSparkle(i, j, enter)
- end
- end
- end
- end
- end
-
- local OnEnter = function(self)
- if _G['modbag']:IsShown() then
- self.isMainBag = true
- IterateForSparkle(self, true)
- end
- end
-
- local OnLeave = function(self)
- IterateForSparkle(self, false)
- end
-
- local ShowBags = function(self)
- for i = 0, 3 do
- local s = _G['CharacterBag'..i..'Slot']
- s:SetAlpha(1)
- s:EnableMouse(true)
- end
- end
-
- local HideBags = function(self)
- for i = 0, 3 do
- local s = _G['CharacterBag'..i..'Slot']
- s:SetAlpha(0)
- s:EnableMouse(false)
- end
- end
-
- local UpdateSlot = function(self)
- if MODUI_VAR['elements']['mainbar'].enable then
- self:SetSize(18, 12)
- _G[self:GetName()..'IconTexture']:SetTexCoord(.1, .9, .2, .8)
- end
- end
-
- local AddBag = function()
- local bag = CreateFrame('Frame', 'modbag', UIParent, 'ButtonFrameTemplate')
- bag:SetPoint('BOTTOMRIGHT', -120, 150)
- bag:SetFrameLevel(3)
- bag:Hide()
- for _, v in pairs({bag:GetRegions()}) do tinsert(ns.skin, v) end
-
- bag.portrait = bag:CreateTexture(nil, 'BORDER', nil, 7)
- bag.portrait:SetSize(64, 64)
- bag.portrait:SetPoint('TOPLEFT', -8, 8)
- bag.portrait:SetAlpha(1)
- SetPortraitToTexture(bag.portrait, [[Interface\ICONS\Inv_misc_bag_08]])
-
- bag.name = bag:CreateFontString(nil, 'OVERLAY', 'GameFontNormal')
- bag.name:SetFont(FONT_REGULAR, 10)
- bag.name:SetText'Bag'
- bag.name:SetPoint('TOPLEFT', 63, -6)
- bag.name:SetTextColor(1, .7, 0)
-
- bag.bd = CreateFrame('Frame', nil, bag)
- ns.BD(bag.bd)
- bag.bd:SetPoint('TOPLEFT', 8, -58)
- bag.bd:SetPoint('BOTTOMRIGHT', -10, 27)
-
- bag.bd.t = bag.bd:CreateTexture(nil, 'ARTWORK')
- bag.bd.t:SetAllPoints()
- bag.bd.t:SetTexture([[Interface/Garrison/ClassHallBackground]], true, true)
- bag.bd.t:SetHorizTile(true)
- bag.bd.t:SetVertTile(true)
- bag.bd.t:SetVertexColor(.8, .8, .8)
-
- bag.topstrip = CreateFrame('Frame', nil, bag)
- bag.topstrip:SetHeight(25)
- bag.topstrip:SetPoint('TOPLEFT', bag, 60, -28)
- bag.topstrip:SetPoint('TOPRIGHT', -10, -28)
-
- local money = ContainerFrame1MoneyFrame
- money:SetParent(bag)
- money:ClearAllPoints()
- money:SetPoint('BOTTOMRIGHT', 0, 7)
- money:SetFrameStrata'MEDIUM'
- money:SetFrameLevel(3)
-
- --[[
- -- https://us.forums.blizzard.com/en/wow/t/key-ring-in-classic/253354/19
- KeyRingButton:SetSize(39, 18)
- KeyRingButton:SetParent(bag)
- KeyRingButton:ClearAllPoints()
- KeyRingButton:SetPoint('BOTTOMLEFT', bag, 6, 3)
- KeyRingButton:SetFrameLevel(4)
- KeyRingButton:GetNormalTexture():SetTexCoord(.61,0,0,0,.61,.59,0,.59)
- KeyRingButton:GetPushedTexture():SetTexCoord(.61,0,0,0,.61,.59,0,.59)
- KeyRingButton:SetHighlightTexture''
- ]]
-
- for _, v in pairs(
- {
- ContainerFrame1MoneyFrameCopperButtonText,
- ContainerFrame1MoneyFrameSilverButtonText,
- ContainerFrame1MoneyFrameGoldButtonText
- }
- ) do
- v:SetFont(FONT_REGULAR, 10, 'OUTLINE')
- v:SetShadowOffset(0, 0)
- end
-
- MainMenuBarBackpackButton:HookScript('OnEnter', OnEnter)
- MainMenuBarBackpackButton:HookScript('OnLeave', OnLeave)
- end
-
- local AddSlots = function()
- for i = 0, 3 do
- local bag = _G['modbag']
- local slot = _G['CharacterBag'..i..'Slot']
- local icon = _G['CharacterBag'..i..'SlotIconTexture']
-
- slot:HookScript('OnEnter', function(self)
- IterateForSparkle(self, true)
- end)
-
- slot:HookScript('OnLeave', function(self)
- IterateForSparkle(self, false)
- end)
-
- if MODUI_VAR['elements']['onebag'].enable then
- slot:SetScript('OnClick', nil)
- end
-
- if MODUI_VAR['elements']['mainbar'].enable then
- slot:UnregisterEvent'ITEM_PUSH'
- slot:SetNormalTexture''
- slot:SetCheckedTexture''
- slot:SetHighlightTexture''
- slot:SetFrameStrata'MEDIUM'
- slot:ClearAllPoints()
-
- ns.BD(slot)
- ns.BDStone(slot, 5)
-
- slot.IconBorder:SetAlpha(0)
-
- -- not... the best
- slot:HookScript('OnShow', UpdateSlot)
- slot:HookScript('OnEvent', UpdateSlot)
-
- slot:SetParent(MODUI_VAR['elements']['onebag'].enable and bag.topstrip or ContainerFrame1)
- if MODUI_VAR['elements']['onebag'].enable then
- if i == 0 then
- slot:SetPoint('RIGHT', bag.topstrip, 0, 3)
- else
- slot:SetPoint('RIGHT', _G['CharacterBag'..(i - 1)..'Slot'], 'LEFT', -9, 0)
- end
- else
- if MODUI_VAR['elements']['mainbar'].enable then
- slot:SetSize(18, 12)
- end
- slot:SetParent(ContainerFrame1)
- if i == 0 then
- slot:SetPoint('TOPRIGHT', ContainerFrame1, -20, -32)
- else
- slot:SetPoint('RIGHT', _G['CharacterBag'..(i - 1)..'Slot'], 'LEFT', -9, 0)
- end
- end
- end
- end
- end
-
- local OnEvent = function(self, event)
- if event == 'PLAYER_LOGIN' then
- e:RegisterEvent'PLAYER_ENTERING_WORLD'
- if MODUI_VAR['elements']['onebag'].enable then
- AddBag()
- end
- elseif event == 'PLAYER_ENTERING_WORLD' then
- AddSlots()
- end
- end
-
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/bag/bank/bank.lua b/bag/bank/bank.lua
deleted file mode 100755
index ccb6291..0000000
--- a/bag/bank/bank.lua
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
- local _, ns = ...
-
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local AddSparkle = function(bu)
- bu.sparkle = CreateFrame('Button', bu:GetName()..'sparkle', bu, 'SecureActionButtonTemplate, SecureHandlerStateTemplate, SecureHandlerEnterLeaveTemplate, AutoCastShineTemplate')
- bu.sparkle:RegisterForClicks'NONE'
- bu.sparkle:SetAllPoints()
- bu.sparkle:Hide()
- end
-
- local ToggleSparkle = function(self, isEnter)
- local id = self:GetID() + NUM_BAG_SLOTS
- for i = 1, NUM_CONTAINER_FRAMES do
- local frame = _G['ContainerFrame'..i]
- if frame:GetID() == id then
- for j = 1, GetContainerNumSlots(frame:GetID()) do
- local bu = _G['ContainerFrame'..i..'Item'..j]
-
- if not bu.sparkle then AddSparkle(bu) end
-
- if isEnter then
- bu.sparkle:SetFrameStrata'HIGH'
- bu.sparkle:Show()
- AutoCastShine_AutoCastStart(bu.sparkle, .25*i, .2/i, .2/i)
- else
- bu.sparkle:SetFrameStrata'LOW'
- bu.sparkle:Hide()
- AutoCastShine_AutoCastStop(bu.sparkle)
- end
- end
- end
- end
- end
-
- local AddBank = function()
- local bag = _G['modbag']
-
- local bank = CreateFrame('Button', 'modbank', UIParent, 'ButtonFrameTemplate')
- bank:SetPoint('BOTTOMRIGHT', bag, 'BOTTOMLEFT', -20, 0)
- bank:SetFrameLevel(5)
- bank:Hide()
- for _, v in pairs({bank:GetRegions()}) do tinsert(ns.skin, v) end
-
- bank.portrait = bank:CreateTexture(nil, 'BORDER', nil, 7)
- bank.portrait:SetSize(64, 64)
- bank.portrait:SetPoint('TOPLEFT', -8, 8)
- bank.portrait:SetAlpha(1)
- SetPortraitToTexture(bank.portrait, [[Interface\ICONS\Inv_misc_coin_02]])
-
- bank.name = CreateFrame('Button', nil, bank)
- bank.name:SetPoint('TOPLEFT', 65, -5)
-
- bank.name.t = bank.name:CreateFontString(nil, 'OVERLAY', 'GameFontNormal')
- bank.name.t:SetText'Bank'
- bank.name.t:SetAllPoints()
- bank.name:SetSize(35, 12)
-
- bank.bd = CreateFrame('Frame', nil, bank)
- ns.BD(bank.bd)
- bank.bd:SetPoint('TOPLEFT', 8, -58)
- bank.bd:SetPoint('BOTTOMRIGHT', -10, 27)
-
- bank.bd.t = bank.bd:CreateTexture(nil, 'ARTWORK')
- bank.bd.t:SetAllPoints()
- bank.bd.t:SetTexture([[Interface/BankFrame/Bank-Background]], true, true)
- bank.bd.t:SetHorizTile(true)
- bank.bd.t:SetVertTile(true)
- bank.bd.t:SetVertexColor(.8, .8, .8)
- tinsert(ns.skin, bank.bd.t)
-
- bank.space = CreateFrame('StatusBar', nil, bank.bd)
- ns.SB(bank.space)
- ns.BD(bank.space)
- bank.space:SetHeight(5)
- bank.space:SetPoint('TOPLEFT', bank, 9, -58)
- bank.space:SetPoint('TOPRIGHT', bank, -10, -58)
- bank.space:SetMinMaxValues(0, 100)
- bank.space:SetValue(100)
- bank.space:SetStatusBarColor(245/255, 172/255, 144/255)
-
- bank.purchase = CreateFrame('Button', 'modBankPurchase', bank, 'SmallMoneyFrameTemplate')
- bank.purchase:SetSize(30, 20)
- bank.purchase:SetPoint('BOTTOMRIGHT', bank, -10, 10)
- bank.purchase:SetScale(.7)
- SmallMoneyFrame_OnLoad(bank.purchase)
- MoneyFrame_SetType(bank.purchase, 'STATIC')
-
- bank.purchase.t = bank.purchase:CreateFontString(nil, 'OVERLAY', 'NumberFontNormalRight')
- bank.purchase.t:SetPoint('RIGHT', bank.purchase, 'LEFT', -6, 0)
- bank.purchase.t:SetText'Buy New Bank Slot +'
-
- for i = 1, 6 do
- local slot = BankSlotsFrame['Bag'..i]
- local _, highlight = slot:GetChildren()
-
- ns.BD(slot)
- ns.BDStone(slot, 5)
-
- slot:UnregisterEvent'ITEM_PUSH'
- slot:SetNormalTexture''
- slot:SetHighlightTexture''
- slot:SetParent(bank)
- slot:SetSize(16, 12)
- slot:ClearAllPoints()
- slot:SetParent(bank)
- slot:SetFrameStrata'MEDIUM'
-
- slot.IconBorder:SetAlpha(0)
-
- slot.icon:SetTexCoord(.1, .9, .225, .775)
-
- if highlight then highlight:Hide() end
-
- if i == 1 then
- slot:SetPoint('TOPRIGHT', bank, -15, -32)
- else
- slot:SetPoint('RIGHT', BankSlotsFrame['Bag'..(i - 1)], 'LEFT', -3, 0)
- end
-
- slot:HookScript('OnEnter', function(self)
- ToggleSparkle(self, true)
- end)
- slot:HookScript('OnLeave', function(self)
- ToggleSparkle(self, false)
- end)
- end
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['onebag'].enable then
- AddBank()
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/bag/button.lua b/bag/button.lua
deleted file mode 100755
index 0d50fec..0000000
--- a/bag/button.lua
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
- local _, ns = ...
-
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local e = CreateFrame'Frame'
-
- local ColourBagBorders = function(bu, slotID, texture, rarity, type, quest)
- local q = _G[bu:GetName()..'IconQuestTexture']
- local s = _G[bu:GetName()].searchOverlay
- if bu.bo then
- for i, v in pairs(bu.bo) do
- if texture then
- -- search
- if s:IsShown() then
- bu.bo[i]:SetVertexColor(1, 1, 1)
- -- quest
- elseif quest then
- bu.bo[i]:SetVertexColor(248/255, 98/255, 86/255)
- -- uncommon+ quality
- elseif rarity and rarity >= 2 and BAG_ITEM_QUALITY_COLORS[rarity] then
- local colour = BAG_ITEM_QUALITY_COLORS[rarity]
- bu.bo[i]:SetVertexColor(colour.r*1.5, colour.g*1.5, colour.b*1.5)
- elseif type > 0 then
- bu.bo[i]:SetVertexColor(.4, .3, 0)
- else
- bu.bo[i]:SetVertexColor(MODUI_VAR['theme_bu'].r or 1, MODUI_VAR['theme_bu'].g or 1, MODUI_VAR['theme_bu'].b or 1)
- end
- else
- if type > 0 then
- bu.bo[i]:SetVertexColor(.4, .3, 0)
- else
- bu.bo[i]:SetVertexColor(.2, .2, .2)
- end
- end
- end
- end
- end
-
- local ColourBankBorders = function(bu, name)
- local q = bu['IconQuestTexture']
- if bu.bo then
- -- quest
- for i, v in pairs(bu.bo) do
- if name then
- if q and q:IsShown() then
- bu.bo[i]:SetVertexColor(248/255, 98/255, 86/255)
- -- uncommon+
- elseif bu.quality and bu.quality > 1 and BAG_ITEM_QUALITY_COLORS[bu.quality] then
- local colour = BAG_ITEM_QUALITY_COLORS[bu.quality]
- bu.bo[i]:SetVertexColor(colour.r, colour.g, colour.b)
- else
- bu.bo[i]:SetVertexColor(MODUI_VAR['theme_bu'].r or 1, MODUI_VAR['theme_bu'].g or 1, MODUI_VAR['theme_bu'].b or 1)
- end
- else
- bu.bo[i]:SetVertexColor(.2, .2, .2)
- end
- end
- end
- end
-
- ns.ColourUpdate = function(frame)
- local name = frame:GetName()
- local id = frame:GetID()
- for i = 1, frame.size do
- local bu = _G[name..'Item'..i]
- local itemID = GetContainerItemID(id, bu:GetID())
- local texture, _, _, rarity = GetContainerItemInfo(id, bu:GetID())
- local itemlink = GetContainerItemLink(id, bu:GetID())
- local quest = false
- if itemlink then
- local _, _, _, _, _, itemtype = GetItemInfo(itemlink)
- if itemtype == TRANSMOG_SOURCE_2 then
- quest = true
- end
- end
-
- local _, type = GetContainerNumFreeSlots(id)
- ColourBagBorders(bu, itemID, texture, rarity, type, quest)
- bu.IconBorder:Hide()
- end
- end
-
- ns.BankColourUpdate = function(bu)
- local id = bu:GetID()
- local container = bu:GetParent():GetID()
-
- if bu.isBag then container = -4 end
- if container == 0 then return end -- stop colouring bags
-
- local _, _, _, _, _, _, ilink = GetContainerItemInfo(container, id)
- bu.ilink = ilink
- bu.quality = nil
-
- if bu.ilink then
- bu.name, _, bu.quality = GetItemInfo(bu.ilink)
- end
-
- ColourBankBorders(bu, bu.name)
- end
-
- ns.AddButtonStyle = function(bu)
- if bu and not bu.bo then
- ns.BU(bu, 1, true)
- ns.BUBorder(bu, 21)
- ns.ItemElements(bu)
- end
- end
-
- local AddBankSlots = function()
- for i = 1, 7 do
- local bu = BankSlotsFrame['Bag'..i]
- ns.BU(bu)
- ns.BUElements(bu)
- end
- end
-
- hooksecurefunc('ContainerFrame_Update', ns.ColourUpdate)
- hooksecurefunc('ContainerFrame_UpdateSearchResults', ns.ColourUpdate)
- hooksecurefunc('BankFrameItemButton_Update', ns.BankColourUpdate)
-
- --
diff --git a/bag/menu.lua b/bag/menu.lua
deleted file mode 100755
index 1251889..0000000
--- a/bag/menu.lua
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
- local _, ns = ...
-
- local bu = MainMenuBarBackpackButton
-
- --_G['MicroButtonAndBagsBar']:Hide()
- --_G['MicroButtonAndBagsBar']:UnregisterAllEvents()
-
- local ShowBags = function()
- for i = 0, 3 do
- local s = _G['CharacterBag'..i..'Slot']
- s:SetAlpha(1)
- s:EnableMouse(true)
- end
- end
-
- local HideBags = function()
- for i = 0, 3 do
- local s = _G['CharacterBag'..i..'Slot']
- s:SetAlpha(0)
- s:EnableMouse(false)
- end
- end
-
- local UpdateFreeSlots = function()
- local free, total = 0, 0
- for i = BACKPACK_CONTAINER, NUM_BAG_SLOTS do
- local slots, type = GetContainerNumFreeSlots(i)
- if type == 0 then
- free, total = free + slots, total + GetContainerNumSlots(i)
- end
- end
- bu.space:SetMinMaxValues(0, total)
- bu.space:SetValue(free)
- MainMenuBarBackpackButtonCount:SetText''
- ns.GRADIENT_COLOUR(bu.space, free, 0, total)
- end
-
- local AddBagMenu = function()
- bu:SetParent(_G['modui_mainbar'].caps)
- bu:ClearAllPoints()
- bu:SetPoint('RIGHT', _G['modui_mainbar'].caps, -35, 0)
- bu:SetSize(21, 21)
- bu:GetNormalTexture():SetTexture''
- ns.BUElements(bu)
-
- bu.Count:ClearAllPoints()
- bu.Count:SetPoint('BOTTOM', bu, 1, 0)
-
- bu.space = CreateFrame('StatusBar', 'modui_bagspace', bu)
- ns.SB(bu.space)
- bu.space:SetSize(22, 3)
- bu.space:SetPoint('TOP', bu, 'BOTTOM', -2, -7)
- bu.space:SetStatusBarColor(1, 1, 1)
- bu.space:SetFrameLevel(bu:GetFrameLevel())
- bu.space:SetBackdrop(
- {bgFile = [[Interface\Buttons\WHITE8x8]],
- insets = {
- left = -1,
- right = -1,
- top = -1,
- bottom = -1,
- }
- }
- )
- bu.space:SetBackdropColor(0, 0, 0)
-
- local mask = bu:CreateMaskTexture()
- mask:SetTexture[[Interface\Minimap\UI-Minimap-Background]]
- mask:SetPoint('TOPLEFT', -3, 3)
- mask:SetPoint('BOTTOMRIGHT', 3, -3)
-
- bu:GetCheckedTexture():SetTexture''
-
- MainMenuBarBackpackButtonIconTexture:AddMaskTexture(mask)
-
- if not bu.bo then
- bu.bo = bu:CreateTexture(nil, 'OVERLAY')
- bu.bo:SetSize(36, 36)
- bu.bo:SetTexture[[Interface\Artifacts\Artifacts]]
- bu.bo:SetPoint'CENTER'
- bu.bo:SetTexCoord(.5, .58, .8775, .9575)
- bu.bo:SetVertexColor(.6, .6, .6)
- tinsert(ns.skinmenu, bu.bo)
- end
- end
-
- local OnEvent = function(self, event)
- if MODUI_VAR['elements']['mainbar'].enable then
- AddBagMenu()
- UpdateFreeSlots()
- hooksecurefunc('MainMenuBarBackpackButton_UpdateFreeSlots', UpdateFreeSlots)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/bag/tools/greys.lua b/bag/tools/greys.lua
deleted file mode 100755
index 1499d2b..0000000
--- a/bag/tools/greys.lua
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- local _, ns = ...
-
- local AddSellShitButton = function()
- local bag = _G['modbag']
-
- local bu = CreateFrame('Button', nil, MerchantFrame, 'ActionButtonTemplate')
- ns.BU(bu)
- ns.BUBorder(bu, 16, 16)
- bu:SetSize(17, 17)
- bu:SetPoint('TOPLEFT', MerchantFrame, 70, -34)
- bu:SetFrameStrata'MEDIUM'
- bu:Hide()
-
- bu.i = bu:CreateTexture(nil, 'ARTWORK')
- bu.i:SetAllPoints()
- bu.i:SetTexture[[Interface\ICONS\inv_ore_tin_01]]
- bu.i:SetTexCoord(.1, .9, .1, .9)
-
- bu:SetScript('OnEnter', function(self)
- GameTooltip:SetOwner(self, 'ANCHOR_CURSOR')
- GameTooltip:SetText'Sell Poor Quality Items & Rubbish'
- GameTooltip:Show()
- end)
-
- bu:SetScript('OnLeave', function() GameTooltip:Hide() end)
-
- bu:SetScript('OnClick', function()
- for i = 0, 4 do
- for j = 1, GetContainerNumSlots(i) do
- local _, _, _, q = GetContainerItemInfo(i, j)
- if q == LE_ITEM_QUALITY_POOR then
- UseContainerItem(i, j)
- end
- end
- end
- end)
-
- MerchantFrame:HookScript('OnShow', function() bu:Show() end)
- MerchantFrame:HookScript('OnHide', function() bu:Hide() end)
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['onebag'].greys then
- AddSellShitButton()
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/bag/tools/sort.lua b/bag/tools/sort.lua
deleted file mode 100755
index 9057d96..0000000
--- a/bag/tools/sort.lua
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
- local _, ns = ...
-
- local AddAutoSort = function()
- local bag = _G['modbag'] or ContainerFrame1
- local bank = _G['modbank'] or BankFrame
-
- local sort = CreateFrame('Frame', 'modui_AutoSort', bag)
- sort:SetSize(14, 12)
- if MODUI_VAR['elements']['onebag'].enable then
- sort:SetPoint('LEFT', bag.topstrip, 7, 4)
- else
- sort:SetPoint('TOPLEFT', ContainerFrame1, 50, -32)
- end
- ns.BDStone(sort, 5)
-
- sort.t = CreateFrame('Button', 'modui_AudioSortButton', sort)
- sort.t:SetAllPoints()
- ns.BD(sort.t)
-
- sort.t.icon = sort.t:CreateTexture(nil, 'OVERLAY')
- sort.t.icon:SetAllPoints()
- sort.t.icon:SetAtlas'bags-button-autosort-up'
- sort.t.icon:SetTexCoord(.2, .8, .2, .8)
-
- sort.t:SetScript('OnEnter', function(self)
- GameTooltip:SetOwner(self)
- GameTooltip:SetText(BAG_CLEANUP_BAGS)
- GameTooltip:Show()
- end)
-
- sort.t:SetScript('OnLeave', GameTooltip_Hide)
-
- sort.t:SetScript('OnClick', function()
- if bank:IsShown() then
- SetSortBagsRightToLeft(true)
- SortBankBags()
- else
- SetSortBagsRightToLeft(false)
- SortBags()
- end
- end)
-
- end
-
- local OnEvent = function(self, event, ...)
- AddAutoSort()
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/bag/update.lua b/bag/update.lua
deleted file mode 100755
index 438071b..0000000
--- a/bag/update.lua
+++ /dev/null
@@ -1,378 +0,0 @@
-
-
- local _, ns = ...
-
- local size, spacing = 28, 9
- local buttons, bankbuttons = {}, {}
-
- --SetSortBagsRightToLeft(true)
- -- SetInsertItemsLeftToRight(false)
-
- local grab_slots = function()
- local numBags = 1
- for i = 1, NUM_BAG_FRAMES do
- local bagName = 'ContainerFrame'..i + 1
- if _G[bagName]:IsShown() and not _G[bagName..'BackgroundTop']:GetTexture():find'Bank' then
- numBags = numBags + 1
- end
- end
- return numBags
- end
-
- local BagSpace = function()
- local ct = 0
- for bag = 0, NUM_BAG_SLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- local link = GetContainerItemLink(bag, slot)
- if not link then ct = ct + 1 end
- end
- end
- return ct
- end
-
- local BagMaxSpace = function()
- local ct = 0
- for bag = 0, NUM_BAG_SLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- ct = ct + 1
- end
- end
- return ct
- end
-
- local BankSpace = function()
- local ct = 0
- for i = 1, 28 do
- local id = BankButtonIDToInvSlotID(i)
- local link = GetInventoryItemLink('player', id)
- if not link then ct = ct + 1 end
- end
- for bag = NUM_BAG_SLOTS + 1, NUM_BAG_SLOTS + NUM_BANKBAGSLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- local link = GetContainerItemLink(bag, slot)
- if not link then ct = ct + 1 end
- end
- end
- return ct
- end
-
- local BankMaxSpace = function()
- local ct = 28 -- account for standard bank slots
- for bag = NUM_BAG_SLOTS + 1, NUM_BAG_SLOTS + NUM_BANKBAGSLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- ct = ct + 1
- end
- end
- return ct
- end
-
- local HideBags = function(bagName)
- local bag = _G[bagName]
- if not bag.stripped then
- for i = 1, 7 do select(i, bag:GetRegions()):SetAlpha(0) end
- bag:EnableMouse(false)
- bag.ClickableTitleFrame:EnableMouse(false)
- _G[bagName..'CloseButton']:Hide()
- _G[bagName..'PortraitButton']:EnableMouse(false)
- bag.stripped = true
- end
- end
-
- local HideBagSmall = function()
- local hidden = nil
- for i = 0, 3 do
- local slot = _G['CharacterBag'..i..'Slot']
- if GetInventoryItemTexture('player', slot:GetID()) then
- slot:Show()
- else
- slot:Hide()
- hidden = true
- end
- end
- --[[if hidden then
- BagItemSearchBox:Hide()
- else
- BagItemSearchBox:Show()
- end]]
- end
-
- local AddBankSlotPurchase = function()
- local bank = _G['modbank']
- local num, full = GetNumBankSlots()
- local cost = GetBankSlotCost(num)
-
- bank.purchase:Hide()
-
- if not full then
- bank.purchase:Show()
-
- _G['modBankPurchaseSilverButton']:Hide()
- _G['modBankPurchaseCopperButton']:Hide()
-
- MoneyFrame_Update(bank.purchase, cost)
-
- bank.purchase:SetScript('OnClick', function()
- --PlaySound'igMainMenuOption'
- StaticPopup_Show'CONFIRM_BUY_BANK_SLOT'
- end)
- end
- end
-
- local HideBank = function()
- BankFrame:EnableMouse(false)
- BankFrame:DisableDrawLayer'BACKGROUND'
- BankFrame:DisableDrawLayer'BORDER'
- BankFrame:DisableDrawLayer'OVERLAY'
-
- BankSlotsFrame:DisableDrawLayer'BORDER'
-
- --BankItemAutoSortButton:EnableMouse(false)
- --BankItemAutoSortButton:SetAlpha(0)
-
- BankCloseButton:Hide()
- BankPortraitTexture:SetTexture''
-
- for _, v in pairs({BankFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
- v:SetTexture''
- v:SetAlpha(0)
- elseif v:GetObjectType() == 'FontString' then
- v:SetText''
- v:Hide()
- end
- end
-
- for _, v in pairs({
- BankFrameCloseButton,
- BankFrameMoneyFrame,
- BankItemSearchBox,
- BankPortraitTexture,
- BankFramePurchaseInfo,
- BankFrame.NineSlice
- }) do
- v:Hide()
- end
- end
-
- local HideReagentBank = function()
- ReagentBankFrame:DisableDrawLayer'BACKGROUND'
- ReagentBankFrame:DisableDrawLayer'BORDER'
- ReagentBankFrame:DisableDrawLayer'ARTWORK'
- ReagentBankFrame:DisableDrawLayer'OVERLAY'
- end
-
- local HideBankArt = function() -- previously bankArtToggle(x) (we dont need x)
- AddBankSlotPurchase()
- HideBank()
- --HideReagentBank()
-
- for _, v in pairs({BankFrameMoneyFrameInset, BankFrameMoneyFrameBorder}) do
- v:Hide()
- end
- end
-
- local AddBG = function(bu)
- bu.bg = bu:CreateTexture(nil, 'BACKGROUND', nil, 7)
- bu.bg:SetTexture[[Interface\PaperDoll\UI-Backpack-EmptySlot]]
- bu.bg:SetTexCoord(.1, .9, .1, .9)
- bu.bg:SetAlpha(.5)
- bu.bg:SetAllPoints()
- end
-
- local bu, con, bag, col, row
- local MoveButtons = function(table, frame)
- local columns = ceil(sqrt(#table))
- col, row = 0, 0
-
- for i = 1, #table do
- bu = table[i]
- bu:SetSize(size, size)
- bu:ClearAllPoints()
- bu:SetPoint('TOPLEFT', frame, col*(size + spacing) + 9, -1*row*(size + spacing) - 58)
-
- if not bu.bg then AddBG(bu) end
-
- if col > (columns - 2) then
- col = 0
- row = row + 1
- else
- col = col + 1
- end
- end
-
- frame:SetHeight((row + (col == 0 and 0 or 1))*(size + spacing) + 83)
- frame:SetWidth(columns*size + spacing*(columns - 1) + 20)
- col, row = 0, 0
- end
-
- local FixSlots = function(bag)
- for i = 0, 3 do
- local bu = _G['CharacterBag'..i..'Slot']
- local icon = _G['CharacterBag'..i..'SlotIconTexture']
- if MODUI_VAR['elements']['mainbar'].enable then
- bu:SetSize(18, 12)
- icon:SetTexCoord(.1, .9, .2, .8)
- end
- end
- end
-
- local ReAnchor = function()
- local bag = _G['modbag']
- wipe(buttons)
- HideBagSmall()
- for f = 1, grab_slots() do
- con = 'ContainerFrame'..f
- HideBags(con)
- for i = GetContainerNumSlots(_G[con]:GetID()), 1, -1 do
- bu = _G[con..'Item'..i]
- tinsert(buttons, bu)
- ns.AddButtonStyle(bu)
- end
- ns.ColourUpdate(_G[con])
- end
- MoveButtons(buttons, bag)
- FixSlots(bag)
- bag:Show()
- end
-
- local cachedBankWidth, cachedBankHeight -- setup bank
- local ReAnchorBank = function(noMoving)
- local bank = _G['modbank']
- for _, button in pairs(bankbuttons) do button:Hide() end
-
- wipe(bankbuttons)
-
- for i = 1, 24 do
- local bu = _G['BankFrameItem'..i]
- tinsert(bankbuttons, bu)
- ns.AddButtonStyle(bu)
- ns.BankColourUpdate(bu)
- bu:Show()
- end
-
- local bagNameCount = 0
- for f = NUM_BAG_SLOTS + 1, NUM_BAG_SLOTS + NUM_BANKBAGSLOTS do
- bagNameCount = bagNameCount + 1
- con = 'ContainerFrame'..grab_slots() + bagNameCount
- HideBags(con)
- for i = GetContainerNumSlots(f), 1, -1 do
- bu = _G[con..'Item'..i]
- tinsert(bankbuttons, bu)
- ns.AddButtonStyle(bu)
- ns.BankColourUpdate(bu)
- bu:Show()
- end
- end
-
- if not noMoving then
- MoveButtons(bankbuttons, bank)
- cachedBankWidth = bank:GetWidth()
- cachedBankHeight = bank:GetHeight()
- else
- bank:SetWidth(cachedBankWidth)
- bank:SetHeight(cachedBankHeight)
- end
-
- if bank:GetWidth() < 200 then
- for i = 1, 6 do BankSlotsFrame['Bag'..i]:SetScale(.85) end
- end
-
- bank:Show()
- bank.purchase:Show()
- for i = 1, 6 do
- BankSlotsFrame['Bag'..i]:Show()
- end
- end
-
- local CloseBags = function() -- toggle functions
- local bag = _G['modbag']
- local bank = _G['modbank']
- HideBankArt()
- for i = 0, 11 do CloseBag(i) end
- for _, v in pairs({bag, bank}) do v:Hide() end
- end
-
- local CloseBags2 = function()
- local bag = _G['modbag']
- local bagnk = _G['modbank']
- CloseBankFrame()
- for _, v in pairs({bag, bank}) do v:Hide() end
- end
-
- local OpenBags = function()
- HideBankArt()
- for i = 0, 4 do OpenBag(i) end
- end
-
- local ToggleBags = function()
- if IsBagOpen(0) then
- CloseBankFrame()
- CloseBags()
- else OpenBags() end
- end
-
- local HideBank = function()
- local bank = _G['modbank']
- for i = 1, 24 do
- _G['BankFrameItem'..i]:Hide()
- end
- for i = 5, 11 do CloseBag(i) end
- bank:Hide()
- ReAnchor()
- end
-
- local AddUpdates = function()
- for i = 1, 5 do
- local bag = _G['ContainerFrame'..i]
- hooksecurefunc(bag, 'Show', ReAnchor)
- hooksecurefunc(bag, 'Hide', CloseBags2)
- end
-
- hooksecurefunc(BankFrame, 'Show', function()
- for i = 0, 11 do OpenBag(i) end
- ReAnchorBank()
- HideBankArt()
- end)
-
- hooksecurefunc(BankFrame, 'Hide', function()
- CloseBags()
- HideBankArt()
- end)
-
- BagSlotButton_OnClick = function(self)
- local id = self:GetID()
- local hadItem = PutItemInBag(id)
- return
- end
-
- BankFrameItemButtonBag_OnClick = function(self, button)
- local id = self:GetInventorySlot()
- local hadItem = PutItemInBag(id)
- if not hadItem then return end
- end
-
- function UpdateContainerFrameAnchors() end
- ToggleBackpack = ToggleBags
- ToggleBag = ToggleBags
- OpenAllBags = OpenBags
- OpenBackpack = OpenBags
- CloseAllBags = CloseBags
-
- hooksecurefunc('ContainerFrame_Update', ReAnchor)
-
-
- _G['modbag'].CloseButton:SetScript('OnClick', ToggleBags)
- _G['modbank'].CloseButton:SetScript('OnClick', function() HideBank() CloseBankFrame() HideBankArt() end)
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['onebag'].enable then
- AddUpdates()
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/castbars/enemy.lua b/castbars/enemy.lua
deleted file mode 100755
index bef1e00..0000000
--- a/castbars/enemy.lua
+++ /dev/null
@@ -1,492 +0,0 @@
-
-
- local _, ns = ...
-
- local GUIDs = {}
- local timer = {}
- local frames = {}
- local pool = {}
- local anchors = {}
- local created = 0
- local active = 0
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local f = CreateFramePool(
- 'Statusbar',
- UIParent,
- 'SmallCastingBarFrameTemplate',
- function(pool, frame)
- frame:Hide()
- frame:SetParent(nil)
- frame:ClearAllPoints()
-
- if frame._data then
- frame._data = nil
- end
- end
- )
-
- local e = CreateFrame'Frame'
-
- local InitializeNewFrame = function(frame)
- frame.Border:ClearAllPoints()
- frame.Icon:ClearAllPoints()
- frame.Text:ClearAllPoints()
- frame.Icon:SetPoint('LEFT', frame, -35, 0)
- frame.Text:SetPoint'CENTER'
- frame.Flash:SetAlpha(0)
-
- frame:SetScript('OnLoad', nil)
- frame:SetScript('OnEvent', nil)
- frame:SetScript('OnUpdate', nil)
- frame:SetScript('OnShow', nil)
-
- frame.Timer = frame:CreateFontString(nil, 'OVERLAY')
- frame.Timer:SetTextColor(1, 1, 1)
- frame.Timer:SetFontObject'SystemFont_Shadow_Small'
- end
-
- local GetAnchor = function(unit, default)
- if string.find(unit, 'nameplate') then
- return C_NamePlate.GetNamePlateForUnit(unit)
- elseif string.match(unit, 'target') then
- return TargetFrame
- end
- end
-
- local SetTargetCastbarPosition = function(castbar, parent)
- -- Set position based on aura amount & targetframe type
- local rows = parent.auraRows or 0
- if parent.haveToT or parent.haveElite then
- if parent.buffsOnTop or rows <= 1 then
- castbar:SetPoint('CENTER', TargetFrame, -8, -75)
- else
- castbar:SetPoint('CENTER', TargetFrame, -8, -100)
- end
- else
- if not parent.buffsOnTop and rows > 0 then
- castbar:SetPoint('CENTER', TargetFrame, -8, -100)
- else
- castbar:SetPoint('CENTER', TargetFrame, -8, -50)
- end
- end
- end
-
- local SetCastbarIconAndText = function(castbar, cast)
- --name = cast.rank and cast.name..' ('..cast.rank..')' or cast.name
- name = cast.name
- -- Update text + icon if it has changed
- if castbar.Text:GetText() ~= name then
- castbar.Icon:SetTexture(cast.icon)
- castbar.Text:SetText(name)
- castbar.Timer:SetPoint('RIGHT', castbar, 23, 0)
- end
- end
-
- local SetCastbarStyle = function(castbar, cast, db)
- castbar:SetSize(150, 14)
- castbar.Timer:SetShown(true)
- --ns.SB(castbar)
-
- castbar.Spark:SetAlpha(1)
-
- castbar.Icon:SetSize(16, 16)
- castbar.Icon:SetPoint('LEFT', castbar, -25, 0)
- castbar.Icon:SetTexCoord(.1, .9, .1, .9)
-
- if not castbar.IconBorder then
- castbar.IconBorder = CreateFrame('Frame', nil, castbar)
- castbar.IconBorder:SetAllPoints(castbar.Icon)
- ns.BD(castbar.IconBorder)
- ns.BUBorder(castbar.IconBorder, 18)
- for i = 1, 4 do
- tinsert(ns.skinbu, castbar.IconBorder.bo[i])
- castbar.IconBorder.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
- end
- castbar.Icon:SetParent(castbar.IconBorder)
- end
-
- castbar.Text:SetFont(FONT_REGULAR, 9)
- castbar.Timer:SetFont(FONT_REGULAR, 9)
-
- castbar.Border:SetAlpha(1)
- tinsert(ns.skin, castbar.Border)
- castbar.Border:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
-
- if castbar.BorderFrame then -- unneccesary?
- castbar.BorderFrame:SetAlpha(0)
- end
-
- -- Update border to match castbar size
- local width, height = castbar:GetWidth()*1.16, castbar:GetHeight()*1.16
- castbar.Border:SetPoint("TOPLEFT", width, height)
- castbar.Border:SetPoint("BOTTOMRIGHT", -width, -height)
- end
-
- local DisplayCastbar = function(castbar, unit)
- local parent = GetAnchor(unit)
- if not parent then return end -- sanity check
-
- local cast = castbar._data
- castbar:SetMinMaxValues(0, cast.max)
- castbar:SetParent(parent)
-
- if unit == 'target' then
- SetTargetCastbarPosition(castbar, parent)
- castbar:SetScale(1)
- else
- castbar:SetPoint('CENTER', parent, -6, -35) -- -5.5 x position?
- castbar:SetScale(.7)
- end
-
- SetCastbarStyle(castbar, cast)
- SetCastbarIconAndText(castbar, cast)
-
- castbar:SetAlpha(1)
- castbar:Show()
- end
-
- local AcquireFrame = function()
- if created >= 300 then return end -- should never happen
-
- local frame, isNew = f:Acquire()
- active = active + 1
-
- if isNew then
- frame:Hide()
- InitializeNewFrame(frame)
-
- created = created + 1
- -- frame._data = {}
- end
-
- return frame, isNew, created
- end
-
- local ReleaseFrame = function(frame)
- if frame then
- f:Release(frame)
- active = active - 1
- end
- end
-
- local GetFramePool = function()
- return pool
- end
-
- local GetCastbarFrame = function(unit)
- -- pool:DebugInfo()
-
- if frames[unit] then
- return frames[unit]
- end
-
- -- store reference, refs are deleted on frame recycled.
- -- This allows us to not have to Release & Acquire a frame everytime a
- -- castbar is shown/hidden for the *same* unit
- frames[unit] = AcquireFrame()
-
- return frames[unit]
- end
-
- local FadeOut = function(self)
- local a = self:GetAlpha() - CASTING_BAR_ALPHA_STEP
- if a > 0 then
- CastingBarFrame_ApplyAlpha(self, a)
- else
- self.fade = nil
- self:Hide()
- self:SetScript('OnUpdate', nil)
- end
- end
-
- local StartCast = function(GUID, unit)
- if not timer[GUID] then return end
-
- local castbar = GetCastbarFrame(unit)
- if not castbar then return end
-
- castbar._data = timer[GUID]
- DisplayCastbar(castbar, unit)
- end
-
- local StopCast = function(unit, hide)
- local castbar = frames[unit]
- if not castbar then return end
- castbar._data = nil
- if castbar.fade and not hide then
- --C_Timer.After(1, function() castbar:SetScript('OnUpdate', FadeOut) end)
- castbar:Hide()
- end
- end
-
- local StartAllCasts = function(GUID)
- if not timer[GUID] then return end
- for unit, guid in pairs(GUIDs) do
- if guid == GUID then
- StartCast(guid, unit)
- end
- end
- end
-
- local StopAllCasts = function(GUID)
- for unit, guid in pairs(GUIDs) do
- if guid == GUID then
- if frames[unit] then
- frames[unit].fade = true
- end
- StopCast(unit)
- end
- end
- end
-
- local StoreCast = function(GUID, name, icon, time, rank, channeled)
- timer[GUID] = {
- name = name,
- rank = rank,
- icon = icon,
- max = time/1000,
- endTime = GetTime() + (time/1000),
- GUID = GUID,
- channeled = channeled,
- }
-
- StartAllCasts(GUID)
- end
-
- local DeleteCast = function(GUID)
- if GUID then
- StopAllCasts(GUID)
- timer[GUID] = nil
- end
- end
-
- local CastPushback = function(GUID, amount, faded)
- local cast = timer[GUID]
- if not cast then return end
-
- -- Set cast time modifier (i.e Curse of Tongues)
- if not faded and amount and amount > 0 then
- if not cast.currTimeModValue or cast.currTimeModValue < amount then -- run only once unless % changed to higher val
- if cast.currTimeModValue then -- already was reduced
- -- if existing modifer is e.g 50% and new is 60%, we only want to adjust cast by 10%
- amount = amount - cast.currTimeModValue
-
- -- Store previous lesser modifier that was active
- cast.prevCurrTimeModValue = cast.prevCurrTimeModValue or {}
- cast.prevCurrTimeModValue[#cast.prevCurrTimeModValue + 1] = cast.currTimeModValue
- end
-
- -- print("refreshing timer", percentageAmount)
- cast.currTimeModValue = (cast.currTimeModValue or 0) + amount -- highest active modifier
- cast.max = cast.max + (cast.max * amount)/100
- cast.endTime = cast.endTime + (cast.max * amount)/100
- elseif cast.currTimeModValue == amount then
- -- new modifier has same percentage as current active one, just store it for later
- -- print("same percentage, storing")
- cast.prevCurrTimeModValue = cast.prevCurrTimeModValue or {}
- cast.prevCurrTimeModValue[#cast.prevCurrTimeModValue + 1] = amount
- end
- elseif faded and amount then
- -- Reset cast time modifier
- if cast.currTimeModValue == amount then
- cast.max = cast.max - (cast.max*amount)/100
- cast.endTime = cast.endTime - (cast.max*amount)/100
- cast.currTimeModValue = nil
-
- -- Reset to lesser modifier if available
- if cast.prevCurrTimeModValue then
- local highest, index = 0
- for i = 1, #cast.prevCurrTimeModValue do
- if cast.prevCurrTimeModValue[i] and cast.prevCurrTimeModValue[i] > highest then
- highest, index = cast.prevCurrTimeModValue[i], i
- end
- end
-
- if index then
- cast.prevCurrTimeModValue[index] = nil
- -- print("resetting to lesser modifier", highest)
- return CastPushback(GUID, highest)
- end
- end
- end
-
- if cast.prevCurrTimeModValue then
- -- Delete 1 old modifier (doesn't matter which one aslong as its the same %)
- for i = 1, #cast.prevCurrTimeModValue do
- if cast.prevCurrTimeModValue[i] == amount then
- -- print("deleted lesser modifier, new total:", #cast.prevCurrTimeModValue - 1)
- cast.prevCurrTimeModValue[i] = nil
- return
- end
- end
- end
- else -- normal pushback
- if not cast.isChanneled then
- cast.pushback = cast.pushback or 1
- cast.max = cast.max + cast.pushback
- cast.endTime = cast.endTime + cast.pushback
- cast.pushback = max(cast.pushback - .2, .2)
- else
- -- channels are reduced by 25%
- cast.max = cast.max - (cast.max*25)/100
- cast.endTime = cast.endTime - (cast.max*25)/100
- end
- end
- end
-
- local PLAYER_ENTERING_WORLD = function(login)
- if login then return end
-
- for _, table in pairs(
- {
- GUIDs, timer, frames
- }
- ) do
- wipe(table)
- end
-
- pool:GetFramePool():ReleaseAll()
- end
-
- local PLAYER_LOGIN = function()
- e:UnregisterEvent'PLAYER_LOGIN'
- for _, v in pairs(
- {
- 'COMBAT_LOG_EVENT_UNFILTERED',
- 'PLAYER_ENTERING_WORLD',
- 'PLAYER_TARGET_CHANGED',
- 'NAME_PLATE_UNIT_ADDED',
- 'NAME_PLATE_UNIT_REMOVED',
- }
- ) do
- e:RegisterEvent(v)
- end
- end
-
- local PLAYER_TARGET_CHANGED = function()
- GUIDs.target = UnitGUID'target' or nil
- local castbar = GetCastbarFrame'target'
- if castbar then castbar:Hide() end
- StopCast('target', true)
- StartCast(GUIDs.target, 'target')
- end
-
- local NAME_PLATE_UNIT_ADDED = function(unit)
- local GUID = UnitGUID(unit)
- GUIDs[unit] = GUID
- StartCast(GUID, unit)
- end
-
- local NAME_PLATE_UNIT_REMOVED = function(unit)
- GUIDs[unit] = nil
- local castbar = frames[unit]
- if castbar then
- ReleaseFrame(castbar)
- frames[unit] = nil
- end
- end
-
- local COMBAT_LOG_EVENT_UNFILTERED = function()
- local _, event, _, srcGUID, _, srcFlags, _, dstGUID, _, dstFlags, _, _, name, _, damage, _, resisted, blocked, absorbed = CombatLogGetCurrentEventInfo()
- if event == 'SPELL_CAST_START' then
- local spellid = ns.cast[name]
- if not spellid then return end -- nb: keep an eye on how this table loop affects performance
- local _, _, icon, time = GetSpellInfo(spellid)
- if not time or time == 0 then return end
-
- local talentdecrease = ns.talentdecrease[name]
- if talentdecrease then
- if bit.band(srcFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0 then
- time = time - (talentdecrease*1000)
- end
- end
-
- return StoreCast(srcGUID, name, icon, time, GetSpellSubtext(spellid))
- elseif event == 'SPELL_CAST_SUCCESS' then
- -- channeled spells start here
- local spell = ns.channelled[name]
- if spell then
- return StoreCast(srcGUID, name, GetSpellTexture(spell[2]), spell[1]*1000, nil, true)
- end
- return DeleteCast(srcGUID)
- elseif event == 'SPELL_AURA_APPLIED' then
- local decrease = ns.decrease[name]
- local increase = ns.delay[name]
- local cc = ns.CC[name]
- if decrease then
- return CastPushback(dstGUID, decrease)
- elseif increase then
- return CastPushback(dstGUID, increase, true)
- elseif cc then
- return DeleteCast(dstGUID)
- end
- elseif event == 'SPELL_AURA_REMOVED' then
- local increase = ns.delay[name]
- if ns.channelled[name] then
- return DeleteCast(srcGUID)
- elseif increase then
- return CastPushback(dstGUID, increase, true)
- end
- elseif event == 'SPELL_CAST_FAILED' then
- if srcGUID == UnitGUID'player' then
- if not CastingInfo'player' then
- return DeleteCast(srcGUID)
- end
- else
- return DeleteCast(srcGUID)
- end
- elseif event == 'PARTY_KILL' or event == 'UNIT_DIED' or event == 'SPELL_INTERRUPT' then
- return DeleteCast(dstGUID)
- elseif event == 'SWING_DAMAGE' or event == 'ENVIRONMENTAL_DAMAGE' or event == 'RANGE_DAMAGE' or event == 'SPELL_DAMAGE' then
- if resisted or blocked or absorbed then return end
- if bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0 then
- return CastPushback(dstGUID)
- end
- end
- end
-
- local OnUpdate = function()
- if not next(timer) then return end
- local current = GetTime()
- for unit, castbar in pairs(frames) do
- local cast = castbar._data
- if cast then
- local time = cast.endTime - current
- if time > 0 then
- local v = cast.max - time
- if cast.channeled then
- v = cast.max - v
- end
- castbar:SetMinMaxValues(0, cast.max)
- castbar:SetValue(v)
- castbar.Timer:SetFormattedText('%.1f', time)
- castbar.Spark:SetPoint('CENTER', castbar, 'LEFT', (v/cast.max)*castbar:GetWidth(), 0)
- else
- DeleteCast(cast.GUID)
- end
- end
- end
- end
-
- local OnEvent = function(self, event, ...)
- if MODUI_VAR['elements']['ecastbar'].enable then
- if event == 'PLAYER_LOGIN' then
- PLAYER_LOGIN()
- e:SetScript('OnUpdate', OnUpdate)
- elseif event == 'COMBAT_LOG_EVENT_UNFILTERED' then
- COMBAT_LOG_EVENT_UNFILTERED()
- elseif event == 'NAME_PLATE_UNIT_REMOVED' then
- NAME_PLATE_UNIT_REMOVED(...)
- elseif event == 'NAME_PLATE_UNIT_ADDED' then
- NAME_PLATE_UNIT_ADDED(...)
- elseif event == 'PLAYER_TARGET_CHANGED' then
- PLAYER_TARGET_CHANGED()
- end
- end
- end
-
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/chat/chat.lua b/chat/chat.lua
deleted file mode 100755
index 68a5a77..0000000
--- a/chat/chat.lua
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
- local _, ns = ...
-
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local HideChatElements = function(v)
- for _, j in pairs({
- _G[v..'ButtonFrameUpButton'], _G[v..'ButtonFrameDownButton'],
- _G[v..'ConversationButton'], _G[v..'ButtonFrameMinimizeButton'],
- _G[v..'EditBoxFocusLeft'], _G[v..'EditBoxFocusRight'], _G[v..'EditBoxFocusMid'],
- ChatFrameMenuButton, FriendsMicroButton, QuickJoinToastButton
- }) do
- if j then
- j:SetAlpha(0)
- if not j:GetName():find'Edit' then
- j:EnableMouse(false)
- if j:HasScript'OnEvent' then j:UnregisterAllEvents() end
- end
- end
- end
- for _, j in pairs({
- 'ButtonFrameBackground',
- 'ButtonFrameTopLeftTexture', 'ButtonFrameTopRightTexture',
- 'ButtonFrameBottomLeftTexture', 'ButtonFrameBottomRightTexture',
- 'ButtonFrameLeftTexture', 'ButtonFrameRightTexture',
- 'ButtonFrameBottomTexture', 'ButtonFrameTopTexture',
- }) do
- if _G[v..j] then _G[v..j]:SetTexture(nil) end
- end
- end
-
- local AddChat = function()
- if MODUI_VAR['elements']['chat'].enable and MODUI_VAR['elements']['chat'].colornames then
- SetCVar("chatClassColorOverride", 0)
- else
- SetCVar("chatClassColorOverride", 1)
- end
- ChatFrameChannelButton:ClearAllPoints()
- ChatFrameChannelButton:SetPoint('BOTTOM', ChatFrame1ButtonFrame, 0, 22)
-
- DEFAULT_CHATFRAME_ALPHA = .25
- CHAT_FRAME_FADE_OUT_TIME = .1
- CHAT_FRAME_FADE_TIME = .1
- CHAT_FONT_HEIGHTS = {
- [1] = 8,
- [2] = 9,
- [3] = 10,
- [4] = 11,
- [5] = 12,
- [6] = 13,
- [7] = 14,
- [8] = 15,
- [9] = 16,
- [10] = 17,
- [11] = 18,
- [12] = 19,
- [13] = 20,
- [14] = 21,
- [15] = 22,
- }
-
- for i, v in pairs(CHAT_FRAMES) do
- local chat = _G[v]
- local edit = _G[v..'EditBox']
- local header = _G[v..'EditBoxHeader']
- local suffix = _G[v..'EditBoxHeaderSuffix']
-
- SetChatWindowAlpha(i, 0)
- HideChatElements(v)
-
- chat:SetFrameLevel(99)
- chat:SetFrameStrata'MEDIUM'
- chat:SetShadowOffset(1, -1)
- chat:SetClampedToScreen(false)
- chat:SetClampRectInsets(0, 0, 0, 0)
- chat:SetMaxResize(UIParent:GetWidth(), UIParent:GetHeight())
- chat:SetMinResize(150, 25)
-
- edit:SetFrameLevel(0)
- edit:Hide()
- edit:SetSize(320, 20)
- edit:SetAltArrowKeyMode(false)
- edit:SetFont(FONT_REGULAR, 12)
- edit:SetTextInsets(11 + header:GetWidth() + (suffix:IsShown() and suffix:GetWidth() or 0), 11, 0, 0)
-
- if not edit.f then
- edit.f = CreateFrame('Frame', nil, edit)
- ns.BD(edit.f)
- edit.f:SetPoint('TOPLEFT', 12, -6)
- edit.f:SetPoint('BOTTOMRIGHT', -12, 6)
-
- edit.shadow = edit:CreateTexture(nil, 'BACKGROUND', nil, -3)
- edit.shadow:SetPoint('TOPLEFT', edit, -9, 7)
- edit.shadow:SetPoint('BOTTOMRIGHT', edit, 9, -7)
- edit.shadow:SetTexture[[Interface\Scenarios\ScenarioParts]]
- edit.shadow:SetVertexColor(0, 0, 0, 1)
- edit.shadow:SetTexCoord(0, .641, 0, .18)
- end
-
- for _, j in pairs({edit:GetRegions()}) do
- if j:GetObjectType() == 'FontString' then
- j:SetParent(edit.f)
- j:SetFont(STANDARD_TEXT_FONT, 11)
- end
- end
-
- ChatFrameMenuButton:SetAlpha(0)
- ChatFrameMenuButton:EnableMouse(false)
- end
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['chat'].enable and MODUI_VAR['elements']['chat'].style then
- AddChat()
- hooksecurefunc('FCF_OpenTemporaryWindow', AddChat)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/chat/cmd.lua b/chat/cmd.lua
deleted file mode 100755
index cbed0ab..0000000
--- a/chat/cmd.lua
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
- -- reload ui
- SLASH_RELOADUI1 = '/rl'
- SlashCmdList.RELOADUI = ReloadUI
-
- -- framestack
- SLASH_FSTACK1 = '/fs'
- SlashCmdList.FSTACK = function(msg)
- UIParentLoadAddOn'Blizzard_DebugTools'
- FrameStackTooltip_Toggle()
- end
-
- -- event trace
- SLASH_ETTRACE1 = '/et'
- SlashCmdList.ETTRACE = function(msg)
- UIParentLoadAddOn'Blizzard_DebugTools'
- EventTraceFrame_HandleSlashCmd(msg)
- end
-
- -- clear chat
- SLASH_CLEAR_CHAT1 = '/clear'
- SlashCmdList.CLEAR_CHAT = function()
- for i = 1, NUM_CHAT_WINDOWS do _G['ChatFrame'..i]:Clear() end
- end
-
- -- UI options list
- SLASH_UIFORM1 = '/iip' SLASH_UIFORM2 = '/lip'
- SLASH_UIFORM3 = '/iipui' SLASH_UIFORM4 = '/lipui'
- SlashCmdList.UIFORM = function(msg)
- DEFAULT_CHAT_FRAME:AddMessage('|cff01DFD7lip ui:|r options can be found in the portrait menu at the bottom-right of your action bar', 254/255, 193/255, 192/255)
- end
-
-
- --
diff --git a/chat/event.lua b/chat/event.lua
deleted file mode 100755
index c6b2bcb..0000000
--- a/chat/event.lua
+++ /dev/null
@@ -1,175 +0,0 @@
-
-
- local _, ns = ...
-
- local hooks = {}
-
- local AddStringsAndChannelLabels = function()
- FOREIGN_SERVER_LABEL = '—'
-
- CHAT_GUILD_GET = '|Hchannel:Guild|hG|h. %s:\32'
- CHAT_OFFICER_GET = '|Hchannel:o|hO|h. %s:\32'
- CHAT_RAID_GET = '|Hchannel:raid|hR|h. %s:\32'
- CHAT_RAID_WARNING_GET = 'RW. %s:\32'
- CHAT_RAID_LEADER_GET = '|Hchannel:raid|hRL|h. %s:\32'
- CHAT_INSTANCE_CHAT_GET = '|Hchannel:INSTANCE_CHAT|hIns|h. %s:\32'
- CHAT_INSTANCE_CHAT_LEADER_GET = '|Hchannel:INSTANCE_CHAT|hIL|h. %s:\32'
- CHAT_BATTLEGROUND_GET = '|Hchannel:Battleground|hBG|h. %s:\32'
- CHAT_BATTLEGROUND_LEADER_GET = '|Hchannel:Battleground|hBL|h. %s:\32'
- CHAT_PARTY_GET = '|Hchannel:party|hP|h. %s:\32'
- CHAT_PARTY_GUIDE_GET = '|Hchannel:party|hDG|h. %s:\32'
- CHAT_MONSTER_PARTY_GET = '|Hchannel:raid|hR|h. %s:\32'
-
- -- this is a global change, affects lootframe etc. too.
- _G.GOLD_AMOUNT = '|cffffffff%d|r|TInterface\\MONEYFRAME\\UI-GoldIcon:14:14:2:0|t'
- _G.SILVER_AMOUNT = '|cffffffff%d|r|TInterface\\MONEYFRAME\\UI-SilverIcon:14:14:2:0|t'
- _G.COPPER_AMOUNT = '|cffffffff%d|r|TInterface\\MONEYFRAME\\UI-CopperIcon:14:14:2:0|t'
- end
-
- local events = {
- CHAT_MSG_AFK = {
- },
- CHAT_MSG_CHANNEL_JOIN = {
- ['Joined Channel: (.+)'] = '',
- },
- CHAT_MSG_COMBAT_FACTION_CHANGE = {
- ['Reputation with (.+) increased by (.+).'] = '+ %2 %1 rep.',
- ['You are now (.+) with (.+).'] = '%2 standing is now %1.',
- },
- CHAT_MSG_COMBAT_XP_GAIN = {
- ['(.+) dies, you gain (.+) experience. %(%+(.+)exp Rested bonus%)'] = '+ %2 (+%3) xp from %1.',
- ['(.+) dies, you gain (.+) experience.'] = '+ %2 xp from %1.',
- ['You gain (.+) experience.'] = '+ %1 xp.',
- },
- CHAT_MSG_CURRENCY = {
- ['You receive currency: (.+)%.'] = '+ %1.',
- ['You\'ve lost (.+)%.'] = '- %1.',
- },
- CHAT_MSG_GUILD_ACHIEVEMENT = {
- ['(.+) has earned the achievement (.+)!'] = '%1 achieved %2.',
- },
- CHAT_MSG_ACHIEVEMENT = {
- ['(.+) has earned the achievement (.+)!'] = '%1 achieved %2.',
- },
- CHAT_MSG_LOOT = {
- ['You receive item: (.+)%.'] = '+ %1.',
- ['You receive loot: (.+)%.'] = '+ %1.',
- ['You receive bonus loot: (.+)%.'] = '+ bonus %1.',
- ['You create: (.+)%.'] = '+ %1.',
- ['You are refunded: (.+)%.'] = '+ %1.',
- ['You have selected (.+) for: (.+)'] = 'Selected %1 for %2.',
- ['Received item: (.+)%.'] = '+ %1.',
- ['(.+) receives item: (.+)%.'] = '+ %2 for %1.',
- ['(.+) receives loot: (.+)%.'] = '+ %2 for %1.',
- ['(.+) receives bonus loot: (.+)%.'] = '+ bonus %2 for %1.',
- ['(.+) creates: (.+)%.'] = '+ %2 for %1.',
- ['(.+) was disenchanted for loot by (.+).'] = '%2 disenchanted %1.',
- },
- CHAT_MSG_SKILL = {
- ['Your skill in (.+) has increased to (.+).'] = '%1 lvl %2.'
- },
- CHAT_MSG_SYSTEM = {
- ['Received (.+), (.+).'] = '+ %1, %2.',
- ['Received (.+).'] = '+ %1.',
- ['Received (.+) of item: (.+).'] = '+ %2x%1.',
- ['(.+) is now your follower.'] = '+ follower %1.',
- ['(.+) completed.'] = '- Quest |cfff86256%1|r.',
- ['Quest accepted: (.+)'] = '+ Quest |cfff86256%1|r.',
- ['Received item: (.+)%.'] = '+ %1.',
- ['Experience gained: (.+).'] = '+ %1 xp.',
- ['(.+) has come online.'] = '|cff40fb40%1|r logged on.',
- ['(.+) has gone offline.'] = '|cff40fb40%1|r logged off.',
- ['You are now Busy: in combat'] = '+ Combat.',
- ['You are no longer marked Busy.'] = '- Combat.',
- ['Discovered (.+): (.+) experience gained'] = '+ %2 xp, found %1.',
- ['You are now (.+) with (.+).'] = '+ %2 faction, now %1.',
- ['Quest Accepted (.+)'] = '+ quest |cfff86256%1|r.',
- ['You are now Away: AFK'] = '+ AFK.',
- ['You are no longer Away.'] = '- AFK.',
- ['You are no longer rested.'] = '- Rested.',
- ['You don\'t meet the requirements for that quest.'] = '|cffff000!|r Quest requirements not met.',
- ['(.+) has joined the raid group.'] = '+ Raider |cffff7d00%1|r.',
- ['(.+) has left the raid group.'] = '- Raider |cffff7d00%1|r.',
- ['You have earned the title \'(.+)\'.'] = '+ Title %1.',
- },
- CHAT_MSG_TRADESKILLS = {
- ['(.+) creates (.+).'] = '%1 |cffffff00->|r %2.',
- },
- }
-
- local AddMessage = function(self, t, ...)
- local _, size = self:GetFont()
- local _, class = UnitClass'player'
- local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class].colorStr
- local var = GetCVar'timeMgrUseMilitaryTime'
- local d = var == '1' and date'%H.%M' or date'%I.%M'..string.lower(date'%p')
-
- if string.find(t, 'Left Channel:') then -- global channels being left should be indentifiable
- t = gsub(t, '%[(%d0?)%. (.-)%]', '|cffffffff%1|r %2 ') -- [2. trade] > 2: Trade
- else -- otherwise:
- t = gsub(t, '%[(%d0?)%. (.-)%]', '|cffffffff%1|r ') -- globals channels: [2. trade] > 2
- end
- -- 'square'-off string icons
- t = gsub(t, '|TInterface\\Icons\\(.+):(.+)|t', '|TInterface\\Icons\\%1:'..size..':'..size..':0:0:64:64:8:56:8:56|t')
- t = gsub(t, '(|HBNplayer.-|h)%[(.-)%]|h', '%1%2|h') -- battlenet player name
- t = gsub(t, '(|Hplayer.-|h)%[(.-)%]|h', '%1%2|h') -- player name
- t = gsub(t, 'Guild Message of the Day:', 'GMOTD ') -- message of the day
- t = gsub(t, 'To (|HBNplayer.+|h):', '%1 > ') -- whisper to bnet
- t = gsub(t, 'To (|Hplayer.+|h):', '%1 > ') -- whisper to
- t = gsub(t, ' whispers:', ' < ') -- whisper from
- t = gsub(t, 'Joined Channel:', '>') -- channel join
- t = gsub(t, 'Left Channel:', 'Left ') -- channel left
- t = gsub(t, '|H(.-)|h%[(.-)%]|h', '|H%1|h%2|h') -- strip brackets off've items iilinks style
-
- d = gsub(d, '0*(%d+)', '%1', 1)
- t = string.format('|cffffc800%s|r %s', d, t)
-
- if string.find(t, 'Changed Channel') then return end
-
- return hooks[self](self, t, ...)
- end
-
- local AddEventFilters = function()
- for event, filters in pairs(events) do
- ChatFrame_AddMessageEventFilter(event, function(f, event, t, ...)
- for k, v in pairs(filters) do
- if t:match(k) then
- t = t:gsub(k, v)
- return nil, t, ...
- end
- end
- end)
- end
- end
-
- local AddNewMessage = function(chat)
- hooks[chat] = chat.AddMessage
- chat.AddMessage = AddMessage
- end
-
- local AddMessageHooks = function()
- for i, v in pairs(CHAT_FRAMES) do
- if not v:find'2' then
- local chat = _G[v]
- AddNewMessage(chat)
- end
- end
- hooksecurefunc('FCF_SetTemporaryWindowType', AddNewMessage)
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['chat'].enable then
- if MODUI_VAR['elements']['chat'].events then
- AddEventFilters()
- AddMessageHooks()
- AddStringsAndChannelLabels()
- end
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/chat/tab.lua b/chat/tab.lua
deleted file mode 100755
index b1ad45f..0000000
--- a/chat/tab.lua
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
- local _, ns = ...
-
- CHAT_FRAME_TAB_SELECTED_MOUSEOVER_ALPHA = 1
- CHAT_FRAME_TAB_SELECTED_NOMOUSE_ALPHA = 0
- CHAT_FRAME_TAB_ALERTING_MOUSEOVER_ALPHA = 1
- CHAT_FRAME_TAB_ALERTING_NOMOUSE_ALPHA = 1
- CHAT_FRAME_TAB_NORMAL_MOUSEOVER_ALPHA = 1
- CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA = 0
- CHAT_TAB_HIDE_DELAY = 1
-
- local NameTab = function(f, name, nosave)
- local tab = _G[f:GetName()..'Tab']
- local n = tonumber(f:GetName():match'%d+')
- if name and n > 10 then
- local t = name:gsub('%-[^|]+', '')
- tab:SetText(t)
- tab.name = t
- if not nosave then
- SetChatWindowName(f:GetID(), text)
- end
- end
- end
-
- local Tab = function(self, overflow)
- local chat = _G[self]
- local tab = _G[self..'Tab']
- local t = _G[self..'TabText']
-
- for i = 1, select('#', tab:GetRegions()) do
- local v = select(i, tab:GetRegions())
- if v and v:GetObjectType() == 'Texture' and not v:GetName():find'Glow' then
- v:SetTexture(nil)
- end
- end
-
- local a = {t:GetPoint()}
- t:SetPoint(a[1], a[2], a[3], overflow and a[4] - 10 or a[4], overflow and -1 or 2)
- t:SetJustifyH'CENTER'
- t:SetFont(STANDARD_TEXT_FONT, overflow and 10 or 12)
- t:SetShadowOffset(1, -1)
- t:SetShadowColor(0, 0, 0, 1)
- t:SetDrawLayer('OVERLAY', 7)
-
- chat.tabbed = true
- end
-
- local UpdateTab = function(bu, chat)
- for i, v in ipairs(GENERAL_CHAT_DOCK.DOCKED_CHAT_FRAMES) do
- if not v.tabbed then
- local n = tonumber(v:GetName():match'%d+')
- Tab(v:GetName(), n > 10 and true)
- end
- end
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['chat'].enable and MODUI_VAR['elements']['chat'].style then
- hooksecurefunc('FCF_SetWindowName', NameTab)
- hooksecurefunc('FCFDock_UpdateTabs', UpdateTab)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/chat/url.lua b/chat/url.lua
index 4cdf4f5..7504b7e 100755
--- a/chat/url.lua
+++ b/chat/url.lua
@@ -1,85 +1,80 @@
+local URL
+local events = {
+ 'CHAT_MSG_BN_CONVERSATION',
+ 'CHAT_MSG_BN_WHISPER',
+ 'CHAT_MSG_BN_WHISPER_INFORM',
+ 'CHAT_MSG_CHANNEL',
+ 'CHAT_MSG_GUILD',
+ 'CHAT_MSG_INSTANCE_CHAT',
+ 'CHAT_MSG_INSTANCE_CHAT_LEADER',
+ 'CHAT_MSG_OFFICER',
+ 'CHAT_MSG_PARTY',
+ 'CHAT_MSG_PARTY_LEADER',
+ 'CHAT_MSG_RAID',
+ 'CHAT_MSG_RAID_LEADER',
+ 'CHAT_MSG_RAID_WARNING',
+ 'CHAT_MSG_SAY',
+ 'CHAT_MSG_SYSTEM',
+ 'CHAT_MSG_WHISPER',
+ 'CHAT_MSG_WHISPER_INFORM',
+ 'CHAT_MSG_YELL'
+}
- local URL
+local patterns = {
+ '(https://%S+%.%S+)',
+ '(http://%S+%.%S+)',
+ '(www%.%S+%.%S+)',
+ '(%S+%.%S+%.%S+)',
+ '(%d+%.%d+%.%d+%.%d+:?%d*/?%S*)',
+}
- local events = {
- 'CHAT_MSG_BN_CONVERSATION',
- 'CHAT_MSG_BN_WHISPER',
- 'CHAT_MSG_BN_WHISPER_INFORM',
- 'CHAT_MSG_CHANNEL',
- 'CHAT_MSG_GUILD',
- 'CHAT_MSG_INSTANCE_CHAT',
- 'CHAT_MSG_INSTANCE_CHAT_LEADER',
- 'CHAT_MSG_OFFICER',
- 'CHAT_MSG_PARTY',
- 'CHAT_MSG_PARTY_LEADER',
- 'CHAT_MSG_RAID',
- 'CHAT_MSG_RAID_LEADER',
- 'CHAT_MSG_RAID_WARNING',
- 'CHAT_MSG_SAY',
- 'CHAT_MSG_SYSTEM',
- 'CHAT_MSG_WHISPER',
- 'CHAT_MSG_WHISPER_INFORM',
- 'CHAT_MSG_YELL'
- }
+StaticPopupDialogs['URL_COPY_DIALOG'] = {
+ text = 'URL',
+ button2 = CLOSE,
+ timeout = 0,
+ hasEditBox = 1, maxLetters = 1024, editBoxWidth = 350,
+ whileDead = true, hideOnEscape = true,
+ OnShow = function(self)
+ (self.icon or _G[self:GetName()..'AlertIcon']):Hide()
- local patterns = {
- '(https://%S+%.%S+)',
- '(http://%S+%.%S+)',
- '(www%.%S+%.%S+)',
- '(%S+%.%S+%.%S+)',
- '(%d+%.%d+%.%d+%.%d+:?%d*/?%S*)',
- }
+ local edit = self.editBox or _G[self:GetName()..'EditBox']
+ edit:SetText(URL)
+ edit:SetFocus()
+ edit:HighlightText(0)
- StaticPopupDialogs['URL_COPY_DIALOG'] = {
- text = 'URL',
- button2 = CLOSE,
- timeout = 0,
- hasEditBox = 1, maxLetters = 1024, editBoxWidth = 350,
- whileDead = true, hideOnEscape = true,
- OnShow = function(self)
- (self.icon or _G[self:GetName()..'AlertIcon']):Hide()
+ local b2 = self.button2 or _G[self:GetName()..'Button2']
+ b2:ClearAllPoints()
+ b2:SetPoint('TOP', edit, 'BOTTOM', 0, -6)
+ b2:SetWidth(150)
- local edit = self.editBox or _G[self:GetName()..'EditBox']
- edit:SetText(URL)
- edit:SetFocus()
- edit:HighlightText(0)
+ URL = nil
+ end,
+}
- local b2 = self.button2 or _G[self:GetName()..'Button2']
- b2:ClearAllPoints()
- b2:SetPoint('TOP', edit, 'BOTTOM', 0, -6)
- b2:SetWidth(150)
+local OnEvent = function()
+ if MODUI_VAR['elements']['chat'].enable and MODUI_VAR['elements']['chat'].url then
+ for _, e in next, events do
+ ChatFrame_AddMessageEventFilter(e, function(self, event, t, ...)
+ for i = 1, #patterns do
+ local text, match = string.gsub(t, patterns[i], '|cfffade94|Hurl:%1|h%1|h|r')
+ if match > 0 then return false, text, ... end
+ end
+ end)
+ end
- URL = nil
- end,
- }
+ local hook = ItemRefTooltip.SetHyperlink
+ ItemRefTooltip.SetHyperlink = function(self, link, ...)
+ if tostring(link):sub(1, 4) == 'url:' then
+ URL = string.sub(link, 5)
+ StaticPopup_Show'URL_COPY_DIALOG'
+ return
+ end
+ hook(self, link, ...)
+ end
+ end
+end
- local OnEvent = function()
- if MODUI_VAR['elements']['chat'].enable and MODUI_VAR['elements']['chat'].url then
- for _, e in next, events do
- ChatFrame_AddMessageEventFilter(e, function(self, event, t, ...)
- for i = 1, #patterns do
- local text, match = string.gsub(t, patterns[i], '|cfffade94|Hurl:%1|h%1|h|r')
- if match > 0 then return false, text, ... end
- end
- end)
- end
-
- local hook = ItemRefTooltip.SetHyperlink
- ItemRefTooltip.SetHyperlink = function(self, link, ...)
- if tostring(link):sub(1, 4) == 'url:' then
- URL = string.sub(link, 5)
- StaticPopup_Show'URL_COPY_DIALOG'
- return
- end
- hook(self, link, ...)
- end
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
+local e = CreateFrame'Frame'
+e:RegisterEvent'PLAYER_LOGIN'
+e:SetScript('OnEvent', OnEvent)
diff --git a/core/colour.lua b/core/colour.lua
index ca76b37..f02783a 100755
--- a/core/colour.lua
+++ b/core/colour.lua
@@ -1,120 +1,118 @@
+local _, ns = ...
+local _, class = UnitClass'player'
+local colour = RAID_CLASS_COLORS[class]
- local _, ns = ...
+local INTERNAL_CLASS_COLORS = {
+ ['DRUID'] = {r = 255/255, g = 110/255, b = 063/255, colorStr = 'ffff6e3f'},
+ ['HUNTER'] = {r = 140/255, g = 220/255, b = 105/255, colorStr = 'ff8cdc69'},
+ ['MAGE'] = {r = 000/255, g = 194/255, b = 255/255, colorStr = 'ff00c2ff'},
+ ['PALADIN'] = {r = 255/255, g = 095/255, b = 168/255, colorStr = 'ffff5fa8'},
+ ['PRIEST'] = {r = 255/255, g = 255/255, b = 255/255, colorStr = 'ffffffff'},
+ ['ROGUE'] = {r = 255/255, g = 232/255, b = 000/255, colorStr = 'ffffe800'},
+ ['SHAMAN'] = {r = 050/255, g = 111/255, b = 255/255, colorStr = 'ff326fff'},
+ ['WARLOCK'] = {r = 140/255, g = 118/255, b = 238/255, colorStr = 'ff8c76ee'},
+ ['WARRIOR'] = {r = 214/255, g = 148/255, b = 110/255, colorStr = 'ffd6946e'}
+}
- local _, class = UnitClass'player'
- local colour = RAID_CLASS_COLORS[class]
+local CUSTOM_FACTION_BAR_COLORS = {
+ [1] = {r = 1, g = .2, b = .2}, -- hated
+ [2] = {r = 1, g = .2, b = .2}, -- hostile
+ [3] = {r = 1, g = .6, b = .2}, -- unfriendly
+ [4] = {r = 1, g = .8, b = .1}, -- neutral
+ [5] = {r = .4, g = 1, b = .2}, -- friend
+ [6] = {r = .4, g = 1, b = .3}, -- honoured
+ [7] = {r = .3, g = 1, b = .4}, -- revered
+ [8] = {r = .3, g = 1, b = .5}, -- exalted
+}
- local INTERNAL_CLASS_COLORS = {
- ['DRUID'] = {r = 255/255, g = 110/255, b = 063/255, colorStr = 'ffff6e3f'},
- ['HUNTER'] = {r = 140/255, g = 220/255, b = 105/255, colorStr = 'ff8cdc69'},
- ['MAGE'] = {r = 000/255, g = 194/255, b = 255/255, colorStr = 'ff00c2ff'},
- ['PALADIN'] = {r = 255/255, g = 095/255, b = 168/255, colorStr = 'ffff5fa8'},
- ['PRIEST'] = {r = 255/255, g = 255/255, b = 255/255, colorStr = 'ffffffff'},
- ['ROGUE'] = {r = 255/255, g = 232/255, b = 000/255, colorStr = 'ffffe800'},
- ['SHAMAN'] = {r = 050/255, g = 111/255, b = 255/255, colorStr = 'ff326fff'},
- ['WARLOCK'] = {r = 140/255, g = 118/255, b = 238/255, colorStr = 'ff8c76ee'},
- ['WARRIOR'] = {r = 214/255, g = 148/255, b = 110/255, colorStr = 'ffd6946e'}
- }
+-- set shaman colour to blue
+-- nb: probably going to taint
+RAID_CLASS_COLORS['SHAMAN'] = INTERNAL_CLASS_COLORS['SHAMAN']
- local CUSTOM_FACTION_BAR_COLORS = {
- [1] = {r = 1, g = .2, b = .2}, -- hated
- [2] = {r = 1, g = .2, b = .2}, -- hostile
- [3] = {r = 1, g = .6, b = .2}, -- unfriendly
- [4] = {r = 1, g = .8, b = .1}, -- neutral
- [5] = {r = .4, g = 1, b = .2}, -- friend
- [6] = {r = .4, g = 1, b = .3}, -- honoured
- [7] = {r = .3, g = 1, b = .4}, -- revered
- [8] = {r = .3, g = 1, b = .5}, -- exalted
- }
+local AddPowerColour = function()
+ if MODUI_VAR['elements']['statusbar'] then
+ PowerBarColor['MANA'] = {
+ r = MODUI_VAR['elements']['statusbar']['mana'].r or 0,
+ g = MODUI_VAR['elements']['statusbar']['mana'].g or 0,
+ b = MODUI_VAR['elements']['statusbar']['mana'].b or 1,
+ }
+ PowerBarColor['RAGE'] = {
+ r = MODUI_VAR['elements']['statusbar']['rage'].r or 1,
+ g = MODUI_VAR['elements']['statusbar']['rage'].g or 0,
+ b = MODUI_VAR['elements']['statusbar']['rage'].b or 0,
+ fullPowerAnim = true
+ }
+ PowerBarColor['FOCUS'] = {
+ r = MODUI_VAR['elements']['statusbar']['focus'].r or 1,
+ g = MODUI_VAR['elements']['statusbar']['focus'].g or .5,
+ b = MODUI_VAR['elements']['statusbar']['focus'].b or .25,
+ fullPowerAnim = true
+ }
+ PowerBarColor['ENERGY'] = {
+ r = MODUI_VAR['elements']['statusbar']['energy'].r or 1,
+ g = MODUI_VAR['elements']['statusbar']['energy'].g or 1,
+ b = MODUI_VAR['elements']['statusbar']['energy'].b or 0,
+ fullPowerAnim = true
+ }
+ end
+end
- -- set shaman colour to blue
- -- nb: probably going to taint
- RAID_CLASS_COLORS['SHAMAN'] = INTERNAL_CLASS_COLORS['SHAMAN']
+ns.CLASS_COLOUR = function(f, a)
+ if f:GetObjectType() == 'StatusBar' then
+ f:SetStatusBarColor(colour.r, colour.g, colour.b)
+ elseif
+ f:GetObjectType() == 'FontString' then
+ f:SetTextColor(colour.r, colour.g, colour.b)
+ else
+ f:SetVertexColor(colour.r, colour.g, colour.b)
+ end
+end
- local AddPowerColour = function()
- PowerBarColor['MANA'] = {
- r = MODUI_VAR['elements']['statusbar']['mana'].r or 0,
- g = MODUI_VAR['elements']['statusbar']['mana'].g or 0,
- b = MODUI_VAR['elements']['statusbar']['mana'].b or 1,
- }
- PowerBarColor['RAGE'] = {
- r = MODUI_VAR['elements']['statusbar']['rage'].r or 1,
- g = MODUI_VAR['elements']['statusbar']['rage'].g or 0,
- b = MODUI_VAR['elements']['statusbar']['rage'].b or 0,
- fullPowerAnim = true
- }
- PowerBarColor['FOCUS'] = {
- r = MODUI_VAR['elements']['statusbar']['focus'].r or 1,
- g = MODUI_VAR['elements']['statusbar']['focus'].g or .5,
- b = MODUI_VAR['elements']['statusbar']['focus'].b or .25,
- fullPowerAnim = true
- }
- PowerBarColor['ENERGY'] = {
- r = MODUI_VAR['elements']['statusbar']['energy'].r or 1,
- g = MODUI_VAR['elements']['statusbar']['energy'].g or 1,
- b = MODUI_VAR['elements']['statusbar']['energy'].b or 0,
- fullPowerAnim = true
- }
- end
+ns.TEXT_WHITE = function(t, ...)
+ t:SetTextColor(1, 1, 1)
+end
- ns.CLASS_COLOUR = function(f, a)
- if f:GetObjectType() == 'StatusBar' then
- f:SetStatusBarColor(colour.r, colour.g, colour.b)
- elseif
- f:GetObjectType() == 'FontString' then
- f:SetTextColor(colour.r, colour.g, colour.b)
- else
- f:SetVertexColor(colour.r, colour.g, colour.b)
- end
+ns.GRADIENT_COLOUR = function(f, v, min, max)
+ if not v then
+ v = f:GetValue()
end
-
- ns.TEXT_WHITE = function(t, ...)
- t:SetTextColor(1, 1, 1)
+ if not min or not max then
+ min, max = f:GetMinMaxValues()
end
-
- ns.GRADIENT_COLOUR = function(f, v, min, max)
- if not v then
- v = f:GetValue()
- end
- if not min or not max then
- min, max = f:GetMinMaxValues()
- end
- if (not v) or v < min or v > max then return end
- if (max - min) > 0 then
- v = (v - min)/(max - min)
- else
- v = 0
- end
- if v > .5 then
- r = (1 - v)*2
- g = 1
- elseif v < .2 then
- r = 1
- g = 0
- else
- r = 1
- g = v*2
- end
- b = 0
- if f:GetObjectType() == 'StatusBar' then
- f:SetStatusBarColor(r, g, b)
- elseif f:GetObjectType() == 'FontString' then
- f:SetTextColor(r*1.5, g*1.5, b*1.5)
- else
- f:SetVertexColor(r, g, b)
- end
+ if (not v) or v < min or v > max then return end
+ if (max - min) > 0 then
+ v = (v - min)/(max - min)
+ else
+ v = 0
end
+ if v > .5 then
+ r = (1 - v)*2
+ g = 1
+ elseif v < .2 then
+ r = 1
+ g = 0
+ else
+ r = 1
+ g = v*2
+ end
+ b = 0
+ if f:GetObjectType() == 'StatusBar' then
+ f:SetStatusBarColor(r, g, b)
+ elseif f:GetObjectType() == 'FontString' then
+ f:SetTextColor(r*1.5, g*1.5, b*1.5)
+ else
+ f:SetVertexColor(r, g, b)
+ end
+end
- ns.INTERNAL_CLASS_COLORS = INTERNAL_CLASS_COLORS
- ns.CUSTOM_FACTION_BAR_COLORS = CUSTOM_FACTION_BAR_COLORS
-
- local OnEvent = function(self, event, ...)
- AddPowerColour()
- end
+ns.INTERNAL_CLASS_COLORS = INTERNAL_CLASS_COLORS
+ns.CUSTOM_FACTION_BAR_COLORS = CUSTOM_FACTION_BAR_COLORS
- local e = CreateFrame'Frame'
- e:RegisterEvent'ADDON_LOADED'
- e:SetScript('OnEvent', OnEvent)
+local OnEvent = function(self, event, ...)
+ AddPowerColour()
+end
- --
+local e = CreateFrame'Frame'
+e:RegisterEvent'ADDON_LOADED'
+e:SetScript('OnEvent', OnEvent)
diff --git a/core/debug.lua b/core/debug.lua
index 58bd0c2..08b8470 100755
--- a/core/debug.lua
+++ b/core/debug.lua
@@ -1,16 +1,11 @@
+local _, ns = ...
+local EnableErrors = function()
+ if GetCVar'ScriptErrors' == '0' then
+ SetCVar('ScriptErrors', 1)
+ end
+end
- local _, ns = ...
-
- local EnableErrors = function()
- if GetCVar'ScriptErrors' == '0' then
- SetCVar('ScriptErrors', 1)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', EnableErrors)
-
-
- --
+local e = CreateFrame'Frame'
+e:RegisterEvent'PLAYER_LOGIN'
+e:SetScript('OnEvent', EnableErrors)
diff --git a/core/functions.lua b/core/functions.lua
index c89e762..1977cc6 100755
--- a/core/functions.lua
+++ b/core/functions.lua
@@ -1,15 +1,10 @@
-
-
- local _, ns = ...
-
- ns.IsClassic = function()
- local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
- if build < 2 then
- return true -- it's wow: classic, baby
- else
- return false
- end
- end
-
-
- --
+local _, ns = ...
+
+ns.IsClassic = function()
+ local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
+ if build < 2 then
+ return true -- it's wow: classic, baby
+ else
+ return false
+ end
+end
diff --git a/core/locale.lua b/core/locale.lua
index cd1b2a5..1529741 100755
--- a/core/locale.lua
+++ b/core/locale.lua
@@ -1,249 +1,247 @@
-
-
- local _, ns = ...
-
- local L = {}
- local locale = GetLocale()
-
- -- MENU
- L['UI Colour'] = ''
- L['Toggle Elements'] = ''
-
- -- AURA
- L['h'] = 'h' -- "h" hours on aura timers
- L['m'] = 'm' -- "m" minutes on aura timers
- L['s'] = 's' -- "s" seconds on aura timers
-
- -- BAG
- L['Bag'] = ''
- L['Bank'] = ''
- L['Sell Poor Quality Items & Rubbish'] = ''
-
- -- MAP
- L['Mouse'] = ''
-
- -- MENU
- L['Your new settings require a UI reload to take effect.'] = 'Your new settings require a UI reload to take effect.'
- L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = 'Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'
- L['Actionbar'] = ''
- L['Exp & Reputation Bar'] = ''
- L['Horizontal Third Row (Classic Layout only)'] = ''
- L['Aura'] = ''
- L['Statusbars on Auras'] = ''
- L['Custom Value Formatting on Auras'] = ''
- L['Chat'] = ''
- L['Events & Custom Chat Text'] = ''
- L['Chat Style'] = ''
- L['URLs'] = ''
- L['Inventory'] = ''
- L['Button For Selling Grey Items at Vendor'] = ''
- L['Enemy Castbars'] = ''
- L['Nameplates'] = ''
- L['Show Auras on Nameplates'] = ''
- L['Show Combo Points on Nameplate'] = ''
- L['Class Colours on Friendly Nameplates'] = ''
- L['Icon-based Nameplates for Totems'] = ''
- L['Quest Tracker (Click-through to Quest Log)'] = ''
- L['Tooltip'] = ''
- L['Mouse Anchor'] = ''
- L['Unitframes'] = ''
- L['Player'] = ''
- L['Target'] = ''
- L['Party'] = ''
- L['Target of Target'] = ''
- L['Pet'] = ''
- L['Value Colours on Text'] = ''
- L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = ''
-
- -- TOOLTIP
- L[' Boss'] = ''
- L[' Rare Elite'] = ''
- L[' Rare'] = ''
- L[' Elite'] = ''
-
- -- TRANSFORM
- L['Increases speed by (.+)%%'] = '' -- tooltip string on mount items
- L['Fishing Pole'] = ''
- L['Your Fishing Pole has been equipped'] = ''
- L['while silenced'] = '' -- UI_ERROR_MESSAGE return, used to check if we're in combat (and dismount)
- L['shapeshift'] = '' -- UI_ERROR_MESSAGE return, used to check if we're shapeshifted (and shift out)
-
- -- CHAT CHANNELS
- L['|Hchannel:Guild|hG|h. %s:\32'] = '' -- "G. Obble:" guild chat
- L['|Hchannel:o|hO|h. %s:\32'] = '' -- "O. Obble:" officer chat
- L['|Hchannel:raid|hR|h. %s:\32'] = '' -- "R. Obble:" raid chat
- L['RW. %s:\32'] = '' -- "RW. Obble:" raid warning
- L['|Hchannel:raid|hRL|h. %s:\32'] = '' -- "RL. Obble:" raid leader
- L['|Hchannel:INSTANCE_CHAT|hIns|h. %s:\32'] = '' -- "Ins. Obble:" instance chat
- L['|Hchannel:INSTANCE_CHAT|hIL|h. %s:\32'] = '' -- "IL. Obble:" instance leader
- L['|Hchannel:Battleground|hBG|h. %s:\32'] = '' -- "BG. Obble:" battleground chat
- L['|Hchannel:Battleground|hBL|h. %s:\32'] = '' -- "BL. Obble:" battleground leader
- L['|Hchannel:party|hP|h. %s:\32'] = '' -- "P. Obble:" party chat
- L['|Hchannel:party|hDG|h. %s:\32'] = '' -- "DG. Obble:" party guide
- L['|Hchannel:raid|hR|h. %s:\32'] = '' -- "R. Obble:" CHAT_MONSTER_PARTY_GET
-
- -- CHAT EVENTS
- L['Joined Channel: (.+)'] = ''
- L['Reputation with (.+) increased by (.+).'] = ''
- L['You are now (.+) with (.+).'] = ''
- L['(.+) dies, you gain (.+) experience. %(%+(.+)exp Rested bonus%)'] = ''
- L['(.+) dies, you gain (.+) experience.'] = ''
- L['You gain (.+) experience.'] = ''
- L['You receive currency: (.+)%.'] = ''
- L['You\'ve lost (.+)%.'] = ''
- L['(.+) has earned the achievement (.+)!'] = ''
- L['(.+) has earned the achievement (.+)!'] = ''
- L['You receive item: (.+)%.'] = ''
- L['You receive loot: (.+)%.'] = ''
- L['You receive bonus loot: (.+)%.'] = ''
- L['You create: (.+)%.'] = ''
- L['You are refunded: (.+)%.'] = ''
- L['You have selected (.+) for: (.+)'] = ''
- L['Received item: (.+)%.'] = ''
- L['(.+) receives item: (.+)%.'] = ''
- L['(.+) receives loot: (.+)%.'] = ''
- L['(.+) receives bonus loot: (.+)%.'] = ''
- L['(.+) creates: (.+)%.'] = ''
- L['(.+) was disenchanted for loot by (.+).'] = ''
- L['Your skill in (.+) has increased to (.+).'] = ''
- L['Received (.+), (.+).'] = ''
- L['Received (.+).'] = ''
- L['Received (.+) of item: (.+).'] = ''
- L['(.+) is now your follower.'] = ''
- L['(.+) completed.'] = ''
- L['Quest accepted: (.+)'] = ''
- L['Received item: (.+)%.'] = ''
- L['Experience gained: (.+).'] = ''
- L['(.+) has come online.'] = ''
- L['(.+) has gone offline.'] = ''
- L['You are now Busy: in combat'] = ''
- L['You are no longer marked Busy.'] = ''
- L['Discovered (.+): (.+) experience gained'] = ''
- L['You are now (.+) with (.+).'] = ''
- L['Quest Accepted (.+)'] = ''
- L['You are now Away: AFK'] = ''
- L['You are no longer Away.'] = ''
- L['You are no longer rested.'] = ''
- L['You don\'t meet the requirements for that quest.'] = ''
- L['(.+) has joined the raid group.'] = ''
- L['(.+) has left the raid group.'] = ''
- L['You have earned the title \'(.+)\'.'] = ''
- L['(.+) creates (.+).'] = ''
-
- L['Guild Message of the Day:'] = '' -- guild message of the day
- L['To (|HBNplayer.+|h):'] = '' -- whisper to bnet
- L['To (|Hplayer.+|h):'] = '' -- whisper to
- L[' whispers:'] = '' -- whisper from
- L['Joined Channel:'] = '' -- channel join
- L['Left Channel:'] = 'Left ' -- channel left
-
- if locale == "zhTW" then
-
- -- MENU
- L['UI Colour'] = '介面顏色'
- L['Toggle Elements'] = '切換選項'
-
- -- BAG
- L['Bag'] = '背包' -- or use BAGSLOT
- L['Bank'] = '銀行' -- or use BANK
- L['Sell Poor Quality Items & Rubbish'] = '賣垃圾'
-
- -- MAP
- L['Mouse'] = '滑鼠'
-
- -- MENU
- L['Your new settings require a UI reload to take effect.'] = '你的新設定需要重載介面才會生效。'
- L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = '全局切換開關。|cffff0000注意:會覆蓋掉你現有的設定。|r'
- L['Actionbar'] = '快捷列'
- L['Exp & Reputation Bar'] = '經驗聲望條'
- L['Horizontal Third Row (Classic Layout only)'] = '橫式的第三排快捷列,僅在經典布局生效'
- L['Cast Spells on Button Down'] = '按下按鍵時施法'
- L['Aura'] = '光環'
- L['Statusbars on Auras'] = '在光環上顯示計時條'
- L['Custom Value Formatting on Auras'] = '修改光環計時文本格式'
- L['Chat'] = '聊天'
- L['Events & Custom Chat Text'] = '修改聊天文本格式'
- L['Chat Style'] = '修改聊天框架外觀'
- L['URLs'] = '網址'
- L['Inventory'] = '行囊'
- L['Button For Selling Grey Items at Vendor'] = '在商人介面顯示賣垃圾的按鈕'
- L['Enemy Castbars'] = '敵方施法條'
- L['Nameplates'] = '名條'
- L['Show Auras on Nameplates'] = '在名條上顯示光環'
- L['Show Combo Points on Nameplate'] = '在名條上顯示連擊點'
- L['Class Colours on Friendly Nameplates'] = '替友方名條職業著色'
- L['Icon-based Nameplates for Totems'] = '圖騰圖示'
- L['Quest Tracker (Click-through to Quest Log)'] = '點擊任務追蹤開啟任務日誌'
- L['Tooltip'] = '滑鼠提示'
- L['Mouse Anchor'] = '錨點於滑鼠位置'
- L['Unitframes'] = '單位框架'
- L['Player'] = '玩家'
- L['Target'] = '目標'
- L['Party'] = '隊伍'
- L['Target of Target'] = '目標的目標'
- L['Pet'] = '寵物'
- L['Value Colours on Text'] = '數值著色'
- L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = '使用黑色主題時著色稀有和精英的金銀龍'
-
- -- TOOLTIP
- L[' Boss'] = ' 首領' -- or use BOSS
- L[' Rare Elite'] = ' 稀有精英'
- L[' Rare'] = ' 稀有' -- or use ELITE
- L[' Elite'] = ' 精英'
-
- elseif locale == "zhCN" then
- -- MENU
- L['UI Colour'] = '界面颜色'
- L['Toggle Elements'] = '配置选项'
-
- -- BAG
- L['Bag'] = '背包' -- or use BAGSLOT
- L['Bank'] = '银行' -- or use BANK
- L['Sell Poor Quality Items & Rubbish'] = '卖垃圾'
-
- -- MAP
- L['Mouse'] = '鼠标'
-
- -- MENU
- L['Your new settings require a UI reload to take effect.'] = '你的新设置需要重载界面才会生效。'
- L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = '全局切换开关。|cffff0000注意:会复盖掉你现有的设置。|r'
- L['Actionbar'] = '动作条'
- L['Exp & Reputation Bar'] = '经验声望条'
- L['Horizontal Third Row (Classic Layout only)'] = '横式的第三排动作条,仅在经典布局生效'
- L['Cast Spells on Button Down'] = '按下按键时施法'
- L['Aura'] = '光环'
- L['Statusbars on Auras'] = '在光环上显示计时条'
- L['Custom Value Formatting on Auras'] = '修改光环计时文本格式'
- L['Chat'] = '聊天'
- L['Events & Custom Chat Text'] = '修改聊天文本格式'
- L['Chat Style'] = '修改聊天框架外观'
- L['URLs'] = '网址'
- L['Inventory'] = '行囊'
- L['Button For Selling Grey Items at Vendor'] = '在商人接口显示卖垃圾的按钮'
- L['Enemy Castbars'] = '敌对施法条'
- L['Nameplates'] = '姓名板'
- L['Show Auras on Nameplates'] = '在姓名板上显示光环'
- L['Show Combo Points on Nameplate'] = '在姓名板上显示连击点'
- L['Class Colours on Friendly Nameplates'] = '友方姓名板职业染色'
- L['Icon-based Nameplates for Totems'] = '图腾图示'
- L['Quest Tracker (Click-through to Quest Log)'] = '点击任务追踪开启任务日志'
- L['Tooltip'] = '鼠标提示'
- L['Mouse Anchor'] = '锚点于鼠标'
- L['Unitframes'] = '单位框体'
- L['Player'] = '玩家'
- L['Target'] = '目标'
- L['Party'] = '队伍'
- L['Target of Target'] = '目标的目标'
- L['Pet'] = '宠物'
- L['Value Colours on Text'] = '数值染色'
- L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = '使用黑色主题时着色稀有和精英的金银龙'
-
- -- TOOLTIP
- L[' Boss'] = ' 首领' -- or use BOSS
- L[' Rare Elite'] = ' 稀有精英'
- L[' Rare'] = ' 稀有' -- or use ELITE
- L[' Elite'] = ' 精英'
-
- else
- return
- end
\ No newline at end of file
+local _, ns = ...
+
+local L = {}
+local locale = GetLocale()
+
+-- MENU
+L['UI Colour'] = ''
+L['Toggle Elements'] = ''
+
+-- AURA
+L['h'] = 'h' -- "h" hours on aura timers
+L['m'] = 'm' -- "m" minutes on aura timers
+L['s'] = 's' -- "s" seconds on aura timers
+
+-- BAG
+L['Bag'] = ''
+L['Bank'] = ''
+L['Sell Poor Quality Items & Rubbish'] = ''
+
+-- MAP
+L['Mouse'] = ''
+
+-- MENU
+L['Your new settings require a UI reload to take effect.'] = 'Your new settings require a UI reload to take effect.'
+L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = 'Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'
+L['Actionbar'] = ''
+L['Exp & Reputation Bar'] = ''
+L['Horizontal Third Row (Classic Layout only)'] = ''
+L['Aura'] = ''
+L['Statusbars on Auras'] = ''
+L['Custom Value Formatting on Auras'] = ''
+L['Chat'] = ''
+L['Events & Custom Chat Text'] = ''
+L['Chat Style'] = ''
+L['URLs'] = ''
+L['Inventory'] = ''
+L['Button For Selling Grey Items at Vendor'] = ''
+L['Enemy Castbars'] = ''
+L['Nameplates'] = ''
+L['Show Auras on Nameplates'] = ''
+L['Show Combo Points on Nameplate'] = ''
+L['Class Colours on Friendly Nameplates'] = ''
+L['Icon-based Nameplates for Totems'] = ''
+L['Quest Tracker (Click-through to Quest Log)'] = ''
+L['Tooltip'] = ''
+L['Mouse Anchor'] = ''
+L['Unitframes'] = ''
+L['Player'] = ''
+L['Target'] = ''
+L['Party'] = ''
+L['Target of Target'] = ''
+L['Pet'] = ''
+L['Value Colours on Text'] = ''
+L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = ''
+
+-- TOOLTIP
+L[' Boss'] = ''
+L[' Rare Elite'] = ''
+L[' Rare'] = ''
+L[' Elite'] = ''
+
+-- TRANSFORM
+L['Increases speed by (.+)%%'] = '' -- tooltip string on mount items
+L['Fishing Pole'] = ''
+L['Your Fishing Pole has been equipped'] = ''
+L['while silenced'] = '' -- UI_ERROR_MESSAGE return, used to check if we're in combat (and dismount)
+L['shapeshift'] = '' -- UI_ERROR_MESSAGE return, used to check if we're shapeshifted (and shift out)
+
+-- CHAT CHANNELS
+L['|Hchannel:Guild|hG|h. %s:\32'] = '' -- "G. Obble:" guild chat
+L['|Hchannel:o|hO|h. %s:\32'] = '' -- "O. Obble:" officer chat
+L['|Hchannel:raid|hR|h. %s:\32'] = '' -- "R. Obble:" raid chat
+L['RW. %s:\32'] = '' -- "RW. Obble:" raid warning
+L['|Hchannel:raid|hRL|h. %s:\32'] = '' -- "RL. Obble:" raid leader
+L['|Hchannel:INSTANCE_CHAT|hIns|h. %s:\32'] = '' -- "Ins. Obble:" instance chat
+L['|Hchannel:INSTANCE_CHAT|hIL|h. %s:\32'] = '' -- "IL. Obble:" instance leader
+L['|Hchannel:Battleground|hBG|h. %s:\32'] = '' -- "BG. Obble:" battleground chat
+L['|Hchannel:Battleground|hBL|h. %s:\32'] = '' -- "BL. Obble:" battleground leader
+L['|Hchannel:party|hP|h. %s:\32'] = '' -- "P. Obble:" party chat
+L['|Hchannel:party|hDG|h. %s:\32'] = '' -- "DG. Obble:" party guide
+L['|Hchannel:raid|hR|h. %s:\32'] = '' -- "R. Obble:" CHAT_MONSTER_PARTY_GET
+
+-- CHAT EVENTS
+L['Joined Channel: (.+)'] = ''
+L['Reputation with (.+) increased by (.+).'] = ''
+L['You are now (.+) with (.+).'] = ''
+L['(.+) dies, you gain (.+) experience. %(%+(.+)exp Rested bonus%)'] = ''
+L['(.+) dies, you gain (.+) experience.'] = ''
+L['You gain (.+) experience.'] = ''
+L['You receive currency: (.+)%.'] = ''
+L['You\'ve lost (.+)%.'] = ''
+L['(.+) has earned the achievement (.+)!'] = ''
+L['(.+) has earned the achievement (.+)!'] = ''
+L['You receive item: (.+)%.'] = ''
+L['You receive loot: (.+)%.'] = ''
+L['You receive bonus loot: (.+)%.'] = ''
+L['You create: (.+)%.'] = ''
+L['You are refunded: (.+)%.'] = ''
+L['You have selected (.+) for: (.+)'] = ''
+L['Received item: (.+)%.'] = ''
+L['(.+) receives item: (.+)%.'] = ''
+L['(.+) receives loot: (.+)%.'] = ''
+L['(.+) receives bonus loot: (.+)%.'] = ''
+L['(.+) creates: (.+)%.'] = ''
+L['(.+) was disenchanted for loot by (.+).'] = ''
+L['Your skill in (.+) has increased to (.+).'] = ''
+L['Received (.+), (.+).'] = ''
+L['Received (.+).'] = ''
+L['Received (.+) of item: (.+).'] = ''
+L['(.+) is now your follower.'] = ''
+L['(.+) completed.'] = ''
+L['Quest accepted: (.+)'] = ''
+L['Received item: (.+)%.'] = ''
+L['Experience gained: (.+).'] = ''
+L['(.+) has come online.'] = ''
+L['(.+) has gone offline.'] = ''
+L['You are now Busy: in combat'] = ''
+L['You are no longer marked Busy.'] = ''
+L['Discovered (.+): (.+) experience gained'] = ''
+L['You are now (.+) with (.+).'] = ''
+L['Quest Accepted (.+)'] = ''
+L['You are now Away: AFK'] = ''
+L['You are no longer Away.'] = ''
+L['You are no longer rested.'] = ''
+L['You don\'t meet the requirements for that quest.'] = ''
+L['(.+) has joined the raid group.'] = ''
+L['(.+) has left the raid group.'] = ''
+L['You have earned the title \'(.+)\'.'] = ''
+L['(.+) creates (.+).'] = ''
+
+L['Guild Message of the Day:'] = '' -- guild message of the day
+L['To (|HBNplayer.+|h):'] = '' -- whisper to bnet
+L['To (|Hplayer.+|h):'] = '' -- whisper to
+L[' whispers:'] = '' -- whisper from
+L['Joined Channel:'] = '' -- channel join
+L['Left Channel:'] = 'Left ' -- channel left
+
+if locale == "zhTW" then
+
+ -- MENU
+ L['UI Colour'] = '介面顏色'
+ L['Toggle Elements'] = '切換選項'
+
+ -- BAG
+ L['Bag'] = '背包' -- or use BAGSLOT
+ L['Bank'] = '銀行' -- or use BANK
+ L['Sell Poor Quality Items & Rubbish'] = '賣垃圾'
+
+ -- MAP
+ L['Mouse'] = '滑鼠'
+
+ -- MENU
+ L['Your new settings require a UI reload to take effect.'] = '你的新設定需要重載介面才會生效。'
+ L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = '全局切換開關。|cffff0000注意:會覆蓋掉你現有的設定。|r'
+ L['Actionbar'] = '快捷列'
+ L['Exp & Reputation Bar'] = '經驗聲望條'
+ L['Horizontal Third Row (Classic Layout only)'] = '橫式的第三排快捷列,僅在經典布局生效'
+ L['Cast Spells on Button Down'] = '按下按鍵時施法'
+ L['Aura'] = '光環'
+ L['Statusbars on Auras'] = '在光環上顯示計時條'
+ L['Custom Value Formatting on Auras'] = '修改光環計時文本格式'
+ L['Chat'] = '聊天'
+ L['Events & Custom Chat Text'] = '修改聊天文本格式'
+ L['Chat Style'] = '修改聊天框架外觀'
+ L['URLs'] = '網址'
+ L['Inventory'] = '行囊'
+ L['Button For Selling Grey Items at Vendor'] = '在商人介面顯示賣垃圾的按鈕'
+ L['Enemy Castbars'] = '敵方施法條'
+ L['Nameplates'] = '名條'
+ L['Show Auras on Nameplates'] = '在名條上顯示光環'
+ L['Show Combo Points on Nameplate'] = '在名條上顯示連擊點'
+ L['Class Colours on Friendly Nameplates'] = '替友方名條職業著色'
+ L['Icon-based Nameplates for Totems'] = '圖騰圖示'
+ L['Quest Tracker (Click-through to Quest Log)'] = '點擊任務追蹤開啟任務日誌'
+ L['Tooltip'] = '滑鼠提示'
+ L['Mouse Anchor'] = '錨點於滑鼠位置'
+ L['Unitframes'] = '單位框架'
+ L['Player'] = '玩家'
+ L['Target'] = '目標'
+ L['Party'] = '隊伍'
+ L['Target of Target'] = '目標的目標'
+ L['Pet'] = '寵物'
+ L['Value Colours on Text'] = '數值著色'
+ L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = '使用黑色主題時著色稀有和精英的金銀龍'
+
+ -- TOOLTIP
+ L[' Boss'] = ' 首領' -- or use BOSS
+ L[' Rare Elite'] = ' 稀有精英'
+ L[' Rare'] = ' 稀有' -- or use ELITE
+ L[' Elite'] = ' 精英'
+
+elseif locale == "zhCN" then
+ -- MENU
+ L['UI Colour'] = '界面颜色'
+ L['Toggle Elements'] = '配置选项'
+
+ -- BAG
+ L['Bag'] = '背包' -- or use BAGSLOT
+ L['Bank'] = '银行' -- or use BANK
+ L['Sell Poor Quality Items & Rubbish'] = '卖垃圾'
+
+ -- MAP
+ L['Mouse'] = '鼠标'
+
+ -- MENU
+ L['Your new settings require a UI reload to take effect.'] = '你的新设置需要重载界面才会生效。'
+ L['Toggle All modui Elements. |cffff0000Note: Overrides Selections.|r'] = '全局切换开关。|cffff0000注意:会复盖掉你现有的设置。|r'
+ L['Actionbar'] = '动作条'
+ L['Exp & Reputation Bar'] = '经验声望条'
+ L['Horizontal Third Row (Classic Layout only)'] = '横式的第三排动作条,仅在经典布局生效'
+ L['Cast Spells on Button Down'] = '按下按键时施法'
+ L['Aura'] = '光环'
+ L['Statusbars on Auras'] = '在光环上显示计时条'
+ L['Custom Value Formatting on Auras'] = '修改光环计时文本格式'
+ L['Chat'] = '聊天'
+ L['Events & Custom Chat Text'] = '修改聊天文本格式'
+ L['Chat Style'] = '修改聊天框架外观'
+ L['URLs'] = '网址'
+ L['Inventory'] = '行囊'
+ L['Button For Selling Grey Items at Vendor'] = '在商人接口显示卖垃圾的按钮'
+ L['Enemy Castbars'] = '敌对施法条'
+ L['Nameplates'] = '姓名板'
+ L['Show Auras on Nameplates'] = '在姓名板上显示光环'
+ L['Show Combo Points on Nameplate'] = '在姓名板上显示连击点'
+ L['Class Colours on Friendly Nameplates'] = '友方姓名板职业染色'
+ L['Icon-based Nameplates for Totems'] = '图腾图示'
+ L['Quest Tracker (Click-through to Quest Log)'] = '点击任务追踪开启任务日志'
+ L['Tooltip'] = '鼠标提示'
+ L['Mouse Anchor'] = '锚点于鼠标'
+ L['Unitframes'] = '单位框体'
+ L['Player'] = '玩家'
+ L['Target'] = '目标'
+ L['Party'] = '队伍'
+ L['Target of Target'] = '目标的目标'
+ L['Pet'] = '宠物'
+ L['Value Colours on Text'] = '数值染色'
+ L['Elite/Rare Dragons in Colour (for dark theme UIs)'] = '使用黑色主题时着色稀有和精英的金银龙'
+
+ -- TOOLTIP
+ L[' Boss'] = ' 首领' -- or use BOSS
+ L[' Rare Elite'] = ' 稀有精英'
+ L[' Rare'] = ' 稀有' -- or use ELITE
+ L[' Elite'] = ' 精英'
+
+else
+ return
+end
diff --git a/core/skins.lua b/core/skins.lua
index a83deb3..eb0b8ab 100755
--- a/core/skins.lua
+++ b/core/skins.lua
@@ -1,252 +1,250 @@
+-- api for reskinning frames & buttons
+--
+
+local _, ns = ...
+
+local FONT_REGULAR = ns.FONT_REGULAR
+
+local TEXTURE = [[Interface\AddOns\modui_classic\art\statusbar\statusbar.tga]]
+local BACKDROP = {
+ bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
+ tiled = false,
+ insets = {left = -3, right = -3, top = -3, bottom = -3}
+}
+local SLOT = {
+ bgFile = '',
+ edgeFile = [[Interface\Buttons\WHITE8x8]],
+ edgeSize = 3,
+}
+local BORDER = {
+ bgFile = '',
+ edgeFile = [[Interface\Buttons\WHITE8x8]],
+ edgeSize = 1,
+}
+
+local t = CreateFont'iipHotKeyFont'
+t:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
+
+local AddHighlight = function(bu)
+ bu.enter = bu:CreateTexture(nil, 'OVERLAY')
+ bu.enter:SetAllPoints()
+ bu.enter:SetTexture[[Interface\Buttons\CheckButtonHilight]]
+ bu.enter:SetTexCoord(.075, .95, .05, .95)
+ bu.enter:SetBlendMode'ADD'
+ bu.enter:SetAlpha(0)
+end
+
+local ToggleHighlight = function(bu, show)
+ if not bu.enter then AddHighlight(bu) end
+ bu.enter:SetAlpha(show and 1 or 0)
+end
+
+ns.BD = function(bu, a, ix) -- build in an anti-fuckup
+ if not bu then return end
+ local f = bu
+ if not f.SetBackdrop then
+ Mixin(f, BackdropTemplateMixin)
+ end
+ if f:GetObjectType() == 'Texture' then
+ if not bu.BD then
+ local parent = bu:GetParent()
+ bu.BD = CreateFrame('Frame', nil, parent, "BackdropTemplate")
+ bu.BD:SetAllPoints(bu)
+ bu.BD:SetFrameLevel(parent:GetFrameLevel() - 1)
+ end
+ f = bu.BD
+ end
-
-
- -- api for reskinning frames & buttons
- --
-
- local _, ns = ...
-
- local FONT_REGULAR = ns.FONT_REGULAR
-
- local TEXTURE = [[Interface\AddOns\modui_classic\art\statusbar\statusbar.tga]]
- local BACKDROP = {
+ f:SetBackdrop(
+ {
bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
tiled = false,
- insets = {left = -3, right = -3, top = -3, bottom = -3}
- }
- local SLOT = {
- bgFile = '',
- edgeFile = [[Interface\Buttons\WHITE8x8]],
- edgeSize = 3,
- }
- local BORDER = {
- bgFile = '',
- edgeFile = [[Interface\Buttons\WHITE8x8]],
- edgeSize = 1,
+ insets = {
+ left = ix or -3,
+ right = ix or -3,
+ top = ix or -3,
+ bottom = ix or -3
+ }
}
+ )
+ f:SetBackdropColor(0, 0, 0, a or 1)
+end
+
+ns.BU = function(bu, a, hover, x, y, ix)
+ if not bu then return end
+ ns.BD(bu, a, ix)
+ bu:SetNormalTexture''
+ --bu:SetHighlightTexture''
+ -- bu:SetPushedTexture''
+ if not InCombatLockdown() then bu:SetSize(x or 21, x or y or 21) end
+ bu:HookScript('OnEnter', function() if hover then ToggleHighlight(bu, true) end end)
+ bu:HookScript('OnLeave', function() if hover then ToggleHighlight(bu, false) end end)
+end
+
+ns.ItemElements = function(bu)
+ local n = bu:GetName()
+ local c = _G[n..'Count']
+ local cd = _G[n..'Cooldown']
+ local i = _G[n..'IconTexture']
+ local q = _G[n..'IconQuestTexture']
+
+ for _, v in pairs({bu.Border, bu.IconBorder}) do
+ if v then v:SetAlpha(0) end
+ end
- local t = CreateFont'iipHotKeyFont'
- t:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
-
- local AddHighlight = function(bu)
- bu.enter = bu:CreateTexture(nil, 'OVERLAY')
- bu.enter:SetAllPoints()
- bu.enter:SetTexture[[Interface\Buttons\CheckButtonHilight]]
- bu.enter:SetTexCoord(.075, .95, .05, .95)
- bu.enter:SetBlendMode'ADD'
- bu.enter:SetAlpha(0)
- end
-
- local ToggleHighlight = function(bu, show)
- if not bu.enter then AddHighlight(bu) end
- bu.enter:SetAlpha(show and 1 or 0)
- end
-
- ns.BD = function(bu, a, ix) -- build in an anti-fuckup
- if not bu then return end
- local f = bu
- if f:GetObjectType() == 'Texture' then
- if not bu.BD then
- local parent = bu:GetParent()
- bu.BD = CreateFrame('Frame', nil, parent)
- bu.BD:SetAllPoints(bu)
- bu.BD:SetFrameLevel(parent:GetFrameLevel() - 1)
- end
- f = bu.BD
- end
- f:SetBackdrop(
- {
- bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
- tiled = false,
- insets = {
- left = ix or -3,
- right = ix or -3,
- top = ix or -3,
- bottom = ix or -3
- }
- }
- )
- f:SetBackdropColor(0, 0, 0, a or 1)
- end
-
- ns.BU = function(bu, a, hover, x, y, ix)
- if not bu then return end
- ns.BD(bu, a, ix)
- bu:SetNormalTexture''
- --bu:SetHighlightTexture''
- -- bu:SetPushedTexture''
- if not InCombatLockdown() then bu:SetSize(x or 21, x or y or 21) end
- bu:HookScript('OnEnter', function() if hover then ToggleHighlight(bu, true) end end)
- bu:HookScript('OnLeave', function() if hover then ToggleHighlight(bu, false) end end)
- end
-
- ns.ItemElements = function(bu)
- local n = bu:GetName()
- local c = _G[n..'Count']
- local cd = _G[n..'Cooldown']
- local i = _G[n..'IconTexture']
- local q = _G[n..'IconQuestTexture']
-
- for _, v in pairs({bu.Border, bu.IconBorder}) do
- if v then v:SetAlpha(0) end
- end
-
- if c then
- c:ClearAllPoints()
- c:SetPoint('BOTTOM', bu)
- c:SetFont(FONT_REGULAR, 14, 'OUTLINE')
- c:SetShadowOffset(0, 0)
- c:SetJustifyH'CENTER'
- c:SetDrawLayer('OVERLAY', 7)
- end
-
- if i then
- i:SetTexCoord(.1, .9, .1, .9)
- i:SetDrawLayer'ARTWORK'
- end
-
- if cd then
- cd:ClearAllPoints()
- cd:SetAllPoints()
- end
+ if c then
+ c:ClearAllPoints()
+ c:SetPoint('BOTTOM', bu)
+ c:SetFont(FONT_REGULAR, 14, 'OUTLINE')
+ c:SetShadowOffset(0, 0)
+ c:SetJustifyH'CENTER'
+ c:SetDrawLayer('OVERLAY', 7)
+ end
- if bu.JunkIcon then
- bu.JunkIcon:ClearAllPoints()
- bu.JunkIcon:SetPoint'CENTER'
- end
+ if i then
+ i:SetTexCoord(.1, .9, .1, .9)
+ i:SetDrawLayer'ARTWORK'
+ end
- if bu.NewItemTexture then
- bu.NewItemTexture:SetTexture''
- bu.NewItemTexture:SetSize(28, 28)
- end
+ if cd then
+ cd:ClearAllPoints()
+ cd:SetAllPoints()
+ end
- if q then
- q:SetDrawLayer'BACKGROUND'
- q:SetSize(1, 1)
- bu.forQuest = true
- end
+ if bu.JunkIcon then
+ bu.JunkIcon:ClearAllPoints()
+ bu.JunkIcon:SetPoint'CENTER'
end
- ns.BUElements = function(bu)
- if not bu then return end
- local c = bu.Count or _G[bu:GetName()..'Count']
- local cd = bu.Cooldown or _G[bu:GetName()..'Cooldown']
- local i = bu.icon or bu.Icon or bu.IconTexture or _G[bu:GetName()..'Icon'] or _G[bu:GetName()..'IconTexture']
+ if bu.NewItemTexture then
+ bu.NewItemTexture:SetTexture''
+ bu.NewItemTexture:SetSize(28, 28)
+ end
- for _, v in pairs({bu.Border, bu.FloatingBG}) do
- if v then v:SetAlpha(0) end
- end
+ if q then
+ q:SetDrawLayer'BACKGROUND'
+ q:SetSize(1, 1)
+ bu.forQuest = true
+ end
+end
- if bu.FloatingBG and not bu.iid then
- bu.iid = bu:CreateTexture(nil, 'BACKGROUND')
- bu.iid:SetAllPoints(bu.FloatingBG)
- bu.iid:SetBackdrop(SLOT)
- bu.iid:SetBackdropColor(0, 0, 0)
- end
+ns.BUElements = function(bu)
+ if not bu then return end
+ local c = bu.Count or _G[bu:GetName()..'Count']
+ local cd = bu.Cooldown or _G[bu:GetName()..'Cooldown']
+ local i = bu.icon or bu.Icon or bu.IconTexture or _G[bu:GetName()..'Icon'] or _G[bu:GetName()..'IconTexture']
+ for _, v in pairs({bu.Border, bu.FloatingBG}) do
+ if v then v:SetAlpha(0) end
+ end
- if c then
- -- if bu.bo then c:SetParent(bu.bo) end
- c:ClearAllPoints()
- c:SetPoint('CENTER', bu, 'TOP', 0, -1)
- c:SetFont(FONT_REGULAR, 15, 'OUTLINE')
- c:SetShadowOffset(0, 0)
- c:SetJustifyH'CENTER'
- c:SetDrawLayer('OVERLAY', 7)
- end
+ if bu.FloatingBG and not bu.iid then
+ bu.iid = bu:CreateTexture(nil, 'BACKGROUND')
+ bu.iid:SetAllPoints(bu.FloatingBG)
+ bu.iid:SetBackdrop(SLOT)
+ bu.iid:SetBackdropColor(0, 0, 0)
+ end
- if cd then
- cd:ClearAllPoints()
- cd:SetAllPoints()
- end
- if bu.HotKey then
- bu.HotKey:ClearAllPoints()
- bu.HotKey:SetPoint('TOPRIGHT', bu, -1, 2)
- NumberFontNormalSmallGray:SetFontObject'iipHotKeyFont'
- end
+ if c then
+ -- if bu.bo then c:SetParent(bu.bo) end
+ c:ClearAllPoints()
+ c:SetPoint('CENTER', bu, 'TOP', 0, -1)
+ c:SetFont(FONT_REGULAR, 15, 'OUTLINE')
+ c:SetShadowOffset(0, 0)
+ c:SetJustifyH'CENTER'
+ c:SetDrawLayer('OVERLAY', 7)
+ end
- if i then
- i:SetTexCoord(.1, .9, .1, .9)
- i:SetDrawLayer'ARTWORK'
- end
+ if cd then
+ cd:ClearAllPoints()
+ cd:SetAllPoints()
+ end
- if bu.Name then
- bu.Name:SetWidth(bu:GetWidth() + 15)
- bu.Name:SetFontObject'GameFontHighlight'
- end
+ if bu.HotKey then
+ bu.HotKey:ClearAllPoints()
+ bu.HotKey:SetPoint('TOPRIGHT', bu, -1, 2)
+ NumberFontNormalSmallGray:SetFontObject'iipHotKeyFont'
end
- ns.BUBorder = function(bu, size, height, horiz, vert)
- if bu.bo then return end
- local x, y = (bu:GetWidth()/2) + 6, (bu:GetHeight()/2) + 7
+ if i then
+ i:SetTexCoord(.1, .9, .1, .9)
+ i:SetDrawLayer'ARTWORK'
+ end
- if size then
- x = size
- y = size
- end
+ if bu.Name then
+ bu.Name:SetWidth(bu:GetWidth() + 15)
+ bu.Name:SetFontObject'GameFontHighlight'
+ end
+end
- if height then
- y = height
- end
+ns.BUBorder = function(bu, size, height, horiz, vert)
+ if bu.bo then return end
+ local x, y = (bu:GetWidth()/2) + 6, (bu:GetHeight()/2) + 7
- bu.bo = {}
-
- bu.bo[1] = bu:CreateTexture(nil, 'BORDER')
- bu.bo[1]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
- bu.bo[1]:SetPoint('TOPLEFT', -(horiz or 6), vert or 7)
- bu.bo[1]:SetSize(x, y)
- bu.bo[1]:SetTexCoord(.5, .673, 0, 1)
- bu.bo[1]:SetVertexColor(.9, .9, .9)
-
- bu.bo[2] = bu:CreateTexture(nil, 'BORDER')
- bu.bo[2]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
- bu.bo[2]:SetPoint('TOPRIGHT', horiz or 6, vert or 7)
- bu.bo[2]:SetSize(x, y)
- bu.bo[2]:SetTexCoord(.675, .5, 0, 1)
- bu.bo[2]:SetVertexColor(.9, .9, .9)
-
- bu.bo[3] = bu:CreateTexture(nil, 'BORDER')
- bu.bo[3]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
- bu.bo[3]:SetPoint('BOTTOMLEFT', -(horiz or 6), -(vert or 7))
- bu.bo[3]:SetSize(x, y)
- bu.bo[3]:SetTexCoord(1, .829, 0, 1)
-
- bu.bo[4] = bu:CreateTexture(nil, 'BORDER')
- bu.bo[4]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
- bu.bo[4]:SetPoint('BOTTOMRIGHT', horiz or 6, -(vert or 7))
- bu.bo[4]:SetSize(x, y)
- bu.bo[4]:SetTexCoord(.82, 1, 0, 1)
-
- for i = 1, 4 do
- tinsert(ns.skinbu, bu.bo[i])
- end
+ if size then
+ x = size
+ y = size
end
- ns.BDStone = function(bu, x, path)
- bu.stone = CreateFrame('Frame', nil, bu)
- bu.stone:SetBackdrop({
- bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
- insets = {left = -2, right = -2, top = -2, bottom = -2}
- })
- bu.stone:SetBackdropColor(.05, .05, .05)
- bu.stone:SetPoint('TOPLEFT', bu, x and -x or -4, x and x or 4)
- bu.stone:SetPoint('BOTTOMRIGHT', bu, x and x or 4, x and -x or -4)
- bu.stone:SetFrameLevel(bu:GetFrameLevel() - 1)
-
- bu.stone.t = bu.stone:CreateTexture(nil, 'ARTWORK')
- bu.stone.t:SetAllPoints()
- bu.stone.t:SetTexture(path or [[Interface/PLAYERACTIONBARALT/STONE]])
- bu.stone.t:SetTexCoord(0, 1, .18, .3)
- end
-
- ns.SB = function(f)
- if f:GetObjectType() == 'StatusBar' then
- f:SetStatusBarTexture(TEXTURE)
- else
- f:SetTexture(TEXTURE)
- end
+ if height then
+ y = height
end
-
- --
+ bu.bo = {}
+
+ bu.bo[1] = bu:CreateTexture(nil, 'BORDER')
+ bu.bo[1]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
+ bu.bo[1]:SetPoint('TOPLEFT', -(horiz or 6), vert or 7)
+ bu.bo[1]:SetSize(x, y)
+ bu.bo[1]:SetTexCoord(.5, .673, 0, 1)
+ bu.bo[1]:SetVertexColor(.9, .9, .9)
+
+ bu.bo[2] = bu:CreateTexture(nil, 'BORDER')
+ bu.bo[2]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
+ bu.bo[2]:SetPoint('TOPRIGHT', horiz or 6, vert or 7)
+ bu.bo[2]:SetSize(x, y)
+ bu.bo[2]:SetTexCoord(.675, .5, 0, 1)
+ bu.bo[2]:SetVertexColor(.9, .9, .9)
+
+ bu.bo[3] = bu:CreateTexture(nil, 'BORDER')
+ bu.bo[3]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
+ bu.bo[3]:SetPoint('BOTTOMLEFT', -(horiz or 6), -(vert or 7))
+ bu.bo[3]:SetSize(x, y)
+ bu.bo[3]:SetTexCoord(1, .829, 0, 1)
+
+ bu.bo[4] = bu:CreateTexture(nil, 'BORDER')
+ bu.bo[4]:SetTexture[[Interface\Tooltips\UI-Tooltip-Border]]
+ bu.bo[4]:SetPoint('BOTTOMRIGHT', horiz or 6, -(vert or 7))
+ bu.bo[4]:SetSize(x, y)
+ bu.bo[4]:SetTexCoord(.82, 1, 0, 1)
+
+ for i = 1, 4 do
+ tinsert(ns.skinbu, bu.bo[i])
+ end
+end
+
+ns.BDStone = function(bu, x, path)
+ bu.stone = CreateFrame('Frame', nil, bu)
+ bu.stone:SetBackdrop({
+ bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
+ insets = {left = -2, right = -2, top = -2, bottom = -2}
+ })
+ bu.stone:SetBackdropColor(.05, .05, .05)
+ bu.stone:SetPoint('TOPLEFT', bu, x and -x or -4, x and x or 4)
+ bu.stone:SetPoint('BOTTOMRIGHT', bu, x and x or 4, x and -x or -4)
+ bu.stone:SetFrameLevel(bu:GetFrameLevel() - 1)
+
+ bu.stone.t = bu.stone:CreateTexture(nil, 'ARTWORK')
+ bu.stone.t:SetAllPoints()
+ bu.stone.t:SetTexture(path or [[Interface/PLAYERACTIONBARALT/STONE]])
+ bu.stone.t:SetTexCoord(0, 1, .18, .3)
+end
+
+ns.SB = function(f)
+ if f:GetObjectType() == 'StatusBar' then
+ f:SetStatusBarTexture(TEXTURE)
+ else
+ f:SetTexture(TEXTURE)
+ end
+end
diff --git a/core/tables.lua b/core/tables.lua
index 6488b64..6d87909 100755
--- a/core/tables.lua
+++ b/core/tables.lua
@@ -1,2749 +1,28 @@
+local _, ns = ...
+-- back to giant fuckin' tables now that blizzard removed spellIDs
+-- i've pulled this from another developers (assuming auto-generated) list of spellIDs in classic
+-- https://github.com/wardz/ClassicCastbars
+-- but we have the old modui table too where there might be some benefits to using a "slimmer" table
+-- of spells we * actually * came across and built up during extensive pserver play
- local _, ns = ...
+ns.cast = {
+}
- -- back to giant fuckin' tables now that blizzard removed spellIDs
- -- i've pulled this from another developers (assuming auto-generated) list of spellIDs in classic
- -- https://github.com/wardz/ClassicCastbars
- -- but we have the old modui table too where there might be some benefits to using a "slimmer" table
- -- of spells we * actually * came across and built up during extensive pserver play
+ns.channelled = {
+}
- ns.cast = {
- [GetSpellInfo(17745)] = 17745, -- Diseased Spit
- [GetSpellInfo(6753)] = 6753, -- Backhand
- [GetSpellInfo(21954)] = 21954, -- Dispel Poison
- [GetSpellInfo(18440)] = 18440, -- Mooncloth Leggings
- [GetSpellInfo(28165)] = 28165, -- Shadow Guard
- [GetSpellInfo(17204)] = 17204, -- Summon Skeleton
- [GetSpellInfo(18403)] = 18403, -- Frostweave Tunic
- [GetSpellInfo(9781)] = 9781, -- Mithril Shield Spike
- [GetSpellInfo(9478)] = 9478, -- Invis Placing Bear Trap
- [GetSpellInfo(9972)] = 9972, -- Ornate Mithril Breastplate
- [GetSpellInfo(16641)] = 16641, -- Dense Sharpening Stone
- [GetSpellInfo(6648)] = 6648, -- Chestnut Mare
- [GetSpellInfo(19755)] = 19755, -- Frightalon
- [GetSpellInfo(19102)] = 19102, -- Runic Leather Armor
- [GetSpellInfo(13228)] = 13228, -- Wound Poison II
- [GetSpellInfo(28397)] = 28397, -- Reputation - Gadgetzan +500
- [GetSpellInfo(18452)] = 18452, -- Mooncloth Circlet
- [GetSpellInfo(19048)] = 19048, -- Heavy Scorpid Bracers
- [GetSpellInfo(29332)] = 29332, -- Fire-toasted Bun
- [GetSpellInfo(25177)] = 25177, -- Fire Weakness
- [GetSpellInfo(22566)] = 22566, -- Hex
- [GetSpellInfo(17196)] = 17196, -- Seeping Willow
- [GetSpellInfo(9575)] = 9575, -- Self Detonation
- [GetSpellInfo(25166)] = 25166, -- Call Glyphs of Warding
- [GetSpellInfo(19050)] = 19050, -- Green Dragonscale Breastplate
- [GetSpellInfo(12585)] = 12585, -- Solid Blasting Powder
- [GetSpellInfo(28297)] = 28297, -- Lightning Totem
- [GetSpellInfo(24165)] = 24165, -- Hoodoo Hex
- [GetSpellInfo(13692)] = 13692, -- Dire Growl
- [GetSpellInfo(12093)] = 12093, -- Tuxedo Jacket
- [GetSpellInfo(9942)] = 9942, -- Mithril Scale Gloves
- [GetSpellInfo(16060)] = 16060, -- Golden Sabercat
- [GetSpellInfo(18442)] = 18442, -- Felcloth Hood
- [GetSpellInfo(12053)] = 12053, -- Black Mageweave Gloves
- [GetSpellInfo(2164)] = 2164, -- Fine Leather Gloves
- [GetSpellInfo(3170)] = 3170, -- Weak Troll's Blood Potion
- [GetSpellInfo(10840)] = 10840, -- Mageweave Bandage
- [GetSpellInfo(2666)] = 2666, -- Runed Copper Belt
- [GetSpellInfo(21544)] = 21544, -- Create Shredder
- [GetSpellInfo(17553)] = 17553, -- Superior Mana Potion
- [GetSpellInfo(20890)] = 20890, -- Dark Iron Reaver
- [GetSpellInfo(10703)] = 10703, -- Summon Wood Frog
- [GetSpellInfo(8365)] = 8365, -- Enlarge
- [GetSpellInfo(12511)] = 12511, -- Torch Combine
- [GetSpellInfo(24162)] = 24162, -- Falcon's Call
- [GetSpellInfo(17574)] = 17574, -- Greater Fire Protection Potion
- [GetSpellInfo(3760)] = 3760, -- Hillman's Cloak
- [GetSpellInfo(16726)] = 16726, -- Runic Plate Helm
- [GetSpellInfo(9435)] = 9435, -- Detonation
- [GetSpellInfo(17203)] = 17203, -- Fireball Volley
- [GetSpellInfo(2661)] = 2661, -- Copper Chain Belt
- [GetSpellInfo(1916)] = 1916, -- Sacrifice (NSE)
- [GetSpellInfo(24655)] = 24655, -- Green Dragonscale Gauntlets
- [GetSpellInfo(3635)] = 3635, -- Crystal Gaze
- [GetSpellInfo(23214)] = 23214, -- Summon Charger
- [GetSpellInfo(9195)] = 9195, -- Dusky Leather Leggings
- [GetSpellInfo(13230)] = 13230, -- Wound Poison IV
- [GetSpellInfo(11535)] = 11535, -- Opening Safe
- [GetSpellInfo(11895)] = 11895, -- Healing Wave of Antu'sul
- [GetSpellInfo(16658)] = 16658, -- Imperial Plate Helm
- [GetSpellInfo(17951)] = 17951, -- Create Firestone
- [GetSpellInfo(2337)] = 2337, -- Lesser Healing Potion
- [GetSpellInfo(18406)] = 18406, -- Runecloth Robe
- [GetSpellInfo(15861)] = 15861, -- Jungle Stew
- [GetSpellInfo(16656)] = 16656, -- Radiant Boots
- [GetSpellInfo(18763)] = 18763, -- Freeze
- [GetSpellInfo(3861)] = 3861, -- Long Silken Cloak
- [GetSpellInfo(27725)] = 27725, -- Satchel of Cenarius
- [GetSpellInfo(19087)] = 19087, -- Frostsaber Gloves
- [GetSpellInfo(22905)] = 22905, -- Place Unfired Blade
- [GetSpellInfo(24263)] = 24263, -- UNUSED Quest - Create Empowered Mojo Bundle
- [GetSpellInfo(12198)] = 12198, -- Marksman Hit
- [GetSpellInfo(28738)] = 28738, -- Summon Speedy
- [GetSpellInfo(7673)] = 7673, -- Nether Gem
- [GetSpellInfo(27829)] = 27829, -- Titanic Leggings
- [GetSpellInfo(3605)] = 3605, -- Summon Remote-Controlled Golem
- [GetSpellInfo(17573)] = 17573, -- Greater Arcane Elixir
- [GetSpellInfo(3595)] = 3595, -- Frost Oil
- [GetSpellInfo(3872)] = 3872, -- Rich Purple Silk Shirt
- [GetSpellInfo(23639)] = 23639, -- Blackfury
- [GetSpellInfo(24006)] = 24006, -- Bounty of the Harvest
- [GetSpellInfo(12907)] = 12907, -- Gnomish Mind Control Cap
- [GetSpellInfo(22704)] = 22704, -- Field Repair Bot 74A
- [GetSpellInfo(26265)] = 26265, -- Create Elune Stone
- [GetSpellInfo(16195)] = 16195, -- Create Knucklebone Pouch
- [GetSpellInfo(12248)] = 12248, -- Amplify Damage
- [GetSpellInfo(19719)] = 19719, -- Use Bauble
- [GetSpellInfo(11923)] = 11923, -- Repair the Blade of Heroes
- [GetSpellInfo(7720)] = 7720, -- Ritual of Summoning Effect
- [GetSpellInfo(3370)] = 3370, -- Crocolisk Steak
- [GetSpellInfo(3854)] = 3854, -- Azure Silk Gloves
- [GetSpellInfo(9957)] = 9957, -- Orcish War Leggings
- [GetSpellInfo(20565)] = 20565, -- Magma Blast
- [GetSpellInfo(17707)] = 17707, -- Summon Panda
- [GetSpellInfo(26069)] = 26069, -- Silence
- [GetSpellInfo(7636)] = 7636, -- Green Woolen Robe
- [GetSpellInfo(2829)] = 2829, -- Sharpen Blade II
- [GetSpellInfo(9068)] = 9068, -- Light Leather Pants
- [GetSpellInfo(23638)] = 23638, -- Black Amnesty
- [GetSpellInfo(3844)] = 3844, -- Heavy Woolen Cloak
- [GetSpellInfo(7147)] = 7147, -- Guardian Pants
- [GetSpellInfo(6358)] = 6358, -- Seduction
- [GetSpellInfo(12851)] = 12851, -- Release the Hounds
- [GetSpellInfo(18418)] = 18418, -- Cindercloth Cloak
- [GetSpellInfo(9954)] = 9954, -- Truesilver Gauntlets
- [GetSpellInfo(3939)] = 3939, -- Lovingly Crafted Boomstick
- [GetSpellInfo(3936)] = 3936, -- Deadly Blunderbuss
- [GetSpellInfo(6671)] = 6671, -- Create Scroll
- [GetSpellInfo(17453)] = 17453, -- Green Mechanostrider
- [GetSpellInfo(10696)] = 10696, -- Summon Azure Whelpling
- [GetSpellInfo(3657)] = 3657, -- Summon Spell Guard
- [GetSpellInfo(9193)] = 9193, -- Heavy Quiver
- [GetSpellInfo(6366)] = 6366, -- Create Firestone (Lesser)
- [GetSpellInfo(29467)] = 29467, -- Power of the Scourge
- [GetSpellInfo(22725)] = 22725, -- Defense +3
- [GetSpellInfo(19790)] = 19790, -- Thorium Grenade
- [GetSpellInfo(3849)] = 3849, -- Reinforced Woolen Shoulders
- [GetSpellInfo(3263)] = 3263, -- Touch of Ravenclaw
- [GetSpellInfo(19645)] = 19645, -- Anti-Magic Shield
- [GetSpellInfo(15575)] = 15575, -- Flame Cannon
- [GetSpellInfo(2740)] = 2740, -- Bronze Mace
- [GetSpellInfo(2881)] = 2881, -- Light Leather
- [GetSpellInfo(11466)] = 11466, -- Gift of Arthas
- [GetSpellInfo(16652)] = 16652, -- Thorium Boots
- [GetSpellInfo(3567)] = 3567, -- Teleport: Orgrimmar
- [GetSpellInfo(28327)] = 28327, -- Steam Tonk Controller
- [GetSpellInfo(25145)] = 25145, -- Merithra's Wake
- [GetSpellInfo(8240)] = 8240, -- Elixir of Giant Growth
- [GetSpellInfo(16058)] = 16058, -- Primal Leopard
- [GetSpellInfo(21537)] = 21537, -- Planting Ryson's Beacon
- [GetSpellInfo(17637)] = 17637, -- Flask of Supreme Power
- [GetSpellInfo(24179)] = 24179, -- Create Seal of the Dawn
- [GetSpellInfo(15095)] = 15095, -- Molten Blast
- [GetSpellInfo(3870)] = 3870, -- Dark Silk Shirt
- [GetSpellInfo(4165)] = 4165, -- Throw Rock II
- [GetSpellInfo(3565)] = 3565, -- Teleport: Darnassus
- [GetSpellInfo(3515)] = 3515, -- Golden Scale Boots
- [GetSpellInfo(3966)] = 3966, -- Craftsman's Monocle
- [GetSpellInfo(18560)] = 18560, -- Mooncloth
- [GetSpellInfo(6215)] = 6215, -- Fear
- [GetSpellInfo(23249)] = 23249, -- Great Brown Kodo
- [GetSpellInfo(20685)] = 20685, -- Storm Bolt
- [GetSpellInfo(25149)] = 25149, -- Arygos's Vengeance
- [GetSpellInfo(23652)] = 23652, -- Blackguard
- [GetSpellInfo(9814)] = 9814, -- Barbaric Iron Helm
- [GetSpellInfo(19566)] = 19566, -- Salt Shaker
- [GetSpellInfo(22480)] = 22480, -- Tender Wolf Steak
- [GetSpellInfo(3325)] = 3325, -- Gemmed Copper Gauntlets
- [GetSpellInfo(30047)] = 30047, -- Crystal Throat Lozenge
- [GetSpellInfo(9200)] = 9200, -- Create Sapta
- [GetSpellInfo(16600)] = 16600, -- Might of Shahram
- [GetSpellInfo(7120)] = 7120, -- Proudmoore's Defense
- [GetSpellInfo(16744)] = 16744, -- Enchanted Thorium Leggings
- [GetSpellInfo(12908)] = 12908, -- Goblin Dragon Gun
- [GetSpellInfo(19058)] = 19058, -- Rugged Armor Kit
- [GetSpellInfo(20848)] = 20848, -- Flarecore Mantle
- [GetSpellInfo(25123)] = 25123, -- Brilliant Mana Oil
- [GetSpellInfo(3500)] = 3500, -- Shadow Crescent Axe
- [GetSpellInfo(21943)] = 21943, -- Gloves of the Greatfather
- [GetSpellInfo(3264)] = 3264, -- Blood Howl
- [GetSpellInfo(23709)] = 23709, -- Corehound Belt
- [GetSpellInfo(19512)] = 19512, -- Apply Salve
- [GetSpellInfo(3636)] = 3636, -- Crystalline Slumber
- [GetSpellInfo(27571)] = 27571, -- Cascade of Roses
- [GetSpellInfo(12709)] = 12709, -- Collecting Fallout
- [GetSpellInfo(12063)] = 12063, -- Stormcloth Gloves
- [GetSpellInfo(10707)] = 10707, -- Summon Great Horned Owl
- [GetSpellInfo(8467)] = 8467, -- White Woolen Dress
- [GetSpellInfo(22720)] = 22720, -- Black War Ram
- [GetSpellInfo(23308)] = 23308, -- Incinerate
- [GetSpellInfo(3506)] = 3506, -- Green Iron Leggings
- [GetSpellInfo(24815)] = 24815, -- Draw Ancient Glyphs
- [GetSpellInfo(7125)] = 7125, -- Toxic Saliva
- [GetSpellInfo(28396)] = 28396, -- Reputation - Everlook +500
- [GetSpellInfo(1002)] = 1002, -- Eyes of the Beast
- [GetSpellInfo(15833)] = 15833, -- Dreamless Sleep Potion
- [GetSpellInfo(10711)] = 10711, -- Summon Snowshoe Rabbit
- [GetSpellInfo(10790)] = 10790, -- Tiger
- [GetSpellInfo(28271)] = 28271, -- Polymorph
- [GetSpellInfo(12584)] = 12584, -- Gold Power Core
- [GetSpellInfo(10554)] = 10554, -- Tough Scorpid Boots
- [GetSpellInfo(9818)] = 9818, -- Barbaric Iron Boots
- [GetSpellInfo(3132)] = 3132, -- Chilling Breath
- [GetSpellInfo(16473)] = 16473, -- Summoned Urok
- [GetSpellInfo(24963)] = 24963, -- Honor Points +228
- [GetSpellInfo(18363)] = 18363, -- Riding Kodo
- [GetSpellInfo(2739)] = 2739, -- Copper Shortsword
- [GetSpellInfo(21160)] = 21160, -- Eye of Sulfuras
- [GetSpellInfo(7408)] = 7408, -- Heavy Copper Maul
- [GetSpellInfo(16032)] = 16032, -- Merging Oozes
- [GetSpellInfo(23180)] = 23180, -- Release Imp
- [GetSpellInfo(23219)] = 23219, -- Swift Mistsaber
- [GetSpellInfo(7213)] = 7213, -- Giant Clam Scorcho
- [GetSpellInfo(21370)] = 21370, -- Planting Jeztor's Beacon
- [GetSpellInfo(10687)] = 10687, -- Summon White Plymouth Rock
- [GetSpellInfo(25119)] = 25119, -- Lesser Wizard Oil
- [GetSpellInfo(13528)] = 13528, -- Decayed Strength
- [GetSpellInfo(24997)] = 24997, -- Greater Dispel
- [GetSpellInfo(12587)] = 12587, -- Bright-Eye Goggles
- [GetSpellInfo(3722)] = 3722, -- Summon Syndicate Spectre
- [GetSpellInfo(6530)] = 6530, -- Sling Dirt
- [GetSpellInfo(24912)] = 24912, -- Darkrune Gauntlets
- [GetSpellInfo(23704)] = 23704, -- Timbermaw Brawlers
- [GetSpellInfo(11478)] = 11478, -- Elixir of Detect Demon
- [GetSpellInfo(7295)] = 7295, -- Soul Drain
- [GetSpellInfo(29134)] = 29134, -- Maypole
- [GetSpellInfo(18476)] = 18476, -- Summon Minion
- [GetSpellInfo(21181)] = 21181, -- Summon Shadowstrike
- [GetSpellInfo(2833)] = 2833, -- Armor +24
- [GetSpellInfo(16447)] = 16447, -- Spawn Challenge to Urok
- [GetSpellInfo(6653)] = 6653, -- Dire Wolf
- [GetSpellInfo(7136)] = 7136, -- Shadow Port
- [GetSpellInfo(27832)] = 27832, -- Sageblade
- [GetSpellInfo(18423)] = 18423, -- Runecloth Boots
- [GetSpellInfo(9974)] = 9974, -- Truesilver Breastplate
- [GetSpellInfo(3447)] = 3447, -- Healing Potion
- [GetSpellInfo(4096)] = 4096, -- Raptor Hide Harness
- [GetSpellInfo(23204)] = 23204, -- Place Scryer
- [GetSpellInfo(17738)] = 17738, -- Curse of the Plague Rat
- [GetSpellInfo(4950)] = 4950, -- Summon Helcular's Puppets
- [GetSpellInfo(19095)] = 19095, -- Living Breastplate
- [GetSpellInfo(12758)] = 12758, -- Goblin Rocket Helmet
- [GetSpellInfo(3451)] = 3451, -- Mighty Troll's Blood Potion
- [GetSpellInfo(11975)] = 11975, -- Arcane Explosion
- [GetSpellInfo(12586)] = 12586, -- Solid Dynamite
- [GetSpellInfo(3973)] = 3973, -- Silver Contact
- [GetSpellInfo(25186)] = 25186, -- Super Crystal
- [GetSpellInfo(9156)] = 9156, -- Create Mage's Orb
- [GetSpellInfo(8465)] = 8465, -- Simple Dress
- [GetSpellInfo(16996)] = 16996, -- Incendia Powder
- [GetSpellInfo(10572)] = 10572, -- Wild Leather Leggings
- [GetSpellInfo(2393)] = 2393, -- White Linen Shirt
- [GetSpellInfo(16661)] = 16661, -- Storm Gauntlets
- [GetSpellInfo(22949)] = 22949, -- Seal Felvine Shard
- [GetSpellInfo(3942)] = 3942, -- Whirring Bronze Gizmo
- [GetSpellInfo(10436)] = 10436, -- Attack
- [GetSpellInfo(20274)] = 20274, -- Capturing Termites
- [GetSpellInfo(19772)] = 19772, -- Summon Lifelike Toad
- [GetSpellInfo(24847)] = 24847, -- Spitfire Gauntlets
- [GetSpellInfo(26420)] = 26420, -- Large Blue Rocket
- [GetSpellInfo(3400)] = 3400, -- Soothing Turtle Bisque
- [GetSpellInfo(7223)] = 7223, -- Golden Scale Bracers
- [GetSpellInfo(25813)] = 25813, -- Conjure Dream Rift
- [GetSpellInfo(28745)] = 28745, -- Quest - Prepare Field Duty Papers
- [GetSpellInfo(17009)] = 17009, -- Voodoo
- [GetSpellInfo(2165)] = 2165, -- Medium Armor Kit
- [GetSpellInfo(7179)] = 7179, -- Elixir of Water Breathing
- [GetSpellInfo(4141)] = 4141, -- Summon Myzrael
- [GetSpellInfo(23637)] = 23637, -- Dark Iron Gauntlets
- [GetSpellInfo(6630)] = 6630, -- Set NG-5 Charge (Red)
- [GetSpellInfo(10340)] = 10340, -- Uldaman Boss Agro
- [GetSpellInfo(29331)] = 29331, -- Copy of Dark Desire
- [GetSpellInfo(13227)] = 13227, -- Wound Poison
- [GetSpellInfo(7845)] = 7845, -- Elixir of Firepower
- [GetSpellInfo(12720)] = 12720, -- Goblin "Boom" Box
- [GetSpellInfo(20051)] = 20051, -- Runed Arcanite Rod
- [GetSpellInfo(5567)] = 5567, -- Miring Mud
- [GetSpellInfo(12088)] = 12088, -- Cindercloth Boots
- [GetSpellInfo(12905)] = 12905, -- Gnomish Rocket Boots
- [GetSpellInfo(27658)] = 27658, -- Enchanted Mageweave Pouch
- [GetSpellInfo(9933)] = 9933, -- Heavy Mithril Pants
- [GetSpellInfo(24356)] = 24356, -- Bloodvine Goggles
- [GetSpellInfo(10558)] = 10558, -- Nightscape Boots
- [GetSpellInfo(23247)] = 23247, -- Great White Kodo
- [GetSpellInfo(9055)] = 9055, -- Create Witherbark Totem Bundle
- [GetSpellInfo(3949)] = 3949, -- Silver-plated Shotgun
- [GetSpellInfo(13900)] = 13900, -- Fiery Burst
- [GetSpellInfo(35)] = 35, -- Teleport Elwynn
- [GetSpellInfo(712)] = 712, -- Summon Succubus
- [GetSpellInfo(2157)] = 2157, -- Light Winter Boots
- [GetSpellInfo(23122)] = 23122, -- Jaina's Autograph
- [GetSpellInfo(3840)] = 3840, -- Heavy Linen Gloves
- [GetSpellInfo(14928)] = 14928, -- Nagmara's Love Potion
- [GetSpellInfo(3492)] = 3492, -- Hardened Iron Shortsword
- [GetSpellInfo(23708)] = 23708, -- Chromatic Gauntlets
- [GetSpellInfo(26373)] = 26373, -- Lunar Invititation
- [GetSpellInfo(15596)] = 15596, -- Smoking Heart of the Mountain
- [GetSpellInfo(10771)] = 10771, -- Soul Shatter
- [GetSpellInfo(24418)] = 24418, -- Heavy Crocolisk Stew
- [GetSpellInfo(12903)] = 12903, -- Gnomish Harm Prevention Belt
- [GetSpellInfo(17463)] = 17463, -- Blue Skeletal Horse
- [GetSpellInfo(12802)] = 12802, -- Getting Tide Pool Sample #1
- [GetSpellInfo(16868)] = 16868, -- Banshee Wail
- [GetSpellInfo(19070)] = 19070, -- Heavy Scorpid Belt
- [GetSpellInfo(6419)] = 6419, -- Lean Venison
- [GetSpellInfo(17529)] = 17529, -- Vitreous Focuser
- [GetSpellInfo(12755)] = 12755, -- Goblin Bomb Dispenser
- [GetSpellInfo(8138)] = 8138, -- Mirkfallon Fungus
- [GetSpellInfo(12895)] = 12895, -- Inlaid Mithril Cylinder Plans
- [GetSpellInfo(9583)] = 9583, -- Water Sample
- [GetSpellInfo(24168)] = 24168, -- Animist's Caress
- [GetSpellInfo(458)] = 458, -- Brown Horse
- [GetSpellInfo(19819)] = 19819, -- Voice Amplification Modulator
- [GetSpellInfo(6918)] = 6918, -- Summon Snufflenose
- [GetSpellInfo(8764)] = 8764, -- Earthen Vest
- [GetSpellInfo(5761)] = 5761, -- Mind-numbing Poison
- [GetSpellInfo(10912)] = 10912, -- Mind Control
- [GetSpellInfo(9482)] = 9482, -- Amplify Flames
- [GetSpellInfo(10789)] = 10789, -- Spotted Frostsaber
- [GetSpellInfo(12805)] = 12805, -- Getting Tide Pool Sample #2
- [GetSpellInfo(16986)] = 16986, -- Blood Talon
- [GetSpellInfo(3335)] = 3335, -- Dark Sludge
- [GetSpellInfo(23208)] = 23208, -- Exorcise Spirits
- [GetSpellInfo(9950)] = 9950, -- Ornate Mithril Gloves
- [GetSpellInfo(3607)] = 3607, -- Yenniku's Release
- [GetSpellInfo(10683)] = 10683, -- Summon Green Wing Macaw
- [GetSpellInfo(14930)] = 14930, -- Quickdraw Quiver
- [GetSpellInfo(5666)] = 5666, -- Summon Timberling
- [GetSpellInfo(28526)] = 28526, -- Icebolt
- [GetSpellInfo(2149)] = 2149, -- Handstitched Leather Boots
- [GetSpellInfo(3920)] = 3920, -- Crafted Light Shot
- [GetSpellInfo(24334)] = 24334, -- Acid Spit
- [GetSpellInfo(25167)] = 25167, -- Call Ancients
- [GetSpellInfo(2538)] = 2538, -- Charred Wolf Meat
- [GetSpellInfo(6617)] = 6617, -- Rage Potion
- [GetSpellInfo(11453)] = 11453, -- Magic Resistance Potion
- [GetSpellInfo(6500)] = 6500, -- Goblin Deviled Clams
- [GetSpellInfo(10647)] = 10647, -- Feathered Breastplate
- [GetSpellInfo(12091)] = 12091, -- White Wedding Dress
- [GetSpellInfo(12089)] = 12089, -- Tuxedo Pants
- [GetSpellInfo(12890)] = 12890, -- Deep Slumber
- [GetSpellInfo(20531)] = 20531, -- Bind Chapter 3
- [GetSpellInfo(15998)] = 15998, -- Capture Worg Pup
- [GetSpellInfo(16528)] = 16528, -- Numbing Pain
- [GetSpellInfo(27291)] = 27291, -- Summon Magic Staff
- [GetSpellInfo(16654)] = 16654, -- Radiant Gloves
- [GetSpellInfo(6725)] = 6725, -- Flame Spike
- [GetSpellInfo(27287)] = 27287, -- Energy Siphon
- [GetSpellInfo(17458)] = 17458, -- Fluorescent Green Mechanostrider
- [GetSpellInfo(27860)] = 27860, -- Engulfing Shadows
- [GetSpellInfo(28472)] = 28472, -- Bramblewood Helm
- [GetSpellInfo(6305)] = 6305, -- Flame Burst
- [GetSpellInfo(6469)] = 6469, -- Skeletal Miner Explode
- [GetSpellInfo(4221)] = 4221, -- Healing Tongue II
- [GetSpellInfo(27590)] = 27590, -- Obsidian Mail Tunic
- [GetSpellInfo(26636)] = 26636, -- Elune's Candle
- [GetSpellInfo(17432)] = 17432, -- Opening Stratholme Postbox
- [GetSpellInfo(7222)] = 7222, -- Iron Counterweight
- [GetSpellInfo(20529)] = 20529, -- Bind Chapter 1
- [GetSpellInfo(9594)] = 9594, -- Attach Medallion to Shaft
- [GetSpellInfo(580)] = 580, -- Large Timber Wolf
- [GetSpellInfo(11209)] = 11209, -- Summon Smithing Hammer
- [GetSpellInfo(23510)] = 23510, -- Stormpike Battle Charger
- [GetSpellInfo(25117)] = 25117, -- Minor Wizard Oil
- [GetSpellInfo(24851)] = 24851, -- Sandstalker Breastplate
- [GetSpellInfo(15128)] = 15128, -- Mark of Flames
- [GetSpellInfo(11479)] = 11479, -- Transmute: Iron to Gold
- [GetSpellInfo(8693)] = 8693, -- Mind-numbing Poison II
- [GetSpellInfo(25122)] = 25122, -- Brilliant Wizard Oil
- [GetSpellInfo(23252)] = 23252, -- Swift Gray Wolf
- [GetSpellInfo(23679)] = 23679, -- Elementals Deck
- [GetSpellInfo(18414)] = 18414, -- Brightcloth Robe
- [GetSpellInfo(17727)] = 17727, -- Create Spellstone (Greater)
- [GetSpellInfo(25853)] = 25853, -- Empty Festive Mug
- [GetSpellInfo(13143)] = 13143, -- Summon Razelikh
- [GetSpellInfo(25465)] = 25465, -- Firework
- [GetSpellInfo(24973)] = 24973, -- Clean Up Stink Bomb
- [GetSpellInfo(10698)] = 10698, -- Summon Emerald Whelpling
- [GetSpellInfo(15491)] = 15491, -- Collect Blessed Water
- [GetSpellInfo(8895)] = 8895, -- Goblin Rocket Boots
- [GetSpellInfo(17565)] = 17565, -- Transmute: Life to Earth
- [GetSpellInfo(12616)] = 12616, -- Parachute Cloak
- [GetSpellInfo(11356)] = 11356, -- Deadly Poison IV
- [GetSpellInfo(17460)] = 17460, -- Frost Ram
- [GetSpellInfo(19049)] = 19049, -- Wicked Leather Gauntlets
- [GetSpellInfo(24420)] = 24420, -- Zandalar Signet of Serenity
- [GetSpellInfo(1842)] = 1842, -- Disarm Trap
- [GetSpellInfo(17579)] = 17579, -- Greater Holy Protection Potion
- [GetSpellInfo(15261)] = 15261, -- Holy Fire
- [GetSpellInfo(7929)] = 7929, -- Heavy Silk Bandage
- [GetSpellInfo(2166)] = 2166, -- Toughened Leather Armor
- [GetSpellInfo(2549)] = 2549, -- Seasoned Wolf Kabob
- [GetSpellInfo(11418)] = 11418, -- Portal: Undercity
- [GetSpellInfo(25018)] = 25018, -- Summon Murki
- [GetSpellInfo(8517)] = 8517, -- Opening Strongbox
- [GetSpellInfo(13978)] = 13978, -- Summon Aquementas
- [GetSpellInfo(20904)] = 20904, -- Aimed Shot
- [GetSpellInfo(4983)] = 4983, -- Create Cleansing Totem
- [GetSpellInfo(6805)] = 6805, -- Dousing
- [GetSpellInfo(16741)] = 16741, -- Stronghold Gauntlets
- [GetSpellInfo(21188)] = 21188, -- Stun Bomb Attack
- [GetSpellInfo(2964)] = 2964, -- Bolt of Woolen Cloth
- [GetSpellInfo(18246)] = 18246, -- Mightfish Steak
- [GetSpellInfo(5669)] = 5669, -- Peon Disguise
- [GetSpellInfo(1112)] = 1112, -- Shadow Nova II
- [GetSpellInfo(12056)] = 12056, -- Red Mageweave Vest
- [GetSpellInfo(21736)] = 21736, -- Winterax Wisdom
- [GetSpellInfo(10556)] = 10556, -- Turtle Scale Leggings
- [GetSpellInfo(7126)] = 7126, -- Handstitched Leather Vest
- [GetSpellInfo(8339)] = 8339, -- EZ-Thro Dynamite
- [GetSpellInfo(898)] = 898, -- Create Fervor Potion
- [GetSpellInfo(2795)] = 2795, -- Beer Basted Boar Ribs
- [GetSpellInfo(8607)] = 8607, -- Smoked Bear Meat
- [GetSpellInfo(3611)] = 3611, -- Minion of Morganth
- [GetSpellInfo(18163)] = 18163, -- Strength of Arko'narin
- [GetSpellInfo(27891)] = 27891, -- Disease Buffet
- [GetSpellInfo(7978)] = 7978, -- Throw Dynamite
- [GetSpellInfo(10009)] = 10009, -- Runed Mithril Hammer
- [GetSpellInfo(8600)] = 8600, -- Fevered Plague
- [GetSpellInfo(19029)] = 19029, -- Create Coagulated Rot
- [GetSpellInfo(5267)] = 5267, -- Dalaran Wizard Disguise
- [GetSpellInfo(17562)] = 17562, -- Transmute: Water to Air
- [GetSpellInfo(444)] = 444, -- Teleport Lighthouse
- [GetSpellInfo(7962)] = 7962, -- Break Big Stuff
- [GetSpellInfo(3513)] = 3513, -- Polished Steel Boots
- [GetSpellInfo(8283)] = 8283, -- Snufflenose Command
- [GetSpellInfo(23787)] = 23787, -- Powerful Anti-Venom
- [GetSpellInfo(7754)] = 7754, -- Loch Frenzy Delight
- [GetSpellInfo(459)] = 459, -- Gray Wolf
- [GetSpellInfo(17577)] = 17577, -- Greater Arcane Protection Potion
- [GetSpellInfo(11067)] = 11067, -- Perm. Illusion Tyrion
- [GetSpellInfo(24214)] = 24214, -- Heart of Hakkar - Molthor chucks the heart
- [GetSpellInfo(10180)] = 10180, -- Frostbolt
- [GetSpellInfo(20528)] = 20528, -- Mor'rogal Enchant
- [GetSpellInfo(19073)] = 19073, -- Chimeric Leggings
- [GetSpellInfo(6405)] = 6405, -- Furbolg Form
- [GetSpellInfo(16031)] = 16031, -- Releasing Corrupt Ooze
- [GetSpellInfo(1452)] = 1452, -- Arcane Spirit IV
- [GetSpellInfo(23710)] = 23710, -- Molten Belt
- [GetSpellInfo(7817)] = 7817, -- Rough Bronze Boots
- [GetSpellInfo(12047)] = 12047, -- Colorful Kilt
- [GetSpellInfo(3292)] = 3292, -- Heavy Copper Broadsword
- [GetSpellInfo(22372)] = 22372, -- Demon Portal
- [GetSpellInfo(18992)] = 18992, -- Teal Kodo
- [GetSpellInfo(7655)] = 7655, -- Hex of Ravenclaw
- [GetSpellInfo(19484)] = 19484, -- Majordomo Teleport Visual
- [GetSpellInfo(10574)] = 10574, -- Wild Leather Cloak
- [GetSpellInfo(16725)] = 16725, -- Radiant Leggings
- [GetSpellInfo(8778)] = 8778, -- Boots of Darkness
- [GetSpellInfo(22711)] = 22711, -- Shadowskin Gloves
- [GetSpellInfo(7751)] = 7751, -- Brilliant Smallfish
- [GetSpellInfo(17728)] = 17728, -- Create Spellstone (Major)
- [GetSpellInfo(12459)] = 12459, -- Deadly Scope
- [GetSpellInfo(28219)] = 28219, -- Polar Tunic
- [GetSpellInfo(22757)] = 22757, -- Elemental Sharpening Stone
- [GetSpellInfo(9072)] = 9072, -- Red Whelp Gloves
- [GetSpellInfo(3847)] = 3847, -- Red Woolen Boots
- [GetSpellInfo(23152)] = 23152, -- Summon Xorothian Dreadsteed
- [GetSpellInfo(17578)] = 17578, -- Greater Shadow Protection Potion
- [GetSpellInfo(14804)] = 14804, -- Copy of Release Rageclaw
- [GetSpellInfo(19052)] = 19052, -- Wicked Leather Bracers
- [GetSpellInfo(4094)] = 4094, -- Barbecued Buzzard Wing
- [GetSpellInfo(12059)] = 12059, -- White Bandit Mask
- [GetSpellInfo(17554)] = 17554, -- Elixir of Superior Defense
- [GetSpellInfo(28299)] = 28299, -- Ball Lightning
- [GetSpellInfo(21935)] = 21935, -- SnowMaster 9000
- [GetSpellInfo(24252)] = 24252, -- Swift Zulian Tiger
- [GetSpellInfo(885)] = 885, -- Invisibility
- [GetSpellInfo(17555)] = 17555, -- Elixir of the Sages
- [GetSpellInfo(6415)] = 6415, -- Fillet of Frenzy
- [GetSpellInfo(16622)] = 16622, -- Enhance Blunt Weapon V
- [GetSpellInfo(442)] = 442, -- Teleport Northshire Abbey
- [GetSpellInfo(23254)] = 23254, -- Redeeming the Soul
- [GetSpellInfo(12562)] = 12562, -- The Big One
- [GetSpellInfo(7023)] = 7023, -- Goblin Camera Connection
- [GetSpellInfo(4982)] = 4982, -- Pillar Delving
- [GetSpellInfo(10708)] = 10708, -- Summon Snowy Owl
- [GetSpellInfo(10934)] = 10934, -- Smite
- [GetSpellInfo(7081)] = 7081, -- Encage
- [GetSpellInfo(21885)] = 21885, -- Heal Vylestem Vine
- [GetSpellInfo(19825)] = 19825, -- Master Engineer's Goggles
- [GetSpellInfo(16533)] = 16533, -- Emberseer Start
- [GetSpellInfo(10562)] = 10562, -- Big Voodoo Cloak
- [GetSpellInfo(18243)] = 18243, -- Nightfin Soup
- [GetSpellInfo(25804)] = 25804, -- Rumsey Rum Black Label
- [GetSpellInfo(15627)] = 15627, -- Applying the Lure
- [GetSpellInfo(17566)] = 17566, -- Transmute: Earth to Life
- [GetSpellInfo(17464)] = 17464, -- Brown Skeletal Horse
- [GetSpellInfo(12537)] = 12537, -- Quest - Summon Treant
- [GetSpellInfo(9903)] = 9903, -- Enhance Blunt Weapon IV
- [GetSpellInfo(22662)] = 22662, -- Wither
- [GetSpellInfo(22876)] = 22876, -- Summon Netherwalker
- [GetSpellInfo(5099)] = 5099, -- Disruption
- [GetSpellInfo(10548)] = 10548, -- Nightscape Pants
- [GetSpellInfo(12060)] = 12060, -- Red Mageweave Pants
- [GetSpellInfo(23530)] = 23530, -- Summon Tiny Red Dragon
- [GetSpellInfo(7836)] = 7836, -- Blackmouth Oil
- [GetSpellInfo(12080)] = 12080, -- Pink Mageweave Shirt
- [GetSpellInfo(17559)] = 17559, -- Transmute: Air to Fire
- [GetSpellInfo(12048)] = 12048, -- Black Mageweave Vest
- [GetSpellInfo(15734)] = 15734, -- Summon
- [GetSpellInfo(25118)] = 25118, -- Minor Mana Oil
- [GetSpellInfo(10721)] = 10721, -- Summon Elven Wisp
- [GetSpellInfo(3658)] = 3658, -- Summon Theurgist
- [GetSpellInfo(22732)] = 22732, -- Major Rejuvenation Potion
- [GetSpellInfo(18456)] = 18456, -- Truefaith Vestments
- [GetSpellInfo(22027)] = 22027, -- Remove Insignia
- [GetSpellInfo(12615)] = 12615, -- Spellpower Goggles Xtreme
- [GetSpellInfo(9952)] = 9952, -- Ornate Mithril Shoulders
- [GetSpellInfo(6234)] = 6234, -- Incineration
- [GetSpellInfo(12622)] = 12622, -- Green Lens
- [GetSpellInfo(606)] = 606, -- Mind Rot
- [GetSpellInfo(24889)] = 24889, -- Create Signet of Beckoning: Fire
- [GetSpellInfo(10738)] = 10738, -- Unlocking
- [GetSpellInfo(8800)] = 8800, -- Dynamite
- [GetSpellInfo(28505)] = 28505, -- Summon Poley
- [GetSpellInfo(24888)] = 24888, -- Create Crest of Beckoning: Water
- [GetSpellInfo(10621)] = 10621, -- Wolfshead Helm
- [GetSpellInfo(18166)] = 18166, -- Summon Magram Ravager
- [GetSpellInfo(18629)] = 18629, -- Runecloth Bandage
- [GetSpellInfo(30152)] = 30152, -- Summon White Tiger Cub
- [GetSpellInfo(10098)] = 10098, -- Smelt Truesilver
- [GetSpellInfo(688)] = 688, -- Summon Imp
- [GetSpellInfo(8153)] = 8153, -- Owl Form
- [GetSpellInfo(8368)] = 8368, -- Ironforge Gauntlets
- [GetSpellInfo(15746)] = 15746, -- Disturb Rookery Egg
- [GetSpellInfo(5414)] = 5414, -- Balance of Nature
- [GetSpellInfo(3759)] = 3759, -- Embossed Leather Pants
- [GetSpellInfo(28800)] = 28800, -- Word of Thawing
- [GetSpellInfo(2331)] = 2331, -- Minor Mana Potion
- [GetSpellInfo(23161)] = 23161, -- Summon Dreadsteed
- [GetSpellInfo(23705)] = 23705, -- Dawn Treaders
- [GetSpellInfo(9997)] = 9997, -- Wicked Mithril Blade
- [GetSpellInfo(6651)] = 6651, -- Instant Toxin
- [GetSpellInfo(1980)] = 1980, -- Bombard
- [GetSpellInfo(10715)] = 10715, -- Summon Blue Racer
- [GetSpellInfo(10854)] = 10854, -- Flames of Chaos
- [GetSpellInfo(16650)] = 16650, -- Wildthorn Mail
- [GetSpellInfo(12076)] = 12076, -- Shadoweave Shoulders
- [GetSpellInfo(11820)] = 11820, -- Electrified Net
- [GetSpellInfo(10733)] = 10733, -- Flame Spray
- [GetSpellInfo(11568)] = 11568, -- Uldaman Sub-Boss Agro
- [GetSpellInfo(20364)] = 20364, -- Bury Samuel's Remains
- [GetSpellInfo(15906)] = 15906, -- Dragonbreath Chili
- [GetSpellInfo(23232)] = 23232, -- Binding Volume II
- [GetSpellInfo(16601)] = 16601, -- Fist of Shahram
- [GetSpellInfo(9970)] = 9970, -- Heavy Mithril Helm
- [GetSpellInfo(3113)] = 3113, -- Enhance Blunt Weapon II
- [GetSpellInfo(24167)] = 24167, -- Prophetic Aura
- [GetSpellInfo(5408)] = 5408, -- Quest - Sergra Darkthorn Spell
- [GetSpellInfo(14807)] = 14807, -- Greater Magic Wand
- [GetSpellInfo(7256)] = 7256, -- Shadow Protection Potion
- [GetSpellInfo(20756)] = 20756, -- Create Soulstone (Greater)
- [GetSpellInfo(13819)] = 13819, -- Summon Warhorse
- [GetSpellInfo(24801)] = 24801, -- Smoked Desert Dumplings
- [GetSpellInfo(23632)] = 23632, -- Girdle of the Dawn
- [GetSpellInfo(12618)] = 12618, -- Rose Colored Goggles
- [GetSpellInfo(23066)] = 23066, -- Red Firework
- [GetSpellInfo(12084)] = 12084, -- Red Mageweave Headband
- [GetSpellInfo(22598)] = 22598, -- Arcane Mantle of the Dawn
- [GetSpellInfo(3766)] = 3766, -- Dark Leather Belt
- [GetSpellInfo(12052)] = 12052, -- Shadoweave Pants
- [GetSpellInfo(22795)] = 22795, -- Core Marksman Rifle
- [GetSpellInfo(17708)] = 17708, -- Summon Diablo
- [GetSpellInfo(11399)] = 11399, -- Mind-numbing Poison III
- [GetSpellInfo(3443)] = 3443, -- Enchanted Quickness
- [GetSpellInfo(15794)] = 15794, -- Summon Blackhand Dreadweaver
- [GetSpellInfo(26419)] = 26419, -- Acid Spray
- [GetSpellInfo(28612)] = 28612, -- Conjure Food
- [GetSpellInfo(3952)] = 3952, -- Minor Recombobulator
- [GetSpellInfo(20716)] = 20716, -- Sand Breath
- [GetSpellInfo(4209)] = 4209, -- Healing Tongue
- [GetSpellInfo(19077)] = 19077, -- Blue Dragonscale Breastplate
- [GetSpellInfo(9959)] = 9959, -- Heavy Mithril Breastplate
- [GetSpellInfo(8768)] = 8768, -- Iron Buckle
- [GetSpellInfo(17048)] = 17048, -- Soul Claim
- [GetSpellInfo(6741)] = 6741, -- Identify Brood
- [GetSpellInfo(3670)] = 3670, -- Unlock Maury's Foot
- [GetSpellInfo(8395)] = 8395, -- Emerald Raptor
- [GetSpellInfo(15255)] = 15255, -- Mechanical Repair Kit
- [GetSpellInfo(9983)] = 9983, -- Copper Claymore
- [GetSpellInfo(3644)] = 3644, -- Speak with Heads
- [GetSpellInfo(12085)] = 12085, -- Tuxedo Shirt
- [GetSpellInfo(27586)] = 27586, -- Jagged Obsidian Shield
- [GetSpellInfo(10509)] = 10509, -- Turtle Scale Gloves
- [GetSpellInfo(2841)] = 2841, -- Creeping Torment
- [GetSpellInfo(3857)] = 3857, -- Enchanter's Cowl
- [GetSpellInfo(23129)] = 23129, -- World Enlarger
- [GetSpellInfo(10451)] = 10451, -- Implosion
- [GetSpellInfo(3537)] = 3537, -- Minions of Malathrom
- [GetSpellInfo(11473)] = 11473, -- Ghost Dye
- [GetSpellInfo(7220)] = 7220, -- Weapon Chain
- [GetSpellInfo(19792)] = 19792, -- Thorium Rifle
- [GetSpellInfo(3377)] = 3377, -- Gooey Spider Cake
- [GetSpellInfo(27738)] = 27738, -- Right Piece of Lord Valthalak's Amulet
- [GetSpellInfo(4093)] = 4093, -- Reconstruction
- [GetSpellInfo(22331)] = 22331, -- Rugged Leather
- [GetSpellInfo(3448)] = 3448, -- Lesser Invisibility Potion
- [GetSpellInfo(24164)] = 24164, -- Presence of Sight
- [GetSpellInfo(12609)] = 12609, -- Catseye Elixir
- [GetSpellInfo(691)] = 691, -- Summon Felhunter
- [GetSpellInfo(19588)] = 19588, -- Place Ghost Magnet
- [GetSpellInfo(25992)] = 25992, -- Brood of Nozdormu Factoin +1000
- [GetSpellInfo(18240)] = 18240, -- Grilled Squid
- [GetSpellInfo(10623)] = 10623, -- Chain Heal
- [GetSpellInfo(6470)] = 6470, -- Tiny Bronze Key
- [GetSpellInfo(15999)] = 15999, -- Summon Worg Pup
- [GetSpellInfo(8016)] = 8016, -- Spirit Decay
- [GetSpellInfo(26102)] = 26102, -- Sand Blast
- [GetSpellInfo(2394)] = 2394, -- Blue Linen Shirt
- [GetSpellInfo(3934)] = 3934, -- Flying Tiger Goggles
- [GetSpellInfo(7753)] = 7753, -- Longjaw Mud Snapper
- [GetSpellInfo(13714)] = 13714, -- Create Samophlange Manual
- [GetSpellInfo(16730)] = 16730, -- Imperial Plate Leggings
- [GetSpellInfo(6618)] = 6618, -- Great Rage Potion
- [GetSpellInfo(24149)] = 24149, -- Presence of Might
- [GetSpellInfo(6925)] = 6925, -- Gift of the Xavian
- [GetSpellInfo(30156)] = 30156, -- Summon Hippogryph Hatchling
- [GetSpellInfo(18448)] = 18448, -- Mooncloth Shoulders
- [GetSpellInfo(27585)] = 27585, -- Heavy Obsidian Belt
- [GetSpellInfo(28099)] = 28099, -- Shock
- [GetSpellInfo(17456)] = 17456, -- Red & Blue Mechanostrider
- [GetSpellInfo(24901)] = 24901, -- Runed Stygian Leggings
- [GetSpellInfo(23078)] = 23078, -- Goblin Jumper Cables XL
- [GetSpellInfo(3775)] = 3775, -- Guardian Belt
- [GetSpellInfo(23678)] = 23678, -- Warlord Deck
- [GetSpellInfo(8256)] = 8256, -- Lethal Toxin
- [GetSpellInfo(126)] = 126, -- Eye of Kilrogg
- [GetSpellInfo(27739)] = 27739, -- Top Piece of Lord Valthalak's Amulet
- [GetSpellInfo(10630)] = 10630, -- Gauntlets of the Sea
- [GetSpellInfo(19085)] = 19085, -- Black Dragonscale Breastplate
- [GetSpellInfo(6461)] = 6461, -- Pick Lock
- [GetSpellInfo(4945)] = 4945, -- Summon Dagun
- [GetSpellInfo(11726)] = 11726, -- Enslave Demon
- [GetSpellInfo(7629)] = 7629, -- Red Linen Vest
- [GetSpellInfo(2951)] = 2951, -- Hellfire III
- [GetSpellInfo(24726)] = 24726, -- Deputize Agent of Nozdormu
- [GetSpellInfo(20814)] = 20814, -- Collect Dire Water
- [GetSpellInfo(18415)] = 18415, -- Brightcloth Gloves
- [GetSpellInfo(9901)] = 9901, -- Soothe Animal
- [GetSpellInfo(3768)] = 3768, -- Hillman's Shoulders
- [GetSpellInfo(10678)] = 10678, -- Summon Silver Tabby
- [GetSpellInfo(2332)] = 2332, -- Minor Rejuvenation Potion
- [GetSpellInfo(7481)] = 7481, -- Howling Rage
- [GetSpellInfo(472)] = 472, -- Pinto Horse
- [GetSpellInfo(3963)] = 3963, -- Compact Harvest Reaper Kit
- [GetSpellInfo(3860)] = 3860, -- Boots of the Enchanter
- [GetSpellInfo(15067)] = 15067, -- Summon Sprite Darter Hatchling
- [GetSpellInfo(21957)] = 21957, -- Create Amulet of Union
- [GetSpellInfo(8087)] = 8087, -- Shiny Bauble
- [GetSpellInfo(3453)] = 3453, -- Elixir of Detect Lesser Invisibility
- [GetSpellInfo(7919)] = 7919, -- Shoot Crossbow
- [GetSpellInfo(19053)] = 19053, -- Chimeric Gloves
- [GetSpellInfo(22979)] = 22979, -- Shadow Flame
- [GetSpellInfo(3323)] = 3323, -- Runed Copper Gauntlets
- [GetSpellInfo(23222)] = 23222, -- Swift Yellow Mechanostrider
- [GetSpellInfo(25180)] = 25180, -- Nature Weakness
- [GetSpellInfo(9853)] = 9853, -- Entangling Roots
- [GetSpellInfo(12596)] = 12596, -- Hi-Impact Mithril Slugs
- [GetSpellInfo(26587)] = 26587, -- Opening Scarab Coffer
- [GetSpellInfo(28270)] = 28270, -- Polymorph: Cow
- [GetSpellInfo(12070)] = 12070, -- Dreamweave Vest
- [GetSpellInfo(16028)] = 16028, -- Freeze Rookery Egg - Prototype
- [GetSpellInfo(8367)] = 8367, -- Ironforge Breastplate
- [GetSpellInfo(9577)] = 9577, -- Uldaman Key Staff
- [GetSpellInfo(7827)] = 7827, -- Rainbow Fin Albacore
- [GetSpellInfo(9945)] = 9945, -- Ornate Mithril Pants
- [GetSpellInfo(12258)] = 12258, -- Summon Shadowcaster
- [GetSpellInfo(818)] = 818, -- Basic Campfire
- [GetSpellInfo(8435)] = 8435, -- Forked Lightning
- [GetSpellInfo(3146)] = 3146, -- Daunting Growl
- [GetSpellInfo(2838)] = 2838, -- Creeping Pain
- [GetSpellInfo(17552)] = 17552, -- Mighty Rage Potion
- [GetSpellInfo(12617)] = 12617, -- Deepdive Helmet
- [GetSpellInfo(16378)] = 16378, -- Temperature Reading
- [GetSpellInfo(5403)] = 5403, -- Crash of Waves
- [GetSpellInfo(7156)] = 7156, -- Guardian Gloves
- [GetSpellInfo(3359)] = 3359, -- Drink Potion
- [GetSpellInfo(759)] = 759, -- Conjure Mana Agate
- [GetSpellInfo(27241)] = 27241, -- Summon Gurky
- [GetSpellInfo(25120)] = 25120, -- Lesser Mana Oil
- [GetSpellInfo(20855)] = 20855, -- Black Dragonscale Boots
- [GetSpellInfo(6510)] = 6510, -- Blinding Powder
- [GetSpellInfo(8789)] = 8789, -- Crimson Silk Cloak
- [GetSpellInfo(3361)] = 3361, -- Dummy NPC Summon
- [GetSpellInfo(12066)] = 12066, -- Red Mageweave Gloves
- [GetSpellInfo(20773)] = 20773, -- Redemption
- [GetSpellInfo(12243)] = 12243, -- Summon Mechanical Chicken
- [GetSpellInfo(15958)] = 15958, -- Collect Rookery Egg
- [GetSpellInfo(24966)] = 24966, -- Honor Points +2388
- [GetSpellInfo(16247)] = 16247, -- Curse of Thorns
- [GetSpellInfo(18887)] = 18887, -- Create Nimboya's Laden Pike
- [GetSpellInfo(7818)] = 7818, -- Silver Rod
- [GetSpellInfo(16653)] = 16653, -- Thorium Helm
- [GetSpellInfo(28161)] = 28161, -- Savage Guard
- [GetSpellInfo(22458)] = 22458, -- Healing Circle
- [GetSpellInfo(1451)] = 1451, -- Arcane Spirit III
- [GetSpellInfo(29475)] = 29475, -- Resilience of the Scourge
- [GetSpellInfo(17133)] = 17133, -- Create Pamela's Doll
- [GetSpellInfo(15120)] = 15120, -- Cenarion Beacon
- [GetSpellInfo(23246)] = 23246, -- Purple Skeletal Warhorse
- [GetSpellInfo(15792)] = 15792, -- Summon Blackhand Veteran
- [GetSpellInfo(9097)] = 9097, -- Summon Demon of the Orb
- [GetSpellInfo(3477)] = 3477, -- Spirit Steal
- [GetSpellInfo(19821)] = 19821, -- Arcane Bomb
- [GetSpellInfo(4320)] = 4320, -- Trelane's Freezing Touch
- [GetSpellInfo(3336)] = 3336, -- Green Iron Gauntlets
- [GetSpellInfo(12938)] = 12938, -- Fel Curse
- [GetSpellInfo(11643)] = 11643, -- Golden Scale Gauntlets
- [GetSpellInfo(3114)] = 3114, -- Enhance Blunt Weapon III
- [GetSpellInfo(8980)] = 8980, -- Skeletal Horse
- [GetSpellInfo(26072)] = 26072, -- Dust Cloud
- [GetSpellInfo(4629)] = 4629, -- Rain of Fire
- [GetSpellInfo(16640)] = 16640, -- Dense Weightstone
- [GetSpellInfo(2334)] = 2334, -- Elixir of Minor Fortitude
- [GetSpellInfo(22797)] = 22797, -- Force Reactive Disk
- [GetSpellInfo(11085)] = 11085, -- Chain Bolt
- [GetSpellInfo(10053)] = 10053, -- Conjure Mana Citrine
- [GetSpellInfo(7359)] = 7359, -- Bright Campfire
- [GetSpellInfo(25247)] = 25247, -- Longsight
- [GetSpellInfo(3955)] = 3955, -- Explosive Sheep
- [GetSpellInfo(8688)] = 8688, -- Instant Poison III
- [GetSpellInfo(16667)] = 16667, -- Demon Forged Breastplate
- [GetSpellInfo(10011)] = 10011, -- Blight
- [GetSpellInfo(3174)] = 3174, -- Elixir of Poison Resistance
- [GetSpellInfo(21730)] = 21730, -- Planting Vipore's Beacon
- [GetSpellInfo(19106)] = 19106, -- Onyxia Scale Breastplate
- [GetSpellInfo(5266)] = 5266, -- Syndicate Disguise
- [GetSpellInfo(3852)] = 3852, -- Gloves of Meditation
- [GetSpellInfo(6490)] = 6490, -- Sarilus's Elementals
- [GetSpellInfo(11447)] = 11447, -- Elixir of Waterwalking
- [GetSpellInfo(11338)] = 11338, -- Instant Poison IV
- [GetSpellInfo(24895)] = 24895, -- Create Scepter of Beckoning: Fire
- [GetSpellInfo(578)] = 578, -- Black Wolf
- [GetSpellInfo(11434)] = 11434, -- Gong Zul'Farrak Gong
- [GetSpellInfo(22719)] = 22719, -- Black Battlestrider
- [GetSpellInfo(21144)] = 21144, -- Egg Nog
- [GetSpellInfo(10552)] = 10552, -- Turtle Scale Helm
- [GetSpellInfo(18502)] = 18502, -- Curse of Hakkar
- [GetSpellInfo(17536)] = 17536, -- Awaken Kerlonian
- [GetSpellInfo(10787)] = 10787, -- Panther
- [GetSpellInfo(6728)] = 6728, -- Enveloping Winds
- [GetSpellInfo(21729)] = 21729, -- Planting Slidore's Beacon
- [GetSpellInfo(22928)] = 22928, -- Shifting Cloak
- [GetSpellInfo(3956)] = 3956, -- Green Tinted Goggles
- [GetSpellInfo(19082)] = 19082, -- Runic Leather Headband
- [GetSpellInfo(16396)] = 16396, -- Flame Breath
- [GetSpellInfo(5412)] = 5412, -- Balance of Nature Failure
- [GetSpellInfo(19047)] = 19047, -- Cured Rugged Hide
- [GetSpellInfo(14932)] = 14932, -- Thick Leather Ammo Pouch
- [GetSpellInfo(17634)] = 17634, -- Flask of Petrification
- [GetSpellInfo(7755)] = 7755, -- Bristle Whisker Catfish
- [GetSpellInfo(11729)] = 11729, -- Create Healthstone (Greater)
- [GetSpellInfo(6297)] = 6297, -- Fiery Blaze
- [GetSpellInfo(6690)] = 6690, -- Lesser Wizard's Robe
- [GetSpellInfo(8386)] = 8386, -- Attacking
- [GetSpellInfo(2406)] = 2406, -- Gray Woolen Shirt
- [GetSpellInfo(2395)] = 2395, -- Barbaric Linen Vest
- [GetSpellInfo(22840)] = 22840, -- Arcanum of Rapidity
- [GetSpellInfo(23442)] = 23442, -- Everlook Transporter
- [GetSpellInfo(8376)] = 8376, -- Earthgrab Totem
- [GetSpellInfo(5967)] = 5967, -- Pickpocket (PT)
- [GetSpellInfo(23054)] = 23054, -- Igniting Kroshius
- [GetSpellInfo(6619)] = 6619, -- Cowardly Flight Potion
- [GetSpellInfo(3397)] = 3397, -- Big Bear Steak
- [GetSpellInfo(17293)] = 17293, -- Burning Winds
- [GetSpellInfo(28210)] = 28210, -- Gaea's Embrace
- [GetSpellInfo(27659)] = 27659, -- Enchanted Runecloth Bag
- [GetSpellInfo(19078)] = 19078, -- Living Leggings
- [GetSpellInfo(7162)] = 7162, -- First Aid
- [GetSpellInfo(19796)] = 19796, -- Dark Iron Rifle
- [GetSpellInfo(17575)] = 17575, -- Greater Frost Protection Potion
- [GetSpellInfo(19060)] = 19060, -- Green Dragonscale Leggings
- [GetSpellInfo(19797)] = 19797, -- Conjure Torch of Retribution
- [GetSpellInfo(24195)] = 24195, -- Grom's Tribute
- [GetSpellInfo(7739)] = 7739, -- Inferno Shell
- [GetSpellInfo(12735)] = 12735, -- Fill the Egg of Hakkar
- [GetSpellInfo(12280)] = 12280, -- Acid of Hakkar
- [GetSpellInfo(24850)] = 24850, -- Sandstalker Gauntlets
- [GetSpellInfo(18439)] = 18439, -- Brightcloth Pants
- [GetSpellInfo(6777)] = 6777, -- Gray Ram
- [GetSpellInfo(6704)] = 6704, -- Thick Murloc Armor
- [GetSpellInfo(9879)] = 9879, -- Self Destruct
- [GetSpellInfo(9082)] = 9082, -- Create Containment Coffer
- [GetSpellInfo(3755)] = 3755, -- Linen Bag
- [GetSpellInfo(23399)] = 23399, -- Barbaric Bracers
- [GetSpellInfo(4942)] = 4942, -- Lesser Stoneshield Potion
- [GetSpellInfo(26418)] = 26418, -- Small Red Rocket
- [GetSpellInfo(24245)] = 24245, -- String Together Heads
- [GetSpellInfo(10688)] = 10688, -- Summon Cockroach
- [GetSpellInfo(4539)] = 4539, -- Strength of the Ages
- [GetSpellInfo(4974)] = 4974, -- Wither Touch
- [GetSpellInfo(12253)] = 12253, -- Dowse Eternal Flame
- [GetSpellInfo(9002)] = 9002, -- Coarse Dynamite
- [GetSpellInfo(6950)] = 6950, -- Faerie Fire
- [GetSpellInfo(11836)] = 11836, -- Freeze Solid
- [GetSpellInfo(16969)] = 16969, -- Ornate Thorium Handaxe
- [GetSpellInfo(4131)] = 4131, -- Banish Cresting Exile
- [GetSpellInfo(19669)] = 19669, -- Arcanite Skeleton Key
- [GetSpellInfo(9062)] = 9062, -- Small Leather Ammo Pouch
- [GetSpellInfo(4064)] = 4064, -- Rough Copper Bomb
- [GetSpellInfo(22722)] = 22722, -- Red Skeletal Warhorse
- [GetSpellInfo(14293)] = 14293, -- Lesser Magic Wand
- [GetSpellInfo(12065)] = 12065, -- Mageweave Bag
- [GetSpellInfo(20604)] = 20604, -- Dominate Mind
- [GetSpellInfo(18409)] = 18409, -- Runecloth Cloak
- [GetSpellInfo(855)] = 855, -- Feeblemind III
- [GetSpellInfo(24125)] = 24125, -- Blood Tiger Shoulders
- [GetSpellInfo(6202)] = 6202, -- Create Healthstone (Lesser)
- [GetSpellInfo(16497)] = 16497, -- Stun Bomb
- [GetSpellInfo(31)] = 31, -- Teleport Goldshire
- [GetSpellInfo(20762)] = 20762, -- Soulstone Resurrection
- [GetSpellInfo(8758)] = 8758, -- Azure Silk Pants
- [GetSpellInfo(22596)] = 22596, -- Shadow Mantle of the Dawn
- [GetSpellInfo(6252)] = 6252, -- Southsea Cannon Fire
- [GetSpellInfo(19107)] = 19107, -- Black Dragonscale Leggings
- [GetSpellInfo(17953)] = 17953, -- Create Firestone (Major)
- [GetSpellInfo(18445)] = 18445, -- Mooncloth Bag
- [GetSpellInfo(3278)] = 3278, -- Heavy Wool Bandage
- [GetSpellInfo(10788)] = 10788, -- Leopard
- [GetSpellInfo(6296)] = 6296, -- Enchant: Fiery Blaze
- [GetSpellInfo(3501)] = 3501, -- Green Iron Bracers
- [GetSpellInfo(16080)] = 16080, -- Red Wolf
- [GetSpellInfo(447)] = 447, -- Teleport Treant
- [GetSpellInfo(20006)] = 20006, -- Unholy Curse
- [GetSpellInfo(2544)] = 2544, -- Crab Cake
- [GetSpellInfo(10682)] = 10682, -- Summon Hyacinth Macaw
- [GetSpellInfo(22563)] = 22563, -- Recall
- [GetSpellInfo(19088)] = 19088, -- Heavy Scorpid Helm
- [GetSpellInfo(3502)] = 3502, -- Green Iron Helm
- [GetSpellInfo(17162)] = 17162, -- Summon Water Elemental
- [GetSpellInfo(16587)] = 16587, -- Dark Whispers
- [GetSpellInfo(23223)] = 23223, -- Swift White Mechanostrider
- [GetSpellInfo(11082)] = 11082, -- Megavolt
- [GetSpellInfo(17571)] = 17571, -- Elixir of the Mongoose
- [GetSpellInfo(18960)] = 18960, -- Teleport: Moonglade
- [GetSpellInfo(23429)] = 23429, -- Summon Loggerhead Snapjaw
- [GetSpellInfo(7398)] = 7398, -- Birth
- [GetSpellInfo(19833)] = 19833, -- Flawless Arcanite Rifle
- [GetSpellInfo(14809)] = 14809, -- Lesser Mystic Wand
- [GetSpellInfo(26086)] = 26086, -- Felcloth Bag
- [GetSpellInfo(19083)] = 19083, -- Wicked Leather Pants
- [GetSpellInfo(2742)] = 2742, -- Bronze Shortsword
- [GetSpellInfo(11467)] = 11467, -- Elixir of Greater Agility
- [GetSpellInfo(21027)] = 21027, -- Spark
- [GetSpellInfo(16965)] = 16965, -- Bleakwood Hew
- [GetSpellInfo(5140)] = 5140, -- Detonate
- [GetSpellInfo(20649)] = 20649, -- Heavy Leather
- [GetSpellInfo(8856)] = 8856, -- Bending Shinbone
- [GetSpellInfo(2541)] = 2541, -- Coyote Steak
- [GetSpellInfo(6717)] = 6717, -- Place Lion Carcass
- [GetSpellInfo(3295)] = 3295, -- Deadly Bronze Poniard
- [GetSpellInfo(7132)] = 7132, -- Summon Lupine Delusions
- [GetSpellInfo(15853)] = 15853, -- Lean Wolf Steak
- [GetSpellInfo(9149)] = 9149, -- Heavy Earthen Gloves
- [GetSpellInfo(10518)] = 10518, -- Turtle Scale Bracers
- [GetSpellInfo(16796)] = 16796, -- Summon Shy-Rotam
- [GetSpellInfo(9273)] = 9273, -- Goblin Jumper Cables
- [GetSpellInfo(12897)] = 12897, -- Gnomish Goggles
- [GetSpellInfo(24849)] = 24849, -- Sandstalker Bracers
- [GetSpellInfo(15779)] = 15779, -- White Mechanostrider
- [GetSpellInfo(23227)] = 23227, -- Swift Palomino
- [GetSpellInfo(4960)] = 4960, -- Create Fervor Potion (New)
- [GetSpellInfo(15750)] = 15750, -- Rookery Whelp Spawn-in Spell
- [GetSpellInfo(3503)] = 3503, -- Golden Scale Coif
- [GetSpellInfo(3013)] = 3013, -- Volley II
- [GetSpellInfo(12458)] = 12458, -- Evil God Counterspell
- [GetSpellInfo(7896)] = 7896, -- Exploding Shot
- [GetSpellInfo(19667)] = 19667, -- Golden Skeleton Key
- [GetSpellInfo(3866)] = 3866, -- Stylish Red Shirt
- [GetSpellInfo(24902)] = 24902, -- Runed Stygian Belt
- [GetSpellInfo(10700)] = 10700, -- Summon Faeling
- [GetSpellInfo(7383)] = 7383, -- Water Bubble
- [GetSpellInfo(25262)] = 25262, -- Abomination Spit
- [GetSpellInfo(26407)] = 26407, -- Festive Red Pant Suit
- [GetSpellInfo(30174)] = 30174, -- Riding Turtle
- [GetSpellInfo(16598)] = 16598, -- Will of Shahram
- [GetSpellInfo(6422)] = 6422, -- Ashcrombe's Teleport
- [GetSpellInfo(6501)] = 6501, -- Clam Chowder
- [GetSpellInfo(17564)] = 17564, -- Transmute: Water to Undeath
- [GetSpellInfo(16993)] = 16993, -- Masterwork Stormhammer
- [GetSpellInfo(9147)] = 9147, -- Earthen Leather Shoulders
- [GetSpellInfo(2158)] = 2158, -- Fine Leather Boots
- [GetSpellInfo(9616)] = 9616, -- Wild Regeneration
- [GetSpellInfo(4520)] = 4520, -- Wide Sweep
- [GetSpellInfo(27290)] = 27290, -- Increase Reputation
- [GetSpellInfo(9966)] = 9966, -- Mithril Scale Shoulders
- [GetSpellInfo(11460)] = 11460, -- Elixir of Detect Undead
- [GetSpellInfo(1698)] = 1698, -- Shockwave
- [GetSpellInfo(16081)] = 16081, -- Arctic Wolf
- [GetSpellInfo(13484)] = 13484, -- Plant Gor'tesh Head
- [GetSpellInfo(16059)] = 16059, -- Tawny Sabercat
- [GetSpellInfo(23707)] = 23707, -- Lava Belt
- [GetSpellInfo(16594)] = 16594, -- Crypt Scarabs
- [GetSpellInfo(10511)] = 10511, -- Turtle Scale Breastplate
- [GetSpellInfo(10258)] = 10258, -- Awaken Vault Warder
- [GetSpellInfo(3967)] = 3967, -- Big Iron Bomb
- [GetSpellInfo(16745)] = 16745, -- Enchanted Thorium Breastplate
- [GetSpellInfo(25688)] = 25688, -- Narain!
- [GetSpellInfo(7960)] = 7960, -- Scry on Azrethoc
- [GetSpellInfo(3818)] = 3818, -- Cured Heavy Hide
- [GetSpellInfo(7101)] = 7101, -- Flame Blast
- [GetSpellInfo(22597)] = 22597, -- Nature Mantle of the Dawn
- [GetSpellInfo(10799)] = 10799, -- Violet Raptor
- [GetSpellInfo(27724)] = 27724, -- Cenarion Herb Bag
- [GetSpellInfo(7430)] = 7430, -- Arclight Spanner
- [GetSpellInfo(10676)] = 10676, -- Summon Orange Tabby
- [GetSpellInfo(22999)] = 22999, -- Defibrillate
- [GetSpellInfo(3868)] = 3868, -- Phoenix Gloves
- [GetSpellInfo(21048)] = 21048, -- Curse of the Tribes
- [GetSpellInfo(18411)] = 18411, -- Frostweave Gloves
- [GetSpellInfo(1050)] = 1050, -- Sacrifice
- [GetSpellInfo(10520)] = 10520, -- Big Voodoo Robe
- [GetSpellInfo(8137)] = 8137, -- Silithid Pox
- [GetSpellInfo(16051)] = 16051, -- Barrier of Light
- [GetSpellInfo(23313)] = 23313, -- Corrosive Acid
- [GetSpellInfo(16570)] = 16570, -- Charged Arcane Bolt
- [GetSpellInfo(23124)] = 23124, -- Human Orphan Whistle
- [GetSpellInfo(25146)] = 25146, -- Transmute: Elemental Fire
- [GetSpellInfo(12075)] = 12075, -- Lavender Mageweave Shirt
- [GetSpellInfo(18437)] = 18437, -- Felcloth Boots
- [GetSpellInfo(22779)] = 22779, -- Biznicks 247x128 Accurascope
- [GetSpellInfo(10650)] = 10650, -- Dragonscale Breastplate
- [GetSpellInfo(19564)] = 19564, -- Draw Water Sample
- [GetSpellInfo(15591)] = 15591, -- Revive Ringo
- [GetSpellInfo(12684)] = 12684, -- Kadrak's Flag
- [GetSpellInfo(18416)] = 18416, -- Ghostweave Vest
- [GetSpellInfo(1450)] = 1450, -- Arcane Spirit II
- [GetSpellInfo(12904)] = 12904, -- Gnomish Ham Radio
- [GetSpellInfo(17117)] = 17117, -- Magatha Incendia Powder
- [GetSpellInfo(9811)] = 9811, -- Barbaric Iron Shoulders
- [GetSpellInfo(13258)] = 13258, -- Summon Goblin Bomb
- [GetSpellInfo(23041)] = 23041, -- Call Anathema
- [GetSpellInfo(17501)] = 17501, -- Cannon Fire
- [GetSpellInfo(27722)] = 27722, -- Sweet Surprise
- [GetSpellInfo(26422)] = 26422, -- Large Red Rocket
- [GetSpellInfo(3922)] = 3922, -- Handful of Copper Bolts
- [GetSpellInfo(10542)] = 10542, -- Tough Scorpid Gloves
- [GetSpellInfo(24161)] = 24161, -- Death's Embrace
- [GetSpellInfo(19090)] = 19090, -- Stormshroud Shoulders
- [GetSpellInfo(28244)] = 28244, -- Icebane Bracers
- [GetSpellInfo(10695)] = 10695, -- Summon Dark Whelpling
- [GetSpellInfo(25704)] = 25704, -- Smoked Sagefish
- [GetSpellInfo(12072)] = 12072, -- Black Mageweave Headband
- [GetSpellInfo(24092)] = 24092, -- Bloodvine Leggings
- [GetSpellInfo(10677)] = 10677, -- Summon Siamese
- [GetSpellInfo(28133)] = 28133, -- Cure Disease
- [GetSpellInfo(19799)] = 19799, -- Dark Iron Bomb
- [GetSpellInfo(3171)] = 3171, -- Elixir of Wisdom
- [GetSpellInfo(9552)] = 9552, -- Searing Flames
- [GetSpellInfo(12055)] = 12055, -- Shadoweave Robe
- [GetSpellInfo(7054)] = 7054, -- Forsaken Skills
- [GetSpellInfo(23430)] = 23430, -- Summon Olive Snapjaw
- [GetSpellInfo(20755)] = 20755, -- Create Soulstone
- [GetSpellInfo(8782)] = 8782, -- Truefaith Gloves
- [GetSpellInfo(16057)] = 16057, -- Place Unforged Seal
- [GetSpellInfo(2330)] = 2330, -- Minor Healing Potion
- [GetSpellInfo(11456)] = 11456, -- Goblin Rocket Fuel
- [GetSpellInfo(556)] = 556, -- Astral Recall
- [GetSpellInfo(19793)] = 19793, -- Lifelike Mechanical Toad
- [GetSpellInfo(16991)] = 16991, -- Annihilator
- [GetSpellInfo(2817)] = 2817, -- Teach Bark of Doom
- [GetSpellInfo(9888)] = 9888, -- Healing Touch
- [GetSpellInfo(12590)] = 12590, -- Gyromatic Micro-Adjustor
- [GetSpellInfo(10876)] = 10876, -- Mana Burn
- [GetSpellInfo(16071)] = 16071, -- Curse of the Firebrand
- [GetSpellInfo(10947)] = 10947, -- Mind Blast
- [GetSpellInfo(11365)] = 11365, -- Bly's Band's Escape
- [GetSpellInfo(28785)] = 28785, -- Locust Swarm
- [GetSpellInfo(21912)] = 21912, -- Dummy Nuke
- [GetSpellInfo(23663)] = 23663, -- Mantle of the Timbermaw
- [GetSpellInfo(16801)] = 16801, -- Warosh's Transform
- [GetSpellInfo(19089)] = 19089, -- Blue Dragonscale Shoulders
- [GetSpellInfo(23233)] = 23233, -- Binding Volume III
- [GetSpellInfo(2663)] = 2663, -- Copper Bracers
- [GetSpellInfo(3507)] = 3507, -- Golden Scale Leggings
- [GetSpellInfo(7901)] = 7901, -- Decayed Agility
- [GetSpellInfo(16645)] = 16645, -- Radiant Belt
- [GetSpellInfo(8784)] = 8784, -- Green Silk Armor
- [GetSpellInfo(28089)] = 28089, -- Polarity Shift
- [GetSpellInfo(24914)] = 24914, -- Darkrune Breastplate
- [GetSpellInfo(19104)] = 19104, -- Frostsaber Tunic
- [GetSpellInfo(12050)] = 12050, -- Black Mageweave Robe
- [GetSpellInfo(28995)] = 28995, -- Stoneskin
- [GetSpellInfo(18149)] = 18149, -- Volatile Infection
- [GetSpellInfo(20853)] = 20853, -- Corehound Boots
- [GetSpellInfo(18413)] = 18413, -- Ghostweave Gloves
- [GetSpellInfo(6306)] = 6306, -- Acid Splash
- [GetSpellInfo(10003)] = 10003, -- The Shatterer
- [GetSpellInfo(1536)] = 1536, -- Longshot II
- [GetSpellInfo(11763)] = 11763, -- Firebolt
- [GetSpellInfo(18407)] = 18407, -- Runecloth Tunic
- [GetSpellInfo(6249)] = 6249, -- Opening
- [GetSpellInfo(9196)] = 9196, -- Dusky Leather Armor
- [GetSpellInfo(9481)] = 9481, -- Holy Smite
- [GetSpellInfo(23068)] = 23068, -- Green Firework
- [GetSpellInfo(3945)] = 3945, -- Heavy Blasting Powder
- [GetSpellInfo(6417)] = 6417, -- Dig Rat Stew
- [GetSpellInfo(22421)] = 22421, -- Massive Geyser
- [GetSpellInfo(11451)] = 11451, -- Oil of Immolation
- [GetSpellInfo(28280)] = 28280, -- Bombard Slime
- [GetSpellInfo(12082)] = 12082, -- Shadoweave Boots
- [GetSpellInfo(16073)] = 16073, -- Filling
- [GetSpellInfo(18540)] = 18540, -- Ritual of Doom
- [GetSpellInfo(29335)] = 29335, -- Elderberry Pie
- [GetSpellInfo(10544)] = 10544, -- Wild Leather Vest
- [GetSpellInfo(10348)] = 10348, -- Tune Up
- [GetSpellInfo(2161)] = 2161, -- Embossed Leather Boots
- [GetSpellInfo(3116)] = 3116, -- Coarse Weightstone
- [GetSpellInfo(7752)] = 7752, -- Slitherskin Mackerel
- [GetSpellInfo(22478)] = 22478, -- Intense Pain
- [GetSpellInfo(3651)] = 3651, -- Shield of Reflection
- [GetSpellInfo(6705)] = 6705, -- Murloc Scale Bracers
- [GetSpellInfo(15402)] = 15402, -- Lesser Arcane Amalgamation
- [GetSpellInfo(16007)] = 16007, -- Draco-Incarcinatrix 900
- [GetSpellInfo(4286)] = 4286, -- Poisonous Spit
- [GetSpellInfo(6620)] = 6620, -- Place Toxic Fogger
- [GetSpellInfo(12722)] = 12722, -- Goblin Radio
- [GetSpellInfo(3495)] = 3495, -- Golden Iron Destroyer
- [GetSpellInfo(13240)] = 13240, -- The Mortar: Reloaded
- [GetSpellInfo(18630)] = 18630, -- Heavy Runecloth Bandage
- [GetSpellInfo(16994)] = 16994, -- Arcanite Reaper
- [GetSpellInfo(21332)] = 21332, -- Aspect of Neptulon
- [GetSpellInfo(3780)] = 3780, -- Heavy Armor Kit
- [GetSpellInfo(10632)] = 10632, -- Helm of Fire
- [GetSpellInfo(8090)] = 8090, -- Bright Baubles
- [GetSpellInfo(3971)] = 3971, -- Gnomish Cloaking Device
- [GetSpellInfo(10714)] = 10714, -- Summon Black Kingsnake
- [GetSpellInfo(2668)] = 2668, -- Rough Bronze Leggings
- [GetSpellInfo(12045)] = 12045, -- Simple Linen Boots
- [GetSpellInfo(4978)] = 4978, -- Cleanse Wildmane Well
- [GetSpellInfo(19051)] = 19051, -- Heavy Scorpid Vest
- [GetSpellInfo(3494)] = 3494, -- Solid Iron Maul
- [GetSpellInfo(12067)] = 12067, -- Dreamweave Gloves
- [GetSpellInfo(4164)] = 4164, -- Throw Rock
- [GetSpellInfo(8088)] = 8088, -- Nightcrawlers
- [GetSpellInfo(11452)] = 11452, -- Restorative Potion
- [GetSpellInfo(17454)] = 17454, -- Unpainted Mechanostrider
- [GetSpellInfo(16082)] = 16082, -- Palomino Stallion
- [GetSpellInfo(11339)] = 11339, -- Instant Poison V
- [GetSpellInfo(16379)] = 16379, -- Ozzie Explodes
- [GetSpellInfo(8322)] = 8322, -- Moonglow Vest
- [GetSpellInfo(3452)] = 3452, -- Mana Potion
- [GetSpellInfo(12078)] = 12078, -- Red Mageweave Shoulders
- [GetSpellInfo(28221)] = 28221, -- Polar Bracers
- [GetSpellInfo(17639)] = 17639, -- Wail of the Banshee
- [GetSpellInfo(10704)] = 10704, -- Summon Tree Frog
- [GetSpellInfo(12740)] = 12740, -- Summon Infernal Servant
- [GetSpellInfo(20629)] = 20629, -- Corrosive Venom Spit
- [GetSpellInfo(7255)] = 7255, -- Holy Protection Potion
- [GetSpellInfo(5017)] = 5017, -- Divining Trance
- [GetSpellInfo(27723)] = 27723, -- Dark Desire
- [GetSpellInfo(2830)] = 2830, -- Sharpen Blade III
- [GetSpellInfo(22789)] = 22789, -- Gordok Green Grog
- [GetSpellInfo(3015)] = 3015, -- Bombard II
- [GetSpellInfo(7934)] = 7934, -- Anti-Venom
- [GetSpellInfo(10955)] = 10955, -- Shackle Undead
- [GetSpellInfo(22989)] = 22989, -- The Breaking
- [GetSpellInfo(10716)] = 10716, -- Summon Brown Snake
- [GetSpellInfo(27146)] = 27146, -- Left Piece of Lord Valthalak's Amulet
- [GetSpellInfo(21979)] = 21979, -- Create The Pariah's Instructions
- [GetSpellInfo(18762)] = 18762, -- Hand of Iruxos
- [GetSpellInfo(22844)] = 22844, -- Arcanum of Focus
- [GetSpellInfo(11016)] = 11016, -- Soul Bite
- [GetSpellInfo(14292)] = 14292, -- Fling Torch
- [GetSpellInfo(2545)] = 2545, -- Cooked Crab Claw
- [GetSpellInfo(20849)] = 20849, -- Flarecore Gloves
- [GetSpellInfo(11454)] = 11454, -- Inlaid Mithril Cylinder
- [GetSpellInfo(3376)] = 3376, -- Curiously Tasty Omelet
- [GetSpellInfo(3229)] = 3229, -- Quick Bloodlust
- [GetSpellInfo(3769)] = 3769, -- Dark Leather Shoulders
- [GetSpellInfo(3368)] = 3368, -- Drink Minor Potion
- [GetSpellInfo(6278)] = 6278, -- Creeping Mold
- [GetSpellInfo(27624)] = 27624, -- Lesser Healing Wave
- [GetSpellInfo(3772)] = 3772, -- Green Leather Armor
- [GetSpellInfo(3007)] = 3007, -- Longshot III
- [GetSpellInfo(3120)] = 3120, -- Sol L
- [GetSpellInfo(3237)] = 3237, -- Curse of Thule
- [GetSpellInfo(23225)] = 23225, -- Swift Green Mechanostrider
- [GetSpellInfo(28242)] = 28242, -- Icebane Breastplate
- [GetSpellInfo(17229)] = 17229, -- Winterspring Frostsaber
- [GetSpellInfo(10254)] = 10254, -- Stone Dwarf Awaken Visual
- [GetSpellInfo(3974)] = 3974, -- Crude Scope
- [GetSpellInfo(10570)] = 10570, -- Tough Scorpid Helm
- [GetSpellInfo(17950)] = 17950, -- Shadow Portal
- [GetSpellInfo(11355)] = 11355, -- Deadly Poison III
- [GetSpellInfo(3108)] = 3108, -- Touch of Death
- [GetSpellInfo(10710)] = 10710, -- Summon Cottontail Rabbit
- [GetSpellInfo(22686)] = 22686, -- Bellowing Roar
- [GetSpellInfo(23765)] = 23765, -- Darkmoon Faire Fortune
- [GetSpellInfo(13463)] = 13463, -- Summon Bloodpetal Mini Pests
- [GetSpellInfo(27642)] = 27642, -- Copy of Increase Reputation
- [GetSpellInfo(5174)] = 5174, -- Cookie's Cooking
- [GetSpellInfo(12071)] = 12071, -- Shadoweave Gloves
- [GetSpellInfo(10550)] = 10550, -- Nightscape Cloak
- [GetSpellInfo(6499)] = 6499, -- Boiled Clams
- [GetSpellInfo(4961)] = 4961, -- Resupply
- [GetSpellInfo(6907)] = 6907, -- Diseased Slime
- [GetSpellInfo(23250)] = 23250, -- Swift Brown Wolf
- [GetSpellInfo(17161)] = 17161, -- Taking Moon Well Sample
- [GetSpellInfo(6974)] = 6974, -- Gnome Camera Connection
- [GetSpellInfo(9202)] = 9202, -- Green Whelp Bracers
- [GetSpellInfo(12599)] = 12599, -- Mithril Casing
- [GetSpellInfo(11402)] = 11402, -- Shay's Bell
- [GetSpellInfo(15745)] = 15745, -- Summon Rookery Whelp
- [GetSpellInfo(25719)] = 25719, -- Bind Draconic For Dummies
- [GetSpellInfo(3373)] = 3373, -- Crocolisk Gumbo
- [GetSpellInfo(22869)] = 22869, -- Mooncloth Gloves
- [GetSpellInfo(22867)] = 22867, -- Felcloth Gloves
- [GetSpellInfo(24696)] = 24696, -- Summon Murky
- [GetSpellInfo(22921)] = 22921, -- Girdle of Insight
- [GetSpellInfo(8363)] = 8363, -- Parasite
- [GetSpellInfo(16973)] = 16973, -- Enchanted Battlehammer
- [GetSpellInfo(16657)] = 16657, -- Imperial Plate Boots
- [GetSpellInfo(21267)] = 21267, -- Conjure Altar of Summoning
- [GetSpellInfo(23304)] = 23304, -- Manna-Enriched Horse Feed
- [GetSpellInfo(4055)] = 4055, -- Mechanical Squirrel
- [GetSpellInfo(17928)] = 17928, -- Howl of Terror
- [GetSpellInfo(12655)] = 12655, -- Enlightenment
- [GetSpellInfo(3869)] = 3869, -- Bright Yellow Shirt
- [GetSpellInfo(24422)] = 24422, -- Zandalar Signet of Might
- [GetSpellInfo(10792)] = 10792, -- Spotted Panther
- [GetSpellInfo(19100)] = 19100, -- Heavy Scorpid Shoulders
- [GetSpellInfo(19571)] = 19571, -- Destroy Ghost Magnet
- [GetSpellInfo(23633)] = 23633, -- Gloves of the Dawn
- [GetSpellInfo(22759)] = 22759, -- Flarecore Wraps
- [GetSpellInfo(11465)] = 11465, -- Elixir of Greater Intellect
- [GetSpellInfo(5219)] = 5219, -- Draw of Thistlenettle
- [GetSpellInfo(11024)] = 11024, -- Call of Thund
- [GetSpellInfo(22868)] = 22868, -- Inferno Gloves
- [GetSpellInfo(9198)] = 9198, -- Frost Leather Cloak
- [GetSpellInfo(15856)] = 15856, -- Hot Wolf Ribs
- [GetSpellInfo(5401)] = 5401, -- Lizard Bolt
- [GetSpellInfo(19877)] = 19877, -- Tranquilizing Shot
- [GetSpellInfo(21249)] = 21249, -- Call of the Nether
- [GetSpellInfo(3331)] = 3331, -- Silvered Bronze Boots
- [GetSpellInfo(16055)] = 16055, -- Nightsaber
- [GetSpellInfo(12902)] = 12902, -- Gnomish Net-o-Matic Projector
- [GetSpellInfo(1084)] = 1084, -- Firebolt III
- [GetSpellInfo(12760)] = 12760, -- Goblin Sapper Charge
- [GetSpellInfo(3188)] = 3188, -- Elixir of Ogre's Strength
- [GetSpellInfo(3177)] = 3177, -- Elixir of Defense
- [GetSpellInfo(15295)] = 15295, -- Dark Iron Shoulders
- [GetSpellInfo(9900)] = 9900, -- Sharpen Blade IV
- [GetSpellInfo(16056)] = 16056, -- Frostsaber
- [GetSpellInfo(7224)] = 7224, -- Steel Weapon Chain
- [GetSpellInfo(711)] = 711, -- Hellfire
- [GetSpellInfo(26218)] = 26218, -- Mistletoe
- [GetSpellInfo(14929)] = 14929, -- Fill Nagmara's Vial
- [GetSpellInfo(3112)] = 3112, -- Enhance Blunt Weapon
- [GetSpellInfo(3328)] = 3328, -- Rough Bronze Shoulders
- [GetSpellInfo(16197)] = 16197, -- Empty Charm Pouch
- [GetSpellInfo(16990)] = 16990, -- Arcanite Champion
- [GetSpellInfo(24138)] = 24138, -- Bloodsoul Gauntlets
- [GetSpellInfo(21848)] = 21848, -- Snowman
- [GetSpellInfo(10059)] = 10059, -- Portal: Stormwind
- [GetSpellInfo(23239)] = 23239, -- Swift Gray Ram
- [GetSpellInfo(16746)] = 16746, -- Invulnerable Mail
- [GetSpellInfo(15441)] = 15441, -- Greater Arcane Amalgamation
- [GetSpellInfo(17176)] = 17176, -- Panther Cage Key
- [GetSpellInfo(3816)] = 3816, -- Cured Light Hide
- [GetSpellInfo(471)] = 471, -- Palamino Stallion
- [GetSpellInfo(446)] = 446, -- Teleport Cemetary
- [GetSpellInfo(4508)] = 4508, -- Discolored Healing Potion
- [GetSpellInfo(6421)] = 6421, -- Ashcrombe's Unlock
- [GetSpellInfo(12199)] = 12199, -- Summon Ishamuhale
- [GetSpellInfo(15855)] = 15855, -- Roast Raptor
- [GetSpellInfo(10140)] = 10140, -- Conjure Water
- [GetSpellInfo(20627)] = 20627, -- Lightning Breath
- [GetSpellInfo(15294)] = 15294, -- Dark Iron Sunderer
- [GetSpellInfo(26443)] = 26443, -- Firework Cluster Launcher
- [GetSpellInfo(26105)] = 26105, -- Glare
- [GetSpellInfo(23242)] = 23242, -- Swift Olive Raptor
- [GetSpellInfo(24201)] = 24201, -- Create Rune of the Dawn
- [GetSpellInfo(9820)] = 9820, -- Barbaric Iron Gloves
- [GetSpellInfo(3276)] = 3276, -- Heavy Linen Bandage
- [GetSpellInfo(1)] = 1, -- Word of Recall (OLD)
- [GetSpellInfo(13630)] = 13630, -- Scraping
- [GetSpellInfo(3398)] = 3398, -- Hot Lion Chops
- [GetSpellInfo(6688)] = 6688, -- Red Woolen Bag
- [GetSpellInfo(3304)] = 3304, -- Smelt Tin
- [GetSpellInfo(9918)] = 9918, -- Solid Sharpening Stone
- [GetSpellInfo(16450)] = 16450, -- Summon Smolderweb
- [GetSpellInfo(17506)] = 17506, -- Soul Breaker
- [GetSpellInfo(25347)] = 25347, -- Deadly Poison V
- [GetSpellInfo(3320)] = 3320, -- Rough Grinding Stone
- [GetSpellInfo(23677)] = 23677, -- Beasts Deck
- [GetSpellInfo(21067)] = 21067, -- Poison Bolt
- [GetSpellInfo(10490)] = 10490, -- Comfortable Leather Hat
- [GetSpellInfo(27)] = 27, -- Goldshire Portal
- [GetSpellInfo(3387)] = 3387, -- Rage of Thule
- [GetSpellInfo(15743)] = 15743, -- Flamecrack
- [GetSpellInfo(3926)] = 3926, -- Copper Modulator
- [GetSpellInfo(28243)] = 28243, -- Icebane Gauntlets
- [GetSpellInfo(16648)] = 16648, -- Radiant Breastplate
- [GetSpellInfo(21175)] = 21175, -- Spider Sausage
- [GetSpellInfo(27587)] = 27587, -- Thick Obsidian Breastplate
- [GetSpellInfo(12521)] = 12521, -- Teleport from Azshara Tower
- [GetSpellInfo(28023)] = 28023, -- Create Healthstone
- [GetSpellInfo(5110)] = 5110, -- Summon Living Flame
- [GetSpellInfo(3293)] = 3293, -- Copper Battle Axe
- [GetSpellInfo(7079)] = 7079, -- Simple Teleport Other
- [GetSpellInfo(22430)] = 22430, -- Refined Scale of Onyxia
- [GetSpellInfo(26056)] = 26056, -- Summon Green Qiraji Battle Tank
- [GetSpellInfo(7828)] = 7828, -- Rockscale Cod
- [GetSpellInfo(17461)] = 17461, -- Black Ram
- [GetSpellInfo(25162)] = 25162, -- Summon Disgusting Oozeling
- [GetSpellInfo(11459)] = 11459, -- Philosophers' Stone
- [GetSpellInfo(3855)] = 3855, -- Spidersilk Boots
- [GetSpellInfo(29163)] = 29163, -- Copy of Frostbolt
- [GetSpellInfo(12715)] = 12715, -- Goblin Rocket Fuel Recipe
- [GetSpellInfo(14008)] = 14008, -- Miblon's Bait
- [GetSpellInfo(3843)] = 3843, -- Heavy Woolen Gloves
- [GetSpellInfo(29483)] = 29483, -- Might of the Scourge
- [GetSpellInfo(4975)] = 4975, -- Cleanse Winterhoof Well
- [GetSpellInfo(20589)] = 20589, -- Escape Artist
- [GetSpellInfo(16781)] = 16781, -- Combining Charms
- [GetSpellInfo(6416)] = 6416, -- Strider Stew
- [GetSpellInfo(14327)] = 14327, -- Scare Beast
- [GetSpellInfo(17709)] = 17709, -- Summon Zergling
- [GetSpellInfo(22717)] = 22717, -- Black War Steed
- [GetSpellInfo(3841)] = 3841, -- Green Linen Bracers
- [GetSpellInfo(17405)] = 17405, -- Domination
- [GetSpellInfo(2159)] = 2159, -- Fine Leather Cloak
- [GetSpellInfo(9986)] = 9986, -- Bronze Greatsword
- [GetSpellInfo(6521)] = 6521, -- Pearl-clasped Cloak
- [GetSpellInfo(6686)] = 6686, -- Red Linen Bag
- [GetSpellInfo(12304)] = 12304, -- Drawing Kit
- [GetSpellInfo(24136)] = 24136, -- Bloodsoul Breastplate
- [GetSpellInfo(3778)] = 3778, -- Gem-studded Leather Belt
- [GetSpellInfo(10713)] = 10713, -- Summon Albino Snake
- [GetSpellInfo(3508)] = 3508, -- Green Iron Hauberk
- [GetSpellInfo(28481)] = 28481, -- Sylvan Crown
- [GetSpellInfo(12718)] = 12718, -- Goblin Construction Helmet
- [GetSpellInfo(2480)] = 2480, -- Shoot Bow
- [GetSpellInfo(28146)] = 28146, -- Copy of Portal: Undercity
- [GetSpellInfo(18458)] = 18458, -- Robe of the Void
- [GetSpellInfo(21050)] = 21050, -- Melodious Rapture
- [GetSpellInfo(11417)] = 11417, -- Portal: Orgrimmar
- [GetSpellInfo(19065)] = 19065, -- Runic Leather Bracers
- [GetSpellInfo(6272)] = 6272, -- Eye of Yesmur (PT)
- [GetSpellInfo(23063)] = 23063, -- Dense Dynamite
- [GetSpellInfo(10969)] = 10969, -- Blue Mechanostrider
- [GetSpellInfo(3330)] = 3330, -- Silvered Bronze Shoulders
- [GetSpellInfo(22593)] = 22593, -- Flame Mantle of the Dawn
- [GetSpellInfo(2403)] = 2403, -- Gray Woolen Robe
- [GetSpellInfo(8275)] = 8275, -- Poisoned Shot
- [GetSpellInfo(18991)] = 18991, -- Green Kodo
- [GetSpellInfo(184)] = 184, -- Fire Shield II
- [GetSpellInfo(19666)] = 19666, -- Silver Skeleton Key
- [GetSpellInfo(17169)] = 17169, -- Summon Carrion Scarab
- [GetSpellInfo(15869)] = 15869, -- Superior Healing Ward
- [GetSpellInfo(7151)] = 7151, -- Barbaric Shoulders
- [GetSpellInfo(25748)] = 25748, -- Poison Stinger
- [GetSpellInfo(30001)] = 30001, -- Copy of Fear
- [GetSpellInfo(10529)] = 10529, -- Wild Leather Shoulders
- [GetSpellInfo(15728)] = 15728, -- Plague Cloud
- [GetSpellInfo(19066)] = 19066, -- Frostsaber Boots
- [GetSpellInfo(23229)] = 23229, -- Swift Brown Steed
- [GetSpellInfo(10679)] = 10679, -- Summon White Kitten
- [GetSpellInfo(18417)] = 18417, -- Runecloth Gloves
- [GetSpellInfo(9931)] = 9931, -- Mithril Scale Pants
- [GetSpellInfo(16596)] = 16596, -- Flames of Shahram
- [GetSpellInfo(18159)] = 18159, -- Curse of the Fallen Magram
- [GetSpellInfo(10097)] = 10097, -- Smelt Mithril
- [GetSpellInfo(15049)] = 15049, -- Summon Robot
- [GetSpellInfo(8000)] = 8000, -- Area Burn
- [GetSpellInfo(18711)] = 18711, -- Forging
- [GetSpellInfo(26417)] = 26417, -- Small Green Rocket
- [GetSpellInfo(3864)] = 3864, -- Star Belt
- [GetSpellInfo(19062)] = 19062, -- Ironfeather Shoulders
- [GetSpellInfo(17155)] = 17155, -- Sprinkling Purified Water
- [GetSpellInfo(13564)] = 13564, -- Opening Dark Coffer
- [GetSpellInfo(21913)] = 21913, -- Edge of Winter
- [GetSpellInfo(25662)] = 25662, -- Copy of Nightfin Soup
- [GetSpellInfo(22799)] = 22799, -- King of the Gordok
- [GetSpellInfo(11758)] = 11758, -- Dowsing
- [GetSpellInfo(17045)] = 17045, -- Dawn's Gambit
- [GetSpellInfo(12509)] = 12509, -- Teleport to Azshara Tower
- [GetSpellInfo(22434)] = 22434, -- Charged Scale of Onyxia
- [GetSpellInfo(16971)] = 16971, -- Huge Thorium Battleaxe
- [GetSpellInfo(8366)] = 8366, -- Ironforge Chain
- [GetSpellInfo(23507)] = 23507, -- Snake Burst Firework
- [GetSpellInfo(26001)] = 26001, -- Reputation - Ahn'Qiraj Temple Boss
- [GetSpellInfo(509)] = 509, -- Feeblemind II
- [GetSpellInfo(18153)] = 18153, -- Kodo Kombobulator
- [GetSpellInfo(15533)] = 15533, -- Stoned - Channel Cast Visual
- [GetSpellInfo(9928)] = 9928, -- Heavy Mithril Gauntlet
- [GetSpellInfo(9197)] = 9197, -- Green Whelp Armor
- [GetSpellInfo(16997)] = 16997, -- Gargoyle Strike
- [GetSpellInfo(22923)] = 22923, -- Swift Flight Bracers
- [GetSpellInfo(12079)] = 12079, -- Red Mageweave Bag
- [GetSpellInfo(18242)] = 18242, -- Hot Smoked Bass
- [GetSpellInfo(14814)] = 14814, -- Throw Dark Iron Ale
- [GetSpellInfo(3308)] = 3308, -- Smelt Gold
- [GetSpellInfo(2160)] = 2160, -- Embossed Leather Vest
- [GetSpellInfo(13565)] = 13565, -- Opening Secure Safe
- [GetSpellInfo(21950)] = 21950, -- Recite Words of Celebras
- [GetSpellInfo(2828)] = 2828, -- Sharpen Blade
- [GetSpellInfo(19668)] = 19668, -- Truesilver Skeleton Key
- [GetSpellInfo(9010)] = 9010, -- Create Filled Containment Coffer
- [GetSpellInfo(16724)] = 16724, -- Whitesoul Helm
- [GetSpellInfo(22870)] = 22870, -- Cloak of Warding
- [GetSpellInfo(7183)] = 7183, -- Elixir of Minor Defense
- [GetSpellInfo(17016)] = 17016, -- Placing Beacon Torch
- [GetSpellInfo(5107)] = 5107, -- Opening Booty Chest
- [GetSpellInfo(10841)] = 10841, -- Heavy Mageweave Bandage
- [GetSpellInfo(11547)] = 11547, -- Drive Nimboya's Laden Pike
- [GetSpellInfo(3356)] = 3356, -- Flame Lash
- [GetSpellInfo(28615)] = 28615, -- Spike Volley
- [GetSpellInfo(10216)] = 10216, -- Flamestrike
- [GetSpellInfo(6898)] = 6898, -- White Ram
- [GetSpellInfo(11548)] = 11548, -- Summon Spider God
- [GetSpellInfo(27572)] = 27572, -- Smitten
- [GetSpellInfo(14250)] = 14250, -- Capture Grark
- [GetSpellInfo(1849)] = 1849, -- Beast Claws II
- [GetSpellInfo(26424)] = 26424, -- Green Rocket Cluster
- [GetSpellInfo(3491)] = 3491, -- Big Bronze Knife
- [GetSpellInfo(25309)] = 25309, -- Immolate
- [GetSpellInfo(7076)] = 7076, -- Summon Tervosh's Minion
- [GetSpellInfo(16987)] = 16987, -- Darkspear
- [GetSpellInfo(3334)] = 3334, -- Green Iron Boots
- [GetSpellInfo(25183)] = 25183, -- Shadow Weakness
- [GetSpellInfo(11048)] = 11048, -- Perm. Illusion Bishop Tyriona
- [GetSpellInfo(10681)] = 10681, -- Summon Cockatoo
- [GetSpellInfo(24365)] = 24365, -- Mageblood Potion
- [GetSpellInfo(11416)] = 11416, -- Portal: Ironforge
- [GetSpellInfo(23628)] = 23628, -- Heavy Timbermaw Belt
- [GetSpellInfo(10798)] = 10798, -- Obsidian Raptor
- [GetSpellInfo(8802)] = 8802, -- Crimson Silk Robe
- [GetSpellInfo(24703)] = 24703, -- Dreamscale Breastplate
- [GetSpellInfo(10675)] = 10675, -- Summon Maine Coon
- [GetSpellInfo(6700)] = 6700, -- Dimensional Portal
- [GetSpellInfo(7624)] = 7624, -- White Linen Robe
- [GetSpellInfo(16336)] = 16336, -- Haunting Phantoms
- [GetSpellInfo(15915)] = 15915, -- Spiced Chili Crab
- [GetSpellInfo(10228)] = 10228, -- Greater Invisibility
- [GetSpellInfo(23653)] = 23653, -- Nightfall
- [GetSpellInfo(11443)] = 11443, -- Cripple
- [GetSpellInfo(11435)] = 11435, -- Create Mallet of Zul'Farrak
- [GetSpellInfo(21646)] = 21646, -- Conjure Circle of Calling
- [GetSpellInfo(9092)] = 9092, -- Flesh Eating Worm
- [GetSpellInfo(20757)] = 20757, -- Create Soulstone (Major)
- [GetSpellInfo(3337)] = 3337, -- Heavy Grinding Stone
- [GetSpellInfo(16644)] = 16644, -- Thorium Bracers
- [GetSpellInfo(25178)] = 25178, -- Frost Weakness
- [GetSpellInfo(5784)] = 5784, -- Summon Felsteed
- [GetSpellInfo(19794)] = 19794, -- Spellpower Goggles Xtreme Plus
- [GetSpellInfo(2163)] = 2163, -- White Leather Jerkin
- [GetSpellInfo(3763)] = 3763, -- Fine Leather Belt
- [GetSpellInfo(16084)] = 16084, -- Mottled Red Raptor
- [GetSpellInfo(10533)] = 10533, -- Tough Scorpid Bracers
- [GetSpellInfo(8677)] = 8677, -- Summon Effect
- [GetSpellInfo(21355)] = 21355, -- Planting Guse's Beacon
- [GetSpellInfo(9595)] = 9595, -- Attach Shaft to Medallion
- [GetSpellInfo(17235)] = 17235, -- Raise Undead Scarab
- [GetSpellInfo(15050)] = 15050, -- Psychometry
- [GetSpellInfo(28394)] = 28394, -- Reputation - Ratchet +500
- [GetSpellInfo(10568)] = 10568, -- Tough Scorpid Leggings
- [GetSpellInfo(30297)] = 30297, -- Heightened Senses
- [GetSpellInfo(8348)] = 8348, -- Julie's Blessing
- [GetSpellInfo(10793)] = 10793, -- Striped Nightsaber
- [GetSpellInfo(7638)] = 7638, -- Potion Toss
- [GetSpellInfo(10207)] = 10207, -- Scorch
- [GetSpellInfo(2641)] = 2641, -- Dismiss Pet
- [GetSpellInfo(1940)] = 1940, -- Rocket Blast
- [GetSpellInfo(9208)] = 9208, -- Swift Boots
- [GetSpellInfo(22567)] = 22567, -- Summon Ar'lia
- [GetSpellInfo(7124)] = 7124, -- Arugal's Gift
- [GetSpellInfo(19086)] = 19086, -- Ironfeather Breastplate
- [GetSpellInfo(27660)] = 27660, -- Big Bag of Enchantment
- [GetSpellInfo(23251)] = 23251, -- Swift Timber Wolf
- [GetSpellInfo(468)] = 468, -- White Stallion
- [GetSpellInfo(2667)] = 2667, -- Runed Copper Breastplate
- [GetSpellInfo(21403)] = 21403, -- Ryson's All Seeing Eye
- [GetSpellInfo(10096)] = 10096, -- Shrink
- [GetSpellInfo(16562)] = 16562, -- Urok Minions Vanish
- [GetSpellInfo(8776)] = 8776, -- Linen Belt
- [GetSpellInfo(2840)] = 2840, -- Creeping Anguish
- [GetSpellInfo(12806)] = 12806, -- Getting Tide Pool Sample #3
- [GetSpellInfo(3863)] = 3863, -- Spider Belt
- [GetSpellInfo(12614)] = 12614, -- Mithril Heavy-bore Rifle
- [GetSpellInfo(7078)] = 7078, -- Simple Teleport Group
- [GetSpellInfo(9232)] = 9232, -- Scarlet Resurrection
- [GetSpellInfo(13524)] = 13524, -- Curse of Stalvan
- [GetSpellInfo(3924)] = 3924, -- Copper Tube
- [GetSpellInfo(21143)] = 21143, -- Gingerbread Cookie
- [GetSpellInfo(22990)] = 22990, -- The Forming
- [GetSpellInfo(28207)] = 28207, -- Glacial Vest
- [GetSpellInfo(22810)] = 22810, -- Opening - No Text
- [GetSpellInfo(9201)] = 9201, -- Dusky Bracers
- [GetSpellInfo(11464)] = 11464, -- Invisibility Potion
- [GetSpellInfo(28482)] = 28482, -- Sylvan Shoulders
- [GetSpellInfo(8489)] = 8489, -- Red Swashbuckler's Shirt
- [GetSpellInfo(28487)] = 28487, -- Summon Terky
- [GetSpellInfo(20201)] = 20201, -- Arcanite Rod
- [GetSpellInfo(10001)] = 10001, -- Big Black Mace
- [GetSpellInfo(28224)] = 28224, -- Icy Scale Bracers
- [GetSpellInfo(22922)] = 22922, -- Mongoose Boots
- [GetSpellInfo(8598)] = 8598, -- Lightning Blast
- [GetSpellInfo(16072)] = 16072, -- Purify and Place Food
- [GetSpellInfo(12906)] = 12906, -- Gnomish Battle Chicken
- [GetSpellInfo(4971)] = 4971, -- Healing Ward
- [GetSpellInfo(23012)] = 23012, -- Summon Orphan
- [GetSpellInfo(17576)] = 17576, -- Greater Nature Protection Potion
- [GetSpellInfo(23071)] = 23071, -- Truesilver Transformer
- [GetSpellInfo(2335)] = 2335, -- Swiftness Potion
- [GetSpellInfo(17014)] = 17014, -- Bone Shards
- [GetSpellInfo(3975)] = 3975, -- Standard Scope
- [GetSpellInfo(8762)] = 8762, -- Silk Headband
- [GetSpellInfo(6413)] = 6413, -- Scorpid Surprise
- [GetSpellInfo(7221)] = 7221, -- Iron Shield Spike
- [GetSpellInfo(9858)] = 9858, -- Regrowth
- [GetSpellInfo(11448)] = 11448, -- Greater Mana Potion
- [GetSpellInfo(18238)] = 18238, -- Spotted Yellowtail
- [GetSpellInfo(16138)] = 16138, -- Sharpen Blade V
- [GetSpellInfo(19079)] = 19079, -- Stormshroud Armor
- [GetSpellInfo(7084)] = 7084, -- Damage Car
- [GetSpellInfo(5244)] = 5244, -- Kodo Hide Bag
- [GetSpellInfo(6982)] = 6982, -- Gust of Wind
- [GetSpellInfo(3757)] = 3757, -- Woolen Bag
- [GetSpellInfo(10487)] = 10487, -- Thick Armor Kit
- [GetSpellInfo(16742)] = 16742, -- Enchanted Thorium Helm
- [GetSpellInfo(12083)] = 12083, -- Stormcloth Headband
- [GetSpellInfo(25952)] = 25952, -- Reindeer Dust Effect
- [GetSpellInfo(27552)] = 27552, -- Cupid's Arrow
- [GetSpellInfo(24885)] = 24885, -- Create Crest of Beckoning: Air
- [GetSpellInfo(24221)] = 24221, -- Quest - Teleport Spawn-out
- [GetSpellInfo(2741)] = 2741, -- Bronze Axe
- [GetSpellInfo(470)] = 470, -- Black Stallion
- [GetSpellInfo(6957)] = 6957, -- Frostmane Strength
- [GetSpellInfo(16655)] = 16655, -- Fiery Plate Gauntlets
- [GetSpellInfo(9456)] = 9456, -- Tharnariun Cure 1
- [GetSpellInfo(25181)] = 25181, -- Arcane Weakness
- [GetSpellInfo(15048)] = 15048, -- Summon Bomb
- [GetSpellInfo(9912)] = 9912, -- Wrath
- [GetSpellInfo(18666)] = 18666, -- Corrupt Redpath
- [GetSpellInfo(3779)] = 3779, -- Barbaric Belt
- [GetSpellInfo(22681)] = 22681, -- Shadowblink
- [GetSpellInfo(10054)] = 10054, -- Conjure Mana Ruby
- [GetSpellInfo(8606)] = 8606, -- Summon Cyclonian
- [GetSpellInfo(20269)] = 20269, -- Enchanted Gaea Seed
- [GetSpellInfo(23312)] = 23312, -- Time Lapse
- [GetSpellInfo(5264)] = 5264, -- South Seas Pirate Disguise
- [GetSpellInfo(19873)] = 19873, -- Destroy Egg
- [GetSpellInfo(19057)] = 19057, -- Armor +40
- [GetSpellInfo(25031)] = 25031, -- Shoot Missile
- [GetSpellInfo(2540)] = 2540, -- Roasted Boar Meat
- [GetSpellInfo(16613)] = 16613, -- Displacing Temporal Rift
- [GetSpellInfo(23431)] = 23431, -- Summon Leatherback Snapjaw
- [GetSpellInfo(19059)] = 19059, -- Volcanic Leggings
- [GetSpellInfo(6949)] = 6949, -- Weak Frostbolt
- [GetSpellInfo(23338)] = 23338, -- Swift Stormsaber
- [GetSpellInfo(19055)] = 19055, -- Runic Leather Gauntlets
- [GetSpellInfo(16075)] = 16075, -- Throw Axe
- [GetSpellInfo(18449)] = 18449, -- Runecloth Shoulders
- [GetSpellInfo(3363)] = 3363, -- Summon Riding Gryphon
- [GetSpellInfo(6576)] = 6576, -- Intimidating Growl
- [GetSpellInfo(28393)] = 28393, -- Reputation - Booty Bay +500
- [GetSpellInfo(24649)] = 24649, -- Thousand Blades
- [GetSpellInfo(23666)] = 23666, -- Flarecore Robe
- [GetSpellInfo(10796)] = 10796, -- Turquoise Raptor
- [GetSpellInfo(19093)] = 19093, -- Onyxia Scale Cloak
- [GetSpellInfo(8774)] = 8774, -- Green Silken Shoulders
- [GetSpellInfo(9657)] = 9657, -- Shadow Shell
- [GetSpellInfo(3930)] = 3930, -- Crafted Heavy Shot
- [GetSpellInfo(3207)] = 3207, -- Sol U
- [GetSpellInfo(7421)] = 7421, -- Runed Copper Rod
- [GetSpellInfo(17580)] = 17580, -- Major Mana Potion
- [GetSpellInfo(3921)] = 3921, -- Deprecated Solid Shot
- [GetSpellInfo(9771)] = 9771, -- Radiation Bolt
- [GetSpellInfo(2399)] = 2399, -- Green Woolen Vest
- [GetSpellInfo(22756)] = 22756, -- Sharpen Weapon - Critical
- [GetSpellInfo(13262)] = 13262, -- Disenchant
- [GetSpellInfo(11202)] = 11202, -- Crippling Poison
- [GetSpellInfo(10674)] = 10674, -- Summon Cornish Rex
- [GetSpellInfo(11790)] = 11790, -- Poison Cloud
- [GetSpellInfo(11963)] = 11963, -- Enfeeble
- [GetSpellInfo(690)] = 690, -- Firebolt II
- [GetSpellInfo(12062)] = 12062, -- Stormcloth Pants
- [GetSpellInfo(23241)] = 23241, -- Swift Blue Raptor
- [GetSpellInfo(16642)] = 16642, -- Thorium Armor
- [GetSpellInfo(7795)] = 7795, -- Runed Silver Rod
- [GetSpellInfo(2645)] = 2645, -- Ghost Wolf
- [GetSpellInfo(26423)] = 26423, -- Blue Rocket Cluster
- [GetSpellInfo(26087)] = 26087, -- Core Felcloth Bag
- [GetSpellInfo(24913)] = 24913, -- Darkrune Helm
- [GetSpellInfo(9743)] = 9743, -- Delete Me
- [GetSpellInfo(7077)] = 7077, -- Simple Teleport
- [GetSpellInfo(3850)] = 3850, -- Heavy Woolen Pants
- [GetSpellInfo(18375)] = 18375, -- Aynasha's Arrow
- [GetSpellInfo(693)] = 693, -- Create Soulstone (Minor)
- [GetSpellInfo(474)] = 474, -- Fumble
- [GetSpellInfo(3770)] = 3770, -- Toughened Leather Gloves
- [GetSpellInfo(3326)] = 3326, -- Coarse Grinding Stone
- [GetSpellInfo(23082)] = 23082, -- Ultra-Flash Shadow Reflector
- [GetSpellInfo(427)] = 427, -- Teleport Monastery
- [GetSpellInfo(20650)] = 20650, -- Thick Leather
- [GetSpellInfo(13399)] = 13399, -- Cultivate Packet of Seeds
- [GetSpellInfo(2664)] = 2664, -- Runed Copper Bracers
- [GetSpellInfo(3842)] = 3842, -- Handstitched Linen Britches
- [GetSpellInfo(17455)] = 17455, -- Purple Mechanostrider
- [GetSpellInfo(3562)] = 3562, -- Teleport: Ironforge
- [GetSpellInfo(10705)] = 10705, -- Summon Eagle Owl
- [GetSpellInfo(3498)] = 3498, -- Massive Iron Axe
- [GetSpellInfo(3957)] = 3957, -- Ice Deflector
- [GetSpellInfo(15648)] = 15648, -- Summon Corrupted Kitten
- [GetSpellInfo(24368)] = 24368, -- Major Troll's Blood Potion
- [GetSpellInfo(13548)] = 13548, -- Summon Farm Chicken
- [GetSpellInfo(2167)] = 2167, -- Dark Leather Boots
- [GetSpellInfo(66)] = 66, -- Lesser Invisibility
- [GetSpellInfo(16988)] = 16988, -- Hammer of the Titans
- [GetSpellInfo(15664)] = 15664, -- Venom Spit
- [GetSpellInfo(1056)] = 1056, -- Slow Poison II
- [GetSpellInfo(4980)] = 4980, -- Quick Frost Ward
- [GetSpellInfo(11131)] = 11131, -- Icicle
- [GetSpellInfo(9157)] = 9157, -- Create Mage's Robe
- [GetSpellInfo(7135)] = 7135, -- Dark Leather Pants
- [GetSpellInfo(24124)] = 24124, -- Blood Tiger Breastplate
- [GetSpellInfo(12900)] = 12900, -- Mobile Alarm
- [GetSpellInfo(23079)] = 23079, -- Major Recombobulator
- [GetSpellInfo(28898)] = 28898, -- Blessed Wizard Oil
- [GetSpellInfo(10482)] = 10482, -- Cured Thick Hide
- [GetSpellInfo(16429)] = 16429, -- Piercing Shadow
- [GetSpellInfo(10795)] = 10795, -- Ivory Raptor
- [GetSpellInfo(7133)] = 7133, -- Fine Leather Pants
- [GetSpellInfo(23136)] = 23136, -- Release J'eevee
- [GetSpellInfo(5106)] = 5106, -- Crystal Flash
- [GetSpellInfo(3115)] = 3115, -- Rough Weightstone
- [GetSpellInfo(3230)] = 3230, -- Elixir of Minor Agility
- [GetSpellInfo(28739)] = 28739, -- Summon Mr. Wiggles
- [GetSpellInfo(11761)] = 11761, -- Scorpid Sample
- [GetSpellInfo(8986)] = 8986, -- Summon Illusionary Phantasm
- [GetSpellInfo(4526)] = 4526, -- Mass Dispell
- [GetSpellInfo(428)] = 428, -- Teleport Moonbrook
- [GetSpellInfo(18989)] = 18989, -- Gray Kodo
- [GetSpellInfo(3944)] = 3944, -- Flame Deflector
- [GetSpellInfo(134)] = 134, -- Fire Shield
- [GetSpellInfo(22724)] = 22724, -- Black War Wolf
- [GetSpellInfo(23008)] = 23008, -- Powerful Seaforium Charge
- [GetSpellInfo(6201)] = 6201, -- Create Healthstone (Minor)
- [GetSpellInfo(3407)] = 3407, -- Rune of Opening
- [GetSpellInfo(6487)] = 6487, -- Ilkrud's Guardians
- [GetSpellInfo(3173)] = 3173, -- Lesser Mana Potion
- [GetSpellInfo(16989)] = 16989, -- Planting Banner
- [GetSpellInfo(18952)] = 18952, -- Opening Termite Barrel
- [GetSpellInfo(10564)] = 10564, -- Tough Scorpid Shoulders
- [GetSpellInfo(5407)] = 5407, -- Segra Darkthorn Effect
- [GetSpellInfo(20804)] = 20804, -- Triage
- [GetSpellInfo(23706)] = 23706, -- Golden Mantle of the Dawn
- [GetSpellInfo(8272)] = 8272, -- Mind Tremor
- [GetSpellInfo(6458)] = 6458, -- Ornate Spyglass
- [GetSpellInfo(23077)] = 23077, -- Gyrofreeze Ice Reflector
- [GetSpellInfo(16732)] = 16732, -- Runic Plate Leggings
- [GetSpellInfo(3848)] = 3848, -- Double-stitched Woolen Shoulders
- [GetSpellInfo(2385)] = 2385, -- Brown Linen Vest
- [GetSpellInfo(9513)] = 9513, -- Thistle Tea
- [GetSpellInfo(11468)] = 11468, -- Elixir of Dream Vision
- [GetSpellInfo(8040)] = 8040, -- Druid's Slumber
- [GetSpellInfo(2658)] = 2658, -- Smelt Silver
- [GetSpellInfo(24141)] = 24141, -- Darksoul Shoulders
- [GetSpellInfo(22727)] = 22727, -- Core Armor Kit
- [GetSpellInfo(24302)] = 24302, -- Eternium Fishing Line
- [GetSpellInfo(3774)] = 3774, -- Green Leather Belt
- [GetSpellInfo(110)] = 110, -- Spell Deflection (NYI)
- [GetSpellInfo(3933)] = 3933, -- Small Seaforium Charge
- [GetSpellInfo(457)] = 457, -- Feeblemind
- [GetSpellInfo(2333)] = 2333, -- Elixir of Lesser Agility
- [GetSpellInfo(11792)] = 11792, -- Opening Cage
- [GetSpellInfo(18436)] = 18436, -- Robe of Winter Night
- [GetSpellInfo(22723)] = 22723, -- Black War Tiger
- [GetSpellInfo(18451)] = 18451, -- Felcloth Robe
- [GetSpellInfo(26427)] = 26427, -- Large Green Rocket Cluster
- [GetSpellInfo(9206)] = 9206, -- Dusky Belt
- [GetSpellInfo(7643)] = 7643, -- Greater Adept's Robe
- [GetSpellInfo(3175)] = 3175, -- Limited Invulnerability Potion
- [GetSpellInfo(7437)] = 7437, -- Break Stuff
- [GetSpellInfo(3865)] = 3865, -- Bolt of Mageweave
- [GetSpellInfo(11802)] = 11802, -- Dark Iron Land Mine
- [GetSpellInfo(17572)] = 17572, -- Purification Potion
- [GetSpellInfo(23664)] = 23664, -- Argent Boots
- [GetSpellInfo(26403)] = 26403, -- Festive Red Dress
- [GetSpellInfo(24399)] = 24399, -- Dark Iron Boots
- [GetSpellInfo(8772)] = 8772, -- Crimson Silk Belt
- [GetSpellInfo(9461)] = 9461, -- Summon Swamp Ooze
- [GetSpellInfo(26298)] = 26298, -- Create Firework Rocket Launcher
- [GetSpellInfo(17638)] = 17638, -- Flask of Chromatic Resistance
- [GetSpellInfo(16728)] = 16728, -- Helm of the Great Chief
- [GetSpellInfo(3307)] = 3307, -- Smelt Iron
- [GetSpellInfo(17180)] = 17180, -- Enchanted Thorium
- [GetSpellInfo(19561)] = 19561, -- Summon Gnashjaw
- [GetSpellInfo(10418)] = 10418, -- Arugal spawn-in spell
- [GetSpellInfo(24923)] = 24923, -- Honor Points +398
- [GetSpellInfo(10684)] = 10684, -- Summon Senegal
- [GetSpellInfo(3488)] = 3488, -- Felstrom Resurrection
- [GetSpellInfo(10619)] = 10619, -- Dragonscale Gauntlets
- [GetSpellInfo(24258)] = 24258, -- Quest - Troll Hero Summon Visual
- [GetSpellInfo(12081)] = 12081, -- Admiral's Hat
- [GetSpellInfo(24194)] = 24194, -- Uther's Tribute
- [GetSpellInfo(20549)] = 20549, -- War Stomp
- [GetSpellInfo(23509)] = 23509, -- Frostwolf Howler
- [GetSpellInfo(23042)] = 23042, -- Call Benediction
- [GetSpellInfo(11757)] = 11757, -- Digging for Cobalt
- [GetSpellInfo(9070)] = 9070, -- Black Whelp Cloak
- [GetSpellInfo(16053)] = 16053, -- Dominion of Soul
- [GetSpellInfo(5262)] = 5262, -- Fanatic Blade
- [GetSpellInfo(22594)] = 22594, -- Frost Mantle of the Dawn
- [GetSpellInfo(11759)] = 11759, -- Basilisk Sample
- [GetSpellInfo(4954)] = 4954, -- Break Tool
- [GetSpellInfo(18990)] = 18990, -- Brown Kodo
- [GetSpellInfo(15119)] = 15119, -- Apply Seduction Gland
- [GetSpellInfo(19092)] = 19092, -- Wicked Leather Belt
- [GetSpellInfo(16665)] = 16665, -- Runic Plate Boots
- [GetSpellInfo(2053)] = 2053, -- Lesser Heal
- [GetSpellInfo(18419)] = 18419, -- Felcloth Pants
- [GetSpellInfo(25793)] = 25793, -- Demon Summoning Torch
- [GetSpellInfo(6471)] = 6471, -- Tiny Iron Key
- [GetSpellInfo(3914)] = 3914, -- Brown Linen Pants
- [GetSpellInfo(19795)] = 19795, -- Thorium Tube
- [GetSpellInfo(9961)] = 9961, -- Mithril Coif
- [GetSpellInfo(25030)] = 25030, -- Shoot Rocket
- [GetSpellInfo(26656)] = 26656, -- Summon Black Qiraji Battle Tank
- [GetSpellInfo(10546)] = 10546, -- Wild Leather Helmet
- [GetSpellInfo(10499)] = 10499, -- Nightscape Tunic
- [GetSpellInfo(12595)] = 12595, -- Mithril Blunderbuss
- [GetSpellInfo(17923)] = 17923, -- Searing Pain
- [GetSpellInfo(8812)] = 8812, -- Heal
- [GetSpellInfo(18447)] = 18447, -- Mooncloth Vest
- [GetSpellInfo(7057)] = 7057, -- Haunting Spirits
- [GetSpellInfo(7918)] = 7918, -- Shoot Gun
- [GetSpellInfo(9148)] = 9148, -- Pilferer's Gloves
- [GetSpellInfo(24242)] = 24242, -- Swift Razzashi Raptor
- [GetSpellInfo(7106)] = 7106, -- Dark Restore
- [GetSpellInfo(7893)] = 7893, -- Stylish Green Shirt
- [GetSpellInfo(7258)] = 7258, -- Frost Protection Potion
- [GetSpellInfo(24848)] = 24848, -- Spitfire Breastplate
- [GetSpellInfo(8795)] = 8795, -- Azure Shoulders
- [GetSpellInfo(11840)] = 11840, -- Summon Edana Hatetalon
- [GetSpellInfo(10015)] = 10015, -- Truesilver Champion
- [GetSpellInfo(271)] = 271, -- Call of the Void
- [GetSpellInfo(867)] = 867, -- Fumble III
- [GetSpellInfo(13028)] = 13028, -- Goldthorn Tea
- [GetSpellInfo(18976)] = 18976, -- Self Resurrection
- [GetSpellInfo(17563)] = 17563, -- Transmute: Undeath to Water
- [GetSpellInfo(3294)] = 3294, -- Thick War Axe
- [GetSpellInfo(17459)] = 17459, -- Icy Blue Mechanostrider
- [GetSpellInfo(29480)] = 29480, -- Fortitude of the Scourge
- [GetSpellInfo(3859)] = 3859, -- Azure Silk Vest
- [GetSpellInfo(2738)] = 2738, -- Copper Axe
- [GetSpellInfo(26010)] = 26010, -- Summon Tranquil Mechanical Yeti
- [GetSpellInfo(22721)] = 22721, -- Black War Raptor
- [GetSpellInfo(25298)] = 25298, -- Starfire
- [GetSpellInfo(2963)] = 2963, -- Bolt of Linen Cloth
- [GetSpellInfo(16983)] = 16983, -- Serenity
- [GetSpellInfo(9059)] = 9059, -- Handstitched Leather Bracers
- [GetSpellInfo(19435)] = 19435, -- Mooncloth Boots
- [GetSpellInfo(24421)] = 24421, -- Zandalar Signet of Mojo
- [GetSpellInfo(2168)] = 2168, -- Dark Leather Cloak
- [GetSpellInfo(3964)] = 3964, -- Deprecated BKP "Impact" Shot
- [GetSpellInfo(16992)] = 16992, -- Frostguard
- [GetSpellInfo(11760)] = 11760, -- Hyena Sample
- [GetSpellInfo(26055)] = 26055, -- Summon Yellow Qiraji Battle Tank
- [GetSpellInfo(4075)] = 4075, -- Large Seaforium Charge
- [GetSpellInfo(7992)] = 7992, -- Slowing Poison
- [GetSpellInfo(13628)] = 13628, -- Runed Golden Rod
- [GetSpellInfo(23192)] = 23192, -- Forming Rhok'delar
- [GetSpellInfo(3496)] = 3496, -- Moonsteel Broadsword
- [GetSpellInfo(3561)] = 3561, -- Teleport: Stormwind
- [GetSpellInfo(21939)] = 21939, -- Create Scepter of Celebras
- [GetSpellInfo(19074)] = 19074, -- Frostsaber Leggings
- [GetSpellInfo(26381)] = 26381, -- Burrow
- [GetSpellInfo(16729)] = 16729, -- Lionheart Helm
- [GetSpellInfo(19791)] = 19791, -- Thorium Widget
- [GetSpellInfo(29333)] = 29333, -- Midsummer Sausage
- [GetSpellInfo(2660)] = 2660, -- Rough Sharpening Stone
- [GetSpellInfo(3925)] = 3925, -- Rough Boomstick
- [GetSpellInfo(19075)] = 19075, -- Heavy Scorpid Leggings
- [GetSpellInfo(22866)] = 22866, -- Belt of the Archmage
- [GetSpellInfo(8690)] = 8690, -- Hearthstone
- [GetSpellInfo(27890)] = 27890, -- Clone
- [GetSpellInfo(24024)] = 24024, -- Unstable Concoction
- [GetSpellInfo(982)] = 982, -- Revive Pet
- [GetSpellInfo(3777)] = 3777, -- Guardian Leather Bracers
- [GetSpellInfo(17567)] = 17567, -- Summon Blood Parrot
- [GetSpellInfo(9916)] = 9916, -- Steel Breastplate
- [GetSpellInfo(9813)] = 9813, -- Barbaric Iron Breastplate
- [GetSpellInfo(16629)] = 16629, -- Attuned Dampener
- [GetSpellInfo(10709)] = 10709, -- Summon Prairie Dog
- [GetSpellInfo(4068)] = 4068, -- Iron Grenade
- [GetSpellInfo(10617)] = 10617, -- Release Rageclaw
- [GetSpellInfo(20916)] = 20916, -- Mithril Headed Trout
- [GetSpellInfo(9993)] = 9993, -- Heavy Mithril Axe
- [GetSpellInfo(6905)] = 6905, -- Summon Illusionary Nightmare
- [GetSpellInfo(9058)] = 9058, -- Handstitched Leather Cloak
- [GetSpellInfo(8686)] = 8686, -- Instant Poison II
- [GetSpellInfo(6418)] = 6418, -- Crispy Lizard Tail
- [GetSpellInfo(25807)] = 25807, -- Great Heal
- [GetSpellInfo(26421)] = 26421, -- Large Green Rocket
- [GetSpellInfo(28732)] = 28732, -- Widow's Embrace
- [GetSpellInfo(18113)] = 18113, -- Manifestation Cleansing
- [GetSpellInfo(2835)] = 2835, -- Deadly Poison
- [GetSpellInfo(10837)] = 10837, -- Goblin Land Mine
- [GetSpellInfo(26277)] = 26277, -- Elixir of Greater Firepower
- [GetSpellInfo(513)] = 513, -- Earth Elemental
- [GetSpellInfo(13901)] = 13901, -- Arcane Bolt
- [GetSpellInfo(3449)] = 3449, -- Shadow Oil
- [GetSpellInfo(15783)] = 15783, -- Blizzard
- [GetSpellInfo(25004)] = 25004, -- Throw Nightmare Object
- [GetSpellInfo(7821)] = 7821, -- Transform Victim
- [GetSpellInfo(3678)] = 3678, -- Focusing
- [GetSpellInfo(16643)] = 16643, -- Thorium Belt
- [GetSpellInfo(24266)] = 24266, -- Gurubashi Mojo Madness
- [GetSpellInfo(19061)] = 19061, -- Living Shoulders
- [GetSpellInfo(12346)] = 12346, -- Awaken the Soulflayer
- [GetSpellInfo(6656)] = 6656, -- Remote Detonate
- [GetSpellInfo(16980)] = 16980, -- Rune Edge
- [GetSpellInfo(507)] = 507, -- Fumble II
- [GetSpellInfo(8791)] = 8791, -- Crimson Silk Vest
- [GetSpellInfo(27589)] = 27589, -- Black Grasp of the Destroyer
- [GetSpellInfo(28324)] = 28324, -- Forming Frame of Atiesh
- [GetSpellInfo(10849)] = 10849, -- Form of the Moonstalker (no invis)
- [GetSpellInfo(5206)] = 5206, -- Plant Seeds
- [GetSpellInfo(3505)] = 3505, -- Golden Scale Shoulders
- [GetSpellInfo(20737)] = 20737, -- Summon Karang's Banner
- [GetSpellInfo(16502)] = 16502, -- Release Winna's Kitten
- [GetSpellInfo(10516)] = 10516, -- Nightscape Shoulders
- [GetSpellInfo(21066)] = 21066, -- Void Bolt
- [GetSpellInfo(19097)] = 19097, -- Devilsaur Leggings
- [GetSpellInfo(12260)] = 12260, -- Rough Copper Vest
- [GetSpellInfo(23703)] = 23703, -- Might of the Timbermaw
- [GetSpellInfo(11343)] = 11343, -- Instant Poison VI
- [GetSpellInfo(3758)] = 3758, -- Green Woolen Bag
- [GetSpellInfo(697)] = 697, -- Summon Voidwalker
- [GetSpellInfo(28461)] = 28461, -- Ironvine Breastplate
- [GetSpellInfo(12074)] = 12074, -- Black Mageweave Shoulders
- [GetSpellInfo(3206)] = 3206, -- Sol H
- [GetSpellInfo(3839)] = 3839, -- Bolt of Silk Cloth
- [GetSpellInfo(3756)] = 3756, -- Embossed Leather Gloves
- [GetSpellInfo(20873)] = 20873, -- Fiery Chain Shoulders
- [GetSpellInfo(15303)] = 15303, -- DEBUG Create Samophlange Manual
- [GetSpellInfo(15463)] = 15463, -- Legendary Arcane Amalgamation
- [GetSpellInfo(10719)] = 10719, -- Summon Ribbon Snake
- [GetSpellInfo(7928)] = 7928, -- Silk Bandage
- [GetSpellInfo(443)] = 443, -- Teleport Barracks
- [GetSpellInfo(2837)] = 2837, -- Deadly Poison II
- [GetSpellInfo(8532)] = 8532, -- Aquadynamic Fish Lens
- [GetSpellInfo(11419)] = 11419, -- Portal: Darnassus
- [GetSpellInfo(8617)] = 8617, -- Skinning
- [GetSpellInfo(17646)] = 17646, -- Summon Onyxia Whelp
- [GetSpellInfo(16647)] = 16647, -- Imperial Plate Belt
- [GetSpellInfo(26416)] = 26416, -- Small Blue Rocket
- [GetSpellInfo(11472)] = 11472, -- Elixir of Giants
- [GetSpellInfo(2396)] = 2396, -- Green Linen Shirt
- [GetSpellInfo(19071)] = 19071, -- Wicked Leather Headband
- [GetSpellInfo(6703)] = 6703, -- Murloc Scale Breastplate
- [GetSpellInfo(12719)] = 12719, -- Explosive Arrow
- [GetSpellInfo(3429)] = 3429, -- Plague Mind
- [GetSpellInfo(877)] = 877, -- Elemental Fury
- [GetSpellInfo(18244)] = 18244, -- Poached Sunscale Salmon
- [GetSpellInfo(13982)] = 13982, -- Bael'Gar's Fiery Essence
- [GetSpellInfo(7761)] = 7761, -- Shared Bonds
- [GetSpellInfo(3960)] = 3960, -- Portable Bronze Mortar
- [GetSpellInfo(28353)] = 28353, -- Raise Dead
- [GetSpellInfo(18559)] = 18559, -- Demon Pick
- [GetSpellInfo(9437)] = 9437, -- Placing Bear Trap
- [GetSpellInfo(6702)] = 6702, -- Murloc Scale Belt
- [GetSpellInfo(23221)] = 23221, -- Swift Frostsaber
- [GetSpellInfo(3117)] = 3117, -- Heavy Weightstone
- [GetSpellInfo(3659)] = 3659, -- Mage Sight
- [GetSpellInfo(20872)] = 20872, -- Fiery Chain Girdle
- [GetSpellInfo(16599)] = 16599, -- Blessing of Shahram
- [GetSpellInfo(15033)] = 15033, -- Summon Ancient Spirits
- [GetSpellInfo(26442)] = 26442, -- Firework Launcher
- [GetSpellInfo(3504)] = 3504, -- Green Iron Shoulders
- [GetSpellInfo(25037)] = 25037, -- Rumsey Rum Light
- [GetSpellInfo(3721)] = 3721, -- Teleport Altar of the Tides
- [GetSpellInfo(28891)] = 28891, -- Consecrated Weapon
- [GetSpellInfo(3858)] = 3858, -- Shadow Hood
- [GetSpellInfo(28148)] = 28148, -- Portal: Karazhan
- [GetSpellInfo(24091)] = 24091, -- Bloodvine Vest
- [GetSpellInfo(23069)] = 23069, -- EZ-Thro Dynamite II
- [GetSpellInfo(19773)] = 19773, -- Elemental Fire
- [GetSpellInfo(10013)] = 10013, -- Ebon Shiv
- [GetSpellInfo(3332)] = 3332, -- Slow Poison
- [GetSpellInfo(19830)] = 19830, -- Arcanite Dragonling
- [GetSpellInfo(2675)] = 2675, -- Shining Silver Breastplate
- [GetSpellInfo(22906)] = 22906, -- Plunging Blade into Onyxia
- [GetSpellInfo(12259)] = 12259, -- Silvered Bronze Leggings
- [GetSpellInfo(23629)] = 23629, -- Heavy Timbermaw Boots
- [GetSpellInfo(3172)] = 3172, -- Minor Magic Resistance Potion
- [GetSpellInfo(10005)] = 10005, -- Dazzling Mithril Rapier
- [GetSpellInfo(5213)] = 5213, -- Molten Metal
- [GetSpellInfo(10525)] = 10525, -- Tough Scorpid Breastplate
- [GetSpellInfo(23123)] = 23123, -- Cairne's Hoofprint
- [GetSpellInfo(17015)] = 17015, -- Destroy Tent
- [GetSpellInfo(24896)] = 24896, -- Create Scepter of Beckoning: Air
- [GetSpellInfo(23486)] = 23486, -- Dimensional Ripper - Everlook
- [GetSpellInfo(11537)] = 11537, -- Charge Stave of Equinex
- [GetSpellInfo(9920)] = 9920, -- Solid Grinding Stone
- [GetSpellInfo(10685)] = 10685, -- Summon Ancona
- [GetSpellInfo(17561)] = 17561, -- Transmute: Earth to Water
- [GetSpellInfo(27588)] = 27588, -- Light Obsidian Belt
- [GetSpellInfo(8797)] = 8797, -- Earthen Silk Belt
- [GetSpellInfo(16639)] = 16639, -- Dense Grinding Stone
- [GetSpellInfo(2543)] = 2543, -- Westfall Stew
- [GetSpellInfo(8334)] = 8334, -- Practice Lock
- [GetSpellInfo(17187)] = 17187, -- Transmute: Arcanite
- [GetSpellInfo(7181)] = 7181, -- Greater Healing Potion
- [GetSpellInfo(20777)] = 20777, -- Ancestral Spirit
- [GetSpellInfo(20752)] = 20752, -- Create Soulstone (Lesser)
- [GetSpellInfo(10717)] = 10717, -- Summon Crimson Snake
- [GetSpellInfo(7487)] = 7487, -- Call Bleak Worg
- [GetSpellInfo(12534)] = 12534, -- Flames of Retribution
- [GetSpellInfo(26103)] = 26103, -- Sweep
- [GetSpellInfo(21728)] = 21728, -- Planting Ichman's Beacon
- [GetSpellInfo(25159)] = 25159, -- Call Prismatic Barrier
- [GetSpellInfo(17166)] = 17166, -- Release Umi's Yeti
- [GetSpellInfo(16597)] = 16597, -- Curse of Shahram
- [GetSpellInfo(13895)] = 13895, -- Summon Spawn of Bael'Gar
- [GetSpellInfo(4153)] = 4153, -- Guile of the Raptor
- [GetSpellInfo(11433)] = 11433, -- Death & Decay
- [GetSpellInfo(3776)] = 3776, -- Green Leather Bracers
- [GetSpellInfo(968)] = 968, -- Feral Spirit II
- [GetSpellInfo(5166)] = 5166, -- Harvest Silithid Egg
- [GetSpellInfo(3765)] = 3765, -- Dark Leather Gloves
- [GetSpellInfo(3396)] = 3396, -- Corrosive Poison
- [GetSpellInfo(23339)] = 23339, -- Wing Buffet
- [GetSpellInfo(7837)] = 7837, -- Fire Oil
- [GetSpellInfo(15292)] = 15292, -- Dark Iron Pulverizer
- [GetSpellInfo(2662)] = 2662, -- Copper Chain Pants
- [GetSpellInfo(20530)] = 20530, -- Bind Chapter 2
- [GetSpellInfo(15114)] = 15114, -- Summon Illusionary Dreamwatchers
- [GetSpellInfo(8398)] = 8398, -- Frostbolt Volley
- [GetSpellInfo(3845)] = 3845, -- Soft-soled Linen Boots
- [GetSpellInfo(18809)] = 18809, -- Pyroblast
- [GetSpellInfo(6250)] = 6250, -- Fire Cannon
- [GetSpellInfo(23453)] = 23453, -- Gnomish Transporter
- [GetSpellInfo(12068)] = 12068, -- Stormcloth Vest
- [GetSpellInfo(2547)] = 2547, -- Redridge Goulash
- [GetSpellInfo(9060)] = 9060, -- Light Leather Quiver
- [GetSpellInfo(12624)] = 12624, -- Mithril Mechanical Dragonling
- [GetSpellInfo(11661)] = 11661, -- Shadow Bolt
- [GetSpellInfo(12460)] = 12460, -- Sniper Scope
- [GetSpellInfo(555)] = 555, -- Feral Spirit
- [GetSpellInfo(6897)] = 6897, -- Blue Ram
- [GetSpellInfo(6692)] = 6692, -- Robes of Arcana
- [GetSpellInfo(24377)] = 24377, -- Destroy Bijou
- [GetSpellInfo(13229)] = 13229, -- Wound Poison III
- [GetSpellInfo(3655)] = 3655, -- Summon Shield Guard
- [GetSpellInfo(18446)] = 18446, -- Wizardweave Robe
- [GetSpellInfo(3856)] = 3856, -- Spider Silk Slippers
- [GetSpellInfo(7639)] = 7639, -- Blue Overalls
- [GetSpellInfo(9614)] = 9614, -- Rift Beacon
- [GetSpellInfo(18404)] = 18404, -- Frostweave Robe
- [GetSpellInfo(7068)] = 7068, -- Veil of Shadow
- [GetSpellInfo(15712)] = 15712, -- Linken's Boomerang
- [GetSpellInfo(28209)] = 28209, -- Glacial Wrists
- [GetSpellInfo(7791)] = 7791, -- Teleport
- [GetSpellInfo(7935)] = 7935, -- Strong Anti-Venom
- [GetSpellInfo(3871)] = 3871, -- Formal White Shirt
- [GetSpellInfo(11654)] = 11654, -- Call of Sul'thraze
- [GetSpellInfo(7967)] = 7967, -- Naralex's Nightmare
- [GetSpellInfo(12061)] = 12061, -- Orange Mageweave Shirt
- [GetSpellInfo(6661)] = 6661, -- Barbaric Harness
- [GetSpellInfo(7155)] = 7155, -- CreatureSpecial
- [GetSpellInfo(2397)] = 2397, -- Reinforced Linen Cape
- [GetSpellInfo(22902)] = 22902, -- Mooncloth Robe
- [GetSpellInfo(10699)] = 10699, -- Summon Bronze Whelpling
- [GetSpellInfo(14030)] = 14030, -- Hooked Net
- [GetSpellInfo(18402)] = 18402, -- Runecloth Belt
- [GetSpellInfo(18454)] = 18454, -- Gloves of Spell Mastery
- [GetSpellInfo(8286)] = 8286, -- Summon Boar Spirit
- [GetSpellInfo(3873)] = 3873, -- Black Swashbuckler's Shirt
- [GetSpellInfo(3321)] = 3321, -- Copper Chain Vest
- [GetSpellInfo(6517)] = 6517, -- Pearl-handled Dagger
- [GetSpellInfo(34)] = 34, -- Teleport Duskwood
- [GetSpellInfo(21047)] = 21047, -- Corrosive Acid Spit
- [GetSpellInfo(15549)] = 15549, -- Chained Bolt
- [GetSpellInfo(1122)] = 1122, -- Inferno
- [GetSpellInfo(26425)] = 26425, -- Red Rocket Cluster
- [GetSpellInfo(11458)] = 11458, -- Wildvine Potion
- [GetSpellInfo(3143)] = 3143, -- Glacial Roar
- [GetSpellInfo(17474)] = 17474, -- Find Relic Fragment
- [GetSpellInfo(23140)] = 23140, -- J'eevee summons object
- [GetSpellInfo(21559)] = 21559, -- Shredder Armor Melt
- [GetSpellInfo(22909)] = 22909, -- Eye of Immol'thar
- [GetSpellInfo(3319)] = 3319, -- Copper Chain Boots
- [GetSpellInfo(24706)] = 24706, -- Toss Stink Bomb
- [GetSpellInfo(20693)] = 20693, -- Summon Lost Amulet
- [GetSpellInfo(20626)] = 20626, -- Undermine Clam Chowder
- [GetSpellInfo(9654)] = 9654, -- Jumping Lightning
- [GetSpellInfo(5137)] = 5137, -- Call of the Grave
- [GetSpellInfo(15972)] = 15972, -- Glinting Steel Dagger
- [GetSpellInfo(8766)] = 8766, -- Azure Silk Belt
- [GetSpellInfo(3764)] = 3764, -- Hillman's Leather Gloves
- [GetSpellInfo(8919)] = 8919, -- Fill Jennea's Flask
- [GetSpellInfo(11480)] = 11480, -- Transmute: Mithril to Truesilver
- [GetSpellInfo(5169)] = 5169, -- Defias Disguise
- [GetSpellInfo(3371)] = 3371, -- Blood Sausage
- [GetSpellInfo(23316)] = 23316, -- Ignite Flesh
- [GetSpellInfo(22599)] = 22599, -- Chromatic Mantle of the Dawn
- [GetSpellInfo(15748)] = 15748, -- Freeze Rookery Egg
- [GetSpellInfo(22647)] = 22647, -- Empower Pet
- [GetSpellInfo(20733)] = 20733, -- Black Arrow
- [GetSpellInfo(19788)] = 19788, -- Dense Blasting Powder
- [GetSpellInfo(8682)] = 8682, -- Fake Shot
- [GetSpellInfo(3771)] = 3771, -- Barbaric Gloves
- [GetSpellInfo(7955)] = 7955, -- Deviate Scale Belt
- [GetSpellInfo(8786)] = 8786, -- Azure Silk Cloak
- [GetSpellInfo(21648)] = 21648, -- Call to Ivus
- [GetSpellInfo(12151)] = 12151, -- Summon Atal'ai Skeleton
- [GetSpellInfo(28614)] = 28614, -- Pointy Spike
- [GetSpellInfo(7277)] = 7277, -- Harvest Swarm
- [GetSpellInfo(8282)] = 8282, -- Curse of Blood
- [GetSpellInfo(27830)] = 27830, -- Persuader
- [GetSpellInfo(3851)] = 3851, -- Phoenix Pants
- [GetSpellInfo(20874)] = 20874, -- Dark Iron Bracers
- [GetSpellInfo(19081)] = 19081, -- Chimeric Vest
- [GetSpellInfo(7259)] = 7259, -- Nature Protection Potion
- [GetSpellInfo(9744)] = 9744, -- Jarkal's Translation
- [GetSpellInfo(24874)] = 24874, -- Create Crest of Beckoning: Fire
- [GetSpellInfo(7949)] = 7949, -- Summon Viper
- [GetSpellInfo(31364)] = 31364, -- Spice Mortar
- [GetSpellInfo(24366)] = 24366, -- Greater Dreamless Sleep Potion
- [GetSpellInfo(21652)] = 21652, -- Closing
- [GetSpellInfo(1124)] = 1124, -- Hellfire II
- [GetSpellInfo(7488)] = 7488, -- Call Slavering Worg
- [GetSpellInfo(23665)] = 23665, -- Argent Shoulders
- [GetSpellInfo(7951)] = 7951, -- Toxic Spit
- [GetSpellInfo(19470)] = 19470, -- Gem of the Serpent
- [GetSpellInfo(2542)] = 2542, -- Goretusk Liver Pie
- [GetSpellInfo(895)] = 895, -- Fire Elemental
- [GetSpellInfo(23228)] = 23228, -- Swift White Steed
- [GetSpellInfo(7841)] = 7841, -- Swim Speed Potion
- [GetSpellInfo(17636)] = 17636, -- Flask of Distilled Wisdom
- [GetSpellInfo(10686)] = 10686, -- Summon Prairie Chicken
- [GetSpellInfo(10318)] = 10318, -- Holy Wrath
- [GetSpellInfo(3718)] = 3718, -- Syndicate Bomb
- [GetSpellInfo(20436)] = 20436, -- Drunken Pit Crew
- [GetSpellInfo(19103)] = 19103, -- Runic Leather Shoulders
- [GetSpellInfo(1936)] = 1936, -- Teleport Anvilmar
- [GetSpellInfo(23231)] = 23231, -- Binding Volume I
- [GetSpellInfo(10873)] = 10873, -- Red Mechanostrider
- [GetSpellInfo(20876)] = 20876, -- Dark Iron Leggings
- [GetSpellInfo(26588)] = 26588, -- Opening Greater Scarab Coffer
- [GetSpellInfo(16588)] = 16588, -- Dark Mending
- [GetSpellInfo(18410)] = 18410, -- Ghostweave Belt
- [GetSpellInfo(19084)] = 19084, -- Devilsaur Gauntlets
- [GetSpellInfo(18401)] = 18401, -- Bolt of Runecloth
- [GetSpellInfo(24264)] = 24264, -- Extinguish
- [GetSpellInfo(7920)] = 7920, -- Mebok Smart Drink
- [GetSpellInfo(20875)] = 20875, -- Rumsey Rum
- [GetSpellInfo(932)] = 932, -- Replenish Spirit II
- [GetSpellInfo(12564)] = 12564, -- Summon Treasure Horde Visual
- [GetSpellInfo(24189)] = 24189, -- Force Punch
- [GetSpellInfo(9064)] = 9064, -- Rugged Leather Pants
- [GetSpellInfo(8804)] = 8804, -- Crimson Silk Gloves
- [GetSpellInfo(22927)] = 22927, -- Hide of the Wild
- [GetSpellInfo(4962)] = 4962, -- Encasing Webs
- [GetSpellInfo(26167)] = 26167, -- Colossal Smash
- [GetSpellInfo(10697)] = 10697, -- Summon Crimson Whelpling
- [GetSpellInfo(22562)] = 22562, -- Fill Amethyst Phial
- [GetSpellInfo(9146)] = 9146, -- Herbalist's Gloves
- [GetSpellInfo(15057)] = 15057, -- Mechanical Patch Kit
- [GetSpellInfo(18408)] = 18408, -- Cindercloth Vest
- [GetSpellInfo(15781)] = 15781, -- Steel Mechanostrider
- [GetSpellInfo(12087)] = 12087, -- Stormcloth Shoulders
- [GetSpellInfo(21923)] = 21923, -- Elixir of Frost Power
- [GetSpellInfo(7364)] = 7364, -- Light Torch
- [GetSpellInfo(5668)] = 5668, -- Peasant Disguise
- [GetSpellInfo(25314)] = 25314, -- Greater Heal
- [GetSpellInfo(12619)] = 12619, -- Hi-Explosive Bomb
- [GetSpellInfo(2672)] = 2672, -- Patterned Bronze Bracers
- [GetSpellInfo(6758)] = 6758, -- Party Fever
- [GetSpellInfo(15293)] = 15293, -- Dark Iron Mail
- [GetSpellInfo(4981)] = 4981, -- Inducing Vision
- [GetSpellInfo(2336)] = 2336, -- Elixir of Tongues
- [GetSpellInfo(2362)] = 2362, -- Create Spellstone
- [GetSpellInfo(11477)] = 11477, -- Elixir of Demonslaying
- [GetSpellInfo(2659)] = 2659, -- Smelt Bronze
- [GetSpellInfo(13899)] = 13899, -- Fire Storm
- [GetSpellInfo(22808)] = 22808, -- Elixir of Greater Water Breathing
- [GetSpellInfo(24576)] = 24576, -- Chromatic Mount
- [GetSpellInfo(10706)] = 10706, -- Summon Hawk Owl
- [GetSpellInfo(2673)] = 2673, -- Silvered Bronze Breastplate
- [GetSpellInfo(2601)] = 2601, -- Fire Shield III
- [GetSpellInfo(2156)] = 2156, -- Light Winter Cloak
- [GetSpellInfo(22718)] = 22718, -- Black War Kodo
- [GetSpellInfo(3277)] = 3277, -- Wool Bandage
- [GetSpellInfo(24239)] = 24239, -- Hammer of Wrath
- [GetSpellInfo(28208)] = 28208, -- Glacial Cloak
- [GetSpellInfo(849)] = 849, -- Elemental Armor
- [GetSpellInfo(10560)] = 10560, -- Big Voodoo Pants
- [GetSpellInfo(6693)] = 6693, -- Green Silk Pack
- [GetSpellInfo(24140)] = 24140, -- Darksoul Leggings
- [GetSpellInfo(30021)] = 30021, -- Crystal Infused Bandage
- [GetSpellInfo(16798)] = 16798, -- Enchanting Lullaby
- [GetSpellInfo(8809)] = 8809, -- Slave Drain
- [GetSpellInfo(5265)] = 5265, -- Stonesplinter Trogg Disguise
- [GetSpellInfo(28222)] = 28222, -- Icy Scale Breastplate
- [GetSpellInfo(18420)] = 18420, -- Brightcloth Cloak
- [GetSpellInfo(24887)] = 24887, -- Create Crest of Beckoning: Earth
- [GetSpellInfo(4130)] = 4130, -- Banish Burning Exile
- [GetSpellInfo(2329)] = 2329, -- Elixir of Lion's Strength
- [GetSpellInfo(13478)] = 13478, -- Opening Relic Coffer
- [GetSpellInfo(13583)] = 13583, -- Curse of the Deadwood
- [GetSpellInfo(18571)] = 18571, -- Breath
- [GetSpellInfo(24891)] = 24891, -- Create Signet of Beckoning: Earth
- [GetSpellInfo(17505)] = 17505, -- Curse of Timmy
- [GetSpellInfo(9095)] = 9095, -- Cantation of Manifestation
- [GetSpellInfo(2576)] = 2576, -- Mining
- [GetSpellInfo(3979)] = 3979, -- Accurate Scope
- [GetSpellInfo(28305)] = 28305, -- Copy of Great Heal
- [GetSpellInfo(5208)] = 5208, -- Poisoned Harpoon
- [GetSpellInfo(512)] = 512, -- Chains of Ice
- [GetSpellInfo(14227)] = 14227, -- Signing
- [GetSpellInfo(26063)] = 26063, -- Ouro Submerge Visual
- [GetSpellInfo(8238)] = 8238, -- Savory Deviate Delight
- [GetSpellInfo(2831)] = 2831, -- Armor +8
- [GetSpellInfo(30732)] = 30732, -- Worm Sweep
- [GetSpellInfo(22846)] = 22846, -- Arcanum of Protection
- [GetSpellInfo(12090)] = 12090, -- Stormcloth Boots
- [GetSpellInfo(3940)] = 3940, -- Shadow Goggles
- [GetSpellInfo(17777)] = 17777, -- Create Commission
- [GetSpellInfo(12589)] = 12589, -- Mithril Tube
- [GetSpellInfo(16381)] = 16381, -- Summon Rockwing Gargoyles
- [GetSpellInfo(10712)] = 10712, -- Summon Spotted Rabbit
- [GetSpellInfo(12077)] = 12077, -- Simple Black Dress
- [GetSpellInfo(23081)] = 23081, -- Hyper-Radiant Flame Reflector
- [GetSpellInfo(7355)] = 7355, -- Stuck
- [GetSpellInfo(24962)] = 24962, -- Honor Points +138
- [GetSpellInfo(23675)] = 23675, -- Minigun
- [GetSpellInfo(5884)] = 5884, -- Banshee Curse
- [GetSpellInfo(6814)] = 6814, -- Sludge Toxin
- [GetSpellInfo(17635)] = 17635, -- Flask of the Titans
- [GetSpellInfo(3813)] = 3813, -- Small Silk Pack
- [GetSpellInfo(2401)] = 2401, -- Woolen Boots
- [GetSpellInfo(10850)] = 10850, -- Powerful Smelling Salts
- [GetSpellInfo(16664)] = 16664, -- Runic Plate Shoulders
- [GetSpellInfo(3421)] = 3421, -- Crippling Poison II
- [GetSpellInfo(28462)] = 28462, -- Ironvine Gloves
- [GetSpellInfo(8799)] = 8799, -- Crimson Silk Pantaloons
- [GetSpellInfo(9987)] = 9987, -- Bronze Battle Axe
- [GetSpellInfo(25121)] = 25121, -- Wizard Oil
- [GetSpellInfo(21945)] = 21945, -- Green Holiday Shirt
- [GetSpellInfo(18831)] = 18831, -- Conjure Lily Root
- [GetSpellInfo(6441)] = 6441, -- Explosive Shells
- [GetSpellInfo(26299)] = 26299, -- Create Cluster Rocket Launcher
- [GetSpellInfo(25840)] = 25840, -- Full Heal
- [GetSpellInfo(3372)] = 3372, -- Murloc Fin Soup
- [GetSpellInfo(17560)] = 17560, -- Transmute: Fire to Earth
- [GetSpellInfo(10507)] = 10507, -- Nightscape Headband
- [GetSpellInfo(21097)] = 21097, -- Manastorm
- [GetSpellInfo(11437)] = 11437, -- Opening Chest
- [GetSpellInfo(9937)] = 9937, -- Mithril Scale Bracers
- [GetSpellInfo(6412)] = 6412, -- Kaldorei Spider Kabob
- [GetSpellInfo(3333)] = 3333, -- Silvered Bronze Gauntlets
- [GetSpellInfo(6624)] = 6624, -- Free Action Potion
- [GetSpellInfo(16651)] = 16651, -- Thorium Shield Spike
- [GetSpellInfo(24367)] = 24367, -- Living Action Potion
- [GetSpellInfo(20513)] = 20513, -- Enchanted Resonite Crystal
- [GetSpellInfo(18457)] = 18457, -- Robe of the Archmage
- [GetSpellInfo(27871)] = 27871, -- Lightwell
- [GetSpellInfo(2657)] = 2657, -- Smelt Copper
- [GetSpellInfo(8880)] = 8880, -- Copper Dagger
- [GetSpellInfo(8593)] = 8593, -- Symbol of Life
- [GetSpellInfo(21154)] = 21154, -- Might of Ragnaros
- [GetSpellInfo(18987)] = 18987, -- Create Relic Bundle
- [GetSpellInfo(18541)] = 18541, -- Ritual of Doom Effect
- [GetSpellInfo(8243)] = 8243, -- Flash Bomb
- [GetSpellInfo(12699)] = 12699, -- Summon Screecher Spirit
- [GetSpellInfo(5159)] = 5159, -- Melt Ore
- [GetSpellInfo(24160)] = 24160, -- Syncretist's Sigil
- [GetSpellInfo(19063)] = 19063, -- Chimeric Boots
- [GetSpellInfo(3109)] = 3109, -- Presence of Death
- [GetSpellInfo(16153)] = 16153, -- Smelt Thorium
- [GetSpellInfo(28480)] = 28480, -- Sylvan Vest
- [GetSpellInfo(8780)] = 8780, -- Hands of Darkness
- [GetSpellInfo(9143)] = 9143, -- Bomb
- [GetSpellInfo(17462)] = 17462, -- Red Skeletal Horse
- [GetSpellInfo(9995)] = 9995, -- Blue Glittering Axe
- [GetSpellInfo(33)] = 33, -- Teleport Westfall
- [GetSpellInfo(28304)] = 28304, -- Copy of Healing Wave
- [GetSpellInfo(3918)] = 3918, -- Rough Blasting Powder
- [GetSpellInfo(28205)] = 28205, -- Glacial Gloves
- [GetSpellInfo(10680)] = 10680, -- Summon Cockatiel
- [GetSpellInfo(25954)] = 25954, -- Sagefish Delight
- [GetSpellInfo(23531)] = 23531, -- Summon Tiny Green Dragon
- [GetSpellInfo(23220)] = 23220, -- Swift Dawnsaber
- [GetSpellInfo(17496)] = 17496, -- Crest of Retribution
- [GetSpellInfo(25783)] = 25783, -- Place Arcanite Buoy
- [GetSpellInfo(2539)] = 2539, -- Spiced Wolf Meat
- [GetSpellInfo(20041)] = 20041, -- Tammra Sapling
- [GetSpellInfo(18658)] = 18658, -- Hibernate
- [GetSpellInfo(2670)] = 2670, -- Rough Bronze Cuirass
- [GetSpellInfo(25839)] = 25839, -- Mass Healing
- [GetSpellInfo(24139)] = 24139, -- Darksoul Breastplate
- [GetSpellInfo(24121)] = 24121, -- Primal Batskin Jerkin
- [GetSpellInfo(23392)] = 23392, -- Boulder
- [GetSpellInfo(2392)] = 2392, -- Red Linen Shirt
- [GetSpellInfo(9979)] = 9979, -- Ornate Mithril Boots
- [GetSpellInfo(5316)] = 5316, -- Raptor Feather
- [GetSpellInfo(16554)] = 16554, -- Toxic Bolt
- [GetSpellInfo(24654)] = 24654, -- Blue Dragonscale Leggings
- [GetSpellInfo(15125)] = 15125, -- Scarshield Portal
- [GetSpellInfo(26428)] = 26428, -- Large Red Rocket Cluster
- [GetSpellInfo(3959)] = 3959, -- Discombobulator Ray
- [GetSpellInfo(19250)] = 19250, -- Placing Smokey's Explosives
- [GetSpellInfo(581)] = 581, -- Winter Wolf
- [GetSpellInfo(23193)] = 23193, -- Forming Lok'delar
- [GetSpellInfo(4062)] = 4062, -- Heavy Dynamite
- [GetSpellInfo(3919)] = 3919, -- Rough Dynamite
- [GetSpellInfo(3761)] = 3761, -- Fine Leather Tunic
- [GetSpellInfo(11438)] = 11438, -- Join Map Fragments
- [GetSpellInfo(20702)] = 20702, -- Summon Treant Allies
- [GetSpellInfo(25849)] = 25849, -- Summon Baby Shark
- [GetSpellInfo(3205)] = 3205, -- Sol M
- [GetSpellInfo(13912)] = 13912, -- Princess Summons Portal
- [GetSpellInfo(6518)] = 6518, -- Iridescent Hammer
- [GetSpellInfo(3399)] = 3399, -- Tasty Lion Steak
- [GetSpellInfo(3511)] = 3511, -- Golden Scale Cuirass
- [GetSpellInfo(14810)] = 14810, -- Greater Mystic Wand
- [GetSpellInfo(18647)] = 18647, -- Banish
- [GetSpellInfo(10007)] = 10007, -- Phantom Blade
- [GetSpellInfo(23667)] = 23667, -- Flarecore Leggings
- [GetSpellInfo(19067)] = 19067, -- Stormshroud Pants
- [GetSpellInfo(24967)] = 24967, -- Gong
- [GetSpellInfo(3275)] = 3275, -- Linen Bandage
- [GetSpellInfo(10166)] = 10166, -- Khadgar's Unlocking
- [GetSpellInfo(28311)] = 28311, -- Slime Bolt
- [GetSpellInfo(24163)] = 24163, -- Vodouisant's Vigilant Embrace
- [GetSpellInfo(17181)] = 17181, -- Enchanted Leather
- [GetSpellInfo(19054)] = 19054, -- Red Dragonscale Breastplate
- [GetSpellInfo(10605)] = 10605, -- Chain Lightning
- [GetSpellInfo(5781)] = 5781, -- Threatening Growl
- [GetSpellInfo(19094)] = 19094, -- Black Dragonscale Shoulders
- [GetSpellInfo(12621)] = 12621, -- Mithril Gyro-Shot
- [GetSpellInfo(7153)] = 7153, -- Guardian Cloak
- [GetSpellInfo(23125)] = 23125, -- Orcish Orphan Whistle
- [GetSpellInfo(26426)] = 26426, -- Large Blue Rocket Cluster
- [GetSpellInfo(24890)] = 24890, -- Create Signet of Beckoning: Air
- [GetSpellInfo(2548)] = 2548, -- Succulent Pork Ribs
- [GetSpellInfo(5161)] = 5161, -- Revive Dig Rat
- [GetSpellInfo(2153)] = 2153, -- Handstitched Leather Pants
- [GetSpellInfo(785)] = 785, -- True Fulfillment
- [GetSpellInfo(8362)] = 8362, -- Renew
- [GetSpellInfo(25292)] = 25292, -- Holy Light
- [GetSpellInfo(26234)] = 26234, -- Submerge Visual
- [GetSpellInfo(10396)] = 10396, -- Healing Wave
- [GetSpellInfo(9065)] = 9065, -- Light Leather Bracers
- [GetSpellInfo(8770)] = 8770, -- Robe of Power
- [GetSpellInfo(12189)] = 12189, -- Summon Echeyakee
- [GetSpellInfo(22813)] = 22813, -- Gordok Ogre Suit
- [GetSpellInfo(3862)] = 3862, -- Icy Cloak
- [GetSpellInfo(16978)] = 16978, -- Blazing Rapier
- [GetSpellInfo(18405)] = 18405, -- Runecloth Bag
- [GetSpellInfo(9269)] = 9269, -- Gnomish Universal Remote
- [GetSpellInfo(6529)] = 6529, -- Opening Benedict's Chest
- [GetSpellInfo(17618)] = 17618, -- Summon Risen Lackey
- [GetSpellInfo(29334)] = 29334, -- Toasted Smorc
- [GetSpellInfo(19815)] = 19815, -- Delicate Arcanite Converter
- [GetSpellInfo(14125)] = 14125, -- Opening Secret Safe
- [GetSpellInfo(8139)] = 8139, -- Fevered Fatigue
- [GetSpellInfo(11605)] = 11605, -- Slam
- [GetSpellInfo(16590)] = 16590, -- Summon Zombie
- [GetSpellInfo(2386)] = 2386, -- Linen Boots
- [GetSpellInfo(16967)] = 16967, -- Inlaid Thorium Hammer
- [GetSpellInfo(24846)] = 24846, -- Spitfire Bracers
- [GetSpellInfo(3950)] = 3950, -- Big Bronze Bomb
- [GetSpellInfo(10346)] = 10346, -- Machine Gun
- [GetSpellInfo(18422)] = 18422, -- Cloak of Fire
- [GetSpellInfo(26011)] = 26011, -- Tranquil Mechanical Yeti
- [GetSpellInfo(19091)] = 19091, -- Runic Leather Pants
- [GetSpellInfo(16984)] = 16984, -- Volcanic Hammer
- [GetSpellInfo(23650)] = 23650, -- Ebon Hand
- [GetSpellInfo(7098)] = 7098, -- Curse of Mending
- [GetSpellInfo(8681)] = 8681, -- Instant Poison
- [GetSpellInfo(24122)] = 24122, -- Primal Batskin Gloves
- [GetSpellInfo(3233)] = 3233, -- Evil Eye
- [GetSpellInfo(25841)] = 25841, -- Prayer of Elune
- [GetSpellInfo(17551)] = 17551, -- Stonescale Oil
- [GetSpellInfo(18969)] = 18969, -- Taelan Death
- [GetSpellInfo(21180)] = 21180, -- Summon Thunderstrike
- [GetSpellInfo(3436)] = 3436, -- Wandering Plague
- [GetSpellInfo(16869)] = 16869, -- Ice Tomb
- [GetSpellInfo(12716)] = 12716, -- Goblin Mortar
- [GetSpellInfo(28697)] = 28697, -- Forgiveness
- [GetSpellInfo(26279)] = 26279, -- Stormshroud Gloves
- [GetSpellInfo(14871)] = 14871, -- Shadow Bolt Misfire
- [GetSpellInfo(22924)] = 22924, -- Grasping Vines
- [GetSpellInfo(18974)] = 18974, -- Summon Lunaclaw
- [GetSpellInfo(27720)] = 27720, -- Buttermilk Delight
- [GetSpellInfo(7892)] = 7892, -- Stylish Blue Shirt
- [GetSpellInfo(2737)] = 2737, -- Copper Mace
- [GetSpellInfo(24314)] = 24314, -- Threatening Gaze
- [GetSpellInfo(8912)] = 8912, -- Forge Verigan's Fist
- [GetSpellInfo(17557)] = 17557, -- Elixir of Brute Force
- [GetSpellInfo(22926)] = 22926, -- Chromatic Cloak
- [GetSpellInfo(455)] = 455, -- Replenish Spirit
- [GetSpellInfo(25659)] = 25659, -- Dirge's Kickin' Chimaerok Chops
- [GetSpellInfo(24940)] = 24940, -- Black Whelp Tunic
- [GetSpellInfo(11534)] = 11534, -- Leper Cure!
- [GetSpellInfo(14887)] = 14887, -- Shadow Bolt Volley
- [GetSpellInfo(3324)] = 3324, -- Runed Copper Pants
- [GetSpellInfo(2671)] = 2671, -- Rough Bronze Bracers
- [GetSpellInfo(5395)] = 5395, -- Death Capsule
- [GetSpellInfo(18434)] = 18434, -- Cindercloth Pants
- [GetSpellInfo(15647)] = 15647, -- Summon Common Kitten
- [GetSpellInfo(25722)] = 25722, -- Rumsey Rum Dark
- [GetSpellInfo(17952)] = 17952, -- Create Firestone (Greater)
- [GetSpellInfo(445)] = 445, -- Teleport Darkshire
- [GetSpellInfo(8760)] = 8760, -- Azure Silk Hood
- [GetSpellInfo(9968)] = 9968, -- Heavy Mithril Boots
- [GetSpellInfo(24123)] = 24123, -- Primal Batskin Bracers
- [GetSpellInfo(6115)] = 6115, -- Far Sight (PT)
- [GetSpellInfo(6894)] = 6894, -- Death Bed
- [GetSpellInfo(7257)] = 7257, -- Fire Protection Potion
- [GetSpellInfo(20770)] = 20770, -- Resurrection
- [GetSpellInfo(3121)] = 3121, -- Kev
- [GetSpellInfo(17465)] = 17465, -- Green Skeletal Warhorse
- [GetSpellInfo(20854)] = 20854, -- Molten Helm
- [GetSpellInfo(14380)] = 14380, -- Truesilver Rod
- [GetSpellInfo(2162)] = 2162, -- Embossed Leather Cloak
- [GetSpellInfo(12044)] = 12044, -- Simple Linen Pants
- [GetSpellInfo(11410)] = 11410, -- Whirling Barrage
- [GetSpellInfo(1090)] = 1090, -- Sleep
- [GetSpellInfo(23151)] = 23151, -- Balance of Light and Shadow
- [GetSpellInfo(2152)] = 2152, -- Light Armor Kit
- [GetSpellInfo(27608)] = 27608, -- Flash Heal
- [GetSpellInfo(6257)] = 6257, -- Torch Toss
- [GetSpellInfo(8277)] = 8277, -- Voodoo Hex
- [GetSpellInfo(20748)] = 20748, -- Rebirth
- [GetSpellInfo(14379)] = 14379, -- Golden Rod
- [GetSpellInfo(22761)] = 22761, -- Runn Tum Tuber Surprise
- [GetSpellInfo(7630)] = 7630, -- Blue Linen Vest
- [GetSpellInfo(24964)] = 24964, -- Honor Points +378
- [GetSpellInfo(23636)] = 23636, -- Dark Iron Helm
- [GetSpellInfo(19943)] = 19943, -- Flash of Light
- [GetSpellInfo(18702)] = 18702, -- Curse of the Darkmaster
- [GetSpellInfo(15863)] = 15863, -- Carrion Surprise
- [GetSpellInfo(16531)] = 16531, -- Summon Frail Skeleton
- [GetSpellInfo(17231)] = 17231, -- Summon Illusory Wraith
- [GetSpellInfo(16663)] = 16663, -- Imperial Plate Chest
- [GetSpellInfo(3297)] = 3297, -- Mighty Iron Hammer
- [GetSpellInfo(4506)] = 4506, -- CHU's QUEST SPELL
- [GetSpellInfo(18424)] = 18424, -- Frostweave Pants
- [GetSpellInfo(12667)] = 12667, -- Soul Consumption
- [GetSpellInfo(27721)] = 27721, -- Very Berry Cream
- [GetSpellInfo(7279)] = 7279, -- Black Sludge
- [GetSpellInfo(17570)] = 17570, -- Greater Stoneshield Potion
- [GetSpellInfo(4239)] = 4239, -- Activating Defenses
- [GetSpellInfo(2387)] = 2387, -- Linen Cloak
- [GetSpellInfo(21100)] = 21100, -- Conjure Elegant Letter
- [GetSpellInfo(23067)] = 23067, -- Blue Firework
- [GetSpellInfo(19072)] = 19072, -- Runic Leather Belt
- [GetSpellInfo(5280)] = 5280, -- Razor Mane
- [GetSpellInfo(18245)] = 18245, -- Lobster Stew
- [GetSpellInfo(12591)] = 12591, -- Unstable Trigger
- [GetSpellInfo(10459)] = 10459, -- Sacrifice Spinneret
- [GetSpellInfo(25316)] = 25316, -- Prayer of Healing
- [GetSpellInfo(9052)] = 9052, -- Fill Deino's Flask
- [GetSpellInfo(5512)] = 5512, -- Fill Phial
- [GetSpellInfo(4066)] = 4066, -- Small Bronze Bomb
- [GetSpellInfo(16168)] = 16168, -- Flame Buffet
- [GetSpellInfo(9636)] = 9636, -- Summon Swamp Spirit
- [GetSpellInfo(6695)] = 6695, -- Black Silk Pack
- [GetSpellInfo(19101)] = 19101, -- Volcanic Shoulders
- [GetSpellInfo(21425)] = 21425, -- Ryson's Eye in the Sky
- [GetSpellInfo(6414)] = 6414, -- Roasted Kodo Meat
- [GetSpellInfo(27662)] = 27662, -- Throw Cupid's Dart
- [GetSpellInfo(15933)] = 15933, -- Monster Omelet
- [GetSpellInfo(19800)] = 19800, -- Thorium Shells
- [GetSpellInfo(23662)] = 23662, -- Wisdom of the Timbermaw
- [GetSpellInfo(23680)] = 23680, -- Portals Deck
- [GetSpellInfo(19774)] = 19774, -- Summon Ragnaros
- [GetSpellInfo(3969)] = 3969, -- Mechanical Dragonling
- [GetSpellInfo(9921)] = 9921, -- Solid Weightstone
- [GetSpellInfo(24093)] = 24093, -- Bloodvine Boots
- [GetSpellInfo(9985)] = 9985, -- Bronze Warhammer
- [GetSpellInfo(8211)] = 8211, -- Chain Burn
- [GetSpellInfo(28220)] = 28220, -- Polar Gloves
- [GetSpellInfo(7623)] = 7623, -- Brown Linen Robe
- [GetSpellInfo(23243)] = 23243, -- Swift Orange Raptor
- [GetSpellInfo(25150)] = 25150, -- Molten Rain
- [GetSpellInfo(7149)] = 7149, -- Barbaric Leggings
- [GetSpellInfo(2546)] = 2546, -- Dry Pork Ribs
- [GetSpellInfo(3569)] = 3569, -- Smelt Steel
- [GetSpellInfo(19814)] = 19814, -- Masterwork Target Dummy
- [GetSpellInfo(8793)] = 8793, -- Crimson Silk Shoulders
- [GetSpellInfo(10344)] = 10344, -- Armor +32
- [GetSpellInfo(12046)] = 12046, -- Simple Kilt
- [GetSpellInfo(9074)] = 9074, -- Nimble Leather Gloves
- [GetSpellInfo(12092)] = 12092, -- Dreamweave Circlet
- [GetSpellInfo(23004)] = 23004, -- Summon Alarm-o-Bot
- [GetSpellInfo(29116)] = 29116, -- Toast Smorc
- [GetSpellInfo(9268)] = 9268, -- Teleport to Darnassus - Event
- [GetSpellInfo(21161)] = 21161, -- Sulfuron Hammer
- [GetSpellInfo(11397)] = 11397, -- Diseased Shot
- [GetSpellInfo(3243)] = 3243, -- Life Harvest
- [GetSpellInfo(18421)] = 18421, -- Wizardweave Leggings
- [GetSpellInfo(4979)] = 4979, -- Quick Flame Ward
- [GetSpellInfo(3954)] = 3954, -- Moonsight Rifle
- [GetSpellInfo(3767)] = 3767, -- Hillman's Belt
- [GetSpellInfo(25808)] = 25808, -- Dispel
- [GetSpellInfo(20568)] = 20568, -- Ragnaros Emerge
- [GetSpellInfo(18453)] = 18453, -- Felcloth Shoulders
- [GetSpellInfo(14532)] = 14532, -- Creeper Venom
- [GetSpellInfo(10149)] = 10149, -- Fireball
- [GetSpellInfo(3493)] = 3493, -- Jade Serpentblade
- [GetSpellInfo(12808)] = 12808, -- Getting Tide Pool Sample #4
- [GetSpellInfo(15296)] = 15296, -- Dark Iron Plate
- [GetSpellInfo(12759)] = 12759, -- Gnomish Death Ray
- [GetSpellInfo(23000)] = 23000, -- Ez-Thro Dynamite
- [GetSpellInfo(18450)] = 18450, -- Wizardweave Turban
- [GetSpellInfo(3204)] = 3204, -- Sapper Explode
- [GetSpellInfo(9783)] = 9783, -- Mithril Spurs
- [GetSpellInfo(9194)] = 9194, -- Heavy Leather Ammo Pouch
- [GetSpellInfo(8089)] = 8089, -- Aquadynamic Fish Attractor
- [GetSpellInfo(17680)] = 17680, -- Spirit Spawn-out
- [GetSpellInfo(7994)] = 7994, -- Nullify Mana
- [GetSpellInfo(3929)] = 3929, -- Coarse Blasting Powder
- [GetSpellInfo(8352)] = 8352, -- Adjust Attitude
- [GetSpellInfo(3953)] = 3953, -- Bronze Framework
- [GetSpellInfo(7953)] = 7953, -- Deviate Scale Cloak
- [GetSpellInfo(8001)] = 8001, -- Placing Pendant
- [GetSpellInfo(23061)] = 23061, -- Fix Ritual Node
- [GetSpellInfo(4097)] = 4097, -- Raptor Hide Belt
- [GetSpellInfo(24897)] = 24897, -- Create Scepter of Beckoning: Earth
- [GetSpellInfo(22661)] = 22661, -- Enervate
- [GetSpellInfo(10702)] = 10702, -- Summon Island Frog
- [GetSpellInfo(12421)] = 12421, -- Mithril Frag Bomb
- [GetSpellInfo(16960)] = 16960, -- Thorium Greatsword
- [GetSpellInfo(30081)] = 30081, -- Retching Plague
- [GetSpellInfo(22313)] = 22313, -- Purple Hands
- [GetSpellInfo(16660)] = 16660, -- Dawnbringer Shoulders
- [GetSpellInfo(28473)] = 28473, -- Bramblewood Boots
- [GetSpellInfo(3753)] = 3753, -- Handstitched Leather Belt
- [GetSpellInfo(12607)] = 12607, -- Catseye Ultra Goggles
- [GetSpellInfo(17556)] = 17556, -- Major Healing Potion
- [GetSpellInfo(6310)] = 6310, -- Divining Scroll Spell
- [GetSpellInfo(11730)] = 11730, -- Create Healthstone (Major)
- [GetSpellInfo(3563)] = 3563, -- Teleport: Undercity
- [GetSpellInfo(20897)] = 20897, -- Dark Iron Destroyer
- [GetSpellInfo(18455)] = 18455, -- Bottomless Bag
- [GetSpellInfo(15865)] = 15865, -- Mystery Stew
- [GetSpellInfo(11513)] = 11513, -- Empty Phial
- [GetSpellInfo(3915)] = 3915, -- Brown Linen Shirt
- [GetSpellInfo(2602)] = 2602, -- Fire Shield IV
- [GetSpellInfo(28463)] = 28463, -- Ironvine Belt
- [GetSpellInfo(3961)] = 3961, -- Gyrochronatom
- [GetSpellInfo(3296)] = 3296, -- Heavy Bronze Mace
- [GetSpellInfo(6535)] = 6535, -- Lightning Cloud
- [GetSpellInfo(18241)] = 18241, -- Filet of Redgill
- [GetSpellInfo(12049)] = 12049, -- Black Mageweave Leggings
- [GetSpellInfo(12594)] = 12594, -- Fire Goggles
- [GetSpellInfo(12073)] = 12073, -- Black Mageweave Boots
- [GetSpellInfo(461)] = 461, -- Righteous Flame On
- [GetSpellInfo(15649)] = 15649, -- Collect Corrupted Water
- [GetSpellInfo(1179)] = 1179, -- Beast Claws
- [GetSpellInfo(1453)] = 1453, -- Arcane Spirit V
- [GetSpellInfo(10326)] = 10326, -- Turn Undead
- [GetSpellInfo(21953)] = 21953, -- The Feast of Winter Veil
- [GetSpellInfo(3947)] = 3947, -- Crafted Solid Shot
- [GetSpellInfo(3817)] = 3817, -- Cured Medium Hide
- [GetSpellInfo(8901)] = 8901, -- Gas Bomb
- [GetSpellInfo(3497)] = 3497, -- Frost Tiger Blade
- [GetSpellInfo(16069)] = 16069, -- Nefarius Attack 001
- [GetSpellInfo(15628)] = 15628, -- Pet Bombling
- [GetSpellInfo(24960)] = 24960, -- Honor Points +50
- [GetSpellInfo(8483)] = 8483, -- White Swashbuckler's Shirt
- [GetSpellInfo(16995)] = 16995, -- Heartseeker
- [GetSpellInfo(6354)] = 6354, -- Venom's Bane
- [GetSpellInfo(27794)] = 27794, -- Cleave
- [GetSpellInfo(2389)] = 2389, -- Red Linen Robe
- [GetSpellInfo(9935)] = 9935, -- Steel Plate Helm
- [GetSpellInfo(26085)] = 26085, -- Soul Pouch
- [GetSpellInfo(16662)] = 16662, -- Thorium Leggings
- [GetSpellInfo(12086)] = 12086, -- Shadoweave Mask
- [GetSpellInfo(6626)] = 6626, -- Set NG-5 Charge (Blue)
- [GetSpellInfo(28474)] = 28474, -- Bramblewood Belt
- [GetSpellInfo(17924)] = 17924, -- Soul Fire
- [GetSpellInfo(23489)] = 23489, -- Ultrasafe Transporter - Gadgetzan
- [GetSpellInfo(9795)] = 9795, -- Talvash's Necklace Repair
- [GetSpellInfo(11017)] = 11017, -- Summon Witherbark Felhunter
- [GetSpellInfo(9145)] = 9145, -- Fletcher's Gloves
- [GetSpellInfo(28352)] = 28352, -- Breath of Sargeras
- [GetSpellInfo(6199)] = 6199, -- Nostalgia
- [GetSpellInfo(19068)] = 19068, -- Warbear Harness
- [GetSpellInfo(7218)] = 7218, -- Weapon Counterweight
- [GetSpellInfo(5026)] = 5026, -- Create Water of the Seers
- [GetSpellInfo(7489)] = 7489, -- Call Lupine Horror
- [GetSpellInfo(15207)] = 15207, -- Lightning Bolt
- [GetSpellInfo(10531)] = 10531, -- Big Voodoo Mask
- [GetSpellInfo(15276)] = 15276, -- Opening Bar Door
- [GetSpellInfo(16659)] = 16659, -- Radiant Circlet
- [GetSpellInfo(3176)] = 3176, -- Strong Troll's Blood Potion
- [GetSpellInfo(9612)] = 9612, -- Ink Spray
- [GetSpellInfo(24961)] = 24961, -- Honor Points +82
- [GetSpellInfo(9220)] = 9220, -- "Plucky" Resumes Chicken Form
- [GetSpellInfo(7762)] = 7762, -- Summon Gunther's Visage
- [GetSpellInfo(3131)] = 3131, -- Frost Breath
- [GetSpellInfo(25311)] = 25311, -- Corruption
- [GetSpellInfo(26137)] = 26137, -- Rotate Trigger
- [GetSpellInfo(24898)] = 24898, -- Create Scepter of Beckoning: Water
- [GetSpellInfo(19098)] = 19098, -- Wicked Leather Armor
- [GetSpellInfo(698)] = 698, -- Ritual of Summoning
- [GetSpellInfo(7633)] = 7633, -- Blue Linen Robe
- [GetSpellInfo(16731)] = 16731, -- Runic Breastplate
- [GetSpellInfo(11021)] = 11021, -- Flamespit
- [GetSpellInfo(10718)] = 10718, -- Summon Green Water Snake
- [GetSpellInfo(6899)] = 6899, -- Brown Ram
- [GetSpellInfo(12899)] = 12899, -- Gnomish Shrink Ray
- [GetSpellInfo(10701)] = 10701, -- Summon Dart Frog
- [GetSpellInfo(11449)] = 11449, -- Elixir of Agility
- [GetSpellInfo(20648)] = 20648, -- Medium Leather
- [GetSpellInfo(3552)] = 3552, -- Conjure Mana Jade
- [GetSpellInfo(15118)] = 15118, -- Place Threshadon Carcass
- [GetSpellInfo(19076)] = 19076, -- Volcanic Breastplate
- [GetSpellInfo(23248)] = 23248, -- Great Gray Kodo
- [GetSpellInfo(21358)] = 21358, -- Aqual Quintessence - Dowse Molten Core Rune
- [GetSpellInfo(12717)] = 12717, -- Goblin Mining Helmet
- [GetSpellInfo(1540)] = 1540, -- Volley
- [GetSpellInfo(28354)] = 28354, -- Exorcise Atiesh
- [GetSpellInfo(2832)] = 2832, -- Armor +16
- [GetSpellInfo(3932)] = 3932, -- Target Dummy
- [GetSpellInfo(24357)] = 24357, -- Bloodvine Lens
- [GetSpellInfo(2674)] = 2674, -- Heavy Sharpening Stone
- [GetSpellInfo(9172)] = 9172, -- Lift Seal
- [GetSpellInfo(3450)] = 3450, -- Elixir of Fortitude
- [GetSpellInfo(21371)] = 21371, -- Planting Mulverick's Beacon
- [GetSpellInfo(3566)] = 3566, -- Teleport: Thunder Bluff
- [GetSpellInfo(3937)] = 3937, -- Large Copper Bomb
- [GetSpellInfo(23190)] = 23190, -- Heavy Leather Ball
- [GetSpellInfo(23428)] = 23428, -- Summon Albino Snapjaw
- [GetSpellInfo(10566)] = 10566, -- Wild Leather Boots
- [GetSpellInfo(5514)] = 5514, -- Darken Vision
- [GetSpellInfo(2169)] = 2169, -- Dark Leather Tunic
- [GetSpellInfo(18444)] = 18444, -- Runecloth Headband
- [GetSpellInfo(16646)] = 16646, -- Imperial Plate Shoulders
- [GetSpellInfo(29059)] = 29059, -- Skeletal Steed
- [GetSpellInfo(17632)] = 17632, -- Alchemist's Stone
- [GetSpellInfo(18412)] = 18412, -- Cindercloth Gloves
- [GetSpellInfo(18441)] = 18441, -- Ghostweave Pants
- [GetSpellInfo(8552)] = 8552, -- Curse of Weakness
- [GetSpellInfo(18239)] = 18239, -- Cooked Glossy Mightfish
- [GetSpellInfo(18438)] = 18438, -- Runecloth Pants
- [GetSpellInfo(6755)] = 6755, -- Tell Joke
- [GetSpellInfo(3773)] = 3773, -- Guardian Armor
- [GetSpellInfo(3965)] = 3965, -- Advanced Target Dummy
- [GetSpellInfo(12064)] = 12064, -- Orange Martial Shirt
- [GetSpellInfo(9980)] = 9980, -- Ornate Mithril Helm
- [GetSpellInfo(18247)] = 18247, -- Baked Salmon
- [GetSpellInfo(15935)] = 15935, -- Crispy Bat Wing
- [GetSpellInfo(28740)] = 28740, -- Summon Whiskers
- [GetSpellInfo(3650)] = 3650, -- Sling Mud
- [GetSpellInfo(1096)] = 1096, -- Firebolt IV
- [GetSpellInfo(3762)] = 3762, -- Hillman's Leather Vest
- [GetSpellInfo(6270)] = 6270, -- Serpentine Cleansing
- [GetSpellInfo(26181)] = 26181, -- Strike
- [GetSpellInfo(15633)] = 15633, -- Lil' Smoky
- [GetSpellInfo(11450)] = 11450, -- Elixir of Greater Defense
- [GetSpellInfo(22790)] = 22790, -- Kreeg's Stout Beatdown
- [GetSpellInfo(7395)] = 7395, -- Deadmines Dynamite
- [GetSpellInfo(11461)] = 11461, -- Arcane Elixir
- [GetSpellInfo(28223)] = 28223, -- Icy Scale Gauntlets
- [GetSpellInfo(23238)] = 23238, -- Swift Brown Ram
- [GetSpellInfo(3938)] = 3938, -- Bronze Tube
- [GetSpellInfo(12069)] = 12069, -- Cindercloth Robe
- [GetSpellInfo(23187)] = 23187, -- Frost Burn
- [GetSpellInfo(19064)] = 19064, -- Heavy Scorpid Gauntlets
- [GetSpellInfo(28163)] = 28163, -- Ice Guard
- [GetSpellInfo(4132)] = 4132, -- Banish Thundering Exile
- [GetSpellInfo(9207)] = 9207, -- Dusky Boots
- [GetSpellInfo(25158)] = 25158, -- Time Stop
- [GetSpellInfo(7954)] = 7954, -- Deviate Scale Gloves
- [GetSpellInfo(11457)] = 11457, -- Superior Healing Potion
- [GetSpellInfo(26054)] = 26054, -- Summon Red Qiraji Battle Tank
- [GetSpellInfo(9079)] = 9079, -- Create Rift
- [GetSpellInfo(10869)] = 10869, -- Summon Embers
- [GetSpellInfo(14891)] = 14891, -- Smelt Dark Iron
- [GetSpellInfo(26134)] = 26134, -- Eye Beam
- [GetSpellInfo(2368)] = 2368, -- Herb Gathering
- [GetSpellInfo(19080)] = 19080, -- Warbear Woolies
- [GetSpellInfo(16)] = 16, -- Fear (NYI)
- [GetSpellInfo(11420)] = 11420, -- Portal: Thunder Bluff
- [GetSpellInfo(19720)] = 19720, -- Combine Pendants
- [GetSpellInfo(9926)] = 9926, -- Heavy Mithril Shoulder
- [GetSpellInfo(12512)] = 12512, -- Kalaran Conjures Torch
- [GetSpellInfo(25953)] = 25953, -- Summon Blue Qiraji Battle Tank
- [GetSpellInfo(28806)] = 28806, -- Toss Fuel on Bonfire
- [GetSpellInfo(24903)] = 24903, -- Runed Stygian Boots
- [GetSpellInfo(8394)] = 8394, -- Striped Frostsaber
- [GetSpellInfo(21884)] = 21884, -- Collect Orange Crystal Liquid
- [GetSpellInfo(16649)] = 16649, -- Imperial Plate Bracers
- [GetSpellInfo(18115)] = 18115, -- Viewing Room Student Transform - Effect
- [GetSpellInfo(1538)] = 1538, -- Charging
- [GetSpellInfo(21960)] = 21960, -- Manifest Spirit
- [GetSpellInfo(2665)] = 2665, -- Coarse Sharpening Stone
- [GetSpellInfo(3133)] = 3133, -- Beast Claws III
- [GetSpellInfo(15066)] = 15066, -- Create PX83-Enigmatron
- [GetSpellInfo(5252)] = 5252, -- Voidwalker Guardian
- [GetSpellInfo(3958)] = 3958, -- Iron Strut
- [GetSpellInfo(4977)] = 4977, -- Cleanse Thunderhorn Well
- [GetSpellInfo(10673)] = 10673, -- Summon Bombay
- [GetSpellInfo(10720)] = 10720, -- Summon Scarlet Snake
- [GetSpellInfo(22967)] = 22967, -- Smelt Elementium
- [GetSpellInfo(23432)] = 23432, -- Summon Hawksbill Snapjaw
- [GetSpellInfo(15973)] = 15973, -- Searing Golden Blade
- [GetSpellInfo(8604)] = 8604, -- Herb Baked Egg
- [GetSpellInfo(19069)] = 19069, -- Plant Magic Beans
- [GetSpellInfo(9489)] = 9489, -- Create Scrying Bowl
- [GetSpellInfo(23096)] = 23096, -- Alarm-O-Bot
- [GetSpellInfo(12554)] = 12554, -- Summon Treasure Horde
- [GetSpellInfo(9457)] = 9457, -- Tharnariun's Heal
- [GetSpellInfo(5268)] = 5268, -- Dark Iron Dwarf Disguise
- [GetSpellInfo(6196)] = 6196, -- Far Sight
- [GetSpellInfo(16970)] = 16970, -- Dawn's Edge
- [GetSpellInfo(17481)] = 17481, -- Deathcharger
- [GetSpellInfo(6654)] = 6654, -- Brown Wolf
- [GetSpellInfo(15910)] = 15910, -- Heavy Kodo Stew
- [GetSpellInfo(23240)] = 23240, -- Swift White Ram
- [GetSpellInfo(15495)] = 15495, -- Explosive Shot
- [GetSpellInfo(15699)] = 15699, -- Filling Empty Jar
- [GetSpellInfo(13702)] = 13702, -- Runed Truesilver Rod
- [GetSpellInfo(24892)] = 24892, -- Create Signet of Beckoning: Water
- [GetSpellInfo(23811)] = 23811, -- Summon Jubling
- [GetSpellInfo(11476)] = 11476, -- Elixir of Shadow Power
- [GetSpellInfo(24137)] = 24137, -- Bloodsoul Shoulders
- [GetSpellInfo(2402)] = 2402, -- Woolen Cape
- }
+ns.decrease = {
+}
- ns.channelled = {
- -- MISC
- [GetSpellInfo(746)] = { 7, 746 }, -- First Aid
- [GetSpellInfo(13278)] = { 4, 13278 }, -- Gnomish Death Ray
- [GetSpellInfo(20577)] = { 10, 20577 }, -- Cannibalize
- [GetSpellInfo(10797)] = { 6, 10797 }, -- Starshards
+ns.delay = {
+}
- -- DRUID
- [GetSpellInfo(17401)] = { 9.5, 17401 }, -- Hurricane
- [GetSpellInfo(740)] = { 9.5, 740 }, -- Tranquility
+ns.CC = {
+}
- -- HUNTER
- [GetSpellInfo(6197)] = { 60, 6197 }, -- Eagle Eye
- [GetSpellInfo(1002)] = { 60, 1002 }, -- Eyes of the Beast
- [GetSpellInfo(1510)] = { 6, 1510 }, -- Volley
- [GetSpellInfo(136)] = { 10, 136 }, -- Mend Pet
+ns.talentdecrease = {
+}
- -- MAGE
- [GetSpellInfo(7268)] = { 2.25, 7268, }, -- Arcane Missile
- [GetSpellInfo(5143)] = { 4.5, 5143, }, -- Arcane Missiles
- [GetSpellInfo(10)] = { 7.5, 10 }, -- Blizzard
- [GetSpellInfo(12051)] = { 8, 12051 }, -- Evocation
-
- -- PRIEST
- [GetSpellInfo(15407)] = { 3, 15407 }, -- Mind Flay
- [GetSpellInfo(2096)] = { 60, 2096 }, -- Mind Vision
- [GetSpellInfo(605)] = { 3, 605 }, -- Mind Control
-
- -- WARLOCK
- [GetSpellInfo(126)] = { 45, 126 }, -- Eye of Kilrogg
- [GetSpellInfo(689)] = { 4.5, 689 }, -- Drain Life
- [GetSpellInfo(5138)] = { 4.5, 5138 }, -- Drain Mana
- [GetSpellInfo(1120)] = { 14.5, 1120 }, -- Drain Soul
- [GetSpellInfo(5740)] = { 7.5, 5740 }, -- Rain of Fire
- [GetSpellInfo(1949)] = { 15, 1949 }, -- Hellfire
- [GetSpellInfo(755)] = { 10, 755 }, -- Health Funnel
- }
-
- ns.decrease = {
- -- WARLOCK
- [1714] = 50, -- Curse of Tongues Rank 1
- [11719] = 60, -- Curse of Tongues Rank 2
- -- ROGUE
- [5760] = 40, -- Mind-Numbing Poison Rank 1
- [8692] = 50, -- Mind-Numbing Poison Rank 2
- [25810] = 50, -- Mind-Numbing Poison Rank 2 incorrect?
- [11398] = 60, -- Mind-Numbing Poison Rank 3
- -- ITEMS
- [17331] = 10, -- Fang of the Crystal Spider
- }
-
- ns.delay = {
- -- WARLOCK
- [GetSpellInfo(1714)] = 60, -- Curse of Tongues
- [GetSpellInfo(1098)] = 30, -- Enslave Demon
-
- -- ROGUE
- [GetSpellInfo(5760)] = 60, -- Mind-Numbing Poison
-
- -- ITEMS
- [GetSpellInfo(17331)] = 10, -- Fang of the Crystal Spider
-
- -- NPCS
- [GetSpellInfo(7127)] = 20, -- Wavering Will
- [GetSpellInfo(7102)] = 25, -- Contagion of Rot
- [GetSpellInfo(3603)] = 35, -- Distracting Pain
- [GetSpellInfo(8140)] = 50, -- Befuddlement
- [GetSpellInfo(8272)] = 20, -- Mind Tremor
- [GetSpellInfo(12255)] = 15, -- Curse of Tuten'kash
- [GetSpellInfo(10651)] = 20, -- Curse of the Eye
- [GetSpellInfo(14538)] = 35, -- Aural Shock
- [GetSpellInfo(22247)] = 80, -- Suppression Aura
- [GetSpellInfo(22642)] = 50, -- Brood Power: Bronze
- [GetSpellInfo(23153)] = 50, -- Brood Power: Blue
- [GetSpellInfo(24415)] = 50, -- Slow
- [GetSpellInfo(19365)] = 50, -- Ancient Dread
- [GetSpellInfo(28732)] = 25, -- Widow's Embrace
- [GetSpellInfo(22909)] = 50, -- Eye of Immol'thar
- }
-
- ns.CC = {
- [GetSpellInfo(5211)] = 1, -- Bash
- [GetSpellInfo(24394)] = 1, -- Intimidation
- [GetSpellInfo(853)] = 1, -- Hammer of Justice
- [GetSpellInfo(22703)] = 1, -- Inferno Effect (Summon Infernal)
- [GetSpellInfo(408)] = 1, -- Kidney Shot
- [GetSpellInfo(12809)] = 1, -- Concussion Blow
- [GetSpellInfo(20253)] = 1, -- Intercept Stun
- [GetSpellInfo(20549)] = 1, -- War Stomp
- [GetSpellInfo(2637)] = 1, -- Hibernate
- [GetSpellInfo(3355)] = 1, -- Freezing Trap
- [GetSpellInfo(19386)] = 1, -- Wyvern Sting
- [GetSpellInfo(118)] = 1, -- Polymorph
- [GetSpellInfo(28271)] = 1, -- Polymorph: Turtle
- [GetSpellInfo(28272)] = 1, -- Polymorph: Pig
- [GetSpellInfo(20066)] = 1, -- Repentance
- [GetSpellInfo(1776)] = 1, -- Gouge
- [GetSpellInfo(6770)] = 1, -- Sap
- [GetSpellInfo(1513)] = 1, -- Scare Beast
- [GetSpellInfo(8122)] = 1, -- Psychic Scream
- [GetSpellInfo(2094)] = 1, -- Blind
- [GetSpellInfo(5782)] = 1, -- Fear
- [GetSpellInfo(5484)] = 1, -- Howl of Terror
- [GetSpellInfo(6358)] = 1, -- Seduction
- [GetSpellInfo(5246)] = 1, -- Intimidating Shout
- [GetSpellInfo(6789)] = 1, -- Death Coil
- [GetSpellInfo(9005)] = 1, -- Pounce
- [GetSpellInfo(1833)] = 1, -- Cheap Shot
- [GetSpellInfo(16922)] = 1, -- Improved Starfire
- [GetSpellInfo(19410)] = 1, -- Improved Concussive Shot
- [GetSpellInfo(12355)] = 1, -- Impact
- [GetSpellInfo(20170)] = 1, -- Seal of Justice Stun
- [GetSpellInfo(15269)] = 1, -- Blackout
- [GetSpellInfo(18093)] = 1, -- Pyroclasm
- [GetSpellInfo(12798)] = 1, -- Revenge Stun
- [GetSpellInfo(5530)] = 1, -- Mace Stun
- [GetSpellInfo(19503)] = 1, -- Scatter Shot
- [GetSpellInfo(605)] = 1, -- Mind Control
- [GetSpellInfo(7922)] = 1, -- Charge Stun
- [GetSpellInfo(18469)] = 1, -- Counterspell - Silenced
- [GetSpellInfo(15487)] = 1, -- Silence
- [GetSpellInfo(18425)] = 1, -- Kick - Silenced
- [GetSpellInfo(24259)] = 1, -- Spell Lock
- [GetSpellInfo(18498)] = 1, -- Shield Bash - Silenced
-
- -- ITEMS
- [GetSpellInfo(13327)] = 1, -- Reckless Charge
- [GetSpellInfo(1090)] = 1, -- Sleep
- [GetSpellInfo(5134)] = 1, -- Flash Bomb Fear
- [GetSpellInfo(19821)] = 1, -- Arcane Bomb Silence
- [GetSpellInfo(4068)] = 1, -- Iron Grenade
- [GetSpellInfo(19769)] = 1, -- Thorium Grenade
- [GetSpellInfo(13808)] = 1, -- M73 Frag Grenade
- [GetSpellInfo(4069)] = 1, -- Big Iron Bomb
- [GetSpellInfo(12543)] = 1, -- Hi-Explosive Bomb
- [GetSpellInfo(4064)] = 1, -- Rough Copper Bomb
- [GetSpellInfo(12421)] = 1, -- Mithril Frag Bomb
- [GetSpellInfo(19784)] = 1, -- Dark Iron Bomb
- [GetSpellInfo(4067)] = 1, -- Big Bronze Bomb
- [GetSpellInfo(4066)] = 1, -- Small Bronze Bomb
- [GetSpellInfo(4065)] = 1, -- Large Copper Bomb
- [GetSpellInfo(13237)] = 1, -- Goblin Mortar
- [GetSpellInfo(835)] = 1, -- Tidal Charm
- [GetSpellInfo(13181)] = 1, -- Gnomish Mind Control Cap
- [GetSpellInfo(12562)] = 1, -- The Big One
- [GetSpellInfo(15283)] = 1, -- Stunning Blow (Weapon Proc)
- [GetSpellInfo(56)] = 1, -- Stun (Weapon Proc)
- [GetSpellInfo(26108)] = 1, -- Glimpse of Madness
- }
-
- ns.talentdecrease = {
- [GetSpellInfo(403)] = 1, -- Lightning Bolt
- [GetSpellInfo(421)] = 1, -- Chain Lightning
- [GetSpellInfo(6353)] = 2, -- Soul Fire
- [GetSpellInfo(116)] = .5, -- Frostbolt
- [GetSpellInfo(133)] = .5, -- Fireball
- [GetSpellInfo(686)] = .5, -- Shadow Bolt
- [GetSpellInfo(348)] = .5, -- Immolate
- [GetSpellInfo(331)] = .5, -- Healing Wave
- [GetSpellInfo(585)] = .5, -- Smite
- [GetSpellInfo(14914)] = .5, -- Holy Fire
- [GetSpellInfo(2054)] = .5, -- Heal
- [GetSpellInfo(25314)] = .5, -- Greater Heal
- [GetSpellInfo(8129)] = .5, -- Mana Burn
- [GetSpellInfo(5176)] = .5, -- Wrath
- [GetSpellInfo(2912)] = .5, -- Starfire
- [GetSpellInfo(5185)] = .5, -- Healing Touch
- [GetSpellInfo(2645)] = 2, -- Ghost Wolf
- [GetSpellInfo(691)] = 4, -- Summon Felhunter
- [GetSpellInfo(688)] = 4, -- Summon Imp
- [GetSpellInfo(697)] = 4, -- Summon Voidwalker
- [GetSpellInfo(712)] = 4, -- Summon Succubus
- }
-
- ns.auras = {
- -- misc
- ['Flee'] = 10,
- ['Reckless Charge'] = 12,
- ['Sleep'] = 12,
- ['Tidal Charm'] = 3,
- -- blackwing lair
- ['Burning Adrenaline'] = 20,
- -- molten core
- ['Living Bomb'] = 8,
- -- engineering
- ['Iron Grenade'] = 3,
- ['Net-o-Matic'] = 10,
- ['Thorium Grenade'] = 3,
- -- druid
- ['Hibernate'] = 40,
- -- hunter
- ['Freezing Trap'] = 20,
- ['Scare Beast'] = 20,
- -- mage
- ['Polymorph'] = 50,
- ['Polymorph: Pig'] = 50,
- ['Polymorph: Turtle'] = 50,
- ['Frostbolt'] = 7,
- ['Frost Nova'] = 8,
- ['Frostbite'] = 5,
- -- paladin
- ['Hammer of Justice'] = 6,
- ['Repentance'] = 6,
- -- priest
- ['Mind Control'] = 3,
- ['Mind Vision'] = 60,
- ['Psychic Scream'] = 8,
- -- rogue
- ['Blind'] = 10,
- ['Cheap Shot'] = 5,
- ['Gouge'] = 4,
- ['Kidney Shot'] = 6,
- ['Sap'] = 11,
- -- warlock
- ['Curse of Exhaustion'] = 12,
- ['Curse of Tongues'] = 30,
- ['Death Coil'] = 3,
- ['Drain Mana'] = 5,
- ['Fear'] = 20,
- ['Howl of Terror'] = 15,
- -- warrior
- ['Charge Stun'] = 1,
- ['Intercept Stun'] = 3,
- }
-
-
- --
+ns.auras = {
+}
diff --git a/core/text.lua b/core/text.lua
index 8d4526a..c3100ef 100755
--- a/core/text.lua
+++ b/core/text.lua
@@ -1,101 +1,78 @@
+local _, ns = ...
+local FONT_REGULAR = 'Interface\\AddOns\\modui\\font\\NotoSans-Regular.ttf'
+local FONT_BOLD = 'Interface\\AddOns\\modui\\font\\NotoSans-Bold.ttf'
- local _, ns = ...
+ns.FONT_REGULAR = FONT_REGULAR
+ns.FONT_BOLD = FONT_BOLD
- local FONT_REGULAR = 'Interface\\AddOns\\modui\\font\\NotoSans-Regular.ttf'
- local FONT_BOLD = 'Interface\\AddOns\\modui\\font\\NotoSans-Bold.ttf'
+local strings = {
+ ['warnings'] = {
+ RaidWarningFrameSlot1,
+ RaidWarningFrameSlot2,
+ RaidBossEmoteFrameSlot1,
+ RaidBossEmoteFrameSlot2
+ },
+ ['zone'] = {
+ ZoneTextString,
+ SubZoneTextString,
+ PVPInfoTextString,
+ PVPArenaTextString
+ },
+ ['map'] = {
+ WorldMapFrameAreaLabel,
+ WorldMapFrameAreaDescription,
+ WorldMapFrameAreaPetLevels
+ },
+ ['toast'] = {
+ BNToastFrameTopLine,
+ BNToastFrameMiddleLine,
+ BNToastFrameBottomLine,
+ BNToastFrameDoubleLine
+ },
+ ['tooltip'] = {
+ GameTooltipTextLeft1
+ },
+}
- ns.FONT_REGULAR = FONT_REGULAR
- ns.FONT_BOLD = FONT_BOLD
+local iterate = function(v, callback)
+ local i, j = next(v, nil)
+ while i do
+ callback(j)
+ i, j = next(v, i)
+ end
+end
- local strings = {
- ['warnings'] = {
- RaidWarningFrameSlot1,
- RaidWarningFrameSlot2,
- RaidBossEmoteFrameSlot1,
- RaidBossEmoteFrameSlot2
- },
- ['zone'] = {
- ZoneTextString,
- SubZoneTextString,
- PVPInfoTextString,
- PVPArenaTextString
- },
- ['map'] = {
- WorldMapFrameAreaLabel,
- WorldMapFrameAreaDescription,
- WorldMapFrameAreaPetLevels
- },
- ['toast'] = {
- BNToastFrameTopLine,
- BNToastFrameMiddleLine,
- BNToastFrameBottomLine,
- BNToastFrameDoubleLine
- },
- ['tooltip'] = {
- GameTooltipTextLeft1
- },
- }
-
- local iterate = function(v, callback)
- local i, j = next(v, nil)
- while i do
- callback(j)
- i, j = next(v, i)
- end
- end
-
- for n, v in pairs(strings) do
- if n == 'zone' or n == 'warnings' then
- iterate(v, function(t)
- t:SetFont(FONT_BOLD, 7)
- t:SetShadowOffset(1, -1.25)
- t:SetShadowColor(0, 0, 0, 1)
- end)
- elseif n == 'map' then
- iterate(v, function(t)
- t:SetFont(FONT_BOLD, 30)
- t:SetShadowOffset(1, -1.25)
- t:SetShadowColor(0, 0, 0, 1)
- end)
- elseif n == 'toast' then
- iterate(v, function(t)
- if t == BNToastFrameTopLine then t:SetJustifyH'CENTER' end
- t:SetFont(t == BNToastFrameTopLine and FONT_BOLD or FONT_REGULAR,
- t == BNToastFrameTopLine and 13 or 10)
- t:SetShadowOffset(1, -1.25)
- t:SetShadowColor(0, 0, 0, 1)
- end)
- elseif n == 'tooltip' then
- iterate(v, function(t)
- t:SetFont(FONT_REGULAR, 13)
- t:SetShadowOffset(1, -1.25)
- t:SetShadowColor(0, 0, 0, 1)
- end)
- elseif n == 'common' then
- iterate(v, function(t)
- t:SetFont(FONT_REGULAR, 13)
- end)
- end
- end
-
- -- font objects
- local t = CreateFont'modMenuFont'
- t:SetFont(STANDARD_TEXT_FONT, 12)
-
- local t = CreateFont'modNameFont'
- t:SetFont([[Fonts\skurri.ttf]], 14)
- t:SetShadowOffset(1, -1)
- t:SetShadowColor(0, 0, 0)
-
- local t = CreateFont'modNameFontSmall'
- t:SetFont([[Fonts\skurri.ttf]], 10)
- t:SetShadowOffset(1, -1)
- t:SetShadowColor(0, 0, 0)
-
- local t = CreateFont'modAuraFont'
- t:SetFont([[Fonts\skurri.ttf]], 14, 'THICKOUTLINE')
- t:SetShadowOffset(0, 0)
-
-
- --
+for n, v in pairs(strings) do
+ if n == 'zone' or n == 'warnings' then
+ iterate(v, function(t)
+ t:SetFont(FONT_BOLD, 7)
+ t:SetShadowOffset(1, -1.25)
+ t:SetShadowColor(0, 0, 0, 1)
+ end)
+ elseif n == 'map' then
+ iterate(v, function(t)
+ t:SetFont(FONT_BOLD, 30)
+ t:SetShadowOffset(1, -1.25)
+ t:SetShadowColor(0, 0, 0, 1)
+ end)
+ elseif n == 'toast' then
+ iterate(v, function(t)
+ if t == BNToastFrameTopLine then t:SetJustifyH'CENTER' end
+ t:SetFont(t == BNToastFrameTopLine and FONT_BOLD or FONT_REGULAR,
+ t == BNToastFrameTopLine and 13 or 10)
+ t:SetShadowOffset(1, -1.25)
+ t:SetShadowColor(0, 0, 0, 1)
+ end)
+ elseif n == 'tooltip' then
+ iterate(v, function(t)
+ t:SetFont(FONT_REGULAR, 13)
+ t:SetShadowOffset(1, -1.25)
+ t:SetShadowColor(0, 0, 0, 1)
+ end)
+ elseif n == 'common' then
+ iterate(v, function(t)
+ t:SetFont(FONT_REGULAR, 13)
+ end)
+ end
+end
diff --git a/core/transform.lua b/core/transform.lua
index b54c3fd..d0a6e98 100755
--- a/core/transform.lua
+++ b/core/transform.lua
@@ -1,74 +1,69 @@
+local _, ns = ...
+local events = {
+ 'UI_ERROR_MESSAGE',
+ 'GOSSIP_SHOW'
+}
- local _, ns = ...
+local tip = CreateFrame('GAMETOOLTIP', 'modmount', nil, 'GameTooltipTemplate')
+tip:SetOwner(UIParent, 'ANCHOR_NONE')
- local events = {
- 'UI_ERROR_MESSAGE',
- 'GOSSIP_SHOW'
- }
-
- local tip = CreateFrame('GAMETOOLTIP', 'modmount', nil, 'GameTooltipTemplate')
- tip:SetOwner(UIParent, 'ANCHOR_NONE')
-
- local AddAutoDismount = function()
- for i = -1, 16 do
- local j = GetPlayerBuff(i)
- tip:ClearLines()
- tip:SetPlayerBuff(j)
- local t = _G['modmountTextLeft2']:GetText()
- if t then
- local _, _, speed = string.find(t, 'Increases speed by (.+)%%')
- if speed then CancelPlayerBuff(i) return end
- end
+local AddAutoDismount = function()
+ for i = -1, 16 do
+ local j = GetPlayerBuff(i)
+ tip:ClearLines()
+ tip:SetPlayerBuff(j)
+ local t = _G['modmountTextLeft2']:GetText()
+ if t then
+ local _, _, speed = string.find(t, 'Increases speed by (.+)%%')
+ if speed then CancelPlayerBuff(i) return end
end
end
+end
- local AddAutoFishing = function()
- for bag = 0, NUM_BAG_SLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- local link = GetContainerItemLink(bag, slot)
- if link then
- local _, _, istring = string.find(link, '|H(.+)|h')
- local n = GetItemInfo(istring)
- if n and (string.find(n, 'Fishing Pole') or string.find(n, 'FC-5000')) then
- UseContainerItem(bag, slot)
- print'|cff4c8d00Your Fishing Pole has been equipped.|r'
- break
- end
+local AddAutoFishing = function()
+ for bag = 0, NUM_BAG_SLOTS do
+ for slot = 1, GetContainerNumSlots(bag) do
+ local link = GetContainerItemLink(bag, slot)
+ if link then
+ local _, _, istring = string.find(link, '|H(.+)|h')
+ local n = GetItemInfo(istring)
+ if n and (string.find(n, 'Fishing Pole') or string.find(n, 'FC-5000')) then
+ UseContainerItem(bag, slot)
+ print'|cff4c8d00Your Fishing Pole has been equipped.|r'
+ break
end
end
end
end
+end
- local AddAutoShapeshift = function()
- for i = 1, GetNumShapeshiftForms() do
- local _, name, active = GetShapeshiftFormInfo(i)
- if active ~= nil then
- CastShapeshiftForm(i)
- break
- end
+local AddAutoShapeshift = function()
+ for i = 1, GetNumShapeshiftForms() do
+ local _, name, active = GetShapeshiftFormInfo(i)
+ if active ~= nil then
+ CastShapeshiftForm(i)
+ break
end
end
+end
- local OnEvent = function(self, event, t)
- if event =='UI_ERROR_MESSAGE' then
- if string.find(t, 'mounted')
- or string.find(t, 'while silenced') then
- AddAutoDismount()
- elseif string.find(t, 'Fishing Pole') then
- AddAutoFishing()
- elseif string.find(t, 'shapeshift') then
- AddAutoShapeshift()
- end
- else
- local _, g1 = GetGossipOptions()
- if g1 == 'taxi' then AddAutoDismount() end
+local OnEvent = function(self, event, t)
+ if event =='UI_ERROR_MESSAGE' then
+ if string.find(t, 'mounted')
+ or string.find(t, 'while silenced') then
+ AddAutoDismount()
+ elseif string.find(t, 'Fishing Pole') then
+ AddAutoFishing()
+ elseif string.find(t, 'shapeshift') then
+ AddAutoShapeshift()
end
+ else
+ local _, g1 = GetGossipOptions()
+ if g1 == 'taxi' then AddAutoDismount() end
end
+end
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
+local e = CreateFrame'Frame'
+for _, v in pairs(events) do e:RegisterEvent(v) end
+e:SetScript('OnEvent', OnEvent)
diff --git a/core/var.lua b/core/var.lua
index 7df9ae7..41dabae 100755
--- a/core/var.lua
+++ b/core/var.lua
@@ -1,94 +1,117 @@
+local _, ns = ...
+-- TODO:
+-- combat text (todo)
+-- formatting
+-- modifiers on strings
+-- style
+-- url
+-- pvp
+-- raid
- local _, ns = ...
+MODUI_VAR = {
+ ['elements'] = {
+ all = true,
+ aura = {
+ enable = true,
+ statusbars = true,
+ values = true,
+ },
+ chat = {
+ enable = true,
+ events = true,
+ style = true,
+ url = true,
+ sysmsg = false, -- objective text goes in chat window
+ colornames = true,
+ },
+ ecastbar = {
+ enable = true,
+ },
+ error = {
+ enable = true,
+ quick = true,
+ },
+ mainbar = {
+ enable = true,
+ keypress = true,
+ xp = true,
+ horiz = false,
+ micromenubutton = true,
+ bagbutton = true,
+ },
+ nameplate = {
+ enable = true,
+ aura = true,
+ combo = true,
+ friendlyclass = false,
+ totem = true,
+ },
+ onebag = {
+ enable = true,
+ greys = true,
+ },
+ statusbar = {
+ health = {r = 0, g = 1, b = 0},
+ mana = {r = 0, g = 0, b = 1},
+ rage = {r = 1, g = 0, b = 0},
+ focus = {r = 1, g = .5, b = .25},
+ energy = {r = 1, g = 1, b = 0},
+ },
+ tooltip = {
+ enable = true,
+ mouseanchor = false,
+ disablefade = false,
+ },
+ tracker = {
+ enable = true,
+ },
+ unit = {
+ enable = true,
+ castbar = true,
+ player = true,
+ target = true,
+ party = true,
+ tot = true,
+ pet = true,
+ auras = true,
+ vcolour = true,
+ rcolour = true,
+ },
+ talentbuilds = {
+ enable = false,
+ }
+ },
+ ['statusbar'] = {
+ smooth = true,
+ },
+ ['theme'] = {r = 0, g = 0, b = 0},
+ ['theme_bu'] = {r = .4, g = .4, b = .4},
+}
+MODUI_VAR_DEFAULTS = MODUI_VAR
- -- TODO:
- -- combat text (todo)
- -- formatting
- -- modifiers on strings
- -- style
- -- url
- -- pvp
- -- raid
+local OnEvent = function(self, event, addon)
+ -- Copies default values to the saved variables
+ -- This makes sure existing saved variables get newly added options
+ local function MergeTable(source, destination)
+ if destination == nil then
+ destination = {}
+ end
- MODUI_VAR = {
- ['elements'] = {
- all = true,
- aura = {
- enable = true,
- statusbars = true,
- values = true,
- },
- chat = {
- enable = true,
- events = true,
- style = true,
- url = true,
- sysmsg = false, -- objective text goes in chat window
- colornames = true,
- },
- ecastbar = {
- enable = true,
- },
- error = {
- enable = true,
- quick = true,
- },
- mainbar = {
- enable = true,
- keypress = true,
- xp = true,
- horiz = false,
- },
- nameplate = {
- enable = true,
- aura = true,
- combo = true,
- friendlyclass = false,
- totem = true,
- },
- onebag = {
- enable = true,
- greys = true,
- },
- statusbar = {
- health = {r = 0, g = 1, b = 0},
- mana = {r = 0, g = 0, b = 1},
- rage = {r = 1, g = 0, b = 0},
- focus = {r = 1, g = .5, b = .25},
- energy = {r = 1, g = 1, b = 0},
- },
- tooltip = {
- enable = true,
- mouseanchor = false,
- disablefade = false,
- },
- tracker = {
- enable = true,
- },
- unit = {
- enable = true,
- castbar = true,
- player = true,
- target = true,
- party = true,
- tot = true,
- pet = true,
- auras = true,
- vcolour = true,
- rcolour = true,
- },
- talentbuilds = {
- enable = false,
- }
- },
- ['statusbar'] = {
- smooth = true,
- },
- ['theme'] = {r = 0, g = 0, b = 0},
- ['theme_bu'] = {r = .4, g = .4, b = .4},
- }
- MODUI_VAR_DEFAULTS = MODUI_VAR
+ for key, value in pairs(source) do
+ if type(value) == 'table' then
+ destination[key] = MergeTable(value, destination[key])
+ elseif destination[key] == nil then
+ destination[key] = value
+ end
+ end
+ return destination
+ end
- --
+ MODUI_VAR = MergeTable(MODUI_VAR_DEFAULTS, MODUI_VAR)
+end
+
+local e = CreateFrame'Frame'
+e:RegisterEvent'VARIABLES_LOADED'
+e:SetScript('OnEvent', OnEvent)
diff --git a/libraries/LibClassicCasterino/LibClassicCasterino.lua b/libraries/LibClassicCasterino/LibClassicCasterino.lua
deleted file mode 100755
index f26e9e2..0000000
--- a/libraries/LibClassicCasterino/LibClassicCasterino.lua
+++ /dev/null
@@ -1,3269 +0,0 @@
---[================[
-LibClassicCasterino
-Author: d87
---]================]
-
-
-local MAJOR, MINOR = "LibClassicCasterino", 10
-local lib = LibStub:NewLibrary(MAJOR, MINOR)
-if not lib then return end
-
-
-lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
-
-lib.frame = lib.frame or CreateFrame("Frame")
-
-local f = lib.frame
-local callbacks = lib.callbacks
-
-lib.casters = lib.casters or {} -- setmetatable({}, { __mode = "v" })
-local casters = lib.casters
-
--- local guidsToPurge = {}
-
-local UnitGUID = UnitGUID
-local bit_band = bit.band
-local GetTime = GetTime
-local CastingInfo = CastingInfo
-local ChannelInfo = ChannelInfo
-
-local COMBATLOG_OBJECT_TYPE_PLAYER = COMBATLOG_OBJECT_TYPE_PLAYER
-local classCasts
-local classChannels
-local talentDecreased
-local FireToUnits
-
-f:SetScript("OnEvent", function(self, event, ...)
- return self[event](self, event, ...)
-end)
-
-
-local spellNameToID = {}
-local NPCspellNameToID = {}
-local NPCSpells
-
-local castTimeCache = {}
-local castTimeCacheStartTimes = setmetatable({}, { __mode = "v" })
-
---[[
-function DUMPCASTS()
- local castedSpells = {}
- local counter = 0
- for id=1,40000 do
- local name, _, texture, castTime = GetSpellInfo(id)
- 136235 -- interface/icons/temp.blp -- Samwise Didier Icon aka missing icon
- if name and castTime > 500 and texture ~= 136235 then
- castedSpells[id] = true
- counter = counter + 1
- end
- end
- print(counter)
- NugHealthDB.LCDDUMP = castedSpells
-end
-]]
-
-local refreshCastTable = function(tbl, ...)
- local numArgs = select("#", ...)
- for i=1, numArgs do
- tbl[i] = select(i, ...)
- end
-end
-
-local makeCastUID = function(guid, spellName)
- local _, _, _, _, _, npcID = strsplit("-", guid);
- npcID = npcID or "Unknown"
- return npcID..spellName
-end
-
-local function CastStart(srcGUID, castType, spellName, spellID, overrideCastTime )
- local _, _, icon, castTime = GetSpellInfo(spellID)
- if castType == "CHANNEL" then
- castTime = classChannels[spellID]*1000
- local decreased = talentDecreased[spellID]
- if decreased then
- castTime = castTime - decreased
- end
- end
- if overrideCastTime then
- castTime = overrideCastTime
- end
- local now = GetTime()*1000
- local startTime = now
- local endTime = now + castTime
- local currentCast = casters[srcGUID]
-
- if currentCast then
- refreshCastTable(currentCast, castType, spellName, icon, startTime, endTime, spellID )
- else
- casters[srcGUID] = { castType, spellName, icon, startTime, endTime, spellID }
- end
-
-
- if castType == "CAST" then
- FireToUnits("UNIT_SPELLCAST_START", srcGUID)
- else
- FireToUnits("UNIT_SPELLCAST_CHANNEL_START", srcGUID)
- end
-end
-
-local function CastStop(srcGUID, castType, suffix )
- local currentCast = casters[srcGUID]
- if currentCast then
- castType = castType or currentCast[1]
-
- casters[srcGUID] = nil
-
- if castType == "CAST" then
- local event = "UNIT_SPELLCAST_"..suffix
- FireToUnits(event, srcGUID)
- else
- FireToUnits("UNIT_SPELLCAST_CHANNEL_STOP", srcGUID)
- end
- end
-end
-
-function f:COMBAT_LOG_EVENT_UNFILTERED(event)
-
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, arg3, arg4, arg5 = CombatLogGetCurrentEventInfo()
-
- local isSrcPlayer = bit_band(srcFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0
- if isSrcPlayer and spellID == 0 then
- spellID = spellNameToID[spellName]
- end
- if eventType == "SPELL_CAST_START" then
- if isSrcPlayer then
- local isCasting = classCasts[spellID]
- if isCasting then
- CastStart(srcGUID, "CAST", spellName, spellID)
- end
- else
- local castUID = makeCastUID(srcGUID, spellName)
- local cachedTime = castTimeCache[castUID]
- local spellID = NPCspellNameToID[spellName] -- just for the icon
- if not spellID then
- spellID = 2050
- end
- if cachedTime then
- CastStart(srcGUID, "CAST", spellName, spellID, cachedTime*1000)
- else
- castTimeCacheStartTimes[srcGUID..castUID] = GetTime()
- CastStart(srcGUID, "CAST", spellName, spellID, 1500) -- using default 1.5s cast time for now
- end
- end
- elseif eventType == "SPELL_CAST_FAILED" then
-
- CastStop(srcGUID, "CAST", "FAILED")
-
- elseif eventType == "SPELL_CAST_SUCCESS" then
- if isSrcPlayer and classChannels[spellID] then
- -- SPELL_CAST_SUCCESS can come right after AURA_APPLIED, so ignoring it
- return
- end
- if not isSrcPlayer then
- local castUID = makeCastUID(srcGUID, spellName)
- local cachedTime = castTimeCache[castUID]
- if not cachedTime then
- local restoredStartTime = castTimeCacheStartTimes[srcGUID..castUID]
- if restoredStartTime then
- local now = GetTime()
- local castTime = now - restoredStartTime
- if castTime < 10 then
- castTimeCache[castUID] = castTime
- end
- end
- end
- end
- CastStop(srcGUID, nil, "STOP")
-
- elseif eventType == "SPELL_INTERRUPT" then
-
- CastStop(dstGUID, nil, "INTERRUPTED")
- elseif eventType == "UNIT_DIED" then
- CastStop(dstGUID, nil, "FAILED")
-
- elseif eventType == "SPELL_AURA_APPLIED" or
- eventType == "SPELL_AURA_REFRESH" or
- eventType == "SPELL_AURA_APPLIED_DOSE"
- then
- if isSrcPlayer then
- local isChanneling = classChannels[spellID]
- if isChanneling then
- CastStart(srcGUID, "CHANNEL", spellName, spellID)
- end
- end
- elseif eventType == "SPELL_AURA_REMOVED" then
- if isSrcPlayer then
- local isChanneling = classChannels[spellID]
- if isChanneling then
- CastStop(srcGUID, "CHANNEL", "STOP")
- end
- end
- end
-
-end
-
--- local castTimeIncreases = {
--- [1714] = 60, -- Curse of Tongues (60%)
--- [5760] = 60, -- Mind-Numbing Poison (60%)
--- }
-local function IsSlowedDown(unit)
- for i=1,16 do
- local name, _, _, _, _, _, _, _, _, spellID = UnitAura(unit, i, "HARMFUL")
- if not name then return end
- if spellID == 1714 or spellID == 5760 then
- return true
- end
- end
-end
-
-function lib:UnitCastingInfo(unit)
- if unit == "player" then return CastingInfo() end
- local guid = UnitGUID(unit)
- local cast = casters[guid]
- if cast then
- local castType, name, icon, startTimeMS, endTimeMS, spellID = unpack(cast)
- if IsSlowedDown(unit) then
- local duration = endTimeMS - startTimeMS
- endTimeMS = startTimeMS + duration * 1.6
- end
- if castType == "CAST" and endTimeMS > GetTime()*1000 then
- local castID = nil
- return name, nil, icon, startTimeMS, endTimeMS, nil, castID, false, spellID
- end
- end
-end
-
-function lib:UnitChannelInfo(unit)
- if unit == "player" then return ChannelInfo() end
- local guid = UnitGUID(unit)
- local cast = casters[guid]
- if cast then
- local castType, name, icon, startTimeMS, endTimeMS, spellID = unpack(cast)
- -- Curse of Tongues doesn't matter that much for channels, skipping
- if castType == "CHANNEL" and endTimeMS > GetTime()*1000 then
- return name, nil, icon, startTimeMS, endTimeMS, nil, false, spellID
- end
- end
-end
-
-
-local Passthrough = function(self, event, unit)
- if unit == "player" then
- callbacks:Fire(event, unit)
- end
-end
-f.UNIT_SPELLCAST_START = Passthrough
-f.UNIT_SPELLCAST_DELAYED = Passthrough
-f.UNIT_SPELLCAST_STOP = Passthrough
-f.UNIT_SPELLCAST_FAILED = Passthrough
-f.UNIT_SPELLCAST_INTERRUPTED = Passthrough
-f.UNIT_SPELLCAST_CHANNEL_START = Passthrough
-f.UNIT_SPELLCAST_CHANNEL_UPDATE = Passthrough
-f.UNIT_SPELLCAST_CHANNEL_STOP = Passthrough
-
-function callbacks.OnUsed()
- f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
-
- f:RegisterEvent("UNIT_SPELLCAST_START")
- f:RegisterEvent("UNIT_SPELLCAST_DELAYED")
- f:RegisterEvent("UNIT_SPELLCAST_STOP")
- f:RegisterEvent("UNIT_SPELLCAST_FAILED")
- f:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
- f:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START")
- f:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE")
- f:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP")
-
- -- for unit lookup
- f:RegisterEvent("GROUP_ROSTER_UPDATE")
- f:RegisterEvent("NAME_PLATE_UNIT_ADDED")
- f:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
-end
-
-function callbacks.OnUnused()
- f:UnregisterAllEvents()
-end
-
-talentDecreased = {
- [25311] = 0.8, -- Corruption (while leveling)
- [17924] = 2, -- Soul Fire
- [25307] = 0.5, -- Shadow Bolt
- [25309] = 0.5, -- Immolate
- [691] = 4, -- Summon Felhunter
- [688] = 4, -- Summon Imp
- [697] = 4, -- Summon Voidwalker
- [712] = 4, -- Summon Succubus
-
- [15208] = 1, -- Lightning Bolt
- [10605] = 1, -- Chain Lightning
- [25357] = 0.5, -- Healing Wave
- [2645] = 2, -- Ghost Wolf
-
- [25304] = 0.5, -- Frostbolt
- [25306] = 0.5, -- Fireball
-
- [10934] = 0.5, -- Smite
- [15261] = 0.5, -- Holy Fire
- [6064] = 0.5, -- Heal
- [25314] = 0.5, -- Greater Heal
- [10876] = 0.5, -- Mana Burn
-
- [9912] = 0.5, -- Wrath
- [25298] = 0.5, -- Starfire
- [25297] = 0.5, -- Healing Touch
-}
-
-classCasts = {
- [25311] = 2, -- Corruption
- [6215] = 1.5, -- Fear
- [17928] = 2, -- Howl of Terror
- [18647] = 1.5, -- Banish
- [6366] = 3, -- Create Firestone (Lesser)
- [17951] = 3, -- Create Firestone
- [17952] = 3, -- Create Firestone (Greater)
- [17953] = 3, -- Create Firestone (Major)
- [28023] = 3, -- Create Healthstone
- [11729] = 3, -- Create Healthstone (Greater)
- [6202] = 3, -- Create Healthstone (Lesser)
- [11730] = 3, -- Create Healthstone (Major)
- [6201] = 3, -- Create Healthstone (Minor)
- [20755] = 3, -- Create Soulstone
- [20756] = 3, -- Create Soulstone (Greater)
- [20752] = 3, -- Create Soulstone (Lesser)
- [20757] = 3, -- Create Soulstone (Major)
- [693] = 3, -- Create Soulstone (Minor)
- [2362] = 5, -- Create Spellstone
- [17727] = 5, -- Create Spellstone (Greater)
- [17728] = 5, -- Create Spellstone (Major)
- [11726] = 3, -- Enslave Demon
- [126] = 5, -- Eye of Kilrogg
- [1122] = 2, -- Inferno
- [23161] = 3, -- Summon Dreadsteed
- [5784] = 3, -- Summon Felsteed
- [691] = 10, -- Summon Felhunter
- [688] = 10, -- Summon Imp
- [697] = 10, -- Summon Voidwalker
- [712] = 10, -- Summon Succubus
- [25309] = 2, -- Immolate
- [17923] = 1.5, -- Searing Pain
- [25307] = 3, -- Shadow Bolt
- [17924] = 4, -- Soul Fire
-
- [9853] = 1.5, -- Entangling Roots
- [18658] = 1.5, -- Hibernate
- [9901] = 1.5, -- Soothe Animal
- [25298] = 3.5, -- Starfire
- [18960] = 10, -- Teleport: Moonglade
- [9912] = 2, -- Wrath
- [25297] = 3.5, -- Healing Touch
- [20748] = 2, -- Rebirth
- [9858] = 2, -- Regrowth
-
- [28612] = 3, -- Conjure Food
- [759] = 3, -- Conjure Mana Agate
- [10053] = 3, -- Conjure Mana Citrine
- [3552] = 3, -- Conjure Mana Jade
- [10054] = 3, -- Conjure Mana Ruby
- [10140] = 3, -- Conjure Water
- [12826] = 1.5, -- Polymorph
- [28270] = 1.5, -- Polymorph: Cow
- [25306] = 3.5, -- Fireball
- [10216] = 3, -- Flamestrike
- [10207] = 1.5, -- Scorch
- [25304] = 3, -- Frostbolt
-
- [10876] = 3, -- Mana Burn
- [10955] = 1.5, -- Shackle Undead
- [10917] = 1.5, -- Flash Heal
- [25314] = 3, -- Greater Heal
- [6064] = 3, -- Heal
- [15261] = 3.5, -- Holy Fire
- [2053] = 2.5, -- Lesser Heal
- [25316] = 3, -- Prayer of Healing
- [20770] = 10, -- Resurrection
- [10934] = 2.5, -- Smite
- [10947] = 1.5, -- Mind Blast
- [10912] = 3, -- Mind Control
-
- [19943] = 1.5, -- Flash of Light
- [24239] = 1, -- Hammer of Wrath
- [25292] = 2.5, -- Holy Light
- [10318] = 2, -- Holy Wrath
- [20773] = 10, -- Redemption
- [23214] = 3, -- Summon Charger
- [13819] = 3, -- Summon Warhorse
- [10326] = 1.5, -- Turn Undead
-
- [10605] = 2.5, -- Chain Lightning
- [15208] = 3, -- Lightning Bolt
- [556] = 10, -- Astral Recall
- [6196] = 2, -- Far Sight
- [2645] = 3, -- Ghost Wolf
- [20777] = 10, -- Ancestral Spirit
- [10623] = 2.5, -- Chain Heal
- [25357] = 3, -- Healing Wave
- [10468] = 1.5, -- Lesser Healing Wave
-
- [1842] = 2, -- Disarm Trap
- -- missing poison creation
-
- [11605] = 1.5, -- Slam
-
- [20904] = 3, -- Aimed Shot
- [1002] = 2, -- Eyes of the Beast
- [2641] = 5, -- Dismiss pet
- [982] = 10, -- Revive Pet
- [14327] = 1.5, -- Scare Beast
-
- [8690] = 10, -- Hearthstone
- [4068] = 1, -- Iron Grenade
-
- -- Munts do not generate SPELL_CAST_START
- -- [8394] = 3, -- Striped Frostsaber
- -- [10793] = 3, -- Striped Nightsaber
-}
-
-classChannels = {
- [746] = 6, -- First Aid
- [13278] = 4, -- Gnomish Death Ray
- [20577] = 10, -- Cannibalize
- [19305] = 6, -- Starshards
-
- -- DRUID
- [17402] = 9.5, -- Hurricane
- [9863] = 9.5, -- Tranquility
-
- -- HUNTER
- [6197] = 60, -- Eagle Eye
- [13544] = 5, -- Mend Pet
- [1515] = 20, -- Tame Beast
- [1002] = 60, -- Eyes of the Beast
- [14295] = 6, -- Volley
-
- -- MAGE
- [25345] = 5, -- Arcane Missiles
- [10187] = 8, -- Blizzard
- [12051] = 8, -- Evocation
-
- -- PRIEST
- [18807] = 3, -- Mind Flay
- [2096] = 60, -- Mind Vision
- [10912] = 3, -- Mind Control
-
- -- WARLOCK
- [126] = 45, -- Eye of Kilrogg
- [11700] = 4.5, -- Drain Life
- [11704] = 4.5, -- Drain Mana
- [11675] = 14.5, -- Drain Soul
- [11678] = 7.5, -- Rain of Fire
- [11684] = 15, -- Hellfire
- [11695] = 10, -- Health Funnel
-}
-
-for id in pairs(classCasts) do
- spellNameToID[GetSpellInfo(id)] = id
- -- AddSpellNameRecognition(id)
-end
-for id in pairs(classChannels) do
- spellNameToID[GetSpellInfo(id)] = id
- -- AddSpellNameRecognition(id)
-end
-
-local partyGUIDtoUnit = {}
-local raidGUIDtoUnit = {}
-local nameplateGUIDtoUnit = {}
-local commonUnits = {
- -- "player",
- "target",
- "targettarget",
- "pet",
-}
-
-function f:NAME_PLATE_UNIT_ADDED(event, unit)
- local unitGUID = UnitGUID(unit)
- nameplateGUIDtoUnit[unitGUID] = unit
-end
-
-
-function f:NAME_PLATE_UNIT_REMOVED(event, unit)
- local unitGUID = UnitGUID(unit) -- Unit still exists at this point
- nameplateGUIDtoUnit[unitGUID] = nil
-end
-
-function f:GROUP_ROSTER_UPDATE()
- table.wipe(partyGUIDtoUnit)
- table.wipe(raidGUIDtoUnit)
- if IsInGroup() then
- for i=1,4 do
- local unit = "party"..i
- local guid = UnitGUID(unit)
- if guid then
- partyGUIDtoUnit[guid] = unit
- end
- end
- end
- if IsInRaid() then
- for i=1,40 do
- local unit = "raid"..i
- local guid = UnitGUID(unit)
- if guid then
- raidGUIDtoUnit[guid] = unit
- end
- end
- end
-end
-
-FireToUnits = function(event, guid, ...)
- for _, unit in ipairs(commonUnits) do
- if UnitGUID(unit) == guid then
- callbacks:Fire(event, unit, ...)
- end
- end
-
- local partyUnit = partyGUIDtoUnit[guid]
- if partyUnit then
- callbacks:Fire(event, partyUnit, ...)
- end
-
- local raidUnit = raidGUIDtoUnit[guid]
- if raidUnit then
- callbacks:Fire(event, raidUnit, ...)
- end
-
- local nameplateUnit = nameplateGUIDtoUnit[guid]
- if nameplateUnit then
- callbacks:Fire(event, nameplateUnit, ...)
- end
-end
-
-
-if lib.NPCSpellsTimer then
- lib.NPCSpellsTimer:Cancel()
-end
-
-local prevID
-local counter = 0
-local function processNPCSpellTable()
- counter = 0
- local index, id = next(NPCSpells, prevID)
- while (id and counter < 150) do
- NPCspellNameToID[GetSpellInfo(id)] = id
-
- counter = counter + 1
- prevID = index
- index, id = next(NPCSpells, prevID)
- end
- if (id) then
- C_Timer.After(1, processNPCSpellTable)
- end
-end
-lib.NPCSpellsTimer = C_Timer.NewTimer(6.5, processNPCSpellTable)
-
-NPCSpells = {
- 10215,
- 16587,
- 16651,
- 20874,
- 16971,
- 10695,
- 7428,
- 30152,
- 7588,
- 15238,
- 11399,
- 11431,
- 7828,
- 23242,
- 7892,
- 15910,
- 8004,
- 11975,
- 16102,
- 12039,
- 12071,
- 12167,
- 20299,
- 20427,
- 513,
- 16588,
- 4165,
- 20811,
- 20875,
- 25034,
- 529,
- 21067,
- 21131,
- 8552,
- 8712,
- 547,
- 8776,
- 555,
- 8936,
- 569,
- 9224,
- 4629,
- 581,
- 585,
- 587,
- 591,
- 2371,
- 13607,
- 2387,
- 2395,
- 9672,
- 27658,
- 27722,
- 13895,
- 9928,
- 4981,
- 19980,
- 14119,
- 635,
- 2547,
- 639,
- 10248,
- 2579,
- 647,
- 5189,
- 20876,
- 16973,
- 2667,
- 17293,
- 10792,
- 17613,
- 2739,
- 11016,
- 11048,
- 693,
- 15207,
- 697,
- 2795,
- 5605,
- 18445,
- 707,
- 2835,
- 711,
- 11400,
- 22924,
- 5781,
- 23308,
- 15783,
- 735,
- 27659,
- 23628,
- 19725,
- 16071,
- 19981,
- 12072,
- 28299,
- 759,
- 3067,
- 3075,
- 3083,
- 3091,
- 16590,
- 6213,
- 3115,
- 8489,
- 25292,
- 8617,
- 17294,
- 8681,
- 6405,
- 6421,
- 8809,
- 6469,
- 8873,
- 8905,
- 6517,
- 3275,
- 26444,
- 3323,
- 3331,
- 837,
- 6725,
- 13480,
- 6757,
- 3387,
- 9481,
- 9513,
- 13640,
- 855,
- 857,
- 3443,
- 6917,
- 867,
- 6949,
- 3491,
- 3507,
- 9961,
- 9993,
- 24141,
- 7077,
- 3563,
- 895,
- 7221,
- 16655,
- 3635,
- 25037,
- 913,
- 915,
- 25357,
- 17231,
- 10697,
- 10793,
- 939,
- 15048,
- 943,
- 11017,
- 15208,
- 26381,
- 26445,
- 11209,
- 959,
- 3843,
- 3851,
- 3859,
- 22798,
- 11433,
- 18831,
- 15592,
- 7861,
- 23310,
- 7893,
- 27725,
- 8005,
- 16072,
- 12073,
- 4067,
- 20431,
- 1026,
- 16528,
- 16656,
- 8362,
- 16784,
- 12521,
- 1062,
- 8618,
- 12745,
- 8682,
- 1090,
- 1094,
- 1098,
- 1106,
- 30093,
- 8938,
- 1122,
- 9002,
- 13225,
- 22415,
- 18448,
- 18576,
- 22799,
- 22991,
- 9482,
- 23247,
- 4950,
- 24399,
- 5110,
- 5174,
- 16657,
- 20816,
- 29134,
- 5270,
- 17169,
- 10698,
- 25807,
- 17745,
- 15049,
- 26063,
- 11082,
- 15241,
- 15305,
- 22480,
- 18449,
- 11338,
- 15497,
- 5782,
- 1450,
- 23248,
- 23312,
- 15785,
- 23632,
- 12074,
- 24208,
- 20433,
- 16402,
- 16594,
- 16658,
- 8363,
- 8395,
- 12522,
- 6278,
- 16978,
- 6310,
- 6358,
- 6422,
- 17618,
- 6470,
- 6518,
- 9003,
- 13226,
- 6630,
- 13322,
- 13482,
- 6758,
- 9483,
- 13642,
- 23249,
- 23313,
- 9739,
- 9771,
- 6950,
- 19666,
- 6982,
- 9931,
- 9995,
- 14122,
- 10059,
- 20434,
- 16531,
- 10347,
- 16659,
- 24913,
- 25297,
- 1842,
- 17235,
- 10699,
- 10795,
- 10955,
- 15114,
- 15242,
- 7638,
- 18451,
- 11339,
- 15498,
- 15530,
- 7782,
- 23250,
- 11659,
- 23442,
- 19667,
- 2006,
- 2010,
- 12075,
- 8102,
- 24274,
- 20435,
- 2052,
- 2060,
- 20627,
- 16596,
- 16660,
- 8364,
- 12491,
- 12523,
- 16980,
- 25298,
- 21331,
- 12747,
- 8780,
- 8812,
- 8940,
- 9004,
- 13227,
- 13323,
- 13419,
- 22867,
- 9484,
- 23187,
- 2396,
- 9612,
- 13899,
- 13931,
- 19860,
- 9964,
- 28242,
- 28306,
- 24275,
- 2540,
- 2548,
- 14379,
- 5159,
- 10348,
- 16661,
- 16725,
- 2660,
- 2668,
- 10700,
- 10796,
- 2740,
- 2812,
- 18453,
- 11340,
- 2860,
- 15659,
- 2908,
- 11660,
- 23508,
- 2948,
- 15915,
- 19669,
- 16075,
- 12044,
- 12076,
- 3068,
- 3084,
- 3092,
- 6199,
- 6215,
- 8365,
- 12492,
- 3132,
- 3140,
- 29331,
- 12684,
- 21397,
- 8717,
- 25748,
- 6471,
- 6487,
- 8941,
- 6535,
- 3276,
- 3292,
- 13228,
- 6631,
- 3324,
- 3332,
- 22677,
- 3356,
- 3364,
- 3372,
- 13548,
- 9485,
- 13612,
- 13644,
- 3420,
- 9613,
- 3436,
- 23509,
- 13836,
- 13868,
- 6951,
- 27860,
- 3492,
- 9901,
- 9933,
- 9997,
- 28244,
- 7079,
- 3564,
- 14380,
- 20630,
- 7223,
- 16663,
- 20822,
- 3636,
- 3644,
- 3652,
- 16983,
- 29332,
- 10605,
- 7383,
- 10701,
- 10733,
- 17559,
- 3748,
- 26069,
- 11021,
- 11085,
- 18199,
- 7639,
- 7655,
- 3844,
- 3852,
- 3860,
- 3868,
- 7751,
- 22870,
- 7799,
- 7863,
- 11661,
- 11725,
- 23510,
- 23638,
- 15980,
- 19863,
- 12045,
- 8087,
- 8103,
- 4068,
- 16,
- 16408,
- 8238,
- 16600,
- 16664,
- 16728,
- 8398,
- 12525,
- 16984,
- 21143,
- 12653,
- 8686,
- 17496,
- 17560,
- 8814,
- 26006,
- 26070,
- 26134,
- 4520,
- 13229,
- 18392,
- 18456,
- 18584,
- 13421,
- 13485,
- 22999,
- 23063,
- 9614,
- 23639,
- 13901,
- 13933,
- 27990,
- 19864,
- 9966,
- 20312,
- 16409,
- 20568,
- 10318,
- 5176,
- 16665,
- 16729,
- 16985,
- 21144,
- 10702,
- 10798,
- 17561,
- 21848,
- 26071,
- 15117,
- 22168,
- 15245,
- 18457,
- 11342,
- 22744,
- 15533,
- 23000,
- 11534,
- 5784,
- 27287,
- 11726,
- 15853,
- 11790,
- 19865,
- 24024,
- 12046,
- 12078,
- 28311,
- 20313,
- 20377,
- 16410,
- 16730,
- 8399,
- 12526,
- 25112,
- 16986,
- 29335,
- 25304,
- 8687,
- 17434,
- 25688,
- 17562,
- 21913,
- 26072,
- 18138,
- 13230,
- 13262,
- 6648,
- 18458,
- 6728,
- 22937,
- 13582,
- 13646,
- 27608,
- 9743,
- 27992,
- 9935,
- 20314,
- 20378,
- 7224,
- 16667,
- 16731,
- 16795,
- 7288,
- 16987,
- 10703,
- 17435,
- 10799,
- 17563,
- 17883,
- 15118,
- 11343,
- 7752,
- 15534,
- 22938,
- 7800,
- 15662,
- 7896,
- 7928,
- 7960,
- 15982,
- 8008,
- 19867,
- 12047,
- 12079,
- 8104,
- 20315,
- 20379,
- 2053,
- 2061,
- 8272,
- 4153,
- 20763,
- 16732,
- 8400,
- 16988,
- 12655,
- 17180,
- 21403,
- 8688,
- 17564,
- 21787,
- 8880,
- 17820,
- 9200,
- 9232,
- 13519,
- 9456,
- 13583,
- 2389,
- 2397,
- 9616,
- 19484,
- 13935,
- 19868,
- 9968,
- 24091,
- 10096,
- 2541,
- 2549,
- 16413,
- 5161,
- 5177,
- 20764,
- 5273,
- 2645,
- 25307,
- 2661,
- 10704,
- 10768,
- 5401,
- 17565,
- 2741,
- 11024,
- 18205,
- 2837,
- 15535,
- 11568,
- 27291,
- 2941,
- 3013,
- 6041,
- 20317,
- 20381,
- 16367,
- 8209,
- 3085,
- 3093,
- 6201,
- 3109,
- 3117,
- 16798,
- 12528,
- 8465,
- 16990,
- 12624,
- 8593,
- 3205,
- 17566,
- 3229,
- 3237,
- 6521,
- 17950,
- 3277,
- 3293,
- 3325,
- 3333,
- 22749,
- 22813,
- 3373,
- 6777,
- 9489,
- 13648,
- 3421,
- 3429,
- 6905,
- 3477,
- 3493,
- 3501,
- 9937,
- 10001,
- 7081,
- 20318,
- 20382,
- 16415,
- 3605,
- 20702,
- 20830,
- 16799,
- 7289,
- 16991,
- 25309,
- 10673,
- 10705,
- 17503,
- 17567,
- 7481,
- 10961,
- 17951,
- 7641,
- 22430,
- 18399,
- 3845,
- 3861,
- 15472,
- 7753,
- 15536,
- 7801,
- 7817,
- 15664,
- 15728,
- 11665,
- 15792,
- 11729,
- 15856,
- 11921,
- 11985,
- 12049,
- 12081,
- 8105,
- 4061,
- 4069,
- 20319,
- 16336,
- 24670,
- 20831,
- 8402,
- 66,
- 16992,
- 8690,
- 8786,
- 17952,
- 4506,
- 18656,
- 1179,
- 13617,
- 13745,
- 13841,
- 13905,
- 13937,
- 4954,
- 14033,
- 9970,
- 20320,
- 20384,
- 10258,
- 10322,
- 5178,
- 25055,
- 16993,
- 25311,
- 10674,
- 10706,
- 17505,
- 30046,
- 15057,
- 30174,
- 17953,
- 18081,
- 1403,
- 18401,
- 18657,
- 11410,
- 15537,
- 11538,
- 15665,
- 1451,
- 23392,
- 11730,
- 11762,
- 27871,
- 11922,
- 16081,
- 12050,
- 12082,
- 20321,
- 20385,
- 16418,
- 8275,
- 6202,
- 12466,
- 20897,
- 16866,
- 12562,
- 16994,
- 8595,
- 8691,
- 17506,
- 6490,
- 18082,
- 18402,
- 26656,
- 18658,
- 13522,
- 6778,
- 13746,
- 9811,
- 9875,
- 14034,
- 10003,
- 7098,
- 28448,
- 20322,
- 20386,
- 7162,
- 16419,
- 113,
- 20770,
- 10451,
- 16995,
- 17187,
- 10675,
- 10707,
- 116,
- 7434,
- 25953,
- 10963,
- 118,
- 18211,
- 22434,
- 18403,
- 7754,
- 11443,
- 7786,
- 7802,
- 7818,
- 15730,
- 11667,
- 15794,
- 11763,
- 7962,
- 7978,
- 7994,
- 11923,
- 16082,
- 126,
- 12083,
- 8106,
- 8138,
- 20323,
- 12243,
- 2054,
- 20707,
- 16868,
- 21027,
- 133,
- 8532,
- 134,
- 8596,
- 12883,
- 8820,
- 25954,
- 8980,
- 4539,
- 143,
- 18404,
- 145,
- 18596,
- 22883,
- 22947,
- 2366,
- 2406,
- 13939,
- 9876,
- 4971,
- 9972,
- 2542,
- 20388,
- 10228,
- 10324,
- 5179,
- 5195,
- 14515,
- 10452,
- 16869,
- 5275,
- 2662,
- 10676,
- 10708,
- 5403,
- 21668,
- 10964,
- 172,
- 18149,
- 26403,
- 5627,
- 2838,
- 11444,
- 2878,
- 11604,
- 11668,
- 184,
- 23652,
- 11892,
- 19877,
- 19941,
- 12052,
- 12084,
- 20389,
- 3070,
- 24612,
- 8245,
- 8277,
- 3110,
- 12468,
- 20901,
- 25124,
- 25316,
- 8693,
- 3206,
- 17510,
- 8789,
- 8949,
- 205,
- 18086,
- 3294,
- 18214,
- 22373,
- 6635,
- 3326,
- 3334,
- 22757,
- 13524,
- 9461,
- 3398,
- 13620,
- 13748,
- 23461,
- 6907,
- 23653,
- 9813,
- 3494,
- 3502,
- 19942,
- 10005,
- 20326,
- 14292,
- 3606,
- 20902,
- 25125,
- 7355,
- 10677,
- 10709,
- 3718,
- 14900,
- 10837,
- 10869,
- 3750,
- 10933,
- 10965,
- 26085,
- 15124,
- 7643,
- 18407,
- 22566,
- 3854,
- 3862,
- 7739,
- 7755,
- 7771,
- 15668,
- 11605,
- 7867,
- 7931,
- 11829,
- 16084,
- 19943,
- 12053,
- 12085,
- 4054,
- 4062,
- 8139,
- 20327,
- 16340,
- 4094,
- 8246,
- 16552,
- 8342,
- 16744,
- 8406,
- 25126,
- 21159,
- 8598,
- 271,
- 8694,
- 8758,
- 25958,
- 8950,
- 18088,
- 13237,
- 18408,
- 22567,
- 22695,
- 22759,
- 13653,
- 9654,
- 9750,
- 9814,
- 13941,
- 19816,
- 9942,
- 9974,
- 20008,
- 24359,
- 10166,
- 14293,
- 10326,
- 5180,
- 5196,
- 16745,
- 20904,
- 25127,
- 5276,
- 331,
- 332,
- 10678,
- 10710,
- 21544,
- 339,
- 21736,
- 10934,
- 5484,
- 26087,
- 15125,
- 18089,
- 348,
- 18217,
- 18409,
- 5676,
- 15797,
- 5884,
- 23592,
- 16053,
- 20009,
- 12086,
- 6060,
- 20201,
- 20329,
- 20393,
- 24680,
- 16554,
- 20777,
- 16746,
- 6252,
- 25128,
- 21097,
- 21161,
- 17194,
- 6412,
- 25704,
- 403,
- 25960,
- 8951,
- 22313,
- 9143,
- 18410,
- 22761,
- 421,
- 6780,
- 13622,
- 9591,
- 19434,
- 13846,
- 13878,
- 9879,
- 10007,
- 7068,
- 7084,
- 7132,
- 20394,
- 14326,
- 20714,
- 10391,
- 455,
- 29160,
- 457,
- 458,
- 459,
- 17195,
- 10679,
- 10711,
- 7420,
- 7484,
- 17707,
- 470,
- 471,
- 472,
- 474,
- 15254,
- 18411,
- 11479,
- 27241,
- 491,
- 15734,
- 11671,
- 19435,
- 7948,
- 11895,
- 19755,
- 12055,
- 12087,
- 507,
- 12151,
- 509,
- 20395,
- 12279,
- 2055,
- 4141,
- 12471,
- 8408,
- 4221,
- 25130,
- 21099,
- 536,
- 8600,
- 25514,
- 8760,
- 17708,
- 556,
- 21931,
- 26218,
- 18412,
- 578,
- 18540,
- 13399,
- 13463,
- 18796,
- 13527,
- 23083,
- 596,
- 598,
- 13687,
- 23339,
- 606,
- 13815,
- 13943,
- 9912,
- 14103,
- 2543,
- 20396,
- 14327,
- 16429,
- 2575,
- 10328,
- 20716,
- 10392,
- 5213,
- 2663,
- 10680,
- 10712,
- 17453,
- 10840,
- 17709,
- 25963,
- 686,
- 15095,
- 690,
- 692,
- 698,
- 700,
- 18413,
- 2823,
- 18541,
- 710,
- 712,
- 11416,
- 11480,
- 18989,
- 724,
- 11672,
- 15799,
- 15863,
- 2951,
- 19821,
- 3007,
- 12056,
- 12088,
- 16247,
- 12248,
- 12280,
- 3079,
- 3087,
- 3095,
- 20717,
- 25004,
- 29163,
- 3143,
- 3207,
- 8793,
- 6461,
- 25964,
- 3263,
- 818,
- 9081,
- 6637,
- 6653,
- 3335,
- 6717,
- 13464,
- 13528,
- 18990,
- 9657,
- 6909,
- 6925,
- 19566,
- 6957,
- 3495,
- 14008,
- 3511,
- 10009,
- 20078,
- 7101,
- 20270,
- 3567,
- 20398,
- 3583,
- 3607,
- 7277,
- 3655,
- 10681,
- 10713,
- 7421,
- 930,
- 932,
- 10841,
- 10873,
- 25965,
- 10969,
- 15128,
- 18159,
- 7629,
- 7645,
- 18351,
- 18415,
- 3847,
- 3855,
- 3863,
- 968,
- 11417,
- 7821,
- 7853,
- 984,
- 7901,
- 990,
- 7949,
- 996,
- 1002,
- 16056,
- 19887,
- 20015,
- 12089,
- 4055,
- 28461,
- 20399,
- 8282,
- 24942,
- 12505,
- 12537,
- 29229,
- 1064,
- 25262,
- 4286,
- 1084,
- 1088,
- 12825,
- 8762,
- 8858,
- 1112,
- 21935,
- 1124,
- 22127,
- 4526,
- 18416,
- 13529,
- 18992,
- 13657,
- 13689,
- 9658,
- 13817,
- 23663,
- 9818,
- 13945,
- 4974,
- 20016,
- 28270,
- 24239,
- 10138,
- 28526,
- 20400,
- 16497,
- 16561,
- 20720,
- 20848,
- 5262,
- 17009,
- 25263,
- 17137,
- 10682,
- 10714,
- 17393,
- 10842,
- 10874,
- 25967,
- 18417,
- 18609,
- 11418,
- 23088,
- 1452,
- 11642,
- 15801,
- 27567,
- 15865,
- 11802,
- 23664,
- 11962,
- 19889,
- 20017,
- 12090,
- 16249,
- 28463,
- 20401,
- 1536,
- 1540,
- 16498,
- 8283,
- 6222,
- 20849,
- 6254,
- 6270,
- 17138,
- 6350,
- 6366,
- 21425,
- 6414,
- 12890,
- 25968,
- 6510,
- 8955,
- 6638,
- 18418,
- 22705,
- 13530,
- 23089,
- 6814,
- 6894,
- 27632,
- 13882,
- 19890,
- 9979,
- 10011,
- 28272,
- 10139,
- 20402,
- 1804,
- 10395,
- 25073,
- 17203,
- 10683,
- 10715,
- 17459,
- 7454,
- 10875,
- 25969,
- 17843,
- 26097,
- 11067,
- 11131,
- 7630,
- 1916,
- 18419,
- 11355,
- 11419,
- 27057,
- 23090,
- 11643,
- 15802,
- 7918,
- 7934,
- 23666,
- 11899,
- 16058,
- 12059,
- 12091,
- 24242,
- 16250,
- 8142,
- 20403,
- 28785,
- 16564,
- 8348,
- 8444,
- 2120,
- 21171,
- 12667,
- 8604,
- 17460,
- 8764,
- 30001,
- 25970,
- 26098,
- 8988,
- 18420,
- 22643,
- 27058,
- 2368,
- 23091,
- 9532,
- 13659,
- 13819,
- 23667,
- 13915,
- 9852,
- 9916,
- 9980,
- 20020,
- 10140,
- 2544,
- 20404,
- 2576,
- 16565,
- 16629,
- 10396,
- 24947,
- 20916,
- 17141,
- 2664,
- 10684,
- 10716,
- 17461,
- 10844,
- 10876,
- 25971,
- 15067,
- 5567,
- 26419,
- 18421,
- 2824,
- 11356,
- 11420,
- 27059,
- 15611,
- 11548,
- 23220,
- 2912,
- 11836,
- 19701,
- 23860,
- 16059,
- 12060,
- 12092,
- 6063,
- 6127,
- 3072,
- 3080,
- 3088,
- 3096,
- 6223,
- 3120,
- 6255,
- 8445,
- 17142,
- 6351,
- 6415,
- 8797,
- 6463,
- 25972,
- 3256,
- 3264,
- 9053,
- 3296,
- 3320,
- 3328,
- 6671,
- 22709,
- 3368,
- 3376,
- 3400,
- 3408,
- 23221,
- 13692,
- 27572,
- 3472,
- 9853,
- 3496,
- 3504,
- 28148,
- 10013,
- 3552,
- 10205,
- 3584,
- 20790,
- 7279,
- 7295,
- 7359,
- 3696,
- 10717,
- 7439,
- 3728,
- 7487,
- 25973,
- 15228,
- 15292,
- 3840,
- 3848,
- 3856,
- 3864,
- 3872,
- 22902,
- 7791,
- 15612,
- 23094,
- 7855,
- 7919,
- 7935,
- 7951,
- 7967,
- 27829,
- 23862,
- 16060,
- 24054,
- 20023,
- 12093,
- 4064,
- 24374,
- 20407,
- 20535,
- 8286,
- 20791,
- 12509,
- 8446,
- 21047,
- 21175,
- 8606,
- 4320,
- 17464,
- 8766,
- 25974,
- 26102,
- 30732,
- 30156,
- 30096,
- 30091,
- 18424,
- 9472,
- 30047,
- 16742,
- 29334,
- 29333,
- 13501,
- 5272,
- 28995,
- 18153,
- 28739,
- 13661,
- 13693,
- 7489,
- 8467,
- 28505,
- 28487,
- 9758,
- 28482,
- 13917,
- 23799,
- 6297,
- 4960,
- 9950,
- 3693,
- 14109,
- 20698,
- 28462,
- 461,
- 28328,
- 28305,
- 10206,
- 28304,
- 20536,
- 6651,
- 28286,
- 16633,
- 20792,
- 28271,
- 28243,
- 25079,
- 5264,
- 5280,
- 28210,
- 10622,
- 28209,
- 10686,
- 10718,
- 28208,
- 17465,
- 28207,
- 28205,
- 28146,
- 28133,
- 15037,
- 28089,
- 5504,
- 1096,
- 27891,
- 18105,
- 27890,
- 15261,
- 15293,
- 27870,
- 21160,
- 22945,
- 3243,
- 11358,
- 27830,
- 27794,
- 15549,
- 27760,
- 27724,
- 27723,
- 27721,
- 23224,
- 9435,
- 27660,
- 3503,
- 27637,
- 15869,
- 27624,
- 15933,
- 27831,
- 23800,
- 19769,
- 28023,
- 27588,
- 18440,
- 12062,
- 5186,
- 6064,
- 4065,
- 27527,
- 27106,
- 27100,
- 16381,
- 27098,
- 24696,
- 16570,
- 26616,
- 20793,
- 19851,
- 4983,
- 12542,
- 16168,
- 26437,
- 26436,
- 26435,
- 8607,
- 17274,
- 12766,
- 26434,
- 6416,
- 26433,
- 8799,
- 26432,
- 26431,
- 25976,
- 21945,
- 26430,
- 26429,
- 26407,
- 9055,
- 12066,
- 23246,
- 26298,
- 24093,
- 6656,
- 26192,
- 26103,
- 26086,
- 13438,
- 3108,
- 26055,
- 16724,
- 20035,
- 26010,
- 23161,
- 23225,
- 25985,
- 691,
- 25983,
- 6896,
- 13822,
- 20819,
- 25981,
- 27832,
- 23801,
- 25979,
- 24139,
- 25183,
- 9983,
- 10015,
- 25966,
- 25962,
- 25961,
- 7120,
- 25959,
- 10207,
- 25849,
- 25841,
- 25839,
- 25808,
- 25804,
- 20794,
- 25722,
- 25664,
- 25081,
- 20821,
- 7328,
- 23316,
- 10623,
- 25424,
- 10687,
- 10719,
- 16006,
- 25347,
- 25314,
- 25306,
- 7488,
- 10911,
- 25977,
- 25181,
- 25180,
- 25178,
- 25177,
- 25162,
- 15230,
- 15262,
- 15294,
- 18363,
- 25146,
- 25129,
- 20829,
- 7728,
- 22336,
- 23085,
- 7776,
- 23391,
- 25082,
- 23098,
- 25080,
- 25078,
- 25074,
- 25072,
- 25054,
- 25052,
- 27641,
- 7952,
- 11839,
- 25030,
- 8000,
- 8016,
- 25018,
- 16094,
- 24997,
- 12063,
- 24995,
- 16969,
- 24314,
- 24914,
- 24912,
- 24903,
- 24902,
- 24901,
- 8256,
- 24801,
- 24706,
- 8352,
- 24668,
- 4209,
- 12543,
- 2121,
- 16652,
- 24418,
- 24358,
- 24334,
- 23102,
- 24209,
- 24189,
- 8736,
- 8768,
- 8800,
- 24173,
- 24140,
- 25978,
- 24138,
- 10329,
- 24136,
- 26234,
- 18108,
- 24092,
- 24011,
- 7395,
- 23954,
- 5274,
- 23804,
- 13375,
- 23803,
- 13439,
- 23802,
- 13503,
- 23787,
- 2369,
- 23665,
- 13631,
- 2393,
- 13695,
- 23662,
- 23650,
- 23637,
- 19452,
- 23636,
- 13887,
- 23633,
- 9856,
- 9888,
- 9920,
- 9952,
- 23629,
- 20028,
- 23531,
- 23530,
- 6413,
- 10144,
- 2545,
- 3336,
- 10771,
- 5137,
- 2577,
- 5169,
- 5185,
- 2601,
- 3570,
- 8153,
- 25083,
- 5265,
- 2641,
- 23381,
- 23338,
- 2665,
- 2673,
- 10720,
- 17405,
- 25659,
- 23315,
- 23314,
- 10880,
- 10912,
- 2737,
- 23309,
- 5505,
- 23252,
- 23251,
- 26299,
- 23243,
- 15263,
- 15295,
- 23241,
- 15119,
- 23239,
- 23238,
- 2841,
- 15451,
- 23228,
- 23227,
- 23223,
- 5761,
- 15647,
- 19069,
- 5809,
- 15743,
- 23222,
- 23219,
- 23214,
- 23206,
- 23189,
- 15935,
- 19645,
- 15999,
- 16031,
- 23130,
- 19862,
- 20773,
- 20029,
- 12096,
- 24252,
- 23093,
- 23092,
- 23087,
- 6129,
- 3073,
- 3081,
- 23086,
- 3097,
- 3105,
- 20797,
- 3121,
- 6257,
- 25084,
- 23084,
- 6305,
- 17086,
- 23030,
- 6353,
- 23013,
- 23012,
- 22990,
- 6417,
- 22989,
- 22949,
- 3233,
- 22946,
- 25980,
- 22909,
- 22876,
- 22869,
- 22868,
- 22866,
- 3297,
- 18238,
- 22796,
- 3321,
- 22790,
- 3337,
- 18166,
- 22717,
- 13440,
- 22750,
- 6753,
- 13536,
- 9473,
- 22724,
- 9744,
- 23229,
- 3513,
- 20405,
- 7448,
- 6897,
- 22718,
- 22710,
- 22686,
- 22678,
- 13952,
- 9889,
- 3505,
- 19902,
- 9985,
- 7057,
- 3537,
- 22665,
- 22662,
- 7121,
- 22661,
- 22651,
- 22539,
- 22478,
- 22458,
- 22425,
- 16639,
- 22421,
- 22414,
- 22357,
- 25085,
- 3657,
- 22334,
- 22275,
- 22167,
- 13900,
- 3697,
- 10721,
- 22048,
- 21971,
- 7457,
- 10849,
- 10881,
- 17727,
- 15040,
- 8791,
- 17919,
- 16080,
- 3695,
- 18111,
- 15232,
- 18239,
- 15296,
- 21807,
- 18431,
- 3849,
- 3857,
- 7729,
- 7745,
- 7761,
- 21667,
- 7793,
- 21565,
- 15648,
- 21559,
- 7857,
- 21549,
- 21402,
- 21369,
- 19391,
- 21367,
- 5514,
- 21162,
- 27837,
- 21096,
- 19775,
- 21073,
- 12001,
- 21072,
- 20031,
- 21071,
- 21068,
- 8129,
- 21066,
- 19774,
- 21048,
- 20903,
- 20543,
- 4130,
- 20900,
- 16640,
- 20890,
- 10696,
- 16083,
- 25086,
- 16960,
- 20827,
- 20826,
- 20825,
- 20824,
- 12737,
- 8674,
- 20823,
- 25662,
- 8770,
- 8802,
- 20820,
- 17728,
- 25982,
- 20817,
- 17920,
- 8994,
- 20815,
- 18112,
- 20813,
- 18240,
- 15859,
- 5188,
- 17509,
- 3210,
- 18560,
- 22719,
- 6576,
- 3694,
- 20787,
- 20776,
- 9474,
- 23103,
- 20772,
- 20765,
- 20762,
- 20757,
- 20756,
- 20755,
- 20752,
- 13857,
- 20748,
- 20747,
- 9858,
- 20742,
- 4962,
- 9954,
- 9986,
- 20032,
- 5026,
- 20739,
- 20733,
- 28478,
- 20696,
- 5106,
- 20695,
- 20692,
- 20685,
- 16965,
- 16641,
- 20800,
- 20669,
- 10466,
- 20665,
- 5266,
- 20657,
- 20656,
- 20629,
- 20626,
- 20012,
- 20609,
- 20604,
- 17473,
- 20565,
- 10850,
- 2672,
- 20432,
- 10946,
- 20430,
- 17921,
- 20429,
- 1385,
- 20428,
- 20426,
- 15265,
- 11202,
- 18617,
- 20408,
- 20406,
- 5666,
- 22720,
- 20397,
- 20392,
- 20391,
- 15585,
- 20390,
- 20387,
- 20383,
- 1453,
- 3065,
- 3069,
- 5669,
- 8366,
- 3133,
- 18439,
- 6296,
- 11986,
- 14106,
- 16033,
- 17140,
- 6352,
- 15267,
- 20033,
- 1513,
- 10685,
- 20324,
- 8782,
- 19859,
- 12258,
- 24576,
- 16450,
- 8259,
- 20316,
- 16642,
- 20801,
- 6632,
- 11341,
- 6274,
- 8483,
- 6306,
- 11357,
- 16597,
- 3361,
- 13321,
- 3377,
- 20296,
- 6418,
- 17196,
- 3397,
- 13628,
- 20051,
- 25984,
- 26048,
- 17922,
- 20014,
- 15979,
- 13948,
- 3497,
- 18242,
- 6626,
- 4961,
- 18434,
- 11981,
- 6690,
- 22721,
- 13442,
- 12061,
- 18818,
- 13538,
- 12077,
- 20030,
- 20026,
- 20025,
- 13698,
- 3565,
- 20024,
- 13794,
- 19750,
- 13858,
- 13890,
- 10254,
- 16502,
- 16662,
- 3658,
- 8367,
- 9987,
- 20034,
- 14146,
- 28352,
- 7106,
- 28480,
- 10179,
- 20006,
- 7408,
- 20013,
- 20610,
- 17462,
- 16643,
- 20802,
- 10435,
- 10467,
- 3729,
- 3733,
- 468,
- 20011,
- 20010,
- 3506,
- 1849,
- 19982,
- 7426,
- 10787,
- 14914,
- 17229,
- 7648,
- 10915,
- 10947,
- 21954,
- 17923,
- 8368,
- 19970,
- 3841,
- 15234,
- 15266,
- 19968,
- 3869,
- 18435,
- 3873,
- 14807,
- 22722,
- 9487,
- 19940,
- 19939,
- 15586,
- 7992,
- 23106,
- 19874,
- 8040,
- 19873,
- 8088,
- 19866,
- 27585,
- 18327,
- 15906,
- 512,
- 15970,
- 18163,
- 2005,
- 19861,
- 16098,
- 19971,
- 12067,
- 15253,
- 19848,
- 14621,
- 28481,
- 17273,
- 12259,
- 2050,
- 18438,
- 4131,
- 8292,
- 12419,
- 8356,
- 6620,
- 548,
- 8784,
- 21059,
- 19772,
- 8912,
- 12675,
- 19668,
- 12739,
- 579,
- 580,
- 15453,
- 8772,
- 8804,
- 16601,
- 10688,
- 30081,
- 9488,
- 17924,
- 2386,
- 9552,
- 18960,
- 9092,
- 13219,
- 17450,
- 605,
- 9220,
- 18500,
- 18564,
- 22723,
- 12064,
- 17454,
- 18991,
- 2362,
- 2538,
- 2546,
- 13635,
- 2394,
- 18702,
- 9636,
- 2738,
- 27586,
- 18763,
- 2742,
- 18809,
- 8401,
- 23811,
- 18647,
- 18241,
- 9956,
- 19972,
- 20036,
- 2670,
- 1056,
- 18444,
- 10148,
- 10180,
- 20420,
- 20484,
- 28738,
- 2578,
- 10340,
- 16645,
- 2602,
- 10436,
- 10468,
- 688,
- 5267,
- 5506,
- 21188,
- 17157,
- 2666,
- 2674,
- 695,
- 7633,
- 5395,
- 701,
- 17501,
- 705,
- 10916,
- 15043,
- 7769,
- 18455,
- 7865,
- 18454,
- 18452,
- 18450,
- 18245,
- 7929,
- 18447,
- 18437,
- 18446,
- 9857,
- 18629,
- 5699,
- 9921,
- 3018,
- 15587,
- 5763,
- 8089,
- 7788,
- 8137,
- 10145,
- 15779,
- 23428,
- 27587,
- 3066,
- 3074,
- 16412,
- 14847,
- 3086,
- 3094,
- 19845,
- 16099,
- 19973,
- 12068,
- 18436,
- 10945,
- 18423,
- 18422,
- 8010,
- 12260,
- 16390,
- 3082,
- 3090,
- 8293,
- 16646,
- 20805,
- 29059,
- 5208,
- 18414,
- 3146,
- 6530,
- 3278,
- 17158,
- 8613,
- 12740,
- 8677,
- 18405,
- 6419,
- 6650,
- 3330,
- 877,
- 14053,
- 8901,
- 13028,
- 849,
- 8090,
- 18244,
- 18243,
- 6898,
- 18246,
- 6627,
- 15855,
- 9221,
- 18502,
- 13380,
- 18630,
- 22789,
- 3370,
- 6755,
- 4979,
- 12065,
- 885,
- 3562,
- 9573,
- 13700,
- 3566,
- 23429,
- 6899,
- 20380,
- 13860,
- 7322,
- 8211,
- 5187,
- 3498,
- 19846,
- 9957,
- 19974,
- 5219,
- 10053,
- 8435,
- 3722,
- 10149,
- 10181,
- 28612,
- 3586,
- 28740,
- 1050,
- 20678,
- 16647,
- 20806,
- 14532,
- 928,
- 3650,
- 16967,
- 15264,
- 2539,
- 1042,
- 3690,
- 17287,
- 3866,
- 3870,
- 10789,
- 3561,
- 7794,
- 3064,
- 10917,
- 982,
- 17639,
- 9795,
- 597,
- 1004,
- 9939,
- 26373,
- 18247,
- 12098,
- 4066,
- 3842,
- 3850,
- 3858,
- 11365,
- 11397,
- 17463,
- 7779,
- 7795,
- 17458,
- 7827,
- 17456,
- 7859,
- 17455,
- 15780,
- 23430,
- 27589,
- 19463,
- 6499,
- 19903,
- 15972,
- 17290,
- 15575,
- 19847,
- 24006,
- 19975,
- 12069,
- 28293,
- 17204,
- 8131,
- 20295,
- 13378,
- 17181,
- 12824,
- 16997,
- 4132,
- 20297,
- 4164,
- 20807,
- 24966,
- 8422,
- 12549,
- 3515,
- 19886,
- 2671,
- 2675,
- 7443,
- 7451,
- 16788,
- 7483,
- 16783,
- 8774,
- 8806,
- 1366,
- 30021,
- 16726,
- 26054,
- 17928,
- 7418,
- 16654,
- 16653,
- 1464,
- 26438,
- 16648,
- 18376,
- 9222,
- 16644,
- 11988,
- 3015,
- 16599,
- 10165,
- 16598,
- 1538,
- 13626,
- 12826,
- 13637,
- 9574,
- 16533,
- 3211,
- 23431,
- 27590,
- 9734,
- 6500,
- 13140,
- 3295,
- 13220,
- 19784,
- 9926,
- 4980,
- 3319,
- 16055,
- 10054,
- 3359,
- 3363,
- 10150,
- 3371,
- 16741,
- 3611,
- 1698,
- 3399,
- 20680,
- 16649,
- 20808,
- 20872,
- 25031,
- 5252,
- 5268,
- 7124,
- 3071,
- 25351,
- 8407,
- 7437,
- 1980,
- 3651,
- 17481,
- 5269,
- 10854,
- 15861,
- 21832,
- 10790,
- 21960,
- 16396,
- 22088,
- 8778,
- 3815,
- 18406,
- 26439,
- 3871,
- 7748,
- 18441,
- 15596,
- 5668,
- 11366,
- 15493,
- 15495,
- 2008,
- 6741,
- 8092,
- 15653,
- 10151,
- 23240,
- 15050,
- 15781,
- 23432,
- 14887,
- 14871,
- 14810,
- 6501,
- 15973,
- 14809,
- 14200,
- 19849,
- 16101,
- 13947,
- 12070,
- 13912,
- 2392,
- 7054,
- 12198,
- 13898,
- 2480,
- 13663,
- 7213,
- 13655,
- 6196,
- 16650,
- 7389,
- 20873,
- 8423,
- 9918,
- 16970,
- 18442,
- 2840,
- 17162,
- 12524,
- 12742,
- 8679,
- 12421,
- 9945,
- 3016,
- 12199,
- 9820,
- 17738,
- 8903,
- 26056,
- 3116,
- 8394,
- 12080,
- 3204,
- 9095,
- 26440,
- 8986,
- 12058,
- 9223,
- 12048,
- 6692,
- 11963,
- 6766,
- 3396,
- 6918,
- 3488,
- 3500,
- 3508,
- 11993,
- 9575,
- 13702,
- 7078,
- 7222,
- 8331,
- 6654,
- 27720,
- 10960,
- 8795,
- 8939,
- 10788,
- 7766,
- 9959,
- 15800,
- 24137,
- 7076,
- 10216,
- 6639,
- 20298,
- 2637,
- 15066,
-}
\ No newline at end of file
diff --git a/libraries/LibClassicDurations/LibClassicDurations.xml b/libraries/LibClassicDurations/LibClassicDurations.xml
deleted file mode 100755
index 4934790..0000000
--- a/libraries/LibClassicDurations/LibClassicDurations.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/libraries/LibClassicDurations/classAbilities.lua b/libraries/LibClassicDurations/classAbilities.lua
deleted file mode 100755
index 7c692b8..0000000
--- a/libraries/LibClassicDurations/classAbilities.lua
+++ /dev/null
@@ -1,687 +0,0 @@
-local lib = LibStub and LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "SpellTable", 17
-if lib:GetDataVersion(Type) >= Version then return end -- older versions didn't have that function
-
-local Spell = lib.AddAura
-local Talent = lib.Talent
-
-------------------
--- GLOBAL
-------------------
-
-Spell(1604, { duration = 4 }) -- Common Daze
-Spell( 23605, { duration = 5 }) -- Nightfall (Axe) Proc
-Spell( 835, { duration = 3 }) -- Tidal Charm
-Spell( 11196, { duration = 60 }) -- Recently Bandaged
-
-Spell({ 13099, 13138, 16566 }, {
- duration = function(spellID)
- if spellID == 13138 then return 20 -- backfire
- elseif spellID == 16566 then return 30 -- backfire
- else return 10 end
- end
-}) -- Net-o-Matic
-
-Spell( 23451, { duration = 10 }) -- Battleground speed buff
-Spell( 23493, { duration = 10 }) -- Battleground heal buff
-Spell( 23505, { duration = 60 }) -- Battleground damage buff
-Spell({ 4068, 19769 }, { duration = 3 }) -- Iron Grenade, Thorium
-Spell( 6615, { duration = 30, type = "BUFF" }) -- Free Action Potion
-Spell( 24364, { duration = 5, type = "BUFF" }) -- Living Action Potion
-Spell( 3169, { duration = 6, type = "BUFF" }) -- Limited Invulnerability Potion
-Spell( 16621, { duration = 3, type = "BUFF" }) -- Invulnerable Mail
-Spell( 1090, { duration = 30 }) -- Magic Dust
-Spell( 13327, { duration = 30 }) -- Reckless Charge
-Spell({ 26740, 13181 }, { duration = 20 }) -- Mind Control Cap + Backfire
-Spell( 11359, { duration = 30, type = "BUFF" }) -- Restorative Potion
-Spell( 6727, { duration = 30 }) -- Violet Tragan
-Spell( 5024, { duration = 10, type = "BUFF" }) -- Skull of Impending Doom
-Spell( 2379, { duration = 15, type = "BUFF" }) -- Swiftness Potion
-Spell( 5134, { duration = 10 }) -- Flash Bomb
-Spell( 23097, { duration = 5, type = "BUFF" }) -- Fire Reflector
-Spell( 23131, { duration = 5, type = "BUFF" }) -- Frost Reflector
-Spell( 23132, { duration = 5, type = "BUFF" }) -- Shadow Reflector
-Spell({ 25750, 25747, 25746, 23991 }, { duration = 15, type = "BUFF" }) -- AB Trinkets
-Spell( 23506, { duration = 20, type = "BUFF" }) -- Arena Grand Master trinket
-Spell( 29506, { duration = 20, type = "BUFF" }) -- Burrower's Shell trinket
-Spell( 12733, { duration = 30, type = "BUFF" }) -- Blacksmith trinket
--- Spell( 15753, { duration = 2 }) -- Linken's Boomerang stun
--- Spell( 15752, { duration = 10 }) -- Linken's Boomerang disarm
-Spell( 14530, { duration = 10, type = "BUFF" }) -- Nifty Stopwatch
-Spell( 13237, { duration = 3 }) -- Goblin Mortar trinket
-Spell( 14253, { duration = 8, type = "BUFF" }) -- Black Husk Shield
-Spell( 9175, { duration = 15, type = "BUFF" }) -- Swift Boots
-Spell( 13141, { duration = 20, type = "BUFF" }) -- Gnomish Rocket Boots
-Spell( 8892, { duration = 20, type = "BUFF" }) -- Goblin Rocket Boots
-Spell( 9774, { duration = 5, type = "BUFF" }) -- Spider Belt & Ornate Mithril Boots
-
--------------
--- RACIALS
--------------
-
-Spell( 26635 ,{ duration = 10, type = "BUFF" }) -- Berserking
-Spell( 20600 ,{ duration = 20, type = "BUFF" }) -- Perception
-Spell( 23234 ,{ duration = 15, type = "BUFF" }) -- Blood Fury
-Spell( 23230 ,{ duration = 25 }) -- Blood Fury debuff
-Spell( 20594 ,{ duration = 8, type = "BUFF" }) -- Stoneform
-Spell( 20549 ,{ duration = 2 }) -- War Stomp
-Spell( 7744, { duration = 5, type = "BUFF" }) -- Will of the Forsaken
-
--------------
--- PRIEST
--------------
-
--- Why long auras are disabled
--- When you first get in combat log range with a player,
--- you'll get AURA_APPLIED event as if it was just applied, when it actually wasn't.
--- That's extremely common for these long self-buffs
--- So I think it's better not to show anything rather than incorrect time.
-
--- Spell({ 1243, 1244, 1245, 2791, 10937, 10938 }, { duration = 1800, type = "BUFF" }) -- Power Word: Fortitude
--- Spell({ 21562, 21564 }, { duration = 3600, type = "BUFF" }) -- Prayer of Fortitude
--- Spell({ 976, 10957, 10958 }, { duration = 600, type = "BUFF" }) -- Shadow Protection
--- Spell( 27683, { duration = 600, type = "BUFF" }) -- Prayer of Shadow Protection
--- Spell({ 14752, 14818, 14819, 27841 }, { duration = 1800, type = "BUFF" }) -- Divine Spirit
--- Spell( 27681, { duration = 3600, type = "BUFF" }) -- Prayer of Spirit
-
-Spell({ 14743, 27828 }, { duration = 6, type = "BUFF" }) -- Focused Casting (Martyrdom)
-Spell( 27827, { duration = 10, type = "BUFF" }) -- Spirit of Redemption
-Spell( 15271, { duration = 15, type = "BUFF" }) -- Spirit Tap
-
-Spell({ 2652, 19261, 19262, 19264, 19265, 19266 }, { duration = 600, type = "BUFF" }) -- Touch of Weakness
-Spell({ 13896, 19271, 19273, 19274, 19275 }, { duration = 15, type = "BUFF" }) -- Feedback
-Spell({ 2651, 19289, 19291, 19292, 19293 }, { duration = 15, type = "BUFF" }) -- Elune's Grace
-Spell({ 9035, 19281, 19282, 19283, 19284, 19285 }, { duration = 120 }) -- Hex of Weakness
-
-Spell( 6346, { duration = 600, type = "BUFF" }) -- Fear Ward
-Spell({ 7001, 27873, 27874 }, { duration = 10, type = "BUFF" }) -- Lightwell Renew
-Spell( 552, { duration = 20, type = "BUFF" }) -- Abolish Disease
-Spell({ 17, 592, 600, 3747, 6065, 6066, 10898, 10899, 10900, 10901 }, {duration = 30, type = "BUFF" }) -- PWS
-Spell( 6788, { duration = 15 }) -- Weakened Soul
-Spell({ 139, 6074, 6075, 6076, 6077, 6078, 10927, 10928, 10929, 25315 }, { duration = 15, type = "BUFF" }) -- Renew
-
-Spell( 15487, { duration = 5 }) -- Silence
-Spell({ 10797, 19296, 19299, 19302, 19303, 19304, 19305 }, { duration = 6, stacking = true }) -- starshards
-Spell({ 2944, 19276, 19277, 19278, 19279, 19280 }, { duration = 24, stacking = true }) --devouring plague
-Spell({ 453, 8192, 10953 }, { duration = 15 }) -- mind soothe
-
-Spell({ 9484, 9485, 10955 }, {
- duration = function(spellID)
- if spellID == 9484 then return 30
- elseif spellID == 9485 then return 40
- else return 50 end
- end
-}) -- Shackle Undead
-
-Spell( 10060, { duration = 15, type = "BUFF" }) --Power Infusion
-Spell({ 14914, 15261, 15262, 15263, 15264, 15265, 15266, 15267 }, { duration = 10, stacking = true }) -- Holy Fire, stacking?
-Spell({ 586, 9578, 9579, 9592, 10941, 10942 }, { duration = 10, type = "BUFF" }) -- Fade
-Spell({ 8122, 8124, 10888, 10890 }, { duration = 8, }) -- Psychic Scream
-Spell({ 589, 594, 970, 992, 2767, 10892, 10893, 10894 }, { stacking = true,
- duration = function(spellID, isSrcPlayer)
- -- Improved SWP, 2 ranks: Increases the duration of your Shadow Word: Pain spell by 3 sec.
- local talents = isSrcPlayer and 3*Talent(15275, 15317) or 0
- return 18 + talents
- end
-}) -- SW:P
-Spell( 15269 ,{ duration = 3 }) -- Blackout
-Spell( 15258 ,{ duration = 15 }) -- Shadow Vulnerability
-Spell( 15286 ,{ duration = 60 }) -- Vampiric Embrace
-Spell({ 15407, 17311, 17312, 17313, 17314, 18807 }, { duration = 3 }) -- Mind Flay
-Spell({ 605, 10911, 10912 }, { duration = 60 }) -- Mind Control
-
----------------
--- DRUID
----------------
-
--- Spell({ 1126, 5232, 5234, 6756, 8907, 9884, 9885 }, { duration = 1800, type = "BUFF" }) -- Mark of the Wild
--- Spell({ 21849, 21850 }, { duration = 3600, type = "BUFF" }) -- Gift of the Wild
-Spell( 19975, { duration = 12 }) -- Nature's Grasp root
-Spell({ 16689, 16810, 16811, 16812, 16813, 17329 }, { duration = 45, type = "BUFF" }) -- Nature's Grasp
-Spell( 16864, { duration = 600, type = "BUFF" }) -- Omen of Clarity
-Spell( 16870, { duration = 15, type = "BUFF" }) -- Clearcasting from OoC
-
-
-
-Spell( 19675, { duration = 4 }) -- Feral Charge
-Spell({ 467, 782, 1075, 8914, 9756, 9910 }, { duration = 600, type = "BUFF" }) -- Thorns
-Spell( 22812 ,{ duration = 15, type = "BUFF" }) -- Barkskin
---SKIPPING: Hurricane (Channeled)
-Spell({ 339, 1062, 5195, 5196, 9852, 9853 }, {
- duration = function(spellID)
- if spellID == 339 then return 12
- elseif spellID == 1062 then return 15
- elseif spellID == 5195 then return 18
- elseif spellID == 5196 then return 21
- elseif spellID == 9852 then return 24
- else return 27 end
- end
-}) -- Entangling Roots
-Spell({ 2908, 8955, 9901 }, { duration = 15 }) -- Soothe Animal
-Spell({ 770, 778, 9749, 9907 }, { duration = 40 }) -- Faerie Fire
-Spell({ 17390, 17391, 17392 }, { duration = 40 }) -- Faerie Fire (Feral)
-Spell({ 2637, 18657, 18658 }, {
- duration = function(spellID)
- if spellID == 2637 then return 20
- elseif spellID == 18657 then return 30
- else return 40 end
- end
-}) -- Hibernate
-Spell({ 99, 1735, 9490, 9747, 9898 }, { duration = 30 }) -- Demoralizing Roar
-Spell({ 5211, 6798, 8983 }, { stacking = true, -- stacking?
- duration = function(spellID)
- local brutal_impact = Talent(16940, 16941)*0.5
- if spellID == 5211 then return 2+brutal_impact
- elseif spellID == 6798 then return 3+brutal_impact
- else return 4+brutal_impact end
- end
-}) -- Bash
-Spell( 5209, { duration = 6 }) -- Challenging Roar
-Spell( 6795, { duration = 3 }) -- Taunt
-
-Spell({ 1850, 9821 }, { duration = 15, type = "BUFF" }) -- Dash
-Spell( 5229, { duration = 10, type = "BUFF" }) -- Enrage
-Spell({ 22842, 22895, 22896 }, { duration = 10, type = "BUFF" }) -- Frenzied Regeneration
-Spell( 16922, { duration = 3 }) -- Imp Starfire Stun
-Spell({ 9005, 9823, 9827 }, {
- duration = function(spellID)
- local brutal_impact = Talent(16940, 16941)*0.5
- return 2+brutal_impact
- end
-}) -- Pounce
-Spell({ 9007, 9824, 9826 }, { duration = 18, stacking = true, }) -- Pounce Bleed
-Spell({ 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835 }, {
- duration = function(spellID)
- if spellID == 8921 then return 9
- else return 12 end
- end
-}) -- Moonfire
-Spell({ 1822, 1823, 1824, 9904 }, { duration = 9, stacking = true }) -- Rake
-Spell({ 1079, 9492, 9493, 9752, 9894, 9896 }, { duration = 12, stacking = true }) -- Rip
-Spell({ 5217, 6793, 9845, 9846 }, { name = "Tiger's Fury", duration = 6 })
-
-Spell( 2893 ,{ duration = 8, type = "BUFF" }) -- Abolish Poison
-Spell( 29166 , { duration = 20, type = "BUFF" }) -- Innervate
-
-Spell({ 8936, 8938, 8939, 8940, 8941, 9750, 9856, 9857, 9858 }, { duration = 21, type = "BUFF" }) -- Regrowth
-Spell({ 774, 1058, 1430, 2090, 2091, 3627, 8910, 9839, 9840, 9841, 25299 }, { duration = 12, stacking = false, type = "BUFF" }) -- Rejuv
-Spell({ 5570, 24974, 24975, 24976, 24977 }, { duration = 12, stacking = true }) -- Insect Swarm
-
--------------
--- WARRIOR
--------------
-
-Spell( 12294, { duration = 10 }) -- Mortal Strike Healing Reduction
-
-Spell({72, 1671, 1672}, { duration = 6 }) -- Shield Bash
-Spell( 18498, { duration = 3 }) -- Improved Shield Bash
-
-Spell( 20230, { duration = 15, type = "BUFF" }) -- Retaliation
-Spell( 1719, { duration = 15, type = "BUFF" }) -- Recklessness
-Spell( 871, { type = "BUFF", duration = 10 }) -- Shield wall, varies
-Spell( 12976, { duration = 20, type = "BUFF" }) -- Last Stand
-Spell( 12328, { duration = 30 }) -- Death Wish
-Spell({ 772, 6546, 6547, 6548, 11572, 11573, 11574 }, { stacking = true,
- duration = function(spellID)
- if spellID == 772 then return 9
- elseif spellID == 6546 then return 12
- elseif spellID == 6547 then return 15
- elseif spellID == 6548 then return 18
- else return 21 end
- end
-}) -- Rend
-Spell( 12721, { duration = 12, stacking = true }) -- Deep Wounds
-
-Spell({ 1715, 7372, 7373 }, { duration = 15 }) -- Hamstring
-Spell( 23694 , { duration = 5 }) -- Improved Hamstring
-Spell({ 6343, 8198, 8204, 8205, 11580, 11581 }, {
- duration = function(spellID)
- if spellID == 6343 then return 10
- elseif spellID == 8198 then return 14
- elseif spellID == 8204 then return 18
- elseif spellID == 8205 then return 22
- elseif spellID == 11580 then return 26
- else return 30 end
- end
-}) -- Thunder Clap
-Spell({ 694, 7400, 7402, 20559, 20560 }, { duration = 6 }) -- Mocking Blow
-Spell( 1161 ,{ duration = 6 }) -- Challenging Shout
-Spell( 355 ,{ duration = 3 }) -- Taunt
-Spell({ 5242, 6192, 6673, 11549, 11550, 11551, 25289 }, { type = "BUFF",
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12321, 12835, 12836, 12837, 12838) or 0
- return 120 * (1 + 0.1 * talents)
- end
-}) -- Battle Shout
-Spell({ 1160, 6190, 11554, 11555, 11556 }, {
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12321, 12835, 12836, 12837, 12838) or 0
- return 30 * (1 + 0.1 * talents)
- end
-}) -- Demoralizing Shout, varies
-Spell( 18499, { duration = 10, type = "BUFF" }) -- Berserker Rage
-Spell({ 20253, 20614, 20615 }, { duration = 3 }) -- Intercept
-Spell( 12323, { duration = 6 }) -- Piercing Howl
-Spell( 5246, { duration = 8 }) -- Intimidating Shout Fear
-Spell( 20511, { duration = 8 }) -- Intimidating Shout Main Target Cower Effect
-
-Spell( 676 ,{
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12313, 12804, 12807) or 0
- return 10 + talents
- end,
-}) -- Disarm, varies
-Spell( 29131 ,{ duration = 10, type = "BUFF" }) -- Bloodrage
-Spell( 12798 , { duration = 3 }) -- Imp Revenge Stun
-Spell( 2565 ,{ duration = 5, type = "BUFF" }) -- Shield Block, varies BUFF
-
-Spell({ 7386, 7405, 8380, 11596, 11597 }, { duration = 30 }) -- Sunder Armor
-Spell( 12809 ,{ duration = 5 }) -- Concussion Blow
-Spell( 12292 ,{ duration = 20, type = "BUFF" }) -- Sweeping Strikes
-Spell({ 12880, 14201, 14202, 14203, 14204 }, { duration = 12, type = "BUFF" }) -- Enrage
-Spell({ 12966, 12967, 12968, 12969, 12970 }, { duration = 15, type = "BUFF" }) -- Flurry
-Spell({ 16488, 16490, 16491 }, { duration = 6, type = "BUFF" }) -- Blood Craze
-Spell(7922, { duration = 1 }) -- Charge
-Spell(5530, { duration = 3 }) -- Mace Specialization
-
---------------
--- ROGUE
---------------
-
-Spell( 14278 , { duration = 7, type = "BUFF" }) -- Ghostly Strike
-Spell({ 16511, 17347, 17348 }, { duration = 15 }) -- Hemorrhage
-Spell({ 11327, 11329 }, { duration = 10 }) -- Vanish
-Spell({ 3409, 11201 }, { duration = 12 }) -- Crippling Poison
-Spell({ 13218, 13222, 13223, 13224 }, { duration = 15 }) -- Wound Poison
-Spell({ 2818, 2819, 11353, 11354, 25349 }, { duration = 12, stacking = true }) -- Deadly Poison
-Spell({ 5760, 8692, 11398 }, {
- duration = function(spellID)
- if spellID == 5760 then return 10
- elseif spellID == 8692 then return 12
- else return 14 end
- end
-}) -- Mind-numbing Poison
-
-Spell( 18425, { duration = 2 }) -- Improved Kick Silence
-Spell( 13750, { duration = 15, type = "BUFF" }) -- Adrenaline Rush
-Spell( 13877, { duration = 15, type = "BUFF" }) -- Blade Flurry
-Spell( 1833, { duration = 4 }) -- Cheap Shot
-Spell({ 2070, 6770, 11297 }, {
- duration = function(spellID)
- if spellID == 6770 then return 25 -- yes, Rank 1 spell id is 6770 actually
- elseif spellID == 2070 then return 35
- else return 45 end
- end
-}) -- Sap
-Spell( 2094 , { duration = 10 }) -- Blind
-
-Spell({ 8647, 8649, 8650, 11197, 11198 }, { duration = 30 }) -- Expose Armor
-Spell({ 703, 8631, 8632, 8633, 11289, 11290 }, { duration = 18 }) -- Garrote
-Spell({ 408, 8643 }, {
- duration = function(spellID, isSrcPlayer, comboPoints)
- local duration = spellID == 8643 and 1 or 0 -- if Rank 2, add 1s
- if isSrcPlayer then
- return duration + comboPoints
- else
- return duration + 5 -- just assume 5cp i guess
- end
- end
-}) -- Kidney Shot
-
-Spell({ 1943, 8639, 8640, 11273, 11274, 11275 }, { stacking = true,
- duration = function(spellID, isSrcPlayer, comboPoints)
- if isSrcPlayer then
- return (6 + comboPoints*2)
- else
- return 16
- end
- end
-}) -- Rupture
--- SnD -- player-only, can skip
-
-Spell({ 2983, 8696, 11305 }, { duration = 15, type = "BUFF" }) -- Sprint
-Spell( 5277 ,{ duration = 15, type = "BUFF" }) -- Evasion
-Spell({ 1776, 1777, 8629, 11285, 11286 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- return 4 + 0.5*Talent(13741, 13793, 13792)
- else
- return 5.5
- end
- end
-}) -- Gouge
-
-Spell( 14251 , { duration = 6 }) -- Riposte (disarm)
-
-------------
--- WARLOCK
-------------
-
-Spell({ 20707, 20762, 20763, 20764, 20765 }, { duration = 1800, type = "BUFF" }) -- Soulstone Resurrection
--- Spell({ 687, 696, 706, 1086, 11733, 11734, 11735 }, { duration = 1800, type = "BUFF" }) -- Demon SKin/Armor
--- Spell({ 18791, 18789, 18792, 18790 }, { duration = 1800, type = "BUFF" }) -- Touch of Shadow, Burning Wish, Fel Energy, Fel Stamina
-
---SKIPPING: Drain Life, Mana, Soul, Enslave, Health funnel, kilrog
-Spell( 24259 ,{ duration = 3 }) -- Spell Lock Silence
-Spell({ 17767, 17850, 17851, 17852, 17853, 17854 }, { duration = 10 }) -- Consume Shadows (Voidwalker)
-Spell( 18118, { duration = 5 }) -- Aftermath Proc
-Spell({ 132, 2970, 11743 }, { duration = 600 }) -- Detect Invisibility
-Spell( 5697, { duration = 600 }) -- Unending Breath
-Spell({ 17794, 17798, 17797, 17799, 17800 }, { duration = 12 }) -- Shadow Vulnerability (Imp Shadow Bolt)
--- SKIPPING: Amplify Curse
-Spell({ 1714, 11719 }, { duration = 30 }) -- Curse of Tongues
-Spell({ 702, 1108, 6205, 7646, 11707, 11708 },{ duration = 120 }) -- Curse of Weakness
-Spell({ 17862, 17937 }, { duration = 300 }) -- Curse of Shadows
-Spell({ 1490, 11721, 11722 }, { duration = 300 }) -- Curse of Elements
-Spell({ 704, 7658, 7659, 11717 }, { duration = 120 }) -- Curse of Recklessness
-Spell( 603 ,{ duration = 60, stacking = true }) -- Curse of Doom
-Spell( 18223 ,{ duration = 12 }) -- Curse of Exhaustion
-Spell( 6358, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local mul = 1 + Talent(18754, 18755, 18756)*0.1
- return 20*mul
- else
- return 20
- end
- end
-}) -- Seduction, varies, Improved Succubus
-Spell({ 5484, 17928 }, {
- duration = function(spellID)
- return spellID == 5484 and 10 or 15
- end
-}) -- Howl of Terror
-Spell({ 5782, 6213, 6215 }, {
- duration = function(spellID)
- if spellID == 5782 then return 10
- elseif spellID == 6213 then return 15
- else return 20 end
- end
-}) -- Fear
-
-Spell({ 710, 18647 }, {
- duration = function(spellID)
- return spellID == 710 and 20 or 30
- end
-}) -- Banish
-Spell({ 6789, 17925, 17926 }, { duration = 3 }) -- Death Coil
-
-Spell({ 18265, 18879, 18880, 18881}, { duration = 30, stacking = true }) -- Siphon Life
-Spell({ 980, 1014, 6217, 11711, 11712, 11713 }, { duration = 24, stacking = true }) -- Curse of Agony
-Spell({ 172, 6222, 6223, 7648, 11671, 11672, 25311 }, { stacking = true,
- duration = function(spellID)
- if spellID == 172 then
- return 12
- elseif spellID == 6222 then
- return 15
- else
- return 18
- end
- end
-})
-Spell({ 348, 707, 1094, 2941, 11665, 11667, 11668, 25309 },{ duration = 15, stacking = true }) -- Immolate
-
-Spell({ 6229, 11739, 11740, 28610 } ,{ duration = 30, type = "BUFF" }) -- Shadow Ward
-Spell({ 7812, 19438, 19440, 19441, 19442, 19443 }, { duration = 30, type = "BUFF" }) -- Sacrifice
-Spell({ 17877, 18867, 18868, 18869, 18870, 18871 }, { duration = 5 }) -- Shadowburn Debuff
-Spell( 18093 ,{ duration = 3 }) -- Pyroclasm
-
----------------
--- SHAMAN
----------------
-
-Spell({ 324, 325, 905, 945, 8134, 10431, 10432 }, { duration = 600, type = "BUFF" }) -- Lightning Shield
-Spell( 546 ,{ duration = 600, type = "BUFF" }) -- Water Walkign
-Spell( 131 ,{ duration = 600, type = "BUFF" }) -- Water Breahing
-Spell({ 16257, 16277, 16278, 16279, 16280 }, { duration = 15, type = "BUFF" }) -- Flurry
-
-Spell( 17364 ,{ duration = 12 }) -- Stormstrike
-Spell({ 16177, 16236, 16237 }, { duration = 15, type = "BUFF" }) -- Ancestral Fortitude from Ancestral Healing
-Spell({ 8056, 8058, 10472, 10473 }, { duration = 8 }) -- Frost Shock
-Spell({ 8050, 8052, 8053, 10447, 10448, 29228 }, { duration = 12, stacking = true }) -- Flame Shock
-Spell( 29203 ,{ duration = 15, type = "BUFF" }) -- Healing Way
-Spell({ 8034, 8037, 10458, 16352, 16353 }, { duration = 8 }) -- Frostbrand Attack
-Spell( 3600 ,{ duration = 5 }) -- Earthbind Totem
-Spell( 8178 ,{ duration = 45, type = "BUFF" }) -- Grounding Totem Effect, no duration, but lasts 45s. Keeping for enemy buffs
-
---------------
--- PALADIN
---------------
-
--- Spell( 25780, { duration = 1800, type = "BUFF" }) -- Righteous Fury
-
-Spell({ 19740, 19834, 19835, 19836, 19837, 19838, 25291 }, { duration = 300, type = "BUFF" }) -- Blessing of Might
-Spell({ 25782, 25916 }, { duration = 900, type = "BUFF" }) -- Greater Blessing of Might
-
-Spell({ 19742, 19850, 19852, 19853, 19854, 25290 }, { duration = 300, type = "BUFF" }) -- Blessing of Wisdom
-Spell({ 25894, 25918 }, { duration = 900, type = "BUFF" }) -- Greater Blessing of Might
-
-Spell(20217, { duration = 300, type = "BUFF" }) -- Blessing of Kings
-Spell(25898, { duration = 900, type = "BUFF" }) -- Greater Blessing of Kings
-
-Spell({ 20911, 20912, 20913 }, { duration = 300, type = "BUFF" }) -- Blessing of Sanctuary
-Spell(25899, { duration = 900, type = "BUFF" }) -- Greater Blessing of Sanctuary
-
-Spell(1038, { duration = 300, type = "BUFF" }) -- Blessing of Salvation
-Spell(25895, { duration = 900, type = "BUFF" }) -- Greater Blessing of Salvation
-
-Spell({ 19977, 19978, 19979 }, { duration = 300, type = "BUFF" }) -- Blessing of Light
-Spell(25890, { duration = 900, type = "BUFF" }) -- Greater Blessing of Light
-
-Spell( 20066, { duration = 6 }) -- Repentance
-Spell({ 2878, 5627, 5627 }, {
- duration = function(spellID)
- if spellID == 2878 then return 10
- elseif spellID == 5627 then return 15
- else return 20 end
- end
-}) -- Turn Undead
-
-Spell( 1044, { duration = 10, type = "BUFF" }) -- Blessing of Freedom
-Spell({ 6940, 20729 }, { duration = 30, type = "BUFF" }) -- Blessing of Sacrifice
-Spell({ 1022, 5599, 10278 }, { type = "BUFF",
- duration = function(spellID)
- if spellID == 1022 then return 6
- elseif spellID == 5599 then return 8
- else return 10 end
- end
-}) -- Blessing of Protection
-Spell(25771, { duration = 60 }) -- Forbearance
-Spell({ 498, 5573 }, { type = "BUFF",
- duration = function(spellID)
- return spellID == 498 and 6 or 8
- end
-}) -- Divine Protection
-Spell({ 642, 1020 }, { type = "BUFF",
- duration = function(spellID)
- return spellID == 642 and 10 or 12
- end
-}) -- Divine Shield
-Spell({ 20375, 20915, 20918, 20919, 20920 }, { duration = 30, type = "BUFF" }) -- Seal of Command
-Spell({ 21084, 20287, 20288, 20289, 20290, 20291, 20292, 20293 }, { duration = 30, type = "BUFF"}) -- Seal of Righteousness
-Spell({ 20162, 20305, 20306, 20307, 20308, 21082 }, { duration = 30, type = "BUFF" }) -- Seal of the Crusader
-Spell({ 20165, 20347, 20348, 20349 }, { duration = 30, type = "BUFF" }) -- Seal of Light
-Spell({ 20166, 20356, 20357 }, { duration = 30, type = "BUFF" }) -- Seal of Wisdom
-Spell( 20164 , { duration = 30, type = "BUFF" }) -- Seal of Justice
-
-Spell({ 21183, 20188, 20300, 20301, 20302, 20303 }, { duration = 10 }) -- Judgement of the Crusader
-Spell({ 20185, 20344, 20345, 20346 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local talents = 10*Talent(20359, 20360, 20361)
- return 10+talents
- else
- return 10
- end
- end
-}) -- Judgement of Light
-Spell({ 20186, 20354, 20355 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local talents = 10*Talent(20359, 20360, 20361)
- return 10+talents
- else
- return 10
- end
- end
-}) -- Judgement of Wisdom
-Spell(20184, { duration = 10 }) -- Judgement of Justice
-
-Spell({ 853, 5588, 5589, 10308 }, {
- duration = function(spellID)
- if spellID == 853 then return 3
- elseif spellID == 5588 then return 4
- elseif spellID == 5589 then return 5
- else return 6 end
- end
-}) -- Hammer of Justice
-
-Spell({ 20925, 20927, 20928 }, { duration = 10, type = "BUFF" }) -- Holy Shield
-Spell({ 20128, 20131, 20132, 20133, 20134 }, { duration = 10, type = "BUFF" }) -- Holy Shield
-Spell({ 67, 26017, 26018 }, { duration = 10, type = "BUFF" }) -- Vindication
-Spell({ 20050, 20052, 20053, 20054, 20055 }, { duration = 8, type = "BUFF" }) -- Vengeance
-Spell( 20170 ,{ duration = 2 }) -- Seal of Justice stun
-
--------------
--- HUNTER
--------------
-
--- Spell({ 19506, 20905, 20906 }, { duration = 1800, type = "BUFF" }) -- Trueshot Aura
---SKIPPING: Frenzy
-Spell({ 1130, 14323, 14324, 14325 }, { duration = 120 }) -- Hunter's Mark
-Spell(19263, { duration = 10, type = "BUFF" }) -- Deterrence
-Spell(3045, { duration = 15, type = "BUFF" }) -- Rapid Fire
-Spell(19574, { duration = 18, type = "BUFF" }) -- Bestial Wrath
-Spell({ 1978, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 25295 }, { duration = 15, stacking = true }) -- Serpent Sting
-Spell({ 3043, 14275, 14276, 14277 }, { duration = 20 }) -- Scorpid Sting
-Spell({ 3034, 14279, 14280 }, { duration = 8 }) -- Viper Sting
-Spell({ 19386, 24132, 24133 }, { duration = 12 }) -- Wyvern Sting
-Spell({ 24131, 24134, 24135 }, { duration = 12 }) -- Wyvern Sting Dot
-Spell({ 1513, 14326, 14327 }, {
- duration = function(spellID)
- if spellID == 1513 then return 10
- elseif spellID == 14326 then return 15
- else return 20 end
- end
-}) -- Scare Beast
-
-Spell(19229, { duration = 5 }) -- Wing Clip Root
-Spell({ 19306, 20909, 20910 }, { duration = 5 }) -- Counterattack
--- Spell({ 13812, 14314, 14315 }, { duration = 20, stacking = true }) -- Explosive Trap
-Spell({ 13797, 14298, 14299, 14300, 14301 }, { duration = 15, stacking = true }) -- Immolation Trap
-Spell({ 3355, 14308, 14309 }, {
- duration = function(spellID, isSrcPlayer)
- local mul = 1
- if isSrcPlayer then
- mul = mul + 0.15*Talent(19239, 19245) -- Clever Traps
- end
- if spellID == 3355 then return 10*mul
- elseif spellID == 14308 then return 15*mul
- else return 20*mul end
- end
-}) -- Freezing Trap
-Spell(19503, { duration = 4 }) -- Scatter Shot
-Spell({ 2974, 14267, 14268 }, { duration = 10 }) -- Wing Clip
-Spell(5116, { duration = 4 }) -- Concussive Shot
-Spell(19410, { duration = 3 }) -- Conc Stun
-Spell(24394, { duration = 3 }) -- Intimidation
-Spell(15571, { duration = 4 }) -- Daze from Aspect
-Spell(19185, { duration = 5 }) -- Entrapment
-Spell(25999, { duration = 1 }) -- Boar Charge
-
--------------
--- MAGE
--------------
-
--- Spell({ 1459, 1460, 1461, 10156, 10157 }, { duration = 1800, type = "BUFF" }) -- Arcane Intellect
--- Spell( 23028, { duration = 1800, type = "BUFF" }) -- Arcane Brilliance
--- Spell({ 6117, 22782, 22783 }, { duration = 1800, type = "BUFF" }) -- Mage Armor
--- Spell({ 168, 7300, 7301, 7302, 7320, 10219, 10220 }, { duration = 1800, type = "BUFF" }) -- Frost/Ice Armor
-
-Spell( 2855, { duration = 1800, type = "BUFF" }) -- Detect Magic
-Spell( 130, { duration = 1800, type = "BUFF" }) -- Slow Fall
-
-Spell({ 133, 143, 145, 3140, 8400, 8401, 8402, 10148, 10149, 10150, 10151, 25306 }, {
- duration = function(spellID)
- if spellID == 133 then return 4
- elseif spellID == 143 then return 6
- elseif spellID == 145 then return 6
- else return 8 end
- end
-}) -- Fireball
-
-
-Spell({ 604, 8450, 8451, 10173, 10174 }, { duration = 600, type = "BUFF" }) -- Dampen Magic
-Spell({ 1008, 8455, 10169, 10170 }, { duration = 600, type = "BUFF" }) -- Amplify Magic
-
-Spell(18469, { duration = 4 }) -- Imp CS Silence
-Spell({ 118, 12824, 12825, 12826, 28270, 28271, 28272 }, {
- duration = function(spellID)
- if spellID == 118 then return 20
- elseif spellID == 12824 then return 30
- elseif spellID == 12825 then return 40
- else return 50 end
- end
-}) -- Polymorph
-Spell(11958, { duration = 10, type = "BUFF" }) -- Ice Block
-Spell({ 1463, 8494, 8495, 10191, 10192, 10193 }, { duration = 60, type = "BUFF" }) -- Mana Shield
-Spell({ 11426, 13031, 13032, 13033 }, { duration = 60, type = "BUFF" }) -- Ice Barrier
-Spell({ 543, 8457, 8458, 10223, 10225 }, { duration = 30, type = "BUFF" }) -- Fire Ward
-Spell({ 6143, 8461, 8462, 10177, 28609 }, { duration = 30, type = "BUFF" }) -- Frost Ward
-
-Spell(12355, { duration = 2 }) -- Impact
-Spell(12654, { duration = 4 }) -- Ignite
-Spell(22959, { duration = 30 }) -- Fire Vulnerability
-Spell({ 11113, 13018, 13019, 13020, 13021 }, { duration = 6 }) -- Blast Wave
-
-Spell({ 2120, 2121, 8422, 8423, 10215, 10216 }, { duration = 8, stacking = true }) -- Flamestrike
-
-Spell({ 120, 8492, 10159, 10160, 10161 }, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- return 8 + permafrost
- end
-}) -- Cone of Cold
-
--- DOESN'T APPEAR IN COMBAT LOG
--- Spell({ 12484, 12485, 12486 }, {
--- duration = function(spellID, isSrcPlayer)
--- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
--- return 1.5 + permafrost
--- end
--- }) -- Improved Blizzard
-
-Spell({6136, 7321}, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- return 5 + permafrost
- end
-}) -- Frost Armor
-
-Spell({ 116, 205, 837, 7322, 8406, 8407, 8408, 10179, 10180, 10181, 25304 }, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- if spellID == 116 then return 5 + permafrost
- elseif spellID == 205 then return 6 + permafrost
- elseif spellID == 837 then return 6 + permafrost
- elseif spellID == 7322 then return 7 + permafrost
- elseif spellID == 8406 then return 7 + permafrost
- elseif spellID == 8407 then return 8 + permafrost
- elseif spellID == 8408 then return 8 + permafrost
- else return 9 + permafrost end
- end
-}) -- Frostbolt
-
-Spell(12494, { duration = 5 }) -- Frostbite
-Spell({ 122, 865, 6131, 10230 }, { duration = 8 }) -- Frost Nova
--- Spell(12536, { duration = 15 }) -- Clearcasting
-Spell(12043, { duration = 15 }) -- Presence of Mind
-Spell(12042, { duration = 15 }) -- Arcane Power
-Spell(12051, { duration = 8, type = "BUFF" }) -- Evocation
-
-
-
-
-lib:SetDataVersion(Type, Version)
\ No newline at end of file
diff --git a/libraries/LibClassicDurations/core.lua b/libraries/LibClassicDurations/core.lua
deleted file mode 100755
index 51532e6..0000000
--- a/libraries/LibClassicDurations/core.lua
+++ /dev/null
@@ -1,669 +0,0 @@
---[================[
-LibClassicDurations
-Author: d87
-Description: Tracks all aura applications in combat log and provides duration, expiration time.
-And additionally enemy buffs info.
-
-Usage example 1:
------------------
-
- -- Simply get the expiration time and duration
-
- local LibClassicDurations = LibStub("LibClassicDurations")
- LibClassicDurations:Register("YourAddon") -- tell library it's being used and should start working
-
- hooksecurefunc("CompactUnitFrame_UtilSetBuff", function(buffFrame, unit, index, filter)
- local name, _, _, _, duration, expirationTime, unitCaster, _, _, spellId = UnitBuff(unit, index, filter);
-
- local durationNew, expirationTimeNew = LibClassicDurations:GetAuraDurationByUnit(unit, spellId, unitCaster)
- if duration == 0 and durationNew then
- duration = durationNew
- expirationTime = expirationTimeNew
- end
-
- local enabled = expirationTime and expirationTime ~= 0;
- if enabled then
- local startTime = expirationTime - duration;
- CooldownFrame_Set(buffFrame.cooldown, startTime, duration, true);
- else
- CooldownFrame_Clear(buffFrame.cooldown);
- end
- end)
-
-Usage example 2:
------------------
-
- -- Use library's UnitAura replacement function, that shows enemy buffs and
- -- automatically tries to add duration to everything else
-
- local LCD = LibStub("LibClassicDurations")
- LCD:Register("YourAddon") -- tell library it's being used and should start working
-
-
- local f = CreateFrame("frame", nil, UIParent)
- f:RegisterUnitEvent("UNIT_AURA", "target")
-
- local EventHandler = function(self, event, unit)
- for i=1,100 do
- local name, _, _, _, duration, expirationTime, _, _, _, spellId = LCD:UnitAura(unit, i, "HELPFUL")
- if not name then break end
- print(name, duration, expirationTime)
- end
- end
-
- f:SetScript("OnEvent", EventHandler)
-
- -- NOTE: Enemy buff tracking won't start until you register UNIT_BUFF
- LCD.RegisterCallback(addon, "UNIT_BUFF", function(event, unit)
- EventHandler(f, "UNIT_AURA", unit)
- end)
-
---]================]
-
-
-local MAJOR, MINOR = "LibClassicDurations", 13
-local lib = LibStub:NewLibrary(MAJOR, MINOR)
-if not lib then return end
-
-lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
-lib.frame = lib.frame or CreateFrame("Frame")
-
-lib.guids = lib.guids or {}
-lib.spells = lib.spells or {}
-lib.npc_spells = lib.npc_spells or {}
-
-lib.spellNameToID = lib.spellNameToID or {}
-local spellNameToID = lib.spellNameToID
-
-local NPCspellNameToID = {}
-if lib.NPCSpellTableTimer then
- lib.NPCSpellTableTimer:Cancel()
-end
-
-lib.DRInfo = lib.DRInfo or {}
-local DRInfo = lib.DRInfo
-
-lib.buffCache = lib.buffCache or {}
-local buffCache = lib.buffCache
-
-lib.buffCacheValid = lib.buffCacheValid or {}
-local buffCacheValid = lib.buffCacheValid
-
-lib.nameplateUnitMap = lib.nameplateUnitMap or {}
-local nameplateUnitMap = lib.nameplateUnitMap
-
-lib.guidAccessTimes = lib.guidAccessTimes or {}
-local guidAccessTimes = lib.guidAccessTimes
-
-local f = lib.frame
-local callbacks = lib.callbacks
-local guids = lib.guids
-local spells = lib.spells
-local npc_spells = lib.npc_spells
-
-
-local PURGE_INTERVAL = 900
-local PURGE_THRESHOLD = 1800
-local UNKNOWN_AURA_DURATION = 3600 -- 60m
-
-local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
-local UnitGUID = UnitGUID
-local UnitAura = UnitAura
-local GetSpellInfo = GetSpellInfo
-local GetTime = GetTime
-local tinsert = table.insert
-local unpack = unpack
-local GetAuraDurationByUnitDirect
-local enableEnemyBuffTracking = false
-
-f:SetScript("OnEvent", function(self, event, ...)
- return self[event](self, event, ...)
-end)
-
-lib.dataVersions = lib.dataVersions or {}
-local SpellDataVersions = lib.dataVersions
-
-function lib:SetDataVersion(dataType, version)
- SpellDataVersions[dataType] = version
- npc_spells = lib.npc_spells
-end
-
-function lib:GetDataVersion(dataType)
- return SpellDataVersions[dataType] or 0
-end
-
-lib.AddAura = function(id, opts)
- if not opts then return end
-
- local lastRankID
- if type(id) == "table" then
- local clones = id
- lastRankID = clones[#clones]
- else
- lastRankID = id
- end
-
- local spellName = GetSpellInfo(lastRankID)
- spellNameToID[spellName] = lastRankID
-
- if type(id) == "table" then
- for _, spellID in ipairs(id) do
- spells[spellID] = opts
- end
- else
- spells[id] = opts
- end
-end
-
-
-lib.Talent = function (...)
- for i=1, 5 do
- local spellID = select(i, ...)
- if not spellID then break end
- if IsPlayerSpell(spellID) then return i end
- end
- return 0
-end
-
-local prevID
-local counter = 0
-local function processNPCSpellTable()
- local dataTable = lib.npc_spells
- counter = 0
- local id = next(dataTable, prevID)
- while (id and counter < 300) do
- NPCspellNameToID[GetSpellInfo(id)] = id
-
- counter = counter + 1
- prevID = id
- id = next(dataTable, prevID)
- end
- if (id) then
- C_Timer.After(1, processNPCSpellTable)
- end
-end
-lib.NPCSpellTableTimer = C_Timer.NewTimer(10, processNPCSpellTable)
---------------------------
--- OLD GUIDs PURGE
---------------------------
-
-local function purgeOldGUIDs()
- local now = GetTime()
- local deleted = {}
- for guid, lastAccessTime in pairs(guidAccessTimes) do
- if lastAccessTime + PURGE_THRESHOLD < now then
- guids[guid] = nil
- nameplateUnitMap[guid] = nil
- buffCacheValid[guid] = nil
- buffCache[guid] = nil
- DRInfo[guid] = nil
- tinsert(deleted, guid)
- end
- end
- for _, guid in ipairs(deleted) do
- guidAccessTimes[guid] = nil
- end
-end
-lib.purgeTicker = lib.purgeTicker or C_Timer.NewTicker( PURGE_INTERVAL, purgeOldGUIDs)
-
---------------------------
--- DIMINISHING RETURNS
---------------------------
-local bit_band = bit.band
-local DRResetTime = 18.4
-local COMBATLOG_OBJECT_TYPE_PLAYER = COMBATLOG_OBJECT_TYPE_PLAYER
-local COMBATLOG_OBJECT_REACTION_FRIENDLY = COMBATLOG_OBJECT_REACTION_FRIENDLY
-
-local DRMultipliers = { 0.5, 0.25, 0}
-local function addDRLevel(dstGUID, category)
- local guidTable = DRInfo[dstGUID]
- if not guidTable then
- DRInfo[dstGUID] = {}
- guidTable = DRInfo[dstGUID]
- end
-
- local catTable = guidTable[category]
- if not catTable then
- guidTable[category] = {}
- catTable = guidTable[category]
- end
-
- local now = GetTime()
- local isExpired = (catTable.expires or 0) <= now
- if isExpired then
- catTable.level = 1
- catTable.expires = now + DRResetTime
- else
- catTable.level = catTable.level + 1
- end
-end
-local function clearDRs(dstGUID)
- DRInfo[dstGUID] = nil
-end
-local function getDRMul(dstGUID, spellID)
- local category = lib.DR_CategoryBySpellID[spellID]
- if not category then return 1 end
-
- local guidTable = DRInfo[dstGUID]
- if guidTable then
- local catTable = guidTable[category]
- if catTable then
- local now = GetTime()
- local isExpired = (catTable.expires or 0) <= now
- if isExpired then
- return 1
- else
- local mul = DRMultipliers[catTable.level]
- return mul or 1
- end
- end
- end
- return 1
-end
-
-local function CountDiminishingReturns(eventType, srcGUID, srcFlags, dstGUID, dstFlags, spellID, auraType)
- if auraType == "DEBUFF" then
- if eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH" then
- local category = lib.DR_CategoryBySpellID[spellID]
- if not category then return end
-
- local isDstPlayer = bit_band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0
- -- local isFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
-
- if not isDstPlayer then
- if not lib.DR_TypesPVE[category] then return end
- end
-
- addDRLevel(dstGUID, category)
- end
- if eventType == "UNIT_DIED" then
- clearDRs(dstGUID)
- end
- end
-end
-
-------------------------
--- COMBO POINTS
-------------------------
-
-local GetComboPoints = GetComboPoints
-local _, playerClass = UnitClass("player")
-local cpWas = 0
-local cpNow = 0
-local function GetCP()
- if not cpNow then return GetComboPoints("player", "target") end
- return cpWas > cpNow and cpWas or cpNow
-end
-
-function f:PLAYER_TARGET_CHANGED(event)
- return self:UNIT_POWER_UPDATE(event, "player", "COMBO_POINTS")
-end
-function f:UNIT_POWER_UPDATE(event,unit, ptype)
- if ptype == "COMBO_POINTS" then
- cpWas = cpNow
- cpNow = GetComboPoints(unit, "target")
- end
-end
-
----------------------------
--- COMBAT LOG
----------------------------
-
-local function cleanDuration(duration, spellID, srcGUID)
- if type(duration) == "function" then
- local isSrcPlayer = srcGUID == UnitGUID("player")
- local comboPoints
- if isSrcPlayer and playerClass == "ROGUE" then
- comboPoints = GetCP()
- end
- return duration(spellID, isSrcPlayer, comboPoints)
- end
- return duration
-end
-
-local function SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, doRemove)
- if not opts then return end
-
- local guidTable = guids[dstGUID]
- if not guidTable then
- guids[dstGUID] = {}
- guidTable = guids[dstGUID]
- end
-
- local isStacking = opts.stacking
- -- local auraUID = MakeAuraUID(spellID, isStacking and srcGUID)
-
- if doRemove then
- if guidTable[spellID] then
- if isStacking then
- if guidTable[spellID].applications then
- guidTable[spellID].applications[srcGUID] = nil
- end
- else
- guidTable[spellID] = nil
- end
- end
- return
- end
-
- local spellTable = guidTable[spellID]
- if not spellTable then
- guidTable[spellID] = {}
- spellTable = guidTable[spellID]
- if isStacking then
- spellTable.applications = {}
- end
- end
-
- local applicationTable
- if isStacking then
- applicationTable = spellTable.applications[srcGUID]
- if not applicationTable then
- spellTable.applications[srcGUID] = {}
- applicationTable = spellTable.applications[srcGUID]
- end
- else
- applicationTable = spellTable
- end
-
- -- local duration = cleanDuration(opts.duration, spellID, srcGUID)
- local duration = opts.duration
- if not duration then
- return SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, true)
- end
- -- local mul = getDRMul(dstGUID, spellID)
- -- duration = duration * mul
- local now = GetTime()
- -- local expirationTime
- -- if duration == 0 then
- -- expirationTime = now + UNKNOWN_AURA_DURATION -- 60m
- -- else
- -- -- local temporaryDuration = cleanDuration(opts.duration, spellID, srcGUID)
- -- expirationTime = now + duration
- -- end
- applicationTable[1] = duration
- applicationTable[2] = now
- -- applicationTable[2] = expirationTime
- applicationTable[3] = auraType
-
- guidAccessTimes[dstGUID] = now
-end
-
-local function NotifyGUIDBuffChange(dstGUID)
- if dstGUID == UnitGUID("target") then
- callbacks:Fire("UNIT_BUFF", "target")
- end
- local nameplateUnit = nameplateUnitMap[dstGUID]
- if nameplateUnit then
- callbacks:Fire("UNIT_BUFF", nameplateUnit)
- end
-end
-
----------------------------
--- COMBAT LOG HANDLER
----------------------------
-function f:COMBAT_LOG_EVENT_UNFILTERED(event)
-
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType, amount = CombatLogGetCurrentEventInfo()
-
- if auraType == "BUFF" or auraType == "DEBUFF" then
- local isSrcPlayer = bit_band(srcFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0
-
- if spellID == 0 then
- -- so not to rewrite the whole thing to spellnames after the combat log change
- -- just treat everything as max rank id of that spell name
- if isSrcPlayer then
- spellID = spellNameToID[spellName]
- else
- spellID = NPCspellNameToID[spellName]
- end
-
- if not spellID then
- return
- end
- end
-
- CountDiminishingReturns(eventType, srcGUID, srcFlags, dstGUID, dstFlags, spellID, auraType)
-
- local isDstFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
-
- local opts = spells[spellID]
-
- if not opts then
- local npc_aura_duration = npc_spells[spellID]
- if npc_aura_duration then
- opts = { duration = npc_aura_duration }
- -- elseif enableEnemyBuffTracking and not isDstFriendly and auraType == "BUFF" then
- -- opts = { duration = 0 } -- it'll be accepted but as an indefinite aura
- end
- end
-
- if opts then
- -- print(eventType, srcGUID, "=>", dstName, spellID, spellName, auraType )
- if eventType == "SPELL_AURA_REFRESH" or
- eventType == "SPELL_AURA_APPLIED" or
- eventType == "SPELL_AURA_APPLIED_DOSE" then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType)
- elseif eventType == "SPELL_AURA_REMOVED" then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, true)
- -- elseif eventType == "SPELL_AURA_REMOVED_DOSE" then
- -- self:RemoveDose(srcGUID, dstGUID, spellID, spellName, auraType, amount)
- end
- if enableEnemyBuffTracking and not isDstFriendly and auraType == "BUFF" then
- -- invalidate buff cache
- buffCacheValid[dstGUID] = nil
-
- NotifyGUIDBuffChange(dstGUID)
- end
- end
- end
- if eventType == "UNIT_DIED" then
- guids[dstGUID] = nil
- buffCache[dstGUID] = nil
- buffCacheValid[dstGUID] = nil
- guidAccessTimes[dstGUID] = nil
- local isDstFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
- if enableEnemyBuffTracking and not isDstFriendly then
- NotifyGUIDBuffChange(dstGUID)
- end
- nameplateUnitMap[dstGUID] = nil
- end
-end
-
----------------------------
--- ENEMY BUFFS
----------------------------
-local makeBuffInfo = function(spellID, bt)
- local name, rank, icon, castTime, minRange, maxRange, spellId = GetSpellInfo(spellID)
- local duration = bt[1]
- local expirationTime = duration == 0 and 0 or bt[2]
- -- buffName, icon, count, debuffType, duration, expirationTime, caster, canStealOrPurge, _ , spellId
- return { name, icon, 1, nil, duration, expirationTime, nil, nil, nil, spellID }
-end
-
-local shouldDisplayAura = function(auraTable)
- if auraTable[3] == "BUFF" then
- local now = GetTime()
- local expirationTime = auraTable[2]
- return expirationTime > now
- end
- return false
-end
-
-local function RegenerateBuffList(dstGUID)
- local guidTable = guids[dstGUID]
- if not guidTable then
- return
- end
-
- local buffs = {}
- for spellID, t in pairs(guidTable) do
- if t.applications then
- for srcGUID, auraTable in pairs(t.applications) do
- if shouldDisplayAura(auraTable) then
- tinsert(buffs, makeBuffInfo(spellID, auraTable))
- end
- end
- else
- if shouldDisplayAura(t) then
- tinsert(buffs, makeBuffInfo(spellID, t))
- end
- end
- end
-
- buffCache[dstGUID] = buffs
- buffCacheValid[dstGUID] = true
-end
-
-local FillInDuration = function(unit, buffName, icon, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nps, spellId, ...)
- if buffName then
- local durationNew, expirationTimeNew = GetAuraDurationByUnitDirect(unit, spellId, caster)
- if duration == 0 and durationNew then
- duration = durationNew
- expirationTime = expirationTimeNew
- end
- return buffName, icon, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nps, spellId, ...
- end
-end
-
-function lib.UnitAuraDirect(unit, index, filter)
- if enableEnemyBuffTracking and filter == "HELPFUL" and not UnitIsFriend("player", unit) and not UnitAura(unit, 1, filter) then
- local unitGUID = UnitGUID(unit)
- if not buffCacheValid[unitGUID] then
- RegenerateBuffList(unitGUID)
- end
-
- local buffCacheHit = buffCache[unitGUID]
- if buffCacheHit then
- local buffReturns = buffCache[unitGUID][index]
- if buffReturns then
- return unpack(buffReturns)
- end
- end
- else
- return FillInDuration(unit, UnitAura(unit, index, filter))
- end
-end
-
-function lib:UnitAura(...)
- return self.UnitAuraDirect(...)
-end
-
-function f:NAME_PLATE_UNIT_ADDED(event, unit)
- local unitGUID = UnitGUID(unit)
- nameplateUnitMap[unitGUID] = unit
-end
-function f:NAME_PLATE_UNIT_REMOVED(event, unit)
- local unitGUID = UnitGUID(unit)
- if unitGUID then -- it returns correctly on death, but just in case
- nameplateUnitMap[unitGUID] = nil
- end
-end
-
-function callbacks.OnUsed()
- enableEnemyBuffTracking = true
- f:RegisterEvent("NAME_PLATE_UNIT_ADDED")
- f:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
-end
-function callbacks.OnUnused()
- enableEnemyBuffTracking = false
- f:UnregisterEvent("NAME_PLATE_UNIT_ADDED")
- f:UnregisterEvent("NAME_PLATE_UNIT_REMOVED")
-end
-
----------------------------
--- PUBLIC FUNCTIONS
----------------------------
-local function GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, isStacking)
- local guidTable = guids[dstGUID]
- if guidTable then
-
- local lastRankID = spellNameToID[spellName]
-
- local spellTable = guidTable[lastRankID]
- if spellTable then
- local applicationTable
- if isStacking then
- if srcGUID and spellTable.applications then
- applicationTable = spellTable.applications[srcGUID]
- elseif spellTable.applications then -- return some duration
- applicationTable = select(2,next(spellTable.applications))
- end
- else
- applicationTable = spellTable
- end
- if not applicationTable then return end
- local durationFunc, startTime = unpack(applicationTable)
- local duration = cleanDuration(durationFunc, spellID, srcGUID)
- local mul = getDRMul(dstGUID, spellID)
- -- local mul = getDRMul(dstGUID, lastRankID)
- duration = duration * mul
- local expirationTime = startTime + duration
- if GetTime() <= expirationTime then
- return duration, expirationTime
- end
- end
- end
-end
-
-function lib.GetAuraDurationByUnitDirect(unit, spellID, casterUnit, spellName)
- assert(spellID, "spellID is nil")
- local opts = spells[spellID]
- if not opts then return end
- local dstGUID = UnitGUID(unit)
- local srcGUID = casterUnit and UnitGUID(casterUnit)
- if not spellName then spellName = GetSpellInfo(spellID) end
- return GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, opts.stacking)
-end
-GetAuraDurationByUnitDirect = lib.GetAuraDurationByUnitDirect
-
-function lib:GetAuraDurationByUnit(...)
- return self.GetAuraDurationByUnitDirect(...)
-
-end
-function lib:GetAuraDurationByGUID(dstGUID, spellID, srcGUID, spellName)
- local opts = spells[spellID]
- if not opts then return end
- if not spellName then spellName = GetSpellInfo(spellID) end
- return GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, opts.stacking)
-end
-
-function lib:GetLastRankSpellIDByName(spellName)
- return spellNameToID[spellName]
-end
-
-function lib:GetDurationForRank(spellName, spellID, srcGUID)
- local lastRankID = spellNameToID[spellName]
- local opts = spells[lastRankID]
- if opts then
- return cleanDuration(opts.duration, spellID, srcGUID)
- end
-end
-
-local activeFrames = {}
-function lib:RegisterFrame(frame)
- activeFrames[frame] = true
- if next(activeFrames) then
- f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- if playerClass == "ROGUE" then
- f:RegisterEvent("PLAYER_TARGET_CHANGED")
- f:RegisterUnitEvent("UNIT_POWER_UPDATE", "player")
- end
- end
-end
-lib.Register = lib.RegisterFrame
-
-function lib:UnregisterFrame(frame)
- activeFrames[frame] = nil
- if not next(activeFrames) then
- f:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- if playerClass == "ROGUE" then
- f:UnregisterEvent("PLAYER_TARGET_CHANGED")
- f:UnregisterEvent("UNIT_POWER_UPDATE")
- end
- end
-end
-lib.Unregister = lib.UnregisterFrame
\ No newline at end of file
diff --git a/libraries/LibClassicDurations/diminishingReturns.lua b/libraries/LibClassicDurations/diminishingReturns.lua
deleted file mode 100755
index 62ab07f..0000000
--- a/libraries/LibClassicDurations/diminishingReturns.lua
+++ /dev/null
@@ -1,173 +0,0 @@
-local lib = LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "DRTable", 6
-if lib:GetDataVersion(Type) >= Version then return end
-
-local FEAR = "FEAR"
-local SILENCE = "SILENCE"
-local INCAP = "INCAP"
-local STUN = "STUN"
-local HORROR = "HORROR"
-local ROOT = "ROOT"
-local OPENER_STUN = "OPENER_STUN"
-local RANDOM_STUN = "RANDOM_STUN"
-local RANDOM_ROOT = "RANDOM_ROOT"
-local FROST_SHOCK = "FROST_SHOCK"
-
-lib.DR_TypesPVE = {
- [OPENER_STUN] = true,
- [STUN] = true,
-}
-
-lib.DR_CategoryBySpellID = {
- -- Silences weren't on DR until 3.0.8
- -- Are random stuns even diminished at all among themselves?
- -- Random roots?
-
- [835] = STUN, -- Tidal Charm
- [20549] = STUN, -- War Stomp
- [16566] = ROOT, -- Net-o-Matic
-
- [5782] = FEAR, -- Fear 3 ranks
- [6213] = FEAR,
- [6215] = FEAR,
- [5484] = FEAR, -- Howl of Terror 2 ranks
- [17928] = FEAR,
- [6358] = FEAR, -- Seduction
-
- -- [24259] = SILENCE, -- Spell Lock
-
- -- Coil wasn't on DR in classic
- -- [6789] = HORROR, -- Death Coil 3 ranks
- -- [17925] = HORROR,
- -- [17926] = HORROR,
- [22703] = STUN, -- Infernal Summon Stun
-
-
- [20066] = INCAP, -- Repentance
-
- [853] = STUN, -- Hammer of Justice 4 ranks
- [5588] = STUN,
- [5589] = STUN,
- [10308] = STUN,
-
- [20170] = RANDOM_STUN, -- Seal of Justice Stun
-
-
-
- [3355] = INCAP, -- Freezing Trap Effect 3 ranks
- [14308] = INCAP,
- [14309] = INCAP,
-
- [19386] = INCAP, -- Wyvern Sting 3 ranks
- [24132] = INCAP,
- [24133] = INCAP,
-
- -- [19503] = NONE, -- Scatter Shot
- [19229] = RANDOM_ROOT, -- Improved Wing Clip Root
-
- [19306] = ROOT, -- Counterattack
-
- [19410] = RANDOM_STUN, -- Conc stun
- [24394] = STUN, -- Intimidation
-
-
- [2637] = INCAP, -- Hibernate 3 ranks
- [18657] = INCAP,
- [18658] = INCAP,
-
- [5211] = STUN, -- Bash 3 ranks
- [6798] = STUN,
- [8983] = STUN,
-
- [339] = ROOT, -- Entangling Roots 6 ranks
- [1062] = ROOT,
- [5195] = ROOT,
- [5196] = ROOT,
- [9852] = ROOT,
- [9853] = ROOT,
- [16922] = RANDOM_STUN, -- Improved Starfire
-
- -- Pounce wasn't on the same DR with Cheap Shot until 3.1.0
- [9005] = STUN, -- Pounce 3 ranks
- [9823] = STUN,
- [9827] = STUN,
-
-
- -- [18469] = SILENCE, -- Silence (Improved Counterspell)
-
- [118] = INCAP, -- Polymorph 7 variants
- [12824] = INCAP,
- [12825] = INCAP,
- [12826] = INCAP,
- [28270] = INCAP,
- [28271] = INCAP,
- [28272] = INCAP,
-
- -- Frostbite wasn't on DR until 2.1.0
- -- [12494] = RANDOM_ROOT, -- Frostbite
- [12355] = RANDOM_STUN, -- Impact
-
- [122] = ROOT, -- Frost Nova 4 rank
- [865] = ROOT,
- [6131] = ROOT,
- [10230] = ROOT,
-
- [8056] = FROST_SHOCK, -- Frost Shock 4 ranks
- [8058] = FROST_SHOCK,
- [10472] = FROST_SHOCK,
- [10473] = FROST_SHOCK,
-
-
- -- [15487] = SILENCE, -- Silence (Priest)
- [15269] = RANDOM_STUN, -- Blackout
-
- -- MIND CONTROL ???
- -- No Undeads for Shackle in classic
-
- [8122] = FEAR, -- Psychic Scream
- [8124] = FEAR,
- [10888] = FEAR,
- [10890] = FEAR,
-
-
- -- [18425] = SILENCE, -- Imp Kick
- [1833] = OPENER_STUN, -- Cheap Shot
- -- Blind wasn't on Fear until some time in 3.0, and before that it was with Cyclone,
- -- and in classic probably with itself
- -- [2094] = FEAR, -- Blind
-
- [2070] = INCAP, -- Sap 3 ranks
- [6770] = INCAP,
- [11297] = INCAP,
-
- [1776] = INCAP, -- Gouge 5 ranks
- [1777] = INCAP,
- [8629] = INCAP,
- [11285] = INCAP,
- [11286] = INCAP,
-
- [408] = STUN, -- Kidney Shot 2 ranks
- [8643] = STUN,
-
- [5530] = RANDOM_STUN, -- Mace Spec Stun, shared by both Rogue and Warrior
-
-
- -- [18498] = SILENCE, -- Imp Shield Bash Silence
- [23694] = RANDOM_ROOT, -- Improved Hamstring Root
-
- -- Disarm wasn't on DR until 2.3.0
- -- [676] = "DISARM", -- Disarm
-
- [12809] = STUN, -- Concussion Blow
- [12798] = RANDOM_STUN, -- Improved Revenge
- [5246] = FEAR, -- Intimidating Shout
- [7922] = STUN, -- Charge
-
- [20253] = STUN, -- Intercept Stun 3 ranks
- [20614] = STUN,
- [20615] = STUN,
-}
-
-lib:SetDataVersion(Type, Version)
\ No newline at end of file
diff --git a/libraries/LibClassicDurations/npcAbilities.lua b/libraries/LibClassicDurations/npcAbilities.lua
deleted file mode 100755
index 0c50193..0000000
--- a/libraries/LibClassicDurations/npcAbilities.lua
+++ /dev/null
@@ -1,576 +0,0 @@
-local lib = LibStub and LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "NPCSpellTable", 2
-if lib:GetDataVersion(Type) >= Version then return end
-
-lib.npc_spells = {
- [11]=30,[12]=10,[13]=30,[16]=15,[17]=30,[22]=10,[25]=5,[43]=30,[47]=10,[56]=3,
- [65]=30,[66]=120,[67]=10,[89]=20,[91]=30,[96]=10,[99]=30,[101]=3,[111]=10,
- [112]=10,[113]=15,[116]=5,[118]=20,[120]=8,[122]=8,[126]=45,[128]=60,[130]=30,
- [131]=600,[132]=600,[133]=4,[134]=60,[136]=5,[139]=15,[143]=6,[145]=6,[168]=1800,
- [172]=12,[184]=60,[205]=6,[228]=10,[246]=10,[302]=30,[324]=600,[325]=600,
- [339]=12,[348]=15,[355]=3,[379]=60,[409]=60,[410]=60,[411]=60,[430]=18,[431]=21,
- [432]=24,[433]=18,[434]=21,[435]=24,[450]=5,[453]=15,[454]=10,[457]=30,[467]=600,
- [474]=30,[498]=6,[507]=30,[509]=30,[512]=20,[543]=30,[546]=600,[550]=30,[552]=20,
- [553]=30,[568]=8,[586]=10,[588]=600,[589]=18,[592]=30,[594]=18,[595]=30,[600]=30,
- [602]=600,[603]=60,[604]=600,[605]=60,[606]=30,[642]=10,[673]=3600,[676]=10,
- [687]=1800,[689]=5,[692]=10,[694]=6,[696]=1800,[699]=5,[700]=20,[702]=120,
- [703]=18,[704]=120,[706]=1800,[707]=15,[709]=5,[710]=20,[720]=8,[731]=8,[742]=30,
- [744]=30,[745]=10,[746]=6,[755]=10,[770]=40,[772]=9,[774]=12,[775]=8,[776]=5,
- [778]=40,[782]=600,[785]=20,[800]=0.25,[802]=240,[804]=4,[806]=60,[822]=60,
- [829]=30,[830]=30,[833]=10,[834]=3600,[835]=3,[837]=6,[839]=30,[849]=60,[851]=10,
- [853]=3,[855]=30,[863]=60,[865]=8,[867]=30,[871]=10,[877]=30,[885]=120,[905]=600,
- [945]=600,[970]=18,[976]=600,[980]=24,[992]=18,[994]=30,[1002]=60,[1006]=600,
- [1008]=600,[1009]=5,[1010]=120,[1014]=24,[1020]=12,[1022]=6,[1038]=300,[1044]=10,
- [1056]=30,[1058]=12,[1062]=15,[1075]=600,[1079]=12,[1086]=1800,[1090]=30,
- [1094]=15,[1098]=300,[1108]=120,[1120]=15,[1121]=8,[1126]=1800,[1127]=27,
- [1129]=30,[1130]=120,[1131]=30,[1132]=30,[1133]=27,[1135]=30,[1137]=30,[1138]=60,
- [1139]=15,[1159]=6,[1160]=30,[1161]=6,[1179]=10,[1243]=1800,[1244]=1800,
- [1245]=1800,[1302]=45,[1430]=12,[1450]=1800,[1451]=1800,[1452]=1800,[1453]=1800,
- [1459]=1800,[1460]=1800,[1461]=1800,[1462]=30,[1463]=60,[1490]=300,[1513]=10,
- [1515]=20,[1528]=1,[1539]=20,[1604]=4,[1663]=30,[1664]=30,[1665]=30,[1706]=120,
- [1714]=30,[1715]=15,[1719]=15,[1731]=15,[1732]=15,[1735]=30,[1776]=4,[1777]=4,
- [1822]=9,[1823]=9,[1824]=9,[1833]=4,[1834]=180,[1849]=30,[1850]=15,[1864]=300,
- [1906]=8,[1943]=6,[1949]=15,[1953]=1,[1978]=15,[2070]=35,[2090]=12,[2091]=12,
- [2094]=10,[2096]=60,[2140]=15,[2313]=20,[2351]=30,[2353]=30,[2354]=30,[2361]=300,
- [2367]=3600,[2374]=3600,[2376]=3600,[2378]=3600,[2379]=15,[2380]=180,[2381]=600,
- [2425]=5,[2479]=30,[2537]=30,[2564]=5,[2565]=5,[2601]=30,[2602]=15,[2637]=20,
- [2639]=21,[2647]=5,[2651]=15,[2652]=600,[2691]=0.001,[2766]=30,[2767]=18,
- [2791]=1800,[2818]=12,[2819]=12,[2855]=120,[2871]=30,[2878]=10,[2880]=10,
- [2893]=8,[2908]=15,[2941]=15,[2943]=120,[2944]=24,[2947]=180,[2969]=15,
- [2970]=600,[2974]=10,[2983]=15,[3019]=15,[3023]=30,[3034]=8,[3043]=20,[3045]=15,
- [3105]=600,[3109]=10,[3111]=5,[3120]=5,[3130]=6,[3132]=12,[3133]=30,[3136]=10,
- [3140]=8,[3143]=3,[3145]=5,[3146]=30,[3147]=12,[3148]=20,[3149]=15,[3150]=600,
- [3151]=6,[3157]=3600,[3158]=3600,[3159]=3600,[3160]=3600,[3161]=3600,[3162]=3600,
- [3163]=3600,[3164]=3600,[3165]=3600,[3166]=3600,[3167]=3600,[3168]=3600,[3169]=6,
- [3219]=3600,[3220]=3600,[3221]=3600,[3222]=3600,[3223]=3600,[3229]=5,[3232]=60,
- [3237]=240,[3238]=8,[3242]=2,[3247]=15,[3248]=6,[3252]=12,[3256]=240,[3258]=4,
- [3260]=8,[3261]=20,[3263]=5,[3264]=15,[3267]=7,[3268]=7,[3269]=8,[3271]=2,
- [3288]=10,[3329]=60,[3332]=30,[3335]=300,[3355]=10,[3356]=45,[3358]=40,
- [3369]=120,[3385]=4,[3387]=120,[3388]=45,[3389]=6,[3396]=30,[3409]=12,[3416]=10,
- [3419]=6,[3424]=120,[3427]=300,[3429]=600,[3436]=300,[3439]=300,[3442]=15,
- [3443]=15,[3446]=6,[3485]=15,[3490]=5,[3510]=3,[3514]=3,[3542]=30,[3547]=8,
- [3551]=2,[3574]=8,[3583]=120,[3584]=120,[3586]=180,[3589]=8,[3593]=3600,[3600]=5,
- [3602]=30,[3603]=15,[3604]=8,[3609]=8,[3618]=300,[3627]=12,[3635]=6,[3636]=15,
- [3639]=6,[3648]=45,[3650]=15,[3651]=10,[3661]=5,[3662]=5,[3671]=180,[3672]=180,
- [3673]=180,[3674]=30,[3680]=15,[3698]=10,[3699]=10,[3700]=10,[3719]=30,[3742]=15,
- [3747]=30,[3815]=45,[3826]=3,[4057]=60,[4058]=3,[4060]=12,[4063]=30,[4064]=1,
- [4065]=1,[4066]=2,[4067]=2,[4068]=3,[4069]=3,[4077]=60,[4079]=10,[4083]=30,
- [4092]=10,[4101]=6,[4102]=15,[4104]=15,[4105]=15,[4107]=10,[4108]=10,[4109]=12,
- [4111]=12,[4134]=10,[4135]=10,[4137]=10,[4139]=10,[4146]=15,[4147]=30,[4148]=300,
- [4149]=10,[4150]=12,[4153]=30,[4154]=8,[4159]=5,[4166]=3,[4167]=8,[4168]=10,
- [4169]=12,[4238]=120,[4240]=8,[4242]=15,[4243]=3,[4244]=8,[4246]=15,[4282]=10,
- [4285]=8,[4286]=15,[4316]=30,[4318]=1800,[4320]=12,[4321]=5,[4504]=30,[4505]=30,
- [4507]=5,[4514]=12,[4524]=3,[4538]=12,[4539]=10,[4805]=15,[4932]=20,[4940]=30,
- [4941]=90,[4948]=15,[4952]=5,[4955]=12,[4962]=6,[4970]=10,[4974]=120,[4979]=10,
- [4980]=10,[5003]=90,[5004]=18,[5005]=21,[5006]=24,[5007]=27,[5020]=300,
- [5021]=300,[5024]=10,[5101]=30,[5105]=60,[5106]=15,[5115]=6,[5116]=4,[5119]=180,
- [5120]=60,[5121]=60,[5122]=60,[5123]=60,[5124]=60,[5134]=10,[5137]=60,[5138]=5,
- [5143]=3,[5144]=4,[5145]=5,[5159]=20,[5164]=2,[5165]=8,[5171]=6,[5195]=18,
- [5196]=21,[5202]=1800,[5208]=60,[5209]=6,[5211]=2,[5213]=15,[5217]=6,[5219]=8,
- [5220]=15,[5229]=10,[5232]=1800,[5234]=1800,[5242]=120,[5246]=8,[5250]=30,
- [5254]=30,[5256]=20,[5257]=300,[5259]=15,[5260]=15,[5262]=10,[5271]=20,[5276]=15,
- [5277]=15,[5280]=45,[5302]=5,[5306]=120,[5320]=1800,[5321]=1800,[5322]=1800,
- [5323]=1800,[5324]=1800,[5325]=1800,[5337]=8,[5363]=20,[5365]=20,[5366]=20,
- [5367]=20,[5376]=8,[5384]=360,[5402]=300,[5403]=10,[5413]=120,[5416]=45,[5422]=8,
- [5424]=4,[5426]=6,[5480]=15,[5484]=10,[5508]=15,[5514]=12,[5515]=8,[5530]=3,
- [5543]=2,[5567]=5,[5570]=12,[5573]=8,[5579]=0.1,[5588]=4,[5589]=5,[5597]=10,
- [5598]=10,[5599]=8,[5627]=15,[5628]=6,[5648]=3,[5649]=5,[5665]=600,[5697]=600,
- [5703]=4,[5708]=2,[5726]=5,[5727]=8,[5759]=240,[5760]=10,[5781]=30,[5782]=10,
- [5810]=6,[5858]=300,[5862]=1800,[5884]=12,[5909]=600,[5915]=60,[5917]=10,
- [5918]=5,[5934]=6,[5951]=2,[5990]=8,[6016]=20,[6065]=30,[6066]=30,[6074]=15,
- [6075]=15,[6076]=15,[6077]=15,[6078]=15,[6114]=300,[6115]=60,[6117]=1800,
- [6131]=8,[6136]=5,[6143]=30,[6146]=15,[6150]=12,[6190]=30,[6192]=120,[6196]=60,
- [6197]=60,[6205]=120,[6213]=15,[6215]=20,[6217]=24,[6222]=15,[6223]=18,[6226]=5,
- [6229]=30,[6238]=20,[6240]=0.001,[6253]=2,[6257]=30,[6264]=8,[6266]=3,[6268]=3,
- [6272]=60,[6277]=120,[6278]=60,[6298]=300,[6304]=3,[6306]=30,[6343]=10,
- [6346]=600,[6355]=10,[6358]=15,[6405]=180,[6409]=5,[6410]=21,[6411]=21,[6422]=3,
- [6431]=30,[6432]=10,[6434]=10,[6435]=3,[6466]=3,[6467]=180,[6468]=6,[6495]=300,
- [6507]=60,[6512]=600,[6513]=60,[6524]=2,[6528]=0.001,[6530]=10,[6531]=60,
- [6533]=10,[6538]=60,[6546]=12,[6547]=15,[6548]=18,[6576]=5,[6580]=3,[6581]=10,
- [6584]=10,[6600]=5,[6601]=5,[6602]=5,[6605]=4,[6607]=2,[6608]=5,[6614]=30,
- [6615]=30,[6634]=8,[6664]=2,[6669]=2,[6673]=120,[6685]=15,[6711]=360,[6713]=6,
- [6714]=4,[6716]=3,[6724]=10,[6726]=6,[6727]=30,[6728]=10,[6730]=2,[6741]=20,
- [6742]=30,[6749]=5,[6751]=12,[6754]=3,[6756]=1800,[6758]=120,[6767]=600,
- [6770]=25,[6772]=3,[6774]=6,[6788]=15,[6789]=3,[6793]=6,[6795]=3,[6798]=3,
- [6814]=45,[6816]=4,[6817]=4,[6818]=4,[6819]=4,[6844]=10,[6864]=8,[6866]=180,
- [6869]=2,[6870]=180,[6873]=120,[6894]=10,[6902]=120,[6903]=10,[6907]=120,
- [6909]=180,[6917]=10,[6921]=6,[6922]=300,[6927]=5,[6940]=30,[6942]=6,[6945]=5,
- [6946]=180,[6950]=60,[6951]=300,[6955]=300,[6957]=180,[6960]=180,[6965]=4,
- [6969]=1,[6974]=1,[6982]=4,[6984]=10,[6985]=10,[7001]=10,[7020]=15,[7022]=300,
- [7023]=1,[7035]=5,[7036]=5,[7038]=60,[7039]=60,[7040]=60,[7041]=60,[7042]=60,
- [7043]=60,[7044]=60,[7045]=60,[7046]=60,[7047]=60,[7048]=60,[7049]=60,[7050]=60,
- [7051]=60,[7053]=60,[7054]=300,[7057]=300,[7068]=15,[7072]=60,[7074]=5,
- [7081]=300,[7082]=3,[7090]=300,[7093]=4,[7098]=180,[7102]=240,[7103]=240,
- [7104]=10,[7120]=1800,[7121]=10,[7124]=300,[7125]=120,[7127]=60,[7128]=600,
- [7136]=10,[7137]=6,[7139]=3,[7140]=5,[7144]=15,[7164]=180,[7178]=1800,[7184]=300,
- [7211]=10,[7230]=3600,[7231]=3600,[7232]=3600,[7233]=3600,[7234]=3600,
- [7235]=3600,[7236]=3600,[7237]=3600,[7238]=3600,[7239]=3600,[7240]=3600,
- [7241]=3600,[7242]=3600,[7243]=3600,[7244]=3600,[7245]=3600,[7246]=3600,
- [7247]=3600,[7248]=3600,[7249]=3600,[7250]=3600,[7251]=3600,[7252]=3600,
- [7253]=3600,[7254]=3600,[7267]=3,[7272]=12,[7279]=120,[7288]=20,[7289]=120,
- [7290]=10,[7291]=30,[7295]=10,[7300]=1800,[7301]=1800,[7302]=1800,[7320]=1800,
- [7321]=5,[7322]=7,[7336]=1,[7337]=1.5,[7338]=2,[7339]=2.5,[7353]=60,[7357]=15,
- [7358]=60,[7365]=30,[7366]=240,[7367]=180,[7371]=4,[7372]=15,[7373]=15,[7383]=30,
- [7386]=30,[7389]=15,[7396]=30,[7399]=4,[7400]=6,[7402]=6,[7405]=30,[7481]=300,
- [7483]=300,[7484]=300,[7586]=10,[7587]=10,[7621]=10,[7638]=3,[7645]=10,
- [7646]=120,[7648]=18,[7651]=5,[7656]=30,[7657]=30,[7658]=120,[7659]=120,
- [7670]=2.5,[7713]=6,[7737]=15,[7739]=10,[7744]=5,[7750]=12,[7761]=4,[7764]=1800,
- [7803]=5,[7806]=180,[7807]=180,[7808]=180,[7812]=30,[7840]=20,[7844]=1800,
- [7870]=300,[7901]=300,[7914]=9,[7922]=1,[7926]=8,[7927]=8,[7947]=60,[7948]=20,
- [7950]=3,[7961]=5,[7964]=4,[7965]=300,[7967]=15,[7992]=25,[7997]=300,[7998]=10,
- [8014]=1200,[8016]=1200,[8034]=8,[8037]=8,[8040]=15,[8041]=10,[8050]=12,
- [8052]=12,[8053]=12,[8056]=8,[8058]=8,[8064]=30,[8066]=120,[8067]=120,
- [8068]=1800,[8070]=12,[8078]=10,[8091]=1800,[8094]=1800,[8095]=1800,[8096]=1800,
- [8097]=1800,[8098]=1800,[8099]=1800,[8100]=1800,[8101]=1800,[8112]=1800,
- [8113]=1800,[8114]=1800,[8115]=1800,[8116]=1800,[8117]=1800,[8118]=1800,
- [8119]=1800,[8120]=1800,[8122]=8,[8124]=8,[8134]=600,[8137]=1800,[8138]=2700,
- [8139]=1800,[8140]=15,[8142]=10,[8147]=10,[8150]=2.5,[8151]=2.5,[8191]=15,
- [8192]=15,[8198]=14,[8202]=1200,[8204]=18,[8205]=22,[8208]=10,[8212]=120,
- [8215]=120,[8219]=3600,[8220]=3600,[8221]=3600,[8222]=3600,[8223]=10,[8224]=600,
- [8225]=5,[8226]=300,[8233]=1.5,[8236]=1.5,[8242]=2,[8245]=300,[8255]=10,
- [8256]=180,[8257]=30,[8260]=4,[8267]=600,[8269]=120,[8272]=600,[8275]=75,
- [8277]=120,[8281]=10,[8282]=600,[8285]=2.5,[8288]=15,[8289]=15,[8312]=10,
- [8313]=20,[8314]=3600,[8316]=180,[8317]=180,[8338]=2,[8345]=60,[8346]=20,
- [8348]=12,[8359]=300,[8361]=2,[8362]=20,[8363]=75,[8365]=60,[8377]=4,[8379]=10,
- [8380]=30,[8382]=45,[8383]=3600,[8384]=3600,[8385]=3600,[8391]=3,[8392]=10,
- [8398]=8,[8399]=10,[8400]=8,[8401]=8,[8402]=8,[8406]=7,[8407]=8,[8408]=8,
- [8416]=5,[8417]=5,[8450]=600,[8451]=600,[8455]=600,[8457]=30,[8458]=30,[8461]=30,
- [8462]=30,[8492]=8,[8494]=60,[8495]=60,[8510]=2,[8511]=2,[8516]=1.5,[8552]=120,
- [8553]=600,[8554]=2,[8599]=120,[8600]=180,[8602]=10,[8609]=3,[8611]=6,[8629]=4,
- [8631]=18,[8632]=18,[8633]=18,[8639]=6,[8640]=6,[8643]=1,[8646]=2,[8647]=30,
- [8649]=30,[8650]=30,[8672]=30,[8692]=12,[8696]=15,[8699]=20,[8715]=3,[8716]=12,
- [8733]=3600,[8788]=600,[8806]=60,[8817]=3,[8818]=18,[8822]=30,[8823]=30,
- [8824]=30,[8892]=20,[8893]=2,[8898]=1200,[8899]=1200,[8900]=1200,[8901]=20,
- [8902]=20,[8907]=1800,[8909]=600,[8910]=12,[8914]=600,[8921]=9,[8924]=12,
- [8925]=12,[8926]=12,[8927]=12,[8928]=12,[8929]=12,[8936]=21,[8938]=21,[8939]=21,
- [8940]=21,[8941]=21,[8955]=15,[8983]=4,[8988]=10,[8989]=10,[8994]=15,[9005]=2,
- [9007]=18,[9032]=30,[9034]=21,[9035]=120,[9080]=10,[9095]=600,[9128]=120,
- [9159]=10,[9175]=15,[9176]=60,[9177]=24,[9178]=120,[9179]=3,[9192]=120,
- [9199]=300,[9220]=120,[9234]=1800,[9256]=10,[9275]=21,[9373]=12,[9438]=8,
- [9458]=3,[9459]=60,[9462]=8,[9482]=30,[9484]=30,[9485]=40,[9490]=30,[9492]=12,
- [9493]=12,[9552]=9,[9574]=45,[9576]=10,[9578]=10,[9579]=10,[9587]=180,[9592]=10,
- [9612]=15,[9614]=60,[9616]=20,[9632]=9,[9657]=10,[9658]=45,[9672]=4,[9712]=5,
- [9733]=4,[9735]=1200,[9736]=30,[9738]=120,[9741]=6,[9747]=30,[9749]=40,[9750]=21,
- [9752]=12,[9756]=600,[9773]=8,[9774]=5,[9775]=60,[9779]=8,[9791]=20,[9796]=60,
- [9800]=60,[9806]=20,[9810]=10,[9821]=15,[9823]=2,[9824]=18,[9826]=18,[9827]=2,
- [9833]=12,[9834]=12,[9835]=12,[9839]=12,[9840]=12,[9841]=12,[9845]=6,[9846]=6,
- [9852]=24,[9853]=27,[9856]=21,[9857]=21,[9858]=21,[9884]=1800,[9885]=1800,
- [9894]=12,[9896]=12,[9898]=30,[9901]=15,[9904]=9,[9906]=5,[9907]=40,[9910]=600,
- [9915]=10,[9930]=30,[9991]=604800,[9992]=10,[10017]=10,[10018]=10,[10060]=15,
- [10072]=3600,[10093]=1,[10096]=120,[10134]=7,[10136]=1200,[10148]=8,[10149]=8,
- [10150]=8,[10151]=8,[10156]=1800,[10157]=1800,[10159]=8,[10160]=8,[10161]=8,
- [10169]=600,[10170]=600,[10173]=600,[10174]=600,[10177]=30,[10179]=9,[10180]=9,
- [10181]=9,[10191]=60,[10192]=60,[10193]=60,[10211]=5,[10212]=5,[10219]=1800,
- [10220]=1800,[10223]=30,[10225]=30,[10228]=120,[10230]=8,[10236]=180,[10238]=180,
- [10240]=180,[10241]=180,[10242]=180,[10250]=30,[10251]=180,[10252]=5,[10253]=10,
- [10256]=30,[10257]=30,[10259]=2,[10260]=20,[10263]=90,[10266]=2,[10268]=180,
- [10278]=10,[10308]=6,[10326]=20,[10336]=30,[10337]=30,[10342]=15,[10345]=20,
- [10348]=20,[10351]=5,[10368]=15,[10370]=60,[10371]=10,[10431]=600,[10432]=600,
- [10447]=12,[10448]=12,[10452]=20,[10455]=0.001,[10458]=8,[10472]=8,[10473]=8,
- [10484]=1.5,[10576]=6,[10578]=8,[10608]=1.5,[10610]=1.5,[10618]=120,[10651]=120,
- [10653]=120,[10654]=10,[10667]=3600,[10668]=3600,[10669]=3600,[10670]=3600,
- [10671]=3600,[10672]=3600,[10690]=3600,[10691]=3600,[10692]=3600,[10693]=3600,
- [10730]=10,[10732]=10,[10734]=3,[10737]=10,[10767]=1800,[10794]=30,[10797]=6,
- [10805]=3,[10831]=5,[10834]=3,[10835]=3,[10836]=3,[10838]=8,[10839]=8,
- [10849]=300,[10851]=15,[10852]=10,[10855]=10,[10856]=8,[10857]=35,[10888]=8,
- [10890]=8,[10892]=18,[10893]=18,[10894]=18,[10898]=30,[10899]=30,[10900]=30,
- [10901]=30,[10909]=60,[10911]=60,[10912]=60,[10927]=15,[10928]=15,[10929]=15,
- [10937]=1800,[10938]=1800,[10941]=10,[10942]=10,[10951]=600,[10952]=600,
- [10953]=15,[10955]=50,[10957]=600,[10958]=600,[10967]=20,[10968]=30,[10987]=5,
- [11013]=120,[11014]=15,[11020]=8,[11089]=30,[11113]=6,[11131]=10,[11196]=60,
- [11197]=30,[11198]=30,[11201]=12,[11206]=600,[11264]=10,[11273]=6,[11274]=6,
- [11275]=6,[11285]=4,[11286]=4,[11289]=18,[11290]=18,[11297]=45,[11305]=15,
- [11319]=1800,[11327]=10,[11328]=3600,[11329]=10,[11330]=3600,[11331]=3600,
- [11332]=3600,[11333]=3600,[11334]=3600,[11348]=3600,[11349]=3600,[11350]=15,
- [11353]=12,[11354]=12,[11359]=30,[11363]=180,[11364]=180,[11366]=12,[11371]=1800,
- [11374]=180,[11389]=3600,[11390]=1800,[11391]=30,[11392]=18,[11393]=3600,
- [11394]=3600,[11395]=3600,[11396]=3600,[11397]=300,[11398]=14,[11403]=120,
- [11404]=3600,[11405]=3600,[11406]=300,[11407]=3600,[11426]=60,[11428]=2,
- [11430]=2,[11436]=10,[11442]=180,[11443]=15,[11444]=20,[11445]=60,[11446]=300,
- [11469]=12,[11470]=12,[11471]=12,[11474]=1800,[11481]=11,[11534]=20,[11538]=4,
- [11539]=12,[11549]=120,[11550]=120,[11551]=120,[11554]=30,[11555]=30,[11556]=30,
- [11572]=21,[11573]=21,[11574]=21,[11580]=26,[11581]=30,[11596]=30,[11597]=30,
- [11639]=18,[11640]=15,[11641]=10,[11647]=30,[11650]=3,[11657]=20,[11658]=15,
- [11665]=15,[11667]=15,[11668]=15,[11671]=18,[11672]=18,[11675]=15,[11683]=15,
- [11684]=15,[11693]=10,[11694]=10,[11695]=10,[11699]=5,[11700]=5,[11703]=5,
- [11704]=5,[11707]=120,[11708]=120,[11711]=24,[11712]=24,[11713]=24,[11717]=120,
- [11719]=30,[11721]=300,[11722]=300,[11725]=300,[11726]=300,[11733]=1800,
- [11734]=1800,[11735]=1800,[11739]=30,[11740]=30,[11743]=600,[11770]=180,
- [11771]=180,[11790]=15,[11791]=30,[11820]=10,[11826]=3,[11831]=8,[11835]=30,
- [11836]=10,[11841]=600,[11876]=5,[11877]=5,[11879]=5,[11892]=120,[11918]=15,
- [11920]=20,[11922]=15,[11958]=10,[11960]=60,[11962]=21,[11963]=120,[11971]=30,
- [11974]=30,[11977]=15,[11980]=120,[11983]=10,[12001]=240,[12020]=60,[12021]=10,
- [12023]=5,[12024]=5,[12040]=30,[12042]=15,[12051]=8,[12054]=15,[12096]=8,
- [12097]=20,[12098]=20,[12134]=12,[12160]=12,[12166]=5,[12169]=5,[12174]=1800,
- [12175]=1800,[12176]=1800,[12177]=1800,[12178]=1800,[12179]=1800,[12241]=4,
- [12242]=3,[12245]=300,[12248]=10,[12251]=30,[12252]=10,[12255]=900,[12257]=5,
- [12279]=600,[12280]=60,[12292]=20,[12294]=10,[12323]=6,[12328]=30,[12355]=2,
- [12421]=2,[12438]=10,[12461]=2,[12479]=10,[12480]=15,[12483]=15,[12484]=1.5,
- [12485]=1.5,[12486]=1.5,[12493]=120,[12494]=5,[12505]=12,[12509]=3,[12520]=4,
- [12521]=3,[12522]=12,[12523]=12,[12524]=12,[12525]=12,[12526]=12,[12528]=10,
- [12530]=60,[12531]=8,[12533]=45,[12536]=15,[12540]=4,[12541]=600,[12542]=4,
- [12543]=3,[12544]=1800,[12545]=20,[12548]=8,[12550]=600,[12551]=10,[12557]=8,
- [12561]=60,[12562]=5,[12579]=15,[12608]=600,[12611]=8,[12613]=6,[12654]=4,
- [12655]=4,[12674]=8,[12675]=4,[12685]=10,[12686]=15,[12705]=6,[12721]=12,
- [12731]=8,[12733]=30,[12734]=3,[12737]=4,[12738]=10,[12741]=120,[12742]=21,
- [12747]=10,[12748]=5,[12766]=45,[12795]=120,[12798]=3,[12809]=5,[12824]=30,
- [12825]=40,[12826]=50,[12843]=60,[12844]=0.001,[12845]=30,[12880]=12,[12884]=45,
- [12888]=6,[12889]=15,[12890]=15,[12891]=45,[12941]=15,[12942]=10,[12943]=10,
- [12946]=10,[12966]=15,[12967]=15,[12968]=15,[12969]=15,[12970]=15,[12976]=20,
- [13003]=20,[13004]=30,[13005]=4,[13007]=8,[13010]=30,[13013]=20,[13018]=6,
- [13019]=6,[13020]=6,[13021]=6,[13031]=60,[13032]=60,[13033]=60,[13099]=10,
- [13119]=20,[13138]=20,[13141]=20,[13158]=5,[13168]=10,[13181]=20,[13183]=10,
- [13218]=15,[13222]=15,[13223]=15,[13224]=15,[13234]=600,[13235]=20,[13237]=3,
- [13238]=3,[13278]=4,[13298]=30,[13318]=30,[13322]=2,[13323]=20,[13326]=1800,
- [13327]=30,[13338]=15,[13360]=2,[13424]=30,[13438]=6,[13439]=5,[13443]=15,
- [13444]=30,[13445]=15,[13459]=30,[13466]=7,[13488]=50,[13490]=30,[13493]=4,
- [13494]=30,[13496]=10,[13518]=15,[13524]=60,[13526]=30,[13528]=30,[13530]=3,
- [13532]=10,[13533]=10,[13534]=10,[13542]=5,[13543]=5,[13544]=5,[13549]=15,
- [13550]=15,[13551]=15,[13552]=15,[13553]=15,[13554]=15,[13555]=15,[13566]=8,
- [13578]=8,[13579]=4,[13582]=120,[13583]=120,[13585]=600,[13608]=10,[13619]=180,
- [13692]=15,[13704]=6,[13729]=12,[13730]=30,[13736]=2,[13737]=5,[13738]=15,
- [13744]=15,[13747]=10,[13750]=15,[13752]=30,[13787]=1800,[13797]=15,[13808]=3,
- [13835]=3,[13847]=15,[13864]=1800,[13874]=8,[13877]=15,[13880]=30,[13884]=180,
- [13896]=15,[13902]=5,[13903]=30,[13907]=5,[13910]=0.001,[13951]=20,[14030]=10,
- [14032]=18,[14087]=30,[14100]=5,[14102]=2,[14110]=30,[14118]=30,[14120]=30,
- [14130]=600,[14143]=20,[14147]=30,[14149]=20,[14180]=4,[14183]=10,[14201]=12,
- [14202]=12,[14203]=12,[14204]=12,[14207]=5,[14251]=6,[14253]=8,[14267]=10,
- [14268]=10,[14275]=20,[14276]=20,[14277]=20,[14278]=7,[14279]=8,[14280]=8,
- [14296]=30,[14298]=15,[14299]=15,[14300]=15,[14301]=15,[14308]=15,[14309]=20,
- [14323]=120,[14324]=120,[14325]=120,[14326]=15,[14327]=20,[14331]=15,[14514]=1,
- [14515]=15,[14517]=30,[14518]=30,[14530]=10,[14532]=300,[14533]=300,[14534]=300,
- [14535]=300,[14538]=300,[14539]=300,[14621]=20,[14743]=6,[14744]=180,
- [14752]=1800,[14792]=30,[14795]=12,[14797]=21,[14818]=1800,[14819]=1800,
- [14821]=15,[14822]=15,[14823]=15,[14868]=30,[14870]=3,[14871]=1,[14872]=15,
- [14874]=10,[14875]=30,[14888]=1800,[14890]=0.001,[14893]=15,[14897]=25,[14902]=4,
- [14903]=2,[14907]=8,[14914]=10,[15039]=12,[15041]=60,[15042]=600,[15043]=4,
- [15044]=60,[15056]=7,[15061]=5,[15062]=10,[15063]=8,[15087]=15,[15089]=8,
- [15091]=6,[15096]=12,[15123]=3600,[15128]=120,[15229]=15,[15231]=1800,
- [15233]=1800,[15235]=120,[15244]=8,[15258]=15,[15261]=10,[15262]=10,[15263]=10,
- [15264]=10,[15265]=10,[15266]=10,[15267]=10,[15269]=3,[15271]=15,[15277]=30,
- [15279]=600,[15280]=20,[15283]=8,[15286]=60,[15288]=1800,[15346]=30,[15357]=15,
- [15359]=15,[15366]=3600,[15398]=8,[15407]=3,[15470]=15,[15471]=8,[15474]=10,
- [15475]=120,[15487]=5,[15494]=10,[15497]=4,[15499]=8,[15502]=30,[15505]=21,
- [15507]=600,[15529]=10,[15530]=4,[15531]=8,[15532]=8,[15534]=20,[15535]=10,
- [15548]=10,[15570]=21,[15571]=4,[15572]=30,[15583]=10,[15588]=10,[15593]=8,
- [15595]=10,[15602]=30,[15604]=10,[15609]=10,[15616]=12,[15618]=2,[15621]=2,
- [15636]=10,[15642]=5,[15646]=10,[15652]=2,[15654]=18,[15655]=2,[15656]=15,
- [15660]=10,[15661]=21,[15662]=6,[15664]=10,[15708]=5,[15716]=120,[15727]=30,
- [15728]=240,[15730]=180,[15732]=21,[15735]=5,[15742]=3,[15744]=6,[15752]=10,
- [15753]=2,[15784]=60,[15790]=5,[15798]=12,[15802]=120,[15822]=12,[15848]=1800,
- [15850]=5,[15852]=600,[15859]=5,[15860]=9,[15878]=3,[15970]=10,[15971]=30,
- [15976]=10,[15981]=12,[16001]=9,[16037]=2,[16045]=30,[16046]=6,[16048]=60,
- [16049]=604800,[16050]=10,[16051]=2,[16053]=60,[16071]=300,[16075]=2,[16094]=10,
- [16095]=15,[16096]=5,[16097]=10,[16098]=600,[16099]=10,[16104]=6,[16122]=4,
- [16128]=180,[16143]=600,[16145]=30,[16147]=21,[16168]=20,[16170]=30,[16172]=20,
- [16177]=15,[16186]=180,[16231]=120,[16236]=15,[16237]=15,[16244]=30,[16246]=15,
- [16247]=180,[16249]=4,[16257]=15,[16277]=15,[16278]=15,[16279]=15,[16280]=15,
- [16310]=3,[16321]=10,[16322]=20,[16323]=1800,[16325]=600,[16326]=600,
- [16327]=1800,[16329]=600,[16333]=120,[16336]=300,[16337]=300,[16340]=10,
- [16350]=10,[16352]=8,[16353]=8,[16359]=30,[16361]=1.5,[16366]=60,[16373]=30,
- [16391]=30,[16392]=30,[16393]=30,[16400]=15,[16401]=30,[16402]=3,[16403]=30,
- [16404]=10,[16406]=30,[16412]=6,[16413]=6,[16415]=8,[16420]=0.5,[16427]=30,
- [16429]=1800,[16430]=12,[16431]=60,[16432]=8,[16448]=1800,[16449]=1800,
- [16451]=10,[16452]=3,[16454]=30,[16458]=1800,[16460]=1800,[16461]=1800,
- [16469]=10,[16470]=10,[16488]=6,[16490]=6,[16491]=6,[16497]=5,[16498]=60,
- [16499]=1800,[16508]=8,[16509]=15,[16511]=15,[16528]=10,[16532]=600,[16536]=45,
- [16551]=3,[16552]=10,[16555]=300,[16557]=10,[16560]=15,[16561]=21,[16566]=30,
- [16567]=600,[16568]=3,[16569]=10,[16573]=45,[16587]=600,[16591]=600,[16593]=120,
- [16595]=600,[16597]=10,[16598]=20,[16599]=20,[16600]=5,[16601]=8,[16603]=25,
- [16608]=4,[16609]=3600,[16610]=600,[16612]=1800,[16617]=600,[16618]=300,
- [16621]=3,[16627]=9,[16628]=9,[16629]=30,[16637]=20,[16689]=45,[16707]=20,
- [16708]=20,[16709]=20,[16711]=300,[16712]=300,[16713]=60,[16714]=60,[16716]=5,
- [16717]=5,[16727]=5,[16739]=300,[16789]=15,[16790]=2,[16791]=60,[16798]=10,
- [16799]=4,[16803]=5,[16804]=12,[16805]=10,[16810]=45,[16811]=45,[16812]=45,
- [16813]=45,[16834]=6,[16835]=6,[16838]=5,[16843]=4,[16856]=5,[16857]=40,
- [16864]=600,[16866]=10,[16867]=12,[16869]=10,[16870]=15,[16871]=60,[16873]=1800,
- [16874]=600,[16875]=1800,[16876]=1800,[16877]=600,[16878]=1800,[16881]=600,
- [16882]=600,[16883]=1200,[16884]=3600,[16885]=3600,[16886]=15,[16887]=3600,
- [16888]=3600,[16889]=1800,[16890]=3600,[16891]=3600,[16892]=3600,[16893]=3600,
- [16894]=3600,[16895]=3600,[16898]=30,[16916]=30,[16922]=3,[16927]=5,[16928]=45,
- [16939]=20,[17008]=5,[17011]=5,[17013]=1800,[17014]=10,[17038]=1200,[17052]=300,
- [17057]=3,[17105]=12,[17134]=60,[17139]=30,[17140]=8,[17141]=8,[17142]=8,
- [17145]=6,[17146]=18,[17148]=30,[17150]=1800,[17151]=600,[17152]=10,[17153]=30,
- [17154]=30,[17158]=10,[17165]=3,[17168]=10,[17170]=12,[17172]=5,[17173]=5,
- [17174]=3,[17175]=3600,[17177]=8,[17179]=20,[17183]=15,[17189]=20,[17196]=30,
- [17197]=6,[17205]=1200,[17207]=2,[17213]=900,[17227]=120,[17230]=300,[17238]=5,
- [17243]=5,[17244]=120,[17246]=120,[17250]=120,[17252]=1800,[17272]=2,[17273]=12,
- [17274]=12,[17275]=300,[17276]=4,[17277]=6,[17281]=30,[17286]=4,[17292]=30,
- [17293]=8,[17307]=6,[17308]=2,[17311]=3,[17312]=3,[17313]=3,[17314]=3,[17315]=30,
- [17329]=45,[17330]=20,[17331]=10,[17333]=10,[17347]=15,[17348]=15,[17351]=10,
- [17352]=10,[17364]=12,[17368]=3,[17390]=40,[17391]=40,[17392]=40,[17398]=5,
- [17405]=15,[17407]=25,[17445]=20,[17446]=10,[17447]=10,[17473]=12,[17483]=6,
- [17484]=30,[17492]=5,[17494]=30,[17499]=30,[17500]=2,[17503]=4,[17504]=30,
- [17505]=60,[17506]=30,[17510]=3,[17511]=20,[17528]=20,[17535]=3600,[17537]=3600,
- [17538]=3600,[17539]=3600,[17540]=120,[17543]=3600,[17544]=3600,[17545]=3600,
- [17546]=3600,[17547]=5,[17548]=3600,[17549]=3600,[17620]=5,[17624]=60,
- [17626]=7200,[17627]=7200,[17628]=7200,[17629]=7200,[17633]=30,[17639]=12,
- [17651]=6,[17668]=1,[17680]=60,[17682]=5,[17686]=10,[17687]=15,[17691]=300,
- [17692]=5,[17697]=5,[17715]=15,[17716]=1.5,[17729]=60,[17730]=60,[17734]=3600,
- [17738]=14,[17740]=60,[17741]=60,[17743]=120,[17745]=10,[17767]=10,[17771]=30,
- [17772]=5,[17774]=8,[17794]=12,[17797]=12,[17798]=12,[17799]=12,[17800]=12,
- [17820]=15,[17831]=60,[17850]=10,[17851]=10,[17852]=10,[17853]=10,[17854]=10,
- [17862]=300,[17877]=5,[17883]=21,[17925]=3,[17926]=3,[17928]=15,[17937]=300,
- [17941]=10,[17961]=1800,[17963]=30,[18070]=30,[18075]=30,[18077]=15,[18078]=30,
- [18082]=6,[18088]=3,[18093]=3,[18097]=30,[18099]=10,[18100]=1800,[18101]=5,
- [18103]=2,[18105]=8,[18106]=30,[18108]=8,[18118]=5,[18124]=27,[18125]=600,
- [18137]=600,[18140]=30,[18141]=600,[18144]=2,[18149]=120,[18151]=120,[18159]=900,
- [18163]=1800,[18165]=8,[18172]=300,[18173]=20,[18191]=600,[18192]=600,
- [18193]=600,[18194]=600,[18197]=15,[18199]=6,[18200]=30,[18202]=30,[18203]=30,
- [18208]=25,[18209]=604800,[18210]=604800,[18222]=600,[18223]=12,[18229]=27,
- [18230]=27,[18231]=27,[18232]=27,[18233]=27,[18234]=27,[18265]=30,[18266]=15,
- [18267]=30,[18270]=90,[18278]=6,[18288]=30,[18289]=15,[18327]=10,[18328]=60,
- [18347]=600,[18364]=15,[18371]=10,[18376]=24,[18377]=300,[18381]=30,[18395]=2,
- [18396]=0.001,[18425]=2,[18431]=3,[18461]=1,[18469]=4,[18498]=3,[18499]=10,
- [18501]=5,[18502]=120,[18503]=10,[18520]=30,[18543]=21,[18545]=20,[18546]=6,
- [18557]=5,[18608]=8,[18610]=8,[18633]=30,[18647]=30,[18652]=15,[18654]=15,
- [18656]=3,[18657]=30,[18658]=40,[18671]=30,[18702]=60,[18708]=15,[18733]=5,
- [18747]=300,[18763]=15,[18765]=20,[18787]=30,[18789]=1800,[18790]=1800,
- [18791]=1800,[18792]=1800,[18796]=6,[18798]=5,[18802]=10,[18803]=4,[18807]=3,
- [18809]=12,[18810]=3600,[18811]=2,[18812]=2,[18820]=10,[18826]=10,[18828]=20,
- [18867]=5,[18868]=5,[18869]=5,[18870]=5,[18871]=5,[18874]=7,[18879]=30,
- [18880]=30,[18881]=30,[18942]=3600,[18946]=30,[18948]=300,[18949]=30,[18956]=30,
- [18957]=30,[18958]=45,[18968]=600,[18972]=20,[18977]=10,[19030]=300,[19128]=2,
- [19133]=8,[19134]=8,[19135]=15,[19136]=5,[19137]=20,[19185]=5,[19229]=5,
- [19231]=300,[19249]=120,[19251]=120,[19252]=120,[19253]=120,[19254]=120,
- [19261]=600,[19262]=600,[19263]=10,[19264]=600,[19265]=600,[19266]=600,
- [19271]=15,[19273]=15,[19274]=15,[19275]=15,[19276]=24,[19277]=24,[19278]=24,
- [19279]=24,[19280]=24,[19281]=120,[19282]=120,[19283]=120,[19284]=120,
- [19285]=120,[19289]=15,[19291]=15,[19292]=15,[19293]=15,[19296]=6,[19299]=6,
- [19302]=6,[19303]=6,[19304]=6,[19305]=6,[19306]=5,[19308]=600,[19309]=600,
- [19310]=600,[19311]=600,[19312]=600,[19364]=5,[19365]=900,[19366]=900,
- [19367]=900,[19369]=5,[19372]=900,[19386]=12,[19393]=16,[19397]=60,[19408]=8,
- [19410]=3,[19428]=8,[19438]=30,[19440]=30,[19441]=30,[19442]=30,[19443]=30,
- [19448]=30,[19450]=30,[19451]=8,[19463]=10,[19469]=15,[19478]=60,[19479]=10,
- [19482]=2,[19486]=20,[19496]=15,[19503]=4,[19514]=600,[19516]=1800,[19548]=20,
- [19574]=18,[19577]=15,[19597]=900,[19615]=8,[19631]=60,[19634]=15,[19635]=60,
- [19636]=6,[19638]=30,[19641]=6,[19643]=5,[19645]=10,[19652]=10,[19653]=10,
- [19654]=10,[19655]=60,[19656]=60,[19659]=300,[19660]=60,[19674]=20,[19675]=4,
- [19676]=900,[19677]=900,[19678]=900,[19679]=900,[19680]=900,[19681]=900,
- [19682]=900,[19683]=900,[19684]=900,[19685]=900,[19686]=900,[19687]=20,
- [19688]=20,[19689]=20,[19690]=900,[19692]=20,[19693]=20,[19694]=20,[19695]=8,
- [19696]=20,[19697]=20,[19699]=20,[19700]=20,[19702]=10,[19703]=300,[19705]=900,
- [19706]=900,[19708]=900,[19709]=900,[19710]=900,[19711]=900,[19713]=300,
- [19714]=30,[19716]=300,[19725]=20,[19727]=3600,[19740]=300,[19742]=300,
- [19753]=180,[19755]=60,[19769]=3,[19771]=30,[19776]=18,[19778]=30,[19779]=10,
- [19780]=2,[19784]=4,[19812]=8,[19820]=20,[19821]=5,[19822]=10,[19832]=90,
- [19834]=300,[19835]=300,[19836]=300,[19837]=300,[19838]=300,[19850]=300,
- [19852]=300,[19853]=300,[19854]=300,[19872]=30,[19937]=900,[19952]=10,[19953]=10,
- [19970]=27,[19971]=24,[19972]=21,[19973]=18,[19974]=15,[19975]=12,[19977]=300,
- [19978]=300,[19979]=300,[20005]=5,[20006]=12,[20007]=15,[20019]=6,[20050]=8,
- [20052]=8,[20053]=8,[20054]=8,[20055]=8,[20066]=6,[20128]=10,[20131]=10,
- [20132]=10,[20133]=10,[20134]=10,[20154]=30,[20162]=30,[20164]=30,[20165]=30,
- [20166]=30,[20170]=2,[20184]=10,[20185]=10,[20186]=10,[20188]=10,[20217]=300,
- [20223]=10,[20228]=12,[20229]=8,[20230]=15,[20233]=120,[20236]=120,[20253]=3,
- [20276]=2,[20277]=4,[20287]=30,[20288]=30,[20289]=30,[20290]=30,[20291]=30,
- [20292]=30,[20293]=30,[20294]=21,[20297]=4,[20300]=10,[20301]=10,[20302]=10,
- [20303]=10,[20305]=30,[20306]=30,[20307]=30,[20308]=30,[20310]=2,[20344]=10,
- [20345]=10,[20346]=10,[20347]=30,[20348]=30,[20349]=30,[20354]=10,[20355]=10,
- [20356]=30,[20357]=30,[20375]=30,[20436]=30,[20475]=8,[20478]=8,[20481]=1800,
- [20507]=1,[20508]=0.001,[20510]=15,[20511]=8,[20512]=20,[20541]=0.1,[20542]=15,
- [20544]=2,[20545]=600,[20547]=8,[20548]=3,[20549]=2,[20553]=2,[20559]=6,
- [20560]=6,[20564]=8,[20570]=10,[20578]=10,[20586]=20,[20587]=600,[20590]=600,
- [20594]=8,[20600]=20,[20604]=15,[20612]=8,[20614]=3,[20615]=3,[20619]=10,
- [20620]=300,[20624]=3600,[20629]=10,[20631]=10,[20654]=15,[20655]=60,[20656]=60,
- [20663]=10,[20664]=12,[20665]=21,[20667]=30,[20668]=10,[20669]=10,[20672]=3,
- [20683]=5,[20685]=8,[20690]=12,[20697]=30,[20699]=15,[20701]=12,[20706]=30,
- [20707]=1800,[20716]=10,[20717]=10,[20729]=30,[20733]=60,[20740]=15,[20743]=5,
- [20753]=30,[20762]=1800,[20763]=1800,[20764]=1800,[20765]=1800,[20785]=1800,
- [20786]=10,[20787]=21,[20792]=4,[20798]=1800,[20800]=21,[20806]=4,[20812]=15,
- [20819]=4,[20822]=4,[20826]=21,[20828]=8,[20875]=900,[20882]=300,[20909]=5,
- [20910]=5,[20911]=300,[20912]=300,[20913]=300,[20914]=300,[20915]=30,[20918]=30,
- [20919]=30,[20920]=30,[20925]=10,[20927]=10,[20928]=10,[20988]=4,[20989]=10,
- [21007]=120,[21008]=6,[21030]=8,[21047]=10,[21048]=1800,[21049]=30,[21055]=30,
- [21056]=60,[21060]=10,[21062]=30,[21063]=45,[21066]=10,[21067]=10,[21068]=24,
- [21069]=6,[21075]=10,[21081]=30,[21082]=30,[21084]=30,[21086]=1800,[21087]=1800,
- [21090]=1800,[21091]=10,[21095]=5,[21098]=30,[21099]=5,[21141]=30,[21149]=18,
- [21151]=30,[21152]=3,[21153]=10,[21159]=8,[21162]=10,[21163]=1800,[21165]=10,
- [21167]=1,[21171]=120,[21172]=10,[21174]=10,[21183]=10,[21188]=2,[21307]=7200,
- [21330]=2,[21331]=15,[21335]=600,[21337]=600,[21340]=600,[21354]=3,[21369]=4,
- [21401]=8,[21403]=1800,[21425]=120,[21540]=10,[21546]=900,[21547]=5,[21551]=10,
- [21552]=10,[21553]=10,[21556]=1800,[21562]=3600,[21564]=3600,[21566]=1800,
- [21655]=1,[21669]=12,[21670]=60,[21687]=15,[21708]=15,[21736]=7200,[21740]=4,
- [21748]=2,[21749]=2,[21787]=120,[21793]=10,[21794]=16,[21808]=8,[21827]=600,
- [21833]=8,[21840]=6,[21847]=6,[21849]=3600,[21850]=3600,[21860]=5,[21863]=600,
- [21866]=16,[21869]=8,[21878]=15,[21887]=10,[21892]=2,[21896]=5,[21898]=2,
- [21909]=8,[21920]=1800,[21921]=4,[21925]=4,[21927]=4,[21929]=4,[21932]=4,
- [21936]=60,[21949]=30,[21952]=20,[21955]=10,[21956]=10,[21961]=30,[21970]=60,
- [21971]=10,[21976]=4,[21980]=60,[21990]=4,[21992]=12,[22008]=10,[22009]=15,
- [22011]=30,[22067]=10,[22127]=10,[22128]=600,[22168]=20,[22187]=30,[22206]=12,
- [22247]=6,[22272]=5,[22274]=20,[22284]=5,[22289]=6,[22290]=6,[22291]=5,
- [22335]=30,[22356]=10,[22357]=2,[22371]=120,[22373]=21,[22412]=30,[22415]=10,
- [22417]=30,[22418]=1800,[22419]=4,[22420]=60,[22423]=12,[22424]=6,[22426]=30,
- [22427]=5,[22428]=8,[22433]=20,[22438]=30,[22440]=0.001,[22442]=6,[22478]=15,
- [22479]=6,[22519]=2,[22558]=5,[22559]=6,[22561]=1,[22566]=8,[22570]=2,[22572]=5,
- [22582]=8,[22592]=2,[22639]=30,[22640]=5,[22642]=6,[22643]=4,[22645]=8,
- [22646]=0.001,[22651]=8,[22652]=10,[22660]=30,[22661]=10,[22662]=21,[22666]=6,
- [22667]=15,[22678]=6,[22682]=10,[22685]=1800,[22686]=4,[22687]=6,[22688]=30,
- [22689]=20,[22690]=4,[22691]=6,[22692]=8,[22693]=10,[22695]=21,[22703]=2,
- [22707]=1.7,[22710]=30,[22713]=20,[22730]=600,[22731]=27,[22734]=30,[22735]=7200,
- [22736]=600,[22739]=8,[22742]=20,[22744]=10,[22746]=8,[22751]=120,[22752]=900,
- [22782]=1800,[22783]=1800,[22788]=604800,[22789]=900,[22790]=900,[22800]=8,
- [22807]=3600,[22812]=15,[22817]=7200,[22818]=7200,[22820]=7200,[22822]=6,
- [22823]=6,[22833]=10,[22835]=60,[22839]=15,[22842]=10,[22850]=10,[22857]=15,
- [22859]=5,[22863]=10,[22884]=4,[22888]=7200,[22895]=10,[22896]=10,[22901]=30,
- [22909]=4,[22911]=2,[22914]=3,[22915]=3,[22917]=240,[22919]=3,[22924]=10,
- [22935]=3,[22937]=10,[22948]=5,[22959]=30,[22969]=5,[22992]=11,[22994]=10,
- [22997]=40,[22998]=3,[23006]=3,[23009]=2,[23010]=1,[23015]=18,[23016]=18,
- [23023]=10,[23028]=3600,[23038]=12,[23039]=6,[23055]=2,[23060]=240,[23097]=5,
- [23099]=15,[23102]=4,[23103]=10,[23108]=10,[23109]=15,[23110]=15,[23113]=6,
- [23115]=8,[23120]=6,[23126]=300,[23128]=8,[23131]=5,[23132]=5,[23145]=15,
- [23147]=15,[23148]=15,[23153]=600,[23154]=600,[23155]=600,[23162]=10,[23164]=20,
- [23165]=30,[23169]=600,[23170]=600,[23171]=4,[23174]=300,[23175]=300,[23177]=300,
- [23179]=1200,[23182]=900,[23183]=12,[23186]=90,[23187]=15,[23189]=15,[23205]=45,
- [23207]=10,[23224]=8,[23226]=6,[23230]=25,[23234]=15,[23244]=4,[23257]=30,
- [23260]=20,[23262]=30,[23268]=18,[23269]=4,[23270]=20,[23271]=15,[23273]=0.1,
- [23274]=0.1,[23275]=5,[23276]=0.1,[23277]=0.1,[23279]=30,[23298]=45,[23299]=18,
- [23303]=5,[23310]=8,[23312]=8,[23313]=15,[23314]=15,[23315]=60,[23316]=60,
- [23331]=8,[23340]=8,[23341]=20,[23342]=10,[23355]=20,[23364]=2,[23365]=8,
- [23379]=30,[23380]=12,[23387]=1,[23388]=2,[23397]=30,[23398]=30,[23401]=30,
- [23402]=30,[23410]=30,[23411]=8,[23412]=9,[23414]=30,[23415]=5,[23417]=6,
- [23418]=30,[23425]=30,[23427]=0.001,[23444]=10,[23445]=7200,[23447]=5,[23449]=24,
- [23451]=10,[23452]=90,[23454]=1,[23456]=10,[23457]=10,[23461]=15,[23492]=5,
- [23493]=10,[23505]=60,[23506]=20,[23511]=30,[23513]=180,[23537]=600,[23552]=600,
- [23567]=8,[23568]=8,[23569]=8,[23577]=7,[23580]=6,[23600]=6,[23601]=4,[23603]=20,
- [23605]=5,[23618]=10,[23619]=15,[23620]=20,[23684]=15,[23693]=120,[23694]=5,
- [23696]=8,[23697]=600,[23698]=30,[23719]=8,[23720]=30,[23721]=10,[23723]=20,
- [23724]=20,[23726]=20,[23733]=20,[23734]=20,[23735]=7200,[23736]=7200,
- [23737]=7200,[23738]=7200,[23766]=7200,[23767]=7200,[23768]=7200,[23769]=7200,
- [23770]=14400,[23780]=20,[23782]=20,[23790]=3600,[23848]=10,[23850]=10,[23860]=8,
- [23862]=10,[23865]=10,[23885]=8,[23886]=8,[23887]=8,[23888]=8,[23895]=15,
- [23918]=10,[23919]=2,[23931]=10,[23947]=3600,[23948]=3600,[23951]=15,[23952]=18,
- [23953]=10,[23958]=60,[23964]=600,[23978]=10,[23991]=15,[24002]=8,[24003]=8,
- [24004]=10,[24005]=25,[24011]=10,[24018]=10,[24020]=2,[24021]=8,[24043]=6,
- [24048]=2,[24049]=10,[24053]=5,[24054]=120,[24057]=2,[24065]=5,[24066]=4,
- [24086]=604800,[24087]=20,[24097]=30,[24099]=10,[24109]=60,[24110]=8,[24111]=30,
- [24131]=12,[24132]=12,[24133]=12,[24134]=12,[24135]=12,[24152]=15,[24170]=18,
- [24178]=20,[24185]=30,[24192]=6,[24193]=2,[24203]=30,[24210]=120,[24212]=18,
- [24213]=2,[24217]=30,[24221]=60,[24223]=10,[24225]=6,[24236]=2,[24238]=12,
- [24244]=300,[24255]=12,[24259]=3,[24268]=30,[24300]=7,[24306]=20,[24312]=604800,
- [24314]=6,[24317]=20,[24318]=90,[24321]=90,[24322]=8,[24323]=8,[24324]=8,
- [24327]=10,[24328]=10,[24331]=9,[24332]=9,[24333]=2,[24335]=12,[24336]=12,
- [24339]=180,[24345]=5,[24348]=4,[24352]=20,[24354]=20,[24355]=30,[24360]=12,
- [24361]=3600,[24363]=3600,[24364]=5,[24375]=5,[24378]=60,[24379]=10,[24382]=7200,
- [24383]=7200,[24388]=30,[24389]=60,[24390]=10,[24394]=3,[24395]=15,[24396]=15,
- [24397]=15,[24408]=2,[24412]=8,[24413]=8,[24414]=8,[24415]=20,[24417]=7200,
- [24423]=4,[24425]=7200,[24427]=60,[24435]=5,[24438]=20,[24498]=15,[24499]=20,
- [24542]=15,[24543]=20,[24544]=20,[24546]=15,[24573]=5,[24574]=20,[24575]=20,
- [24577]=4,[24578]=4,[24579]=4,[24583]=10,[24586]=10,[24587]=10,[24594]=7,
- [24596]=120,[24597]=10,[24600]=7,[24603]=10,[24604]=10,[24605]=10,[24610]=15,
- [24611]=9,[24614]=15,[24615]=1.5,[24617]=10,[24618]=5,[24619]=12,[24640]=10,
- [24646]=15,[24647]=2,[24648]=10,[24658]=20,[24659]=20,[24661]=20,[24662]=20,
- [24664]=6,[24671]=2,[24672]=20,[24673]=600,[24674]=10,[24686]=6,[24687]=5,
- [24688]=10,[24689]=8,[24690]=2,[24692]=604800,[24698]=4,[24699]=20,[24700]=2,
- [24701]=15,[24705]=7200,[24707]=25,[24708]=3600,[24709]=3600,[24710]=3600,
- [24711]=3600,[24712]=3600,[24713]=3600,[24716]=3,[24723]=3600,[24725]=15,
- [24732]=3600,[24734]=4,[24735]=3600,[24736]=3600,[24740]=3600,[24742]=18,
- [24743]=5,[24744]=4,[24745]=1,[24747]=1,[24752]=1800,[24753]=45,[24754]=6,
- [24755]=3600,[24756]=4,[24757]=1,[24758]=4,[24759]=1,[24760]=4,[24761]=1,
- [24762]=1,[24763]=4,[24765]=4,[24766]=1,[24768]=4,[24769]=1,[24770]=4,[24771]=1,
- [24772]=4,[24773]=1,[24776]=0.001,[24778]=5,[24783]=4,[24784]=4,[24785]=1,
- [24786]=4,[24787]=1,[24788]=4,[24789]=4,[24790]=4,[24791]=1,[24792]=1,[24793]=1,
- [24798]=900,[24799]=900,[24800]=30,[24803]=4,[24811]=5,[24818]=30,[24828]=3,
- [24832]=5,[24833]=600,[24839]=45,[24865]=25,[24869]=24,[24870]=900,[24871]=5,
- [24884]=10,[24893]=11,[24906]=10,[24910]=10,[24918]=120,[24919]=5,[24920]=2,
- [24924]=1200,[24925]=1200,[24926]=1200,[24927]=1200,[24928]=120,[24935]=300,
- [24937]=300,[24942]=4,[24948]=5,[24957]=12,[24974]=12,[24975]=12,[24976]=12,
- [24977]=12,[24984]=15,[24991]=7200,[24992]=15,[24998]=15,[25006]=300,[25020]=600,
- [25022]=6,[25023]=1800,[25029]=2,[25037]=900,[25040]=900,[25042]=12,[25043]=90,
- [25049]=6,[25050]=120,[25051]=20,[25053]=30,[25056]=2,[25057]=10,[25058]=15,
- [25098]=8,[25101]=900,[25102]=60,[25161]=1,[25164]=30,[25165]=15,[25174]=30,
- [25177]=45,[25178]=45,[25180]=45,[25181]=45,[25183]=45,[25185]=8,[25187]=30,
- [25189]=10,[25195]=15,[25199]=1800,[25260]=6,[25262]=10,[25282]=6,[25289]=120,
- [25290]=300,[25291]=300,[25295]=15,[25299]=12,[25304]=9,[25306]=8,[25309]=15,
- [25311]=18,[25315]=15,[25345]=5,[25348]=12,[25349]=12,[25371]=15,[25374]=15,
- [25410]=15,[25424]=10,[25425]=2,[25462]=60,[25471]=10,[25473]=10,[25495]=8,
- [25497]=8,[25503]=10,[25515]=5,[25516]=30,[25565]=0.1,[25605]=15,[25645]=30,
- [25646]=15,[25651]=20,[25654]=2,[25655]=8,[25656]=20,[25660]=30,[25661]=900,
- [25668]=20,[25678]=180,[25685]=604800,[25688]=1800,[25694]=900,[25695]=30,
- [25696]=30,[25697]=30,[25698]=7,[25700]=21,[25701]=21,[25702]=21,[25703]=21,
- [25722]=900,[25725]=10,[25746]=15,[25747]=15,[25748]=10,[25750]=15,[25751]=30,
- [25752]=10,[25756]=2,[25757]=10,[25768]=8,[25771]=60,[25772]=120,[25773]=120,
- [25774]=3,[25780]=1800,[25782]=900,[25790]=600,[25794]=3600,[25795]=3600,
- [25796]=3600,[25797]=3600,[25798]=3600,[25799]=3600,[25804]=900,[25805]=15,
- [25806]=30,[25809]=12,[25810]=12,[25811]=10,[25812]=16,[25815]=6,[25816]=120,
- [25821]=2,[25824]=604800,[25838]=20,[25839]=12,[25851]=30,[25852]=2,[25864]=1,
- [25886]=21,[25887]=21,[25888]=21,[25889]=21,[25890]=900,[25891]=20,
- [25893]=604800,[25894]=900,[25895]=900,[25898]=900,[25899]=900,[25907]=10,
- [25916]=900,[25918]=900,[25937]=15,[25941]=900,[25942]=10,[25945]=10,
- [25947]=1800,[25990]=20,[25991]=10,[25999]=1,[26004]=1800,[26008]=1800,
- [26009]=300,[26013]=900,[26015]=1,[26017]=10,[26018]=10,[26025]=8,[26030]=27,
- [26035]=1800,[26038]=8,[26041]=10,[26042]=4,[26043]=30,[26044]=8,[26049]=8,
- [26050]=30,[26051]=8,[26053]=8,[26064]=12,[26068]=3600,[26069]=10,[26070]=8,
- [26071]=15,[26072]=12,[26077]=8,[26078]=30,[26079]=10,[26083]=15,[26099]=30,
- [26102]=5,[26108]=3,[26121]=8,[26129]=20,[26132]=8,[26136]=300,[26141]=10,
- [26143]=10,[26157]=1800,[26166]=30,[26168]=30,[26177]=4,[26178]=4,[26179]=4,
- [26180]=12,[26195]=20,[26196]=15,[26197]=20,[26198]=30,[26199]=1800,[26201]=4,
- [26211]=10,[26218]=3600,[26222]=1.5,[26226]=4,[26235]=45,[26258]=20,[26259]=12,
- [26260]=30,[26261]=30,[26263]=25,[26272]=1800,[26273]=1800,[26274]=1800,
- [26276]=1800,[26331]=20,[26332]=3.8,[26379]=6,[26381]=10,[26382]=3,[26386]=12,
- [26387]=1200,[26390]=10,[26393]=3600,[26400]=20,[26401]=30,[26402]=30,[26419]=10,
- [26462]=1800,[26463]=60,[26464]=60,[26467]=30,[26470]=8,[26472]=30,[26473]=30,
- [26474]=30,[26475]=30,[26480]=30,[26522]=1800,[26525]=20,[26527]=120,[26542]=10,
- [26548]=8,[26552]=8,[26556]=40,[26580]=8,[26592]=15,[26601]=10,[26613]=6,
- [26615]=3600,[26619]=45,[26634]=604800,[26635]=10,[26637]=1.7,[26641]=3,
- [26650]=0.1,[26651]=1,[26652]=10,[26662]=300,[26664]=3600,[26680]=3600,
- [26681]=3600,[26682]=3600,[26740]=20,[26787]=0.001,[26802]=3600,[26898]=3600,
- [26977]=60,[27039]=4,[27042]=4,[27177]=10,[27183]=300,[27192]=300,[27193]=300,
- [27194]=300,[27195]=300,[27196]=300,[27197]=300,[27198]=300,[27199]=300,
- [27200]=300,[27205]=4,[27208]=4,[27420]=3,[27499]=10,[27532]=12,[27533]=6,
- [27534]=6,[27535]=6,[27536]=6,[27538]=6,[27540]=6,[27543]=10,[27545]=10,
- [27551]=30,[27553]=2,[27555]=10,[27556]=15,[27559]=3,[27564]=5,[27565]=10,
- [27568]=604800,[27569]=604800,[27571]=120,[27572]=3600,[27575]=600,[27578]=120,
- [27579]=30,[27580]=10,[27581]=10,[27582]=30,[27584]=15,[27603]=8,[27605]=18,
- [27606]=15,[27607]=30,[27610]=8,[27615]=5,[27616]=600,[27619]=10,[27620]=4,
- [27633]=10,[27634]=3,[27636]=6,[27637]=21,[27638]=15,[27640]=3,[27641]=6,
- [27648]=12,[27652]=1800,[27653]=1800,[27664]=3600,[27665]=3600,[27666]=3600,
- [27669]=3600,[27670]=3600,[27671]=3600,[27672]=5,[27673]=30,[27675]=15,
- [27680]=600,[27681]=3600,[27683]=1200,[27685]=4,[27688]=300,[27689]=30,
- [27720]=3600,[27721]=3600,[27722]=3600,[27723]=3600,[27737]=12,[27758]=5,
- [27759]=30,[27760]=15,[27775]=10,[27779]=30,[27807]=20,[27808]=5,[27813]=6,
- [27814]=6,[27817]=6,[27818]=6,[27819]=5,[27825]=15,[27827]=10,[27828]=6,
- [27841]=1800,[27852]=0.1,[27857]=300,[27861]=2700,[27863]=600,[27864]=300,
- [27865]=60,[27868]=3,[27873]=10,[27874]=10,[27880]=3,[27891]=20,[27897]=600,
- [27965]=1,[27990]=4,[27991]=30,[27993]=12,[27994]=5,[27995]=20,[28007]=230,
- [28009]=180,[28011]=120,[28018]=7200,[28059]=60,[28084]=60,[28095]=3600,
- [28127]=8,[28131]=300,[28134]=10,[28137]=3,[28158]=60,[28169]=10,[28190]=30,
- [28200]=20,[28225]=300,[28270]=50,[28271]=50,[28272]=50,[28310]=8,[28311]=10,
- [28314]=3,[28315]=2,[28316]=3,[28323]=2,[28333]=2,[28334]=6,[28335]=2,[28342]=90,
- [28350]=7,[28362]=604800,[28371]=8,[28374]=3,[28391]=1,[28406]=8,[28409]=20,
- [28410]=20,[28412]=3,[28413]=8,[28418]=120,[28419]=120,[28420]=120,[28431]=9,
- [28434]=1,[28440]=6,[28445]=3,[28450]=0.1,[28456]=6,[28467]=15,[28478]=4,
- [28479]=4,[28498]=300,[28522]=25,[28531]=5,[28542]=12,[28608]=24,[28609]=30,
- [28610]=30,[28616]=30,[28618]=1,[28619]=2,[28620]=2,[28621]=2,[28622]=60,
- [28627]=55,[28679]=60,[28681]=1800,[28701]=20,[28725]=5,[28727]=30,[28732]=30,
- [28747]=600,[28750]=4,[28754]=15,[28757]=4,[28762]=8,[28765]=30,[28766]=30,
- [28768]=30,[28769]=30,[28770]=30,[28772]=30,[28773]=20,[28776]=30,[28777]=20,
- [28778]=20,[28779]=20,[28780]=30,[28785]=20,[28786]=6,[28790]=8,[28791]=8,
- [28793]=8,[28795]=8,[28796]=8,[28798]=1800,[28804]=30,[28810]=30,[28824]=8,
- [28825]=8,[28826]=8,[28827]=8,[28832]=75,[28833]=75,[28834]=75,[28835]=75,
- [28846]=5,[28858]=15,[28862]=20,[28866]=15,[28882]=8,[28911]=18,[28913]=10,
- [28969]=10,[28991]=10,[28995]=6,[29001]=3600,[29002]=3600,[29003]=3600,
- [29006]=1800,[29007]=30,[29008]=30,[29035]=15,[29038]=21,[29039]=21,[29040]=900,
- [29041]=30,[29042]=20,[29051]=60,[29055]=25,[29060]=20,[29061]=20,[29063]=6,
- [29073]=30,[29104]=5,[29124]=20,[29131]=10,[29134]=5,[29163]=5,[29164]=5,
- [29166]=20,[29168]=6,[29169]=10,[29175]=3600,[29177]=10,[29178]=10,[29183]=60,
- [29184]=60,[29185]=120,[29194]=120,[29195]=60,[29196]=120,[29197]=60,[29198]=120,
- [29199]=60,[29203]=15,[29204]=10,[29207]=1,[29208]=1,[29209]=1,[29210]=1,
- [29211]=1,[29212]=15,[29213]=10,[29214]=10,[29220]=300,[29228]=12,[29232]=90,
- [29233]=4,[29235]=3600,[29252]=5,[29261]=5,[29265]=5,[29270]=5,[29274]=1,
- [29296]=2,[29306]=60,[29325]=25,[29330]=25,[29331]=3600,[29332]=3600,
- [29333]=3600,[29334]=3600,[29335]=3600,[29338]=3600,[29350]=45,[29388]=12,
- [29407]=10,[29419]=10,[29432]=3600,[29484]=10,[29506]=20,[29530]=1,[29534]=1800,
- [29544]=8,[29602]=20,[29607]=0.001,[29685]=5,[29825]=30,[29846]=3600,[29848]=20,
- [29849]=8,[29851]=2,[29865]=12,[29871]=5,[29910]=1,[29915]=10,[29943]=8,
- [29998]=21,[30001]=8,[30002]=6,[30003]=7200,[30020]=10,[30080]=300,[30081]=300,
- [30082]=3,[30088]=3600,[30089]=3600,[30090]=3600,[30092]=8,[30094]=8,[30095]=8,
- [30109]=5,[30110]=604800,[30112]=2,[30113]=30,[30165]=10,[30167]=600,[30225]=8,
- [30238]=1800,[30285]=15,[30297]=1800,[30331]=7200,[30336]=7200,[30338]=7200,
- [30440]=30,[30441]=30,[30803]=10,[30804]=10,[30805]=10,[30806]=10,[30807]=10,
- [30918]=1,[31248]=1,[31316]=0.1,[31362]=1,[31466]=1,[31562]=6,[31800]=27,
- [301100]=3,[301101]=3,
-}
-
-lib:SetDataVersion(Type, Version)
\ No newline at end of file
diff --git a/libraries/LibClassicMobHealth/LibClassicMobHealth.lua b/libraries/LibClassicMobHealth/LibClassicMobHealth.lua
deleted file mode 100755
index 333a2e4..0000000
--- a/libraries/LibClassicMobHealth/LibClassicMobHealth.lua
+++ /dev/null
@@ -1,525 +0,0 @@
---[[
-Name: LibClassicMobHealth-1.0
-Current Author: Pneumatus
-Original Author: Cameron Kenneth Knight (ckknight@gmail.com)
-Inspired By: MobHealth3 by Neronix
-Description: Estimate a mob's health
-License: LGPL v2.1
-]]
-
-local MAJOR_VERSION = "LibClassicMobHealth-1.0"
-local MINOR_VERSION = 1
-
--- #AUTODOC_NAMESPACE lib
-
-local lib, oldMinor = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
-if not lib then
- return
-end
-local oldLib
-if oldMinor then
- oldLib = {}
- for k,v in pairs(lib) do
- oldLib[k] = v
- lib[k] = nil
- end
-end
-
-local _G = _G
-local UnitLevel = _G.UnitLevel
-local UnitIsPlayer = _G.UnitIsPlayer
-local UnitPlayerControlled = _G.UnitPlayerControlled
-local UnitName = _G.UnitName
-local UnitHealth = _G.UnitHealth
-local UnitHealthMax = _G.UnitHealthMax
-local UnitIsFriend = _G.UnitIsFriend
-local UnitIsDead = _G.UnitIsDead
-local UnitCanAttack = _G.UnitCanAttack
-local math_floor = _G.math.floor
-local setmetatable = _G.setmetatable
-local type = _G.type
-local pairs = _G.pairs
-local next = _G.next
-
-local frame
-if oldLib then
- frame = oldLib.frame
- frame:UnregisterAllEvents()
- frame:SetScript("OnEvent", nil)
- frame:SetScript("OnUpdate", nil)
- _G.LibClassicMobHealth10DB = nil
-end
-frame = oldLib and oldLib.frame or _G.CreateFrame("Frame", MAJOR_VERSION .. "_Frame")
-
-frame:RegisterEvent("UNIT_COMBAT")
-frame:RegisterEvent("PLAYER_TARGET_CHANGED")
-frame:RegisterEvent("UNIT_HEALTH")
-frame:RegisterEvent("ADDON_LOADED")
-
-frame:SetScript("OnEvent", function(this, event, ...)
- this[event](lib, ...)
-end)
-
-local mt = {__index = function(self, key)
- if key == nil then
- return nil
- end
- local t = {}
- self[key] = t
- return t
-end}
-
-local data = oldLib and oldLib.data
-if not data then
- data = {
- npc = setmetatable({}, mt),
- pc = setmetatable({}, mt),
- pet = setmetatable({}, mt)
- }
-end
-lib.data = data -- stores the maximum health of mobs that will actually be shown to the user
-data.revision = MINOR_VERSION
-
-local accumulatedHP = setmetatable({}, mt) -- Keeps Damage-taken data for mobs that we've actually poked during this session
-local accumulatedPercent = setmetatable({}, mt) -- Keeps Percentage-taken data for mobs that we've actually poked during this session
-local calculationUnneeded = setmetatable({}, mt) -- Keeps a list of things that don't need calculation (e.g. Beast Lore'd mobs)
-
-local currentAccumulatedHP = nil
-local currentAccumulatedPercent = nil
-local currentName = nil
-local currentLevel = nil
-local recentDamage = nil
-local lastPercent = nil
-
-
-_G.hash_SlashCmdList["LIBCLASSICMOBHEALTHONE"] = nil
-_G.SlashCmdList["LIBCLASSICMOBHEALTHONE"] = nil
-
-function frame:ADDON_LOADED(name)
- if name == "Tukui" then
- -- if we're not an embedded library, then use a saved variable
- frame:RegisterEvent("PLAYER_LOGOUT")
- if type(_G.LibClassicMobHealth10DB) == "table" then
- data = _G.LibClassicMobHealth10DB
- setmetatable(data.npc, mt)
- setmetatable(data.pc, mt)
- setmetatable(data.pet, mt)
- lib.data = data
- else
- _G.LibClassicMobHealth10DB = data
- end
-
- local options = _G.LibClassicMobHealth10Opt
- if type(options) ~= "table" then
- options = {
- save = true,
- prune = 1000,
- }
- _G.LibClassicMobHealth10Opt = options
- end
-
- _G.hash_SlashCmdList["LIBCLASSICMOBHEALTHONE"] = nil
- _G.SlashCmdList["LIBCLASSICMOBHEALTHONE"] = function(text)
- text = text:lower():trim()
- local alpha, bravo = text:match("^([^%s]+)%s+(.*)$")
- if not alpha then
- alpha = text
- end
- if alpha == "" or alpha == "help" then
- DEFAULT_CHAT_FRAME:AddMessage(("|cffffff7f%s|r"):format(MAJOR_VERSION))
- DEFAULT_CHAT_FRAME:AddMessage((" - |cffffff7f%s|r [%s] - %s"):format("save", options.save and "|cff00ff00On|r" or "|cffff0000Off|r", "whether to save mob health data"))
- DEFAULT_CHAT_FRAME:AddMessage((" - |cffffff7f%s|r [%s] - %s"):format("prune", options.prune == 0 and "|cffff0000Off|r" or "|cff00ff00" .. options.prune .. "|r", "how many data points until data is pruned, 0 means no pruning"))
- elseif alpha == "save" then
- options.save = not options.save
- DEFAULT_CHAT_FRAME:AddMessage(("|cffffff7f%s|r"):format(MAJOR_VERSION))
- DEFAULT_CHAT_FRAME:AddMessage((" - |cffffff7f%s|r [%s]"):format("save", options.save and "|cff00ff00On|r" or "|cffff0000Off|r"))
- elseif alpha == "prune" then
- local bravo_num = tonumber(bravo)
- if bravo_num then
- options.prune = math.floor(bravo_num+0.5)
- DEFAULT_CHAT_FRAME:AddMessage(("|cffffff7f%s|r"):format(MAJOR_VERSION))
- DEFAULT_CHAT_FRAME:AddMessage((" - |cffffff7f%s|r [%s]"):format("prune", options.prune == 0 and "|cffff0000Off|r" or "|cff00ff00" .. options.prune .. "|r"))
- else
- DEFAULT_CHAT_FRAME:AddMessage(("|cffffff7f%s|r - prune must take a number, %q is not a number"):format(MAJOR_VERSION, bravo or ""))
- end
- else
- DEFAULT_CHAT_FRAME:AddMessage(("|cffffff7f%s|r - unknown command %q"):format(MAJOR_VERSION, alpha))
- end
- end
-
- _G.SLASH_LIBCLASSICMOBHEALTHONE1 = "/lcmh1"
- _G.SLASH_LIBCLASSICMOBHEALTHONE2 = "/lcmh"
- _G.SLASH_LIBCLASSICMOBHEALTHONE3 = "/libclassicmobhealth1"
- _G.SLASH_LIBCLASSICMOBHEALTHONE4 = "/libclassicmobhealth"
-
- function frame:PLAYER_LOGOUT()
- if not options.save then
- _G.LibClassicMobHealth10DB = nil
- return
- end
- local count = 0
- setmetatable(data.npc, nil)
- setmetatable(data.pc, nil)
- setmetatable(data.pet, nil)
- for _, kind in ipairs({ 'npc', 'pc', 'pet' }) do
- for k,v in pairs(data[kind]) do
- if not next(v) then
- data[kind][k] = nil
- else
- for _ in pairs(v) do
- count = count + 1
- end
- end
- end
- end
- local prune = options.prune
- if not prune or prune <= 0 then
- return
- end
- if count <= prune then
- return
- end
-
- -- let's try to only have one mob-level, don't have duplicates for each level, since they can be estimated, and for players/pets, this will get rid of old data
- local mobs = {}
- for _, kind in ipairs({ 'npc', 'pc', 'pet' }) do
- for level, d in pairs(data[kind]) do
- for mob, health in pairs(d) do
- if mobs[mob] then
- d[mob] = nil
- count = count - 1
- end
- mobs[mob] = level
- end
- if next(d) == nil then
- data[kind][level] = nil
- end
- end
- end
- mobs = nil
- if count <= prune then
- return
- end
- -- still too much data, let's get rid of low-level non-bosses until we're at `prune`
- local playerLevel = UnitLevel("player")
- local maxLevel = playerLevel*3/4
- if maxLevel > playerLevel - 5 then
- maxLevel = playerLevel - 5
- end
- for level = 1, maxLevel do
- for _, kind in ipairs({ 'npc', 'pet', 'pc' }) do
- local d = data[kind][level]
- if d then
- for mob, health in pairs(d) do
- d[mob] = nil
- count = count - 1
- end
- data[kind][level] = nil
- if count <= prune then
- return
- end
- end
- end
- end
- end
- end
- frame:UnregisterEvent("ADDON_LOADED")
- frame.ADDON_LOADED = nil
-end
-
-
-function frame:UNIT_COMBAT(unit, _, _, damage)
- if unit ~= "target" or not currentAccumulatedHP then
- return
- end
- recentDamage = recentDamage + damage
-end
-
-local function PLAYER_unit_CHANGED(unit)
- if not UnitCanAttack("player", unit) or UnitIsDead(unit) or UnitIsFriend("player", unit) then
- -- don't store data on friends and dead men tell no tales
- currentAccumulatedHP = nil
- currentAccumulatedPercent = nil
- return
- end
-
- local name, server = UnitName(unit)
- if server and server ~= "" then
- name = name .. "-" .. server
- end
- local isPlayer = UnitIsPlayer(unit)
- local isPet = UnitPlayerControlled(unit) and not isPlayer -- some owners name their pets the same name as other people, because they're think they're funny. They're not.
- currentName = name
- local level = UnitLevel(unit)
- currentLevel = level
-
- recentDamage = 0
- lastPercent = UnitHealth(unit)
-
- currentAccumulatedHP = accumulatedHP[level][name]
- currentAccumulatedPercent = accumulatedPercent[level][name]
-
- if not isPlayer and not isPet then
- -- Mob
- if not currentAccumulatedHP then
- local saved = data.npc [level][name]
- if saved then
- -- We claim that the saved value is worth 100%
- accumulatedHP[level][name] = saved
- accumulatedPercent[level][name] = 100
- else
- -- Nothing previously known. Start fresh.
- accumulatedHP[level][name] = 0
- accumulatedPercent[level][name] = 0
- end
- currentAccumulatedHP = accumulatedHP[level][name]
- currentAccumulatedPercent = accumulatedPercent[level][name]
- end
-
- if currentAccumulatedPercent > 200 then
- -- keep accumulated percentage below 200% in case we hit mobs with different hp
- currentAccumulatedHP = currentAccumulatedHP / currentAccumulatedPercent * 100
- currentAccumulatedPercent = 100
- end
- else
- -- Player health can change a lot. Different gear, buffs, etc.. we only assume that we've seen 10% knocked off players previously
- if not currentAccumulatedHP then
- local saved = data[isPet and 'pet' or 'pc'][level][name]
- if saved then
- -- We claim that the saved value is worth 10%
- accumulatedHP[level][name] = saved/10
- accumulatedPercent[level][name] = 10
- else
- accumulatedHP[level][name] = 0
- accumulatedPercent[level][name] = 0
- end
- currentAccumulatedHP = accumulatedHP[level][name]
- currentAccumulatedPercent = accumulatedPercent[level][name]
- end
-
- if currentAccumulatedPercent > 10 then
- currentAccumulatedHP = currentAccumulatedHP / currentAccumulatedPercent * 10
- currentAccumulatedPercent = 10
- end
- end
-end
-
-function frame:PLAYER_TARGET_CHANGED()
- PLAYER_unit_CHANGED("target")
-end
-
-function frame:UNIT_HEALTH(unit)
- if unit ~= "target" or not currentAccumulatedHP then
- return
- end
-
- local current = UnitHealth(unit)
- local max = UnitHealthMax(unit)
- local name = currentName
- local level = currentLevel
- local kind
- if UnitIsPlayer(unit) then
- kind = 'pc'
- elseif UnitPlayerControlled(unit) then
- kind = 'pet'
- else
- kind = 'npc'
- end
-
- if calculationUnneeded[level][name] then
- return
- elseif current == 0 then
- -- possibly targetting a dead person
- elseif max ~= 100 then
- -- beast lore, don't need to calculate.
- if kind == 'npc' then
- data.npc[level][name] = max
- else
- data[kind][level][name] = max
- end
- calculationUnneeded[level][name] = true
- elseif current > lastPercent or lastPercent > 100 then
- -- it healed, so let's reset our ephemeral calculations
- lastPercent = current
- recentDamage = 0
- elseif recentDamage > 0 then
- if current ~= lastPercent then
- currentAccumulatedHP = currentAccumulatedHP + recentDamage
- currentAccumulatedPercent = currentAccumulatedPercent + (lastPercent - current)
- recentDamage = 0
- lastPercent = current
-
- if currentAccumulatedPercent >= 10 then
- local num = currentAccumulatedHP / currentAccumulatedPercent * 100
- if kind == 'npc' then
- data.npc[level][name] = num
- else
- data[kind][level][name] = num
- end
- end
- end
- end
-end
-
-local function guessAtMaxHealth(name, level, kind, known)
- -- if we have data on a mob of the same name but a different level, check within two levels and guess from there.
- if not kind then
- return guessAtMaxHealth(name, level, 'npc') or guessAtMaxHealth(name, level, 'pc') or guessAtMaxHealth(name, level, 'pet')
- end
-
- local value = data[kind][level][name]
- if value or level <= 0 or known then
- return value
- end
- if level > 1 then
- value = data[kind][level - 1][name]
- if value then
- return value * level/(level - 1)
- end
- end
- value = data[kind][level + 1][name]
- if value then
- return value * level/(level + 1)
- end
- if level > 2 then
- value = data[kind][level - 2][name]
- if value then
- return value * level/(level - 2)
- end
- end
- value = data[kind][level + 2][name]
- if value then
- return value * level/(level + 2)
- end
- return nil
-end
-
---[[
-Arguments:
- string - name of the unit in question in the form of "Someguy", "Someguy-Some Realm"
- number - level of the unit in question
- string - kind of unit, can be "npc", "pc", "pet"
- [optional] boolean - whether not to guess at the mob's health based on other levels of said mob.
-Returns:
- number or nil - the maximum health of the unit or nil if unknown
-Example:
- local hp = LibStub("LibClasicMobHealth-1.0"):GetMaxHP("Young Wolf", 2)
-]]
-function lib:GetMaxHP(name, level, kind, known)
- local value = guessAtMaxHealth(name, level, kind, known)
- if value then
- return math_floor(value + 0.5)
- else
- return nil
- end
-end
-
---[[
-Arguments:
- string - a unit ID
-Returns:
- number, boolean - the maximum health of the unit, whether the health is known or not
-Example:
- local maxhp, found = LibStub("LibClasicMobHealth-1.0"):GetUnitMaxHP("target")
-]]
-function lib:GetUnitMaxHP(unit)
- local max = UnitHealthMax(unit)
- if max ~= 100 then
- return max, true
- end
- local name, server = UnitName(unit)
- if server and server ~= "" then
- name = name .. "-" .. server
- end
- local level = UnitLevel(unit)
-
- local kind
- if UnitIsPlayer(unit) then
- kind = 'pc'
- elseif UnitPlayerControlled(unit) then
- kind = 'pet'
- else
- kind = 'npc'
- end
-
- local value = guessAtMaxHealth(name, level, kind)
- if value then
- return math_floor(value + 0.5), true
- else
- return max, false
- end
-end
-
---[[
-Arguments:
- string - a unit ID
-Returns:
- number, boolean - the current health of the unit, whether the health is known or not
-Example:
- local curhp, found = LibStub("LibClasicMobHealth-1.0"):GetUnitCurrentHP("target")
-]]
-function lib:GetUnitCurrentHP(unit)
- local current, max = UnitHealth(unit), UnitHealthMax(unit)
- if max ~= 100 then
- return current, true
- end
-
- local name, server = UnitName(unit)
- if server and server ~= "" then
- name = name .. "-" .. server
- end
- local level = UnitLevel(unit)
-
- local kind
- if UnitIsPlayer(unit) then
- kind = 'pc'
- elseif UnitPlayerControlled(unit) then
- kind = 'pet'
- else
- kind = 'npc'
- end
-
- local value = guessAtMaxHealth(name, level, kind)
- if value then
- return math_floor(current/max * value + 0.5), true
- else
- return current, false
- end
-end
-
---[[
-Arguments:
- string - a unit ID
-Returns:
- number, number, boolean - the current health of the unit, the maximum health of the unit, whether the health is known or not
-Example:
- local curhp, maxhp, found = LibStub("LibClasicMobHealth-1.0"):GetUnitHealth("target")
-]]
-function lib:GetUnitHealth(unit)
- local current, max = UnitHealth(unit), UnitHealthMax(unit)
- if max ~= 100 then
- return current, max, true
- end
-
- local name, server = UnitName(unit)
- if server and server ~= "" then
- name = name .. "-" .. server
- end
- local level = UnitLevel(unit)
-
- local kind
- if UnitIsPlayer(unit) then
- kind = 'pc'
- elseif UnitPlayerControlled(unit) then
- kind = 'pet'
- else
- kind = 'npc'
- end
-
- local value = guessAtMaxHealth(name, level, kind)
- if value then
- return math_floor(current/max * value + 0.5), math_floor(value + 0.5), true
- else
- return current, max, false
- end
-end
diff --git a/libraries/init.xml b/libraries/init.xml
index 10ee1aa..f594d85 100755
--- a/libraries/init.xml
+++ b/libraries/init.xml
@@ -2,7 +2,4 @@
-
-
-
diff --git a/menu/menu.lua b/menu/menu.lua
deleted file mode 100755
index f85f3ce..0000000
--- a/menu/menu.lua
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
- local _, ns = ...
-
- local _, class = UnitClass'player'
- local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
- local classic = build < 1 and true or false
-
- local CLASS_ICON_TCOORDS = {
- ['WARRIOR'] = {0, .25, .025, .225},
- ['MAGE'] = {.26, .5, .025, .225},
- ['ROGUE'] = {.49609375, 0.7421875, .025, .225},
- ['DRUID'] = {.7421875, 0.98828125, .025, .225},
- ['HUNTER'] = {.01, .249, .275, .475},
- ['SHAMAN'] = {.25, .49609375, .275, .475},
- ['PRIEST'] = {.497, .741, .275, .475},
- ['WARLOCK'] = {.7421875, .98828125, .275, .475},
- ['PALADIN'] = {0, .25, .525, .725},
- }
-
- local buttons = {
- ['CharacterMicroButton'] = {{-13, 20}, {-13, 20}},
- ['SpellbookMicroButton'] = {{ 13, 20}, { 13, 20}},
- ['TalentMicroButton'] = {{-13, 55}, {-13, 55}},
- ['QuestLogMicroButton'] = {{-13, 55}, { 13, 55}},
- ['SocialsMicroButton'] = {{ 13, 55}, {-13, 90}},
- ['LFGMicroButton'] = {{-13, 90}, { 13, 90}},
- ['WorldMapMicroButton'] = {{-13 ,90}, { 13, 90}},
- ['MainMenuMicroButton'] = {{ 13, 90}, {-13, 125}},
- ['HelpMicroButton'] = {{-13, 125}, {13, 125}},
- }
-
- local BFAbuttons = {
- ['CharacterMicroButton'] = {{-12, 30}, {-12, 30}},
- ['SpellbookMicroButton'] = {{ 12, 30}, { 12, 30}},
- ['TalentMicroButton'] = {{-12, 65}, {-12, 65}},
- ['AchievementMicroButton'] = {{-12, 65}, { 12, 65}},
- ['QuestLogMicroButton'] = {{ 12, 65}, {-12, 100}},
- ['GuildMicroButton'] = {{-12, 100}, {12, 100}},
- ['LFDMicroButton'] = {{ 12, 100}, {-12, 135}},
- ['CollectionsMicroButton'] = {{-12, 135}, {12, 135}},
- ['EJMicroButton'] = {{-12, 170}, {-12, 170}},
- ['MainMenuMicroButton'] = {{-12, 170}, {12, 170}},
- }
-
- local ShowMicroButtons = function()
- local menu = _G['moduimenuButton']
- menu.arrow:SetPoint('BOTTOM', menu, 'TOP', 2, 6)
- for i, v in pairs(buttons) do
- local bu = _G[i]
- if bu then -- 8.0 buffer
- bu:SetAlpha(1)
- end
- end
- end
-
- local HideMicroButtons = function(self)
- local menu = _G['moduimenuButton']
- GameTooltip:Hide()
- menu.arrow:SetPoint('BOTTOM', menu, 'TOP', 2, 3)
- for i, v in pairs(buttons) do
- local bu = _G[i]
- if bu then -- 8.0 buffer
- bu:SetAlpha(0)
- end
- end
- end
-
- local PositionMicroButtons = function()
- local l = UnitLevel'player'
- local menu = _G['moduimenuButton']
- for i, v in pairs(buttons) do
- local bu = _G[i]
- if bu then
- bu:ClearAllPoints()
- bu:SetPoint('BOTTOM', menu, 'TOP', l < 10 and v[1][1] or v[2][1], l < 10 and v[1][2] or v[2][2])
- bu:SetAlpha(0)
- bu:SetFrameLevel(11)
-
- bu:HookScript('OnEnter', ShowMicroButtons)
- bu:HookScript('OnLeave', HideMicroButtons)
- end
- end
- for _, f in pairs(
- {
- MainMenuBarPerformanceBar,
- StoreMicroButton
- }
- ) do
- if f then
- f:Hide()
- end
- end
- end
-
- local UpdateLatency = function(self, elapsed)
- if self.updateInterval > 0 then
- self.updateInterval = self.updateInterval - elapsed
- else
- self.updateInterval = PERFORMANCEBAR_UPDATE_INTERVAL
- local _, _, latency = GetNetStats()
- if latency > PERFORMANCEBAR_MEDIUM_LATENCY then
- self:SetStatusBarColor(1, 0, 0)
- elseif latency > PERFORMANCEBAR_LOW_LATENCY then
- self:SetStatusBarColor(1, 1, 0)
- else
- self:SetStatusBarColor(0, 1, 0)
- end
- end
- end
-
- local AddAlerts = function()
- local focus = GetMouseFocus()
- ShowMenu()
- if not menu.timer then
- menu.timer = true
- C_Timer.After(5, function()
- menu.timer = false
- if focus == menu or focus == menu.mouseover or str.find(focus:GetName(), classic and buttons or BFAbuttons) then
- return
- else
- HideMenu()
- end
- end)
- end
- end
-
- local AddMenu = function()
- local menu = CreateFrame('Button', 'moduimenuButton', _G['modui_mainbar'].caps)
- menu:SetPoint('LEFT', _G['modui_mainbar'].caps, 35, 0)
- menu:SetSize(21, 21)
- --menu:GetNormalTexture():SetTexture''
- ns.BUElements(menu)
- menu:RegisterForClicks'AnyUp'
- menu:SetFrameLevel(2)
-
- menu.t = menu:CreateTexture(nil, 'ARTWORK')
- menu.t:SetTexture[[Interface\GLUES\CHARACTERCREATE\UI-CHARACTERCREATE-CLASSES]]
- menu.t:SetTexCoord(unpack(CLASS_ICON_TCOORDS[class]))
- menu.t:SetPoint'TOPLEFT'
- menu.t:SetPoint('BOTTOMRIGHT')
-
- menu.arrow = menu:CreateTexture(nil, 'OVERLAY')
- menu.arrow:SetTexture[[Interface\MoneyFrame\Arrow-Right-Up]]
- menu.arrow:SetSize(16, 16)
- menu.arrow:SetTexCoord(1, 0, 0, 0, 1, 1, 0, 1)
- menu.arrow:SetPoint('BOTTOM', menu, 'TOP', -1, 3)
-
- menu.mouseover = CreateFrame('Button', nil, menu)
- menu.mouseover:SetWidth(60)
- menu.mouseover:SetHeight(200)
- menu.mouseover:SetPoint('BOTTOM', menu, 'TOP')
- menu.mouseover:SetFrameLevel(0)
-
- menu.sb = CreateFrame('StatusBar', nil, menu)
- ns.SB(menu.sb)
- menu.sb:SetSize(22, 3)
- menu.sb:SetPoint('TOP', menu, 'BOTTOM', -2, -7)
- menu.sb:SetStatusBarColor(0, 1, 0)
- menu.sb:SetBackdrop(
- {bgFile = [[Interface\Buttons\WHITE8x8]],
- insets = {
- left = -1,
- right = -1,
- top = -1,
- bottom = -1,
- }
- }
- )
- menu.sb:SetBackdropColor(0, 0, 0)
- menu.sb.updateInterval = 0
-
- local mask = menu:CreateMaskTexture()
- mask:SetTexture[[Interface\Minimap\UI-Minimap-Background]]
- mask:SetPoint('TOPLEFT', -3, 3)
- mask:SetPoint('BOTTOMRIGHT', 3, -3)
-
- menu.t:AddMaskTexture(mask)
-
- if not menu.bo then
- menu.bo = menu:CreateTexture(nil, 'OVERLAY')
- menu.bo:SetSize(36, 36)
- menu.bo:SetTexture[[Interface\Artifacts\Artifacts]]
- menu.bo:SetPoint'CENTER'
- menu.bo:SetTexCoord(.5, .58, .8775, .9575)
- menu.bo:SetVertexColor(.6, .6, .6)
- tinsert(ns.skinmenu, menu.bo)
- end
-
- --[[KeyRingButton:SetParent(ContainerFrame1)
- KeyRingButton:ClearAllPoints()
- KeyRingButton:SetPoint('TOPLEFT', ContainerFrame1, -25, -2)]]
-
- menu:SetScript('OnEnter', function()
- ShowMicroButtons()
- GameTooltip:ClearLines()
- GameTooltip:SetOwner(menu, 'ANCHOR_LEFT', -25, 12)
- GameTooltip:AddLine(MAINMENU_BUTTON)
-
- --GameTooltip:AddLine' '
-
- GameTooltip:Show()
- end)
-
- menu:SetScript('OnLeave', HideMicroButtons)
-
- menu.sb:SetScript('OnUpdate', UpdateLatency)
-
- menu.mouseover:SetScript('OnEnter', ShowMicroButtons)
- menu.mouseover:SetScript('OnLeave', HideMicroButtons)
-
- menu:SetScript('OnClick', function()
- ToggleCharacter'PaperDollFrame'
- end)
- end
-
- local OnEvent = function(self, event)
- if MODUI_VAR['elements']['mainbar'].enable then
- if event == 'PLAYER_LOGIN' then
- AddMenu()
- hooksecurefunc('UpdateMicroButtons', PositionMicroButtons)
- end
- PositionMicroButtons()
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:RegisterEvent'PLAYER_LEVEL_UP'
- e:SetScript('OnEvent', OnEvent)
- -- hooksecurefunc('MainMenuMicroButton_ShowAlert', AddAlerts)
-
- --
diff --git a/minimap/minimap.lua b/minimap/minimap.lua
deleted file mode 100755
index e0d9250..0000000
--- a/minimap/minimap.lua
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
- local _, ns = ...
-
- local AddZoom = function(self, delta)
- if delta > 0 and Minimap:GetZoom() < 5 then
- Minimap:SetZoom(Minimap:GetZoom() + 1)
- elseif delta < 0 and Minimap:GetZoom() > 0 then
- Minimap:SetZoom(Minimap:GetZoom() - 1)
- end
- end
-
- Minimap:EnableMouseWheel(true)
- Minimap:SetScript('OnMouseWheel', AddZoom)
-
-
- for _, v in pairs(
- {
- MinimapZoomIn,
- MinimapZoomOut
- }
- ) do
- v:Hide()
- end
-
-
- local t = MiniMapTrackingButton or MiniMapTrackingFrame
- local time = TimeManagerClockButton or GameTimeFrame
-
- t:SetFrameStrata'MEDIUM'
- t:ClearAllPoints()
- t:SetPoint('BOTTOMRIGHT', Minimap)
-
- if MiniMapTracking then
- MiniMapTracking:ClearAllPoints()
- MiniMapTracking:SetAllPoints(t)
- end
-
- MiniMapMailFrame:ClearAllPoints()
- MiniMapMailFrame:SetPoint('TOPRIGHT', Minimap, 4, -5)
-
- MinimapZoneText:ClearAllPoints()
- MinimapZoneText:SetPoint('TOP', Minimap, -2, 17)
-
- for _, v in pairs(
- {
- GameTimeFrame,
- MinimapBorderTop,
- MinimapToggleButton,
- MiniMapWorldMapButton,
- }
- ) do
- v:Hide()
- end
-
- --
diff --git a/modui_classic.toc b/modui_classic.toc
index 6226ab5..b56da0f 100755
--- a/modui_classic.toc
+++ b/modui_classic.toc
@@ -1,4 +1,4 @@
-## Interface: 11302
+## Interface: 30400
## Title: mod ui
## Author: modernist
##SavedVariablesPerCharacter: MODUI_VAR
@@ -24,61 +24,21 @@ libraries/init.xml
# ~insert templates
templates.xml
-# ~action bar and buttons
-actionbar/bars.lua
-
# ~buffs
aura/aura.lua
-# ~castbars for target and nameplates
-castbars/enemy.lua
# ~chat
-chat/chat.lua
-chat/cmd.lua
-chat/event.lua
-chat/tab.lua
chat/url.lua
-# ~one bag system
-bag/menu.lua
-bag/bag/bag.lua
-bag/button.lua
-bag/bank/bank.lua
-bag/tools/greys.lua
-bag/tools/sort.lua
-bag/update.lua
-
-# ~micromenu
-menu/menu.lua
-
-# ~minimap
-minimap/minimap.lua
-
-# ~nameplates
-nameplate/aura.lua
-nameplate/colour.lua
-nameplate/combopoint.lua
-nameplate/style.lua
-nameplate/totem.lua
-
-# ~objective tracker
-quest/quest.lua
-
# ~tooltip
tooltip/content.lua
tooltip/layout.lua
-# talents
-talents/talents.lua
-
# ~unitframes
unit/unit.lua
-unit/druidbar.lua
-unit/energy.lua
+unit/smooth.lua
# ~world map
worldmap/worldmap.lua
-# ~options
-options/options.lua
diff --git a/nameplate/aura.lua b/nameplate/aura.lua
deleted file mode 100755
index b8581fd..0000000
--- a/nameplate/aura.lua
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
- local _, ns = ...
-
- local LCD = LibStub'LibClassicDurations'
-
- local events = {
- 'NAME_PLATE_UNIT_ADDED',
- 'UNIT_AURA'
- }
-
- local CreateAura = function(plate)
- if not plate.aura then
- plate.aura = {}
- for i = 1, 4 do
- plate.aura[i] = CreateFrame('Frame', nil, plate)
- ns.BD(plate.aura[i], 1, -2)
- ns.BUBorder(plate.aura[i], 18, 12, 4, 5)
- for j = 1, 4 do
- tinsert(ns.skinbu, plate.aura[i].bo[j])
- plate.aura[i].bo[j]:SetVertexColor(MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b)
- end
- --ns.BD(plate.aura[i])
- plate.aura[i]:SetSize(16, 9)
- plate.aura[i]:SetPoint('BOTTOMLEFT', i == 1 and plate or plate.aura[i - 1], i == 1 and 'TOPLEFT' or 'BOTTOMRIGHT', i == 1 and 2 or 8, i == 1 and 2 or 0)
- plate.aura[i]:Hide()
-
- plate.aura[i].icon = plate.aura[i]:CreateTexture(nil, 'ARTWORK')
- plate.aura[i].icon:SetTexCoord(.1, .9, .1, .6)
- plate.aura[i].icon:SetAllPoints()
-
- plate.aura[i].count = plate.aura[i]:CreateFontString(nil, 'OVERLAY')
- plate.aura[i].count:SetTextColor(1, 1, 1)
- plate.aura[i].count:SetFontObject'SystemFont_Shadow_Small'
- plate.aura[i].count:SetPoint('CENTER', plate.aura[i], 'BOTTOM')
-
- plate.aura[i].cooldown = CreateFrame('Cooldown', nil, plate.aura[i], 'CooldownFrameTemplate')
- plate.aura[i].cooldown:SetAllPoints()
- plate.aura[i].cooldown:SetSwipeTexture[[Interface\CHARACTERFRAME\TempPortraitAlphaMaskSmall]]
- plate.aura[i].cooldown:SetReverse(true)
-
- local t = plate.aura[i].cooldown:GetRegions()
- t:SetFont(STANDARD_TEXT_FONT, 8, 'OUTLINE')
- t:ClearAllPoints()
- t:SetPoint('CENTER', plate.aura[i].cooldown, 'TOP')
- end
- end
- end
-
- local UpdateFilter = function(unit)
- if UnitIsUnit('player', unit) then
- return 'HELPFUL|INCLUDE_NAME_PLATE_ONLY'
- else
- local r = UnitReaction('player', unit)
- if r and r <= 4 then
- return 'HARMFUL|INCLUDE_NAME_PLATE_ONLY'
- else
- return 'HARMFUL|RAID'
- end
- end
- end
-
- local ShouldShowBuff = function(name, caster, showpersonal, showall)
- if not name then return false end
- if caster == 'player' or caster == 'pet' then
- return true
- else
- return false
- end
- end
-
- local UpdateAura = function(plate, unit, ...)
- local filter = UpdateFilter(unit)
- for i = 1, 4 do
- local name, icon, count, type, duration, expiration, caster, _, showpersonal, spellid, _, _, _, showall = UnitAura(unit, i, filter)
- local colour = DebuffTypeColor[type or 'none']
-
- plate.aura[i]:Hide()
- if ShouldShowBuff(name, caster) then -- use "show"
- plate.aura[i]:SetID(i)
- plate.aura[i].icon:SetTexture(icon)
- if count > 1 then
- plate.aura[i].count:SetText(count)
- plate.aura[i].count:Show()
- else
- plate.aura[i].count:Hide()
- end
-
- for j = 1, 4 do
- plate.aura[i].bo[j]:SetVertexColor(colour.r*1.7, colour.g*1.7, colour.b*1.7)
- end
-
- -- its really annoying but we can't track durations and determine when a spell is refreshed or not using UnitAura
- -- we'll probably have to move over to combat log events if LCD isnt flexible enough...
-
- if ns.auras[name] then
- local durationnew, expirationnew = LCD:GetAuraDurationByUnit(unit, spellid, caster, name)
-
- if duration == 0 and durationnew then
- duration = durationnew
- expiration = expirationnew
- end
-
- if expiration and expiration ~= 0 then
- local start = expiration - duration
- CooldownFrame_Set(plate.aura[i].cooldown, start, duration, true)
- else
- CooldownFrame_Clear(plate.aura[i].cooldown)
- end
- end
-
- plate.aura[i]:Show()
- end
- end
- end
-
- local OnEvent = function(_, event, unit, ...)
- if MODUI_VAR['elements']['nameplate'].enable and MODUI_VAR['elements']['nameplate'].aura then
- local plate = C_NamePlate.GetNamePlateForUnit(unit)
- if not plate then return end
- if event == 'NAME_PLATE_UNIT_ADDED' then
- CreateAura(plate)
- end
- UpdateAura(plate, unit, ...)
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/nameplate/colour.lua b/nameplate/colour.lua
deleted file mode 100755
index 7bd797a..0000000
--- a/nameplate/colour.lua
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- local OnEvent = function(_, event, unit)
- if MODUI_VAR['elements']['nameplate'].enable and MODUI_VAR['elements']['nameplate'].friendlyclass then
- SetCVar('ShowClassColorInFriendlyNameplate', 1)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/nameplate/combopoint.lua b/nameplate/combopoint.lua
deleted file mode 100755
index 823d145..0000000
--- a/nameplate/combopoint.lua
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
- local _, ns = ...
- local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
- if build > 1 then return end
-
- local plates = {}
-
- local events = {
- 'NAME_PLATE_UNIT_ADDED',
- 'PLAYER_ENTERING_WORLD',
- 'PLAYER_TARGET_CHANGED',
- }
-
- local uevents = {
- 'UNIT_MAXPOWER',
- 'UNIT_POWER_FREQUENT',
- }
-
- local CreateComboFrame = function(unit)
- local plate = C_NamePlate.GetNamePlateForUnit(unit)
- if not plate.cp then
- plate.cp = plate.UnitFrame.healthBar:CreateFontString(nil, 'OVERLAY')
- plate.cp:SetFont(STANDARD_TEXT_FONT, 16, 'OUTLINE')
- plate.cp:SetPoint('RIGHT', plate.UnitFrame.healthBar)
- plate.cp:Hide()
- end
- end
-
- local Update = function(frame)
- local points = GetComboPoints('player', 'target')
- local plate = C_NamePlate.GetNamePlateForUnit'target'
- if plate then
- plate.cp:Hide()
- if points > 0 then
- plate.cp:Show()
- plate.cp:SetText(string.rep('°', points))
- plate.cp:SetTextColor(.5*(points - 1), 2/(points - 1), .5/(points - 1))
- tinsert(plates, plate)
- end
- end
- end
-
- local Remove = function()
- for _, v in pairs(plates) do v.cp:Hide() end
- plates = {}
- end
-
- local OnEvent = function(self, event, ...)
- if MODUI_VAR['elements']['nameplate'].enable and MODUI_VAR['elements']['nameplate'].combo then
- if event == 'NAME_PLATE_UNIT_ADDED' then
- CreateComboFrame(...)
- elseif event == 'PLAYER_TARGET_CHANGED' then
- Remove()
- else
- Update()
- end
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- for _, v in pairs(uevents) do e:RegisterUnitEvent(v, 'player') end
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/nameplate/style.lua b/nameplate/style.lua
deleted file mode 100755
index 96e0aba..0000000
--- a/nameplate/style.lua
+++ /dev/null
@@ -1,83 +0,0 @@
-
- local _, ns = ...
-
- local events = {
- 'NAME_PLATE_CREATED',
- 'NAME_PLATE_UNIT_ADDED',
- }
-
- local LCMH = LibStub'LibClassicMobHealth-1.0'
-
- local UpdatePvP = function(plate, unit)
- if not plate.pvp then return end
- local rank = UnitPVPRank(unit)
- plate.pvp:Hide()
- if rank then
- local _, rankNo = GetPVPRankInfo(rank)
- if rankNo > 0 then
- plate.pvp:Show()
- plate.pvp:SetTexture(format('%s%02d', 'Interface\\PvPRankBadges\\PvPRank', rankNo))
- end
- end
- end
-
- local UpdateHealthText = function(plate)
- local frame = plate:GetParent()
- local v, max, found = LCMH:GetUnitHealth(frame.namePlateUnitToken)
-
- if UnitIsUnit('target', frame.namePlateUnitToken) then
- v, max, found = LCMH:GetUnitHealth'target'
- end
-
- if v and v > 0 and v ~= 100 then
- plate.healthBar.LeftText:SetText(v)
- ns.GRADIENT_COLOUR(plate.healthBar.LeftText, v, 0, max)
- else
- plate.healthBar.LeftText:SetText''
- end
- end
-
- local AddElements = function(plate)
- plate.pvp = plate:CreateTexture(nil, 'OVERLAY')
- plate.pvp:SetSize(14, 13)
- plate.pvp:SetPoint('RIGHT', plate.name, 'LEFT', -3, 1)
- plate.pvp:Hide()
-
- plate.name:SetFont(STANDARD_TEXT_FONT, 10)
- plate.name:ClearAllPoints()
- plate.name:SetPoint('BOTTOMRIGHT', plate, 'TOPRIGHT', -6, -13)
- plate.name:SetJustifyH'RIGHT'
-
- -- plate.healthBar:SetStatusBarTexture[[Interface/AddOns/modui_classic/art/statusbar/namebg.tga]]
-
- plate.healthBar.LeftText = plate.healthBar:CreateFontString(nil, 'OVERLAY', 'TextStatusBarText')
- plate.healthBar.LeftText:SetPoint('LEFT', plate.healthBar, 2, 1)
- plate.healthBar.LeftText:SetFont(STANDARD_TEXT_FONT, 8, 'OUTLINE')
-
- plate.healthBar:HookScript('OnValueChanged', function() UpdateHealthText(plate) end)
-
- for _, v in pairs({plate.healthBar.border:GetRegions()}) do
- tinsert(ns.skin, v)
- v:SetVertexColor(MODUI_VAR['theme'].r or 1, MODUI_VAR['theme'].g or 1, MODUI_VAR['theme'].b or 1)
- end
- end
-
- local OnEvent = function(self, event, ...)
- if MODUI_VAR['elements']['nameplate'].enable then
- if event == 'NAME_PLATE_CREATED' then
- local base = ...
- AddElements(base.UnitFrame)
- else
- local unit = ...
- local plate = C_NamePlate.GetNamePlateForUnit(...)
- UpdatePvP(plate, unit)
- end
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/nameplate/totem.lua b/nameplate/totem.lua
deleted file mode 100755
index 61a202e..0000000
--- a/nameplate/totem.lua
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
- local _, ns = ...
-
- -- TODO: hide/alpha elements based on totem (without taint)
- -- find way to accurately get duration, icon, UnitAura-like details..
- -- we have the old private server table if we have to, but lets not if possible....
- -- extrapolate totem table for player totem tracking.
-
- local events = {
- 'NAME_PLATE_UNIT_ADDED',
- 'UNIT_AURA'
- }
-
- local totems = {
- ['Grounding'] = {
- time = 45,
- type = 'Earth'
- },
- ['Earthbind'] = {
- time = 45,
- type = 'Earth'
- },
- ['Stoneclaw'] = {
- time = 15,
- type = 'Earth',
- },
- ['Strength of Earth'] = {
- time = 120,
- type = 'Earth'
- },
- ['Stoneskin'] = {
- time = 120,
- type = 'Earth'
- },
- ['Tremor'] = {
- time = 120,
- type = 'Earth'
- },
- --
- ['Fire Nova'] = {
- time = 5,
- type = 'Fire'
- },
- ['Flametongue'] = {
- time = 120,
- type = 'Fire'
- },
- ['Frost Resistance'] = {
- time = 120,
- type = 'Fire'
- },
- ['Magma'] = {
- time = 20,
- type = 'Fire'
- },
- ['Searing'] = {
- time = 55,
- type = 'Fire',
- },
- --
- ['Grace of Air'] = {
- time = 120,
- type = 'Air'
- },
- ['Nature Resistance'] = {
- time = 120,
- type = 'Air'
- },
- ['Sentry'] = {
- time = 300,
- type = 'Air'
- },
- ['Tranquil Air'] = {
- time = 120,
- type = 'Air'
- },
- ['Windfury'] = {
- time = 120,
- type = 'Air'
- },
- ['Windwall'] = {
- time = 120,
- type = 'Air'
- },
- --
- ['Disease Cleansing'] = {
- time = 120,
- type = 'Water'
- },
- ['Fire Resistance'] = {
- time = 120,
- type = 'Water'
- },
- ['Healing Stream'] = {
- time = 60,
- type = 'Water'
- },
- ['Mana Spring'] = {
- time = 60,
- type = 'Water'
- },
- ['Mana Tide'] = {
- time = 12,
- type = 'Water'
- },
- ['Poison Cleansing'] = {
- time = 120,
- type = 'Water'
- },
- ['Ancient Mana Spring'] = {
- time = 24,
- type = 'Water'
- },
- }
-
- local CreateTotem = function(plate)
- if not plate.totem then
- plate.totem = CreateFrame('Button', nil, plate)
- plate.totem:SetPoint('BOTTOM', plate)
- ns.BUBorder(plate.totem, 14, 14, 2)
- ns.BD(plate.totem)
-
- plate.totem.icon = plate.totem:CreateTexture(nil, 'ARTWORK')
- plate.totem.icon:SetAllPoints()
- plate.totem.icon:SetTexCoord(.1, .9, .15, .85)
-
- plate.totem.cooldown = CreateFrame('Cooldown', nil, plate.totem, 'CooldownFrameTemplate')
- plate.totem.cooldown:SetAllPoints()
- plate.totem.cooldown:SetReverse(true)
- plate.totem.cooldown:SetHideCountdownNumbers(true)
- end
- end
-
- local TogglePlate = function(plate, show)
- if plate.healthBar then
- plate.healthBar:SetStatusBarTexture(show and 'Interface//TargetingFrame//UI-TargetingFrame-BarFill' or nil)
- plate.healthBar.border:SetAlpha(show and 1 or 0)
- plate.healthBar.background:SetAlpha(show and 1 or 0)
- end
- for _, v in pairs(
- {
- plate.name,
- plate.LevelFrame,
- plate.selectionHighlight,
- }
- ) do
- v:SetAlpha(show and 1 or 0)
- end
- end
-
- local UpdateTotem = function(plate, unit)
- local n = gsub(UnitName(unit), '(.+) Totem', '%1')
- if totems[n] then
- plate.totem:Show()
- SetPortraitTexture(plate.totem.icon, unit)
- CooldownFrame_Set(plate.totem.cooldown, GetTime(), totems[n].time, totems[n].time > 0, true)
- TogglePlate(plate, false)
- else
- plate.totem:Hide()
- TogglePlate(plate, true)
- end
- end
-
- local OnEvent = function(_, event, unit)
- if MODUI_VAR['elements']['nameplate'].enable and MODUI_VAR['elements']['nameplate'].totem then
- local plate = C_NamePlate.GetNamePlateForUnit(unit)
- if not plate then return end
- if event == 'NAME_PLATE_UNIT_ADDED' then
- CreateTotem(plate)
- end
- UpdateTotem(plate, unit)
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/options/options.lua b/options/options.lua
deleted file mode 100755
index 0da7a08..0000000
--- a/options/options.lua
+++ /dev/null
@@ -1,688 +0,0 @@
-
-
- local _, ns = ...
-
- local i = 1
- local j = {}
- local k = false
-
- local _, class = UnitClass'player'
- local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
-
- local menu = CreateFrame('Frame', 'modui_elementsmenu', menu)
- menu:SetFrameStrata('TOOLTIP')
- menu:SetMovable(true)
- menu:EnableMouse(true)
- menu:RegisterForDrag('LeftButton')
- menu:SetScript('OnDragStart', menu.StartMoving)
- menu:SetScript('OnDragStop', menu.StopMovingOrSizing)
- menu:SetSize(500, 460)
- menu:SetBackdrop(
- {
- bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
- edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]],
- insets = {left = 11, right = 12, top = 12, bottom = 11}
- }
- )
- menu:SetBackdropColor(0, 0, 0, 1)
- menu:SetPoint('CENTER', UIParent, 0, 50)
- menu:Hide()
- tinsert(ns.skinb, menu)
-
- menu.elementcontainer = CreateFrame('Frame', 'modui_elementscontainer', menu)
- menu.elementcontainer:SetSize(380, 330)
- menu.elementcontainer:SetPoint('TOP', menu, 0, -70)
- ns.BD(menu.elementcontainer)
-
- menu.elementscrollframe = CreateFrame('ScrollFrame', 'modui_elementscrollframe', menu.elementcontainer, 'UIPanelScrollFrameTemplate')
- menu.elementscrollframe:SetFrameLevel(3)
- menu.elementscrollframe:SetPoint('TOPLEFT', menu.elementcontainer, 7, -7)
- menu.elementscrollframe:SetPoint('BOTTOMRIGHT', -35, 7)
- menu.elementscrollframe:Raise()
- menu.elementscrollframe:SetToplevel()
-
- menu.inner = CreateFrame('Frame', nil, menu.elementscrollframe)
- menu.inner:SetSize(335, 560)
- menu.inner:EnableMouse(true)
- menu.inner:EnableMouseWheel(true)
-
- menu.x = CreateFrame('Button', 'modui_elementsCloseButton', menu, 'UIPanelCloseButton')
- menu.x:SetPoint('TOPRIGHT', -6, -6)
- menu.x:SetScript('OnClick', function() menu:Hide() end)
-
- menu.reload = CreateFrame('Button', 'modui_optionsreload', menu, 'UIPanelButtonTemplate')
- menu.reload:SetSize(100, 20)
- menu.reload:SetText'Reload UI'
- menu.reload:SetPoint('BOTTOMRIGHT', menu, -20, 15)
- menu.reload:Hide()
- menu.reload:SetScript('OnClick', ReloadUI)
-
- menu.reload.description = menu.reload:CreateFontString(nil, 'OVERLAY', 'GameFontNormalSmall')
- menu.reload.description:SetPoint('RIGHT', menu.reload, 'LEFT', -10, -1)
- menu.reload.description:SetText'Your new settings require a UI reload to take effect.'
-
- menu.elementscrollframe.content = menu.inner
- menu.elementscrollframe:SetScrollChild(menu.inner)
-
- menu.header = menu:CreateTexture(nil, 'ARTWORK')
- menu.header:SetSize(256, 64)
- menu.header:SetPoint('TOP', menu, 0, 12)
- menu.header:SetTexture[[Interface\DialogFrame\UI-DialogBox-Header]]
- tinsert(ns.skin, menu.header)
-
- menu.header.t = menu:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
- menu.header.t:SetPoint('TOP', menu.header, 0, -14)
- menu.header.t:SetText'modui Elements'
-
- menu.header.f = CreateFrame('Button', 'modui_optionsheader', menu)
- menu.header.f:SetAllPoints(menu.header.t)
- menu.header.f:SetFrameLevel(menu:GetFrameLevel() + 1)
-
- local ShowReload = function()
- menu.reload:Show()
- end
-
- local UpdateAllCheckButtons = function(checked)
- for _, v in pairs(j) do
- if checked then
- v:SetChecked(true)
- else
- v:SetChecked(false)
- end
- end
- end
-
- local AllOnClick = function(self)
- if self:GetChecked() then
- MODUI_VAR['elements'].all = true
- MODUI_VAR['elements']['mainbar'].enable = true
- MODUI_VAR['elements']['mainbar'].keypress = true
- MODUI_VAR['elements']['aura'].enable = true
- MODUI_VAR['elements']['aura'].statusbars = true
- MODUI_VAR['elements']['aura'].values = true
- MODUI_VAR['elements']['mainbar'].xp = true
- MODUI_VAR['elements']['unit'].castbar = true
- MODUI_VAR['elements']['chat'].enable = true
- MODUI_VAR['elements']['chat'].events = true
- MODUI_VAR['elements']['chat'].style = true
- MODUI_VAR['elements']['chat'].url = true
- MODUI_VAR['elements']['chat'].colornames = true
- MODUI_VAR['elements']['onebag'].enable = true
- MODUI_VAR['elements']['onebag'].greys = true
- MODUI_VAR['elements']['ecastbar'].enable = true
- MODUI_VAR['elements']['nameplate'].enable = true
- MODUI_VAR['elements']['nameplate'].aura = true
- MODUI_VAR['elements']['nameplate'].combo = true
- MODUI_VAR['elements']['nameplate'].friendlyclass = true
- MODUI_VAR['elements']['nameplate'].totem = true
- MODUI_VAR['elements']['tracker'].enable = true
- MODUI_VAR['elements']['tooltip'].enable = true
- MODUI_VAR['elements']['tooltip'].smartanchor = true
- MODUI_VAR['elements']['tooltip'].mouseanchor = true
- MODUI_VAR['elements']['tooltip'].disablefade = true
- MODUI_VAR['elements']['unit'].enable = true
- MODUI_VAR['elements']['unit'].player = true
- MODUI_VAR['elements']['unit'].target = true
- MODUI_VAR['elements']['unit'].party = true
- MODUI_VAR['elements']['unit'].tot = true
- MODUI_VAR['elements']['unit'].pet = true
- MODUI_VAR['elements']['unit'].auras = true
- MODUI_VAR['elements']['unit'].vcolour = true
- MODUI_VAR['elements']['unit'].rcolour = true
- MODUI_VAR['elements']['talentbuilds'].enable = true
- UpdateAllCheckButtons(true)
- else
- MODUI_VAR['elements'].all = false
- MODUI_VAR['elements']['mainbar'].enable = false
- MODUI_VAR['elements']['mainbar'].keypress = false
- MODUI_VAR['elements']['aura'].enable = false
- MODUI_VAR['elements']['aura'].statusbars = false
- MODUI_VAR['elements']['aura'].values = false
- MODUI_VAR['elements']['mainbar'].xp = false
- MODUI_VAR['elements']['unit'].castbar = false
- MODUI_VAR['elements']['chat'].enable = false
- MODUI_VAR['elements']['chat'].events = false
- MODUI_VAR['elements']['chat'].style = false
- MODUI_VAR['elements']['chat'].url = false
- MODUI_VAR['elements']['chat'].colornames = false
- MODUI_VAR['elements']['onebag'].enable = false
- MODUI_VAR['elements']['onebag'].greys = false
- MODUI_VAR['elements']['ecastbar'].enable = false
- MODUI_VAR['elements']['nameplate'].enable = false
- MODUI_VAR['elements']['nameplate'].aura = false
- MODUI_VAR['elements']['nameplate'].combo = false
- MODUI_VAR['elements']['nameplate'].friendlyclass = false
- MODUI_VAR['elements']['nameplate'].totem = false
- MODUI_VAR['elements']['tracker'].enable = false
- MODUI_VAR['elements']['tooltip'].enable = false
- MODUI_VAR['elements']['tooltip'].smartanchor = false
- MODUI_VAR['elements']['tooltip'].mouseanchor = false
- MODUI_VAR['elements']['tooltip'].disablefade = false
- MODUI_VAR['elements']['unit'].enable = false
- MODUI_VAR['elements']['unit'].player = false
- MODUI_VAR['elements']['unit'].target = false
- MODUI_VAR['elements']['unit'].party = false
- MODUI_VAR['elements']['unit'].tot = false
- MODUI_VAR['elements']['unit'].pet = false
- MODUI_VAR['elements']['unit'].auras = false
- MODUI_VAR['elements']['unit'].vcolour = false
- MODUI_VAR['elements']['unit'].rcolour = false
- MODUI_VAR['elements']['talentbuilds'].enable = false
- UpdateAllCheckButtons(false)
- end
- ShowReload()
- end
-
- menu.masterswitch = CreateFrame('CheckButton', 'modui_checkbuttonMasterSwitch', menu, 'UICheckButtonTemplate')
- menu.masterswitch:SetSize(19, 19)
- menu.masterswitch:SetPoint('BOTTOMLEFT', menu.elementcontainer, 'TOPLEFT', 33, 10)
- menu.masterswitch:SetChecked(MODUI_VAR['elements']['all'] and true or false)
- menu.masterswitch:SetScript('OnClick', AllOnClick)
-
- menu.masterswitch.t = _G[menu.masterswitch:GetName()..'Text']
- menu.masterswitch.t:SetJustifyH'LEFT'
- menu.masterswitch.t:SetWidth(330)
- menu.masterswitch.t:SetPoint('LEFT', menu.masterswitch, 'RIGHT', 4, 0)
- menu.masterswitch.t:SetText('Toggle All |c'..colour.colorStr..'modui|r Elements. |cffff0000Note: Overrides Selections.|r')
-
- local ToggleChildButton = function(self, table)
- if self:GetChecked() then
- for _, v in pairs(table) do
- v:Enable()
- end
- else
- for _, v in pairs(table) do
- v:Disable()
- end
- end
- end
-
- local add = function(name, func, checked, r, g, b, inset, enable)
- local bu = CreateFrame('CheckButton', 'modui_checkbutton'..i, menu.inner, 'UICheckButtonTemplate')
- bu:SetSize(19, 19)
- bu:SetPoint('TOPLEFT',
- i == 1 and menu.inner or _G['modui_checkbutton'..(i - 1)],
- i == 1 and 'TOPLEFT' or 'BOTTOMLEFT',
- i == 1 and 5 or ((k and inset) and 0 or k and -20 or inset and 20 or 0),
- i == 1 and -5 or ((k and inset) and 0 or (k or inset) and -5 or 0)
- )
- bu:SetChecked(checked)
- bu:SetScript('OnClick', func)
-
- _G[bu:GetName()..'Text']:SetJustifyH'LEFT'
- _G[bu:GetName()..'Text']:SetWidth(270)
- _G[bu:GetName()..'Text']:SetPoint('LEFT', bu, 'RIGHT', 4, 0)
- _G[bu:GetName()..'Text']:SetText(name)
- _G[bu:GetName()..'Text']:SetTextColor(r, g, b)
-
- if enable then
- bu:Enable()
- else
- bu:Disable()
- end
-
- i = i + 1
- tinsert(j, bu)
- k = inset and true or false
- --print(name, inset, k)
- end
-
- local AddMenu = function()
- add(
- 'Actionbar',
- function(self)
- MODUI_VAR['elements']['mainbar'].enable = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['mainbar'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Exp & Reputation Bar',
- function(self)
- MODUI_VAR['elements']['mainbar'].xp = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['mainbar'].xp and true or false,
- 1, 1, 1,
- true,
- true
- )
- add(
- 'Horizontal Third Row (Classic Layout only)',
- function(self)
- MODUI_VAR['elements']['mainbar'].horiz = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['mainbar'].horiz and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['mainbar'].enable and false or true
- )
- add(
- 'Cast Spells on Button Down',
- function(self)
- MODUI_VAR['elements']['mainbar'].keypress = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['mainbar'].keypress and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Aura',
- function(self)
- MODUI_VAR['elements']['aura'].enable = self:GetChecked() and true or false
- ShowReload()
- ToggleChildButton(
- self,
- {
- _G['modui_checkbutton6'],
- _G['modui_checkbutton7']
- }
- )
- end,
- MODUI_VAR['elements']['aura'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Statusbars on Auras',
- function(self)
- MODUI_VAR['elements']['aura'].statusbars = self:GetChecked() and true or false
- end,
- MODUI_VAR['elements']['aura'].statusbars and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['aura'].enable and true or false
- )
- add(
- 'Custom Value Formatting on Auras',
- function(self)
- MODUI_VAR['elements']['aura'].values = self:GetChecked() and true or false
- end,
- MODUI_VAR['elements']['aura'].values and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['aura'].enable and true or false
- )
- add(
- 'Castbar',
- function(self)
- MODUI_VAR['elements']['unit'].castbar = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].castbar and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Chat',
- function(self)
- MODUI_VAR['elements']['chat'].enable = self:GetChecked() and true or false
- ShowReload()
- ToggleChildButton(
- self,
- {
- _G['modui_checkbutton10'],
- _G['modui_checkbutton11'],
- _G['modui_checkbutton12'],
- _G['modui_checkbutton13'],
- }
- )
- end,
- MODUI_VAR['elements']['chat'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Events & Custom Chat Text',
- function(self)
- MODUI_VAR['elements']['chat'].events = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['chat'].events and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['chat'].enable and true or false
- )
- add(
- 'Chat Style',
- function(self)
- MODUI_VAR['elements']['chat'].style = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['chat'].style and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['chat'].enable and true or false
- )
- add(
- 'Chat Color Names by Class',
- function(self)
- MODUI_VAR['elements']['chat'].colornames = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['chat'].colornames and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['chat'].enable and true or false
- )
- add(
- 'URLs',
- function(self)
- MODUI_VAR['elements']['chat'].url = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['chat'].url and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['chat'].enable and true or false
- )
- add(
- 'Inventory',
- function(self)
- MODUI_VAR['elements']['onebag'].enable = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['onebag'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Button For Selling Grey Items at Vendor',
- function(self)
- MODUI_VAR['elements']['onebag'].greys = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['onebag'].greys and true or false,
- 1, 1, 1,
- true,
- true
- )
- add(
- 'Enemy Castbars',
- function(self)
- MODUI_VAR['elements']['ecastbar'].enable = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['ecastbar'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Nameplates',
- function(self)
- MODUI_VAR['elements']['nameplate'].enable = self:GetChecked() and true or false
- ShowReload()
- ToggleChildButton(
- self,
- {
- _G['modui_checkbutton18'],
- _G['modui_checkbutton19'],
- _G['modui_checkbutton20'],
- _G['modui_checkbutton21'],
- }
- )
- end,
- MODUI_VAR['elements']['nameplate'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Show Auras on Nameplates',
- function(self)
- MODUI_VAR['elements']['nameplate'].aura = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['nameplate'].aura and true or false,
- 1, 1, 1,
- true,
- true
- )
- add(
- 'Show Combo Points on Nameplate',
- function(self)
- MODUI_VAR['elements']['nameplate'].combo = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['nameplate'].combo and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['nameplate'].enable and true or false
- )
- add(
- 'Class Colours on Friendly Nameplates',
- function(self)
- MODUI_VAR['elements']['nameplate'].friendlyclass = self:GetChecked() and true or false
- end,
- MODUI_VAR['elements']['nameplate'].friendlyclass and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['nameplate'].enable and true or false
- )
- add(
- 'Icon-based Nameplates for Totems',
- function(self)
- MODUI_VAR['elements']['nameplate'].totem = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['nameplate'].totem and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['nameplate'].enable and true or false
- )
- add(
- 'Quest Tracker (Click-through to Quest Log)',
- function(self)
- MODUI_VAR['elements']['tracker'].enable = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['tracker'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Tooltip',
- function(self)
- MODUI_VAR['elements']['tooltip'].enable = self:GetChecked() and true or false
- ShowReload()
- ToggleChildButton(
- self,
- {
- _G['modui_checkbutton24'],
- _G['modui_checkbutton25'],
- }
- )
- end,
- MODUI_VAR['elements']['tooltip'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Mouse Anchor',
- function(self)
- MODUI_VAR['elements']['tooltip'].mouseanchor = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['tooltip'].mouseanchor and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['tooltip'].enable and true or false
- )
- add(
- 'Disable fade out',
- function(self)
- MODUI_VAR['elements']['tooltip'].disablefade = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['tooltip'].disablefade and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['tooltip'].enable and true or false
- )
- add(
- 'Unitframes',
- function(self)
- MODUI_VAR['elements']['unit'].enable = self:GetChecked() and true or false
- ShowReload()
- ToggleChildButton(
- self,
- {
- _G['modui_checkbutton27'],
- _G['modui_checkbutton28'],
- _G['modui_checkbutton29'],
- _G['modui_checkbutton30'],
- _G['modui_checkbutton31'],
- _G['modui_checkbutton32'],
- _G['modui_checkbutton33'],
- _G['modui_checkbutton34'],
- }
- )
- end,
- MODUI_VAR['elements']['unit'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- add(
- 'Player',
- function(self)
- MODUI_VAR['elements']['unit'].player = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].player and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Target',
- function(self)
- MODUI_VAR['elements']['unit'].target = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].target and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Party',
- function(self)
- MODUI_VAR['elements']['unit'].party = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].party and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Target of Target',
- function(self)
- MODUI_VAR['elements']['unit'].tot = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].tot and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Pet',
- function(self)
- MODUI_VAR['elements']['unit'].pet = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].pet and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Cooldowns on Auras',
- function(self)
- MODUI_VAR['elements']['unit'].auras = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].auras and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Value Colours on Text',
- function(self)
- MODUI_VAR['elements']['unit'].vcolour = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].vcolour and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Elite/Rare Dragons in Colour (for dark theme UIs)',
- function(self)
- MODUI_VAR['elements']['unit'].rcolour = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['unit'].rcolour and true or false,
- 1, 1, 1,
- true,
- MODUI_VAR['elements']['unit'].enable and true or false
- )
- add(
- 'Show Talent Builds',
- function(self)
- MODUI_VAR['elements']['talentbuilds'].enable = self:GetChecked() and true or false
- ShowReload()
- end,
- MODUI_VAR['elements']['talentbuilds'].enable and true or false,
- 1, .8, 0,
- nil,
- true
- )
- end
-
- local OnEvent = function(self, event, addon)
- -- Copies default values to the saved variables
- -- This makes sure existing saved variables get newly added options
- local function MergeTable(source, destination)
- if destination == nil then
- destination = {}
- end
-
- for key, value in pairs(source) do
- if type(value) == 'table' then
- destination[key] = MergeTable(value, destination[key])
- elseif destination[key] == nil then
- destination[key] = value
- end
- end
-
- return destination
- end
-
- MODUI_VAR = MergeTable(MODUI_VAR_DEFAULTS, MODUI_VAR)
- AddMenu()
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'VARIABLES_LOADED'
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/quest/quest.lua b/quest/quest.lua
deleted file mode 100755
index 00ccd7b..0000000
--- a/quest/quest.lua
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
- local _, ns = ...
-
- local f = {}
-
- local OnMouseUp = function(self)
- if IsShiftKeyDown() then
- local qID = GetQuestIDFromLogIndex(self.qID)
- for i, v in ipairs(QUEST_WATCH_LIST) do
- if v.id == qID then
- tremove(QUEST_WATCH_LIST, i)
- end
- end
- RemoveQuestWatch(self.qID)
- QuestWatch_Update()
- else
- ShowUIPanel(QuestLogFrame)
- QuestLog_SetSelection(self.qID)
- end
- QuestLog_Update()
- end
-
- local SetHighlightColor = function(self)
- self.header:SetTextColor(1, .8, 0)
- for _, t in ipairs(self.objective) do
- t:SetTextColor(1, 1, 1)
- end
- end
-
- local SetNormalColor = function(self)
- self.header:SetTextColor(.75, .61, 0)
- for _, t in ipairs(self.objective) do
- t:SetTextColor(.8, .8, .8)
- end
- end
-
- local OnEnter = function(self)
- if not self.completed then
- SetHighlightColor(self)
- end
- end
-
- local OnLeave = function(self)
- SetNormalColor(self)
- end
-
- local CreateClickFrame = function(watchID, qID, header, objective, completed)
- if not f[watchID] then
- f[watchID] = CreateFrame'Frame'
- f[watchID]:SetScript('OnMouseUp', OnMouseUp)
- f[watchID]:SetScript('OnEnter', OnEnter)
- f[watchID]:SetScript('OnLeave', OnLeave)
- end
- local frame = f[watchID]
- frame:SetAllPoints(header)
- frame.watchID = watchID
- frame.qID = qID
- frame.header = header
- frame.objective = objective
- frame.completed = completed
- end
-
- local Update = function()
- local watchID = 1
- for i = 1, GetNumQuestWatches() do
- local qID = GetQuestIndexForWatch(i)
- if qID then
- local n = GetNumQuestLeaderBoards(qID)
- if n > 0 then
- local header = _G['QuestWatchLine'..watchID]
- local group = {}
- local completed = 0
-
- watchID = watchID + 1
-
- for j = 1, n do
- local _, _, finished = GetQuestLogLeaderBoard(j, qID)
- if finished then
- completed = completed + 1
- end
- tinsert(group, _G['QuestWatchLine'..watchID])
- watchID = watchID + 1
- end
- CreateClickFrame(i, qID, header, group, completed == n)
- end
- end
- end
- for _, v in pairs(f) do
- v[GetQuestIndexForWatch(v.watchID) and 'Show' or 'Hide'](v)
- end
- end
-
- local OnEvent = function()
- if MODUI_VAR['elements']['tracker'].enable then
- hooksecurefunc('QuestWatch_Update', Update)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
-
- --
-
-
- --
diff --git a/talents/talents.lua b/talents/talents.lua
deleted file mode 100755
index c548d02..0000000
--- a/talents/talents.lua
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
- local _, ns = ...
-
- local _, class = UnitClass'player'
- local active
-
- local buttons = {
- ['DRUID'] = {},
- ['HUNTER'] = {},
- ['MAGE'] = {
- ['Winters Chill'] = {
- ['Tab1'] = { -- arcane
- 1, 2, 5, 6, 7, 12
- },
- ['Tab2'] = {}, -- fire
- ['Tab3'] = { -- frost
- 2, 3, 4, 7, 8, 10, 11, 12, 14, 16, 17
- },
- },
- ['Arcane Frost'] = {
- ['Tab1'] = { -- arcane
- 1, 2, 4, 5, 6, 9, 11, 12, 13, 14, 15, 16
- },
- ['Tab2'] = {}, -- fire
- ['Tab3'] = { -- frost
- 2, 3, 4, 8, 11, 12
- },
- },
- ['PvP Frost'] = { -- http://db.vanillagaming.org/?talent#obhVrobZZVVGuRbtho
- ['Tab1'] = { -- frost
- 1, 3, 6, 7, 8, 9, 11
- },
- ['Tab2'] = {}, -- fire
- ['Tab3'] = { -- frost
- 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17
- },
- },
- },
- ['PALADIN'] = {},
- ['PRIEST'] = {},
- ['ROGUE'] = {},
- ['SHAMAN'] = {},
- ['WARLOCK'] = {},
- ['WARRIOR'] = {},
- }
-
- local OnClick = function(self, bu, t)
- local n = self:GetText()
- local i = PanelTemplates_GetSelectedTab(TalentFrame)
- local j = buttons[class][n]['Tab'..i]
-
- -- show relative talent frames
- for k, v in pairs(j) do
- if bu[v]:IsShown() then
- bu[v]:Hide()
- AutoCastShine_AutoCastStop(bu[v])
- active = nil
- else
- bu[v]:Show()
- AutoCastShine_AutoCastStart(bu[v], 1, 1, 0)
- active = n
- end
- end
- end
-
- local TabOnClick = function(self)
- if not active then return end
- local j = buttons[class][active]['Tab'..gsub(self:GetName(), 'TalentFrameTab', '')]
-
- for i = 1, 20 do
- local bu = _G['TalentFrameTalent'..i..'sparkle']
- bu:Hide()
- end
-
- for k, v in pairs(j) do
- local bu = _G['TalentFrameTalent'..v..'sparkle']
- bu:Show()
- end
- end
-
- local AddCookieCutters = function()
- local bu = {}
- local j = buttons[class]
- local x = 1
-
- for i = 1, 20 do
- local talent = _G['TalentFrameTalent'..i]
-
- bu[i] = CreateFrame('Button', 'TalentFrameTalent'..i..'sparkle', talent, 'AutoCastShineTemplate')
- bu[i]:RegisterForClicks'NONE'
- bu[i]:EnableMouse(false)
- bu[i]:SetAllPoints()
- bu[i]:Hide()
- end
-
- for t, v in pairs(j) do
- local f = CreateFrame('Button', 'modui_sparkletogglebutton_'..t, TalentFrame, 'UIPanelButtonTemplate')
- f:SetSize(80, 20)
- f.Text:SetText(t)
- f.Text:SetFont(STANDARD_TEXT_FONT, 10)
- f:SetPoint('BOTTOMLEFT', TalentFrame, x == 1 and 30 or x == 2 and 127 or 230, 106)
- f:SetScript('OnClick', function(self)
- OnClick(self, bu, t)
- end)
- x = x + 1
- end
- end
-
- local OnEvent = function(self, event, addon)
- if addon == 'Blizzard_TalentUI' then
- if not MODUI_VAR['elements']['talentbuilds'].enable then
- return
- end
- AddCookieCutters()
- hooksecurefunc('TalentFrameTab_OnClick', TabOnClick)
- end
- end
-
- local e = CreateFrame'Frame'
- e:RegisterEvent'ADDON_LOADED'
- e:SetScript('OnEvent', OnEvent)
-
- --
diff --git a/theme/addons/LeatrixPlus.lua b/theme/addons/LeatrixPlus.lua
new file mode 100755
index 0000000..6ffcc93
--- /dev/null
+++ b/theme/addons/LeatrixPlus.lua
@@ -0,0 +1,10 @@
+local _, ns = ...
+local addons = ns.addon_skins
+
+local function load()
+ if LeaPlusDB['EnhanceQuestLog'] == 'On' then
+ QuestLogFrame.Material:SetSize(510, 512)
+ end
+end
+
+tinsert(addons, {name = 'Leatrix_Plus', load = load})
diff --git a/theme/theme.lua b/theme/theme.lua
index 6635bb8..ef149ac 100755
--- a/theme/theme.lua
+++ b/theme/theme.lua
@@ -1,620 +1,637 @@
+local _, ns = ...
+
+local f = CreateFrame'Frame'
+local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
+local UpdateSkins = nil
+
+ns.colour = {MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b}
+ns.colour_bu = {MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b}
+
+ns.addon_skins = {}
+ns.skin = {
+ MinimapBorder,
+ MiniMapTrackingBorder,
+ MiniMapMailBorder,
+ MiniMapBattlefieldBorder,
+
+ PlayerFrameTexture,
+ TargetFrameTextureFrameTexture,
+ FocusFrameTextureFrameTexture,
+ PetFrameTexture,
+ PartyMemberFrame1Texture,
+ PartyMemberFrame2Texture,
+ PartyMemberFrame3Texture,
+ PartyMemberFrame4Texture,
+ PartyMemberFrame1PetFrameTexture,
+ PartyMemberFrame2PetFrameTexture,
+ PartyMemberFrame3PetFrameTexture,
+ PartyMemberFrame4PetFrameTexture,
+
+ StanceBarLeft,
+ StanceBarMiddle,
+ StanceBarRight,
+
+ SlidingActionBarTexture0,
+ SlidingActionBarTexture1,
+
+ CastingBarFrame.Border,
+
+ _G['TargetFrameToTTextureFrameTexture'],
+ _G['FocusFrameToTTextureFrameTexture'],
+}
+ns.skinbu = {}
+ns.skinb = {}
+ns.skinmenu = {}
+
+-- 8.0?
+if build > 1 then
+ for _, v in pairs(
+ {
+ -- MainMenuBarArtFrameBackground.BackgroundLarge,
+ -- MainMenuBarArtFrameBackground.BackgroundSmall,
+ -- MainMenuBarArtFrame.LeftEndCap,
+ -- MainMenuBarArtFrame.RightEndCap,
+ -- MicroButtonAndBagsBar.MicroBagBar,
+ }
+ ) do
+ tinsert(ns.skin, v)
+ end
+else
+ for _, v in pairs(
+ {
+ MainMenuBarTexture0,
+ MainMenuBarTexture1,
+ MainMenuBarTexture2,
+ MainMenuBarTexture3,
+ MainMenuMaxLevelBar0,
+ MainMenuMaxLevelBar1,
+ MainMenuMaxLevelBar2,
+ MainMenuMaxLevelBar3,
+ MainMenuXPBarTextureLeftCap,
+ MainMenuXPBarTextureRightCap,
+ MainMenuXPBarTextureMid,
+ BonusActionBarTexture0,
+ BonusActionBarTexture1,
+ MainMenuBarLeftEndCap,
+ MainMenuBarRightEndCap,
+ }
+ ) do
+ tinsert(ns.skin, v)
+ end
+end
+
+-- BAGS
+for i = 1, 12 do
+ local bagName = 'ContainerFrame'..i
+ local _, a, b, _, c, _, d = _G[bagName]:GetRegions()
+ for _, v in pairs({a, b, c, d}) do tinsert(ns.skin, v) end
+end
+
+-- BANK
+local _, a = BankFrame:GetRegions()
+tinsert(ns.skin, a)
+
+-- item text (books etc)
+local _, a, b, c, d = ItemTextFrame:GetRegions()
+for _, v in pairs({a, b, c, d}) do
+ tinsert(ns.skin, v)
+end
+
+ItemTextFrame.Material = ItemTextFrame:CreateTexture(nil, 'OVERLAY', nil, 7)
+ItemTextFrame.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
+ItemTextFrame.Material:SetSize(506, 506)
+ItemTextFrame.Material:SetPoint('TOPLEFT', ItemTextFrame, 24, -82)
+ItemTextFrame.Material:SetVertexColor(.9, .9, .9)
+
+local a, b, c, d, e, f, g = HelpFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e, f, g}) do
+ tinsert(ns.skin, v)
+end
+
+if HonorFrame then
+ local a, b, c, d = HonorFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
+ tinsert(ns.skin, v)
+ end
+end
+for _, v in pairs({LootFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v ~= LootFramePortraitOverlay then
+ tinsert(ns.skin, v)
+ end
+end
+for _, v in pairs({LootFrameInset:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' then
+ tinsert(ns.skin, v)
+ end
+end
- local _, ns = ...
-
- local f = CreateFrame'Frame'
- local build = tonumber(string.sub(GetBuildInfo() , 1, 2))
-
- ns.colour = {MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b}
- ns.colour_bu = {MODUI_VAR['theme_bu'].r, MODUI_VAR['theme_bu'].g, MODUI_VAR['theme_bu'].b}
-
- ns.skin = {
- MinimapBorder,
- MiniMapTrackingBorder,
- MiniMapMailBorder,
- MiniMapBattlefieldBorder,
-
- PlayerFrameTexture,
- TargetFrameTextureFrameTexture,
- PetFrameTexture,
- PartyMemberFrame1Texture,
- PartyMemberFrame2Texture,
- PartyMemberFrame3Texture,
- PartyMemberFrame4Texture,
- PartyMemberFrame1PetFrameTexture,
- PartyMemberFrame2PetFrameTexture,
- PartyMemberFrame3PetFrameTexture,
- PartyMemberFrame4PetFrameTexture,
+if LFGParentFrame then
+ local _, a = LFGParentFrame:GetRegions()
+ for _, v in pairs({a}) do tinsert(ns.skin, v) end
+end
- StanceBarLeft,
- StanceBarMiddle,
- StanceBarRight,
+for _, v in pairs({MerchantFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v ~= MerchantFramePortrait then
+ tinsert(ns.skin, v)
+ end
+end
+for _, v in pairs({MerchantFrameInset:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' then
+ tinsert(ns.skin, v)
+ end
+end
- SlidingActionBarTexture0,
- SlidingActionBarTexture1,
- CastingBarFrame.Border,
+tinsert(ns.skin, MerchantBuyBackItemNameFrame)
- _G['TargetFrameToTTextureFrameTexture'],
- }
- ns.skinbu = {}
- ns.skinb = {}
- ns.skinmenu = {}
-
- -- 8.0?
- if build > 1 then
- for _, v in pairs(
- {
- MainMenuBarArtFrameBackground.BackgroundLarge,
- MainMenuBarArtFrameBackground.BackgroundSmall,
- MainMenuBarArtFrame.LeftEndCap,
- MainMenuBarArtFrame.RightEndCap,
- MicroButtonAndBagsBar.MicroBagBar,
- }
- ) do
- tinsert(ns.skin, v)
- end
- else
- for _, v in pairs(
- {
- MainMenuBarTexture0,
- MainMenuBarTexture1,
- MainMenuBarTexture2,
- MainMenuBarTexture3,
- MainMenuMaxLevelBar0,
- MainMenuMaxLevelBar1,
- MainMenuMaxLevelBar2,
- MainMenuMaxLevelBar3,
- MainMenuXPBarTextureLeftCap,
- MainMenuXPBarTextureRightCap,
- MainMenuXPBarTextureMid,
- BonusActionBarTexture0,
- BonusActionBarTexture1,
- MainMenuBarLeftEndCap,
- MainMenuBarRightEndCap,
- }
- ) do
- tinsert(ns.skin, v)
- end
+-- pet stable
+for _, v in pairs({PetStableFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v ~= PetStableFramePortrait then
+ tinsert(ns.skin, v)
end
+end
- -- BAGS
- for i = 1, 12 do
- local bagName = 'ContainerFrame'..i
- local _, a, b, _, c, _, d = _G[bagName]:GetRegions()
- for _, v in pairs({a, b, c, d}) do tinsert(ns.skin, v) end
+-- mail
+for _, v in pairs({MailFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v:GetTexture() ~= [[Interface\MailFrame\Mail-Icon]] then
+ tinsert(ns.skin, v)
+ end
+end
+for _, v in pairs({MailFrameInset:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' then
+ tinsert(ns.skin, v)
end
+end
+for _, v in pairs({OpenMailFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v ~= OpenMailFrameIcon then
+ tinsert(ns.skin, v)
+ end
+end
+for _, v in pairs({OpenMailFrameInset:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' then
+ tinsert(ns.skin, v)
+ end
+end
- -- BANK
- local _, a = BankFrame:GetRegions()
+for i = 1, MIRRORTIMER_NUMTIMERS do
+ local m = _G['MirrorTimer'..i]
+ local _, _, a = m:GetRegions()
tinsert(ns.skin, a)
-
- -- item text (books etc)
- local _, a, b, c, d = ItemTextFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
+end
+
+
+-- PAPERDOLL
+local a, b, c, d, _, e = PaperDollFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e}) do
+ tinsert(ns.skin, v)
+end
+
+local a, b, c, d = ReputationFrame:GetRegions()
+for _, v in pairs({a, b, c, d}) do
+ tinsert(ns.skin, v)
+end
+
+local a, b, c, d = SkillFrame:GetRegions()
+for _, v in pairs({a, b, c ,d}) do
+ tinsert(ns.skin, v)
+end
+for _, v in pairs({ReputationDetailCorner, ReputationDetailDivider}) do
+ tinsert(ns.skin, v)
+end
+
+--local a, b, c, d = QuestLogFrame:GetRegions()
+--for _, v in pairs({a, b, c, d}) do
+-- tinsert(ns.skin, v)
+--end
+
+--QuestLogFrame.Material = QuestLogFrame:CreateTexture(nil, 'OVERLAY', nil, 7)
+--QuestLogFrame.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
+--QuestLogFrame.Material:SetSize(510, 398)
+--QuestLogFrame.Material:SetPoint('TOPLEFT', QuestLogDetailScrollFrame)
+--QuestLogFrame.Material:SetVertexColor(.9, .9, .9)
+
+for _, v in pairs({FriendsFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' and v ~= FriendsFrameIcon then
tinsert(ns.skin, v)
end
+end
+
+local _, a, b, c, d = SpellBookFrame:GetRegions()
+for _, v in pairs({a, b, c, d}) do
+ tinsert(ns.skin, v)
+end
+
+local _, a, b, c, d = TabardFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e}) do
+ tinsert(ns.skin, v)
+end
+
+-- TAXI
+local _, a, b, c, d = TaxiFrame:GetRegions()
+for _, v in pairs({a, b, c, d}) do
+ tinsert(ns.skin, v)
+end
+
+-- scoreboard
+local a, b, c, d, e, f, _, _, _, _, _, _, g = WorldStateScoreFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e, f, g}) do
+ tinsert(ns.skin, v)
+end
+
+-- worldmap
+for _, v in pairs({WorldMapFrame.BorderFrame:GetRegions()}) do
+ if v:GetObjectType() == 'Texture' then
+ tinsert(ns.skin, v)
+ end
+end
- ItemTextFrame.Material = ItemTextFrame:CreateTexture(nil, 'OVERLAY', nil, 7)
- ItemTextFrame.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
- ItemTextFrame.Material:SetSize(506, 506)
- ItemTextFrame.Material:SetPoint('TOPLEFT', ItemTextFrame, 24, -82)
- ItemTextFrame.Material:SetVertexColor(.9, .9, .9)
- local a, b, c, d, e, f, g = HelpFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e, f, g}) do
- tinsert(ns.skin, v)
+
+-- TRADE
+local _, _, a, b, c, d = TradeFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e}) do
+ tinsert(ns.skin, v)
+end
+
+
+-- WARDROBE
+local _, a, b, c, d = DressUpFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e}) do
+ tinsert(ns.skin, v)
+end
+
+-- WORLDMAP
+local _, a, b, c, d, e, _, _, f, g, h, j, k = WorldMapFrame:GetRegions()
+for _, v in pairs({a, b, c, d, e, f, g, h, j, k}) do
+ tinsert(ns.skin, v)
+end
+
+local ADDON_LOADED = function(self, event, addon)
+ local function CheckForAddOn(name)
+ if addon == name then
+ return true
+ elseif addon == 'modui_classic' then
+ return IsAddOnLoaded(name)
+ end
end
- if HonorFrame then
- local a, b, c, d = HonorFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
+ for _, v in pairs(ns.addon_skins) do
+ if CheckForAddOn(v.name) then
+ v.load()
end
end
- for _, v in pairs({LootFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v ~= LootFramePortraitOverlay then
+ if addon == 'Blizzard_TimeManager' then
+ local a = TimeManagerClockButton:GetRegions()
+ tinsert(ns.skin, a)
+ elseif addon == 'Blizzard_AuctionUI' then
+ local _, a, b, c, d, e, f = AuctionFrame:GetRegions()
+ for _, v in pairs({a, b, c, d, e, f}) do
tinsert(ns.skin, v)
end
- end
- for _, v in pairs({LootFrameInset:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
+ local a, b = SideDressUpFrame:GetRegions()
+ for _, v in pairs({a, b}) do
tinsert(ns.skin, v)
end
- end
-
- if LFGParentFrame then
- local _, a = LFGParentFrame:GetRegions()
- for _, v in pairs({a}) do tinsert(ns.skin, v) end
- end
-
- for _, v in pairs({MerchantFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v ~= MerchantFramePortrait then
+ local _, _, _, _, a = SideDressUpModelCloseButton:GetRegions()
+ tinsert(ns.skin, a)
+ for i = 1, 15 do
+ local a = _G['AuctionFilterButton'..i]:GetNormalTexture()
+ tinsert(ns.skin, a)
+ end
+ for _, v in pairs({BidCloseButton, BidBidButton, BidBuyoutButton}) do
+ local a = v:GetRegions()
+ tinsert(ns.skin, a)
+ end
+ elseif addon == 'Blizzard_CraftUI' then
+ local _, a, b, c, d = CraftFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
- for _, v in pairs({MerchantFrameInset:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
+ elseif addon == 'Blizzard_InspectUI' then
+ local a, b, c, d = InspectPaperDollFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
-
-
- tinsert(ns.skin, MerchantBuyBackItemNameFrame)
-
- -- pet stable
- for _, v in pairs({PetStableFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v ~= PetStableFramePortrait then
+ --local a, b, c, d = InspectHonorFrame:GetRegions()
+ --for _, v in pairs({a, b, c, d}) do
+ -- tinsert(ns.skin, v)
+ --end
+ elseif addon == 'Blizzard_MacroUI' then
+ local _, a, b, c, d = MacroFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
-
- -- mail
- for _, v in pairs({MailFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v:GetTexture() ~= [[Interface\MailFrame\Mail-Icon]] then
+ local a, b, c, d = MacroPopupFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
- for _, v in pairs({MailFrameInset:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
+ elseif addon == 'Blizzard_RaidUI' then
+ local _, a = ReadyCheckFrame:GetRegions()
+ tinsert(ns.skin, a)
+ elseif addon == 'Blizzard_TalentUI' then
+ local _, a, b, c, d = PlayerTalentFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
- for _, v in pairs({OpenMailFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v ~= OpenMailFrameIcon then
+ elseif addon == 'Blizzard_TradeSkillUI' then
+ local _, a, b, c, d = TradeSkillFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
- end
- for _, v in pairs({OpenMailFrameInset:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
+ elseif addon == 'Blizzard_TrainerUI' then
+ local _, a, b, c, d = ClassTrainerFrame:GetRegions()
+ for _, v in pairs({a, b, c, d}) do
tinsert(ns.skin, v)
end
end
+end
- for i = 1, MIRRORTIMER_NUMTIMERS do
- local m = _G['MirrorTimer'..i]
- local _, _, a = m:GetRegions()
- tinsert(ns.skin, a)
+-- QUESTS
+for _, v in pairs(
+ {
+ QuestFrameGreetingPanel,
+ QuestFrameDetailPanel,
+ QuestFrameProgressPanel,
+ QuestFrameRewardPanel,
+ GossipFrameGreetingPanel
+ }
+ ) do
+ for _, j in pairs({v:GetRegions()}) do
+ tinsert(ns.skin, j)
end
+ v.Material = v:CreateTexture(nil, 'OVERLAY', nil, 7)
+ v.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
+ v.Material:SetSize(506, 506)
+ v.Material:SetPoint('TOPLEFT', v, 24, -82)
+ v.Material:SetVertexColor(.9, .9, .9)
- -- PAPERDOLL
- local a, b, c, d, _, e = PaperDollFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e}) do
- tinsert(ns.skin, v)
+ if v == GossipFrameGreetingPanel or v == QuestFrameGreetingPanel then
+ v.Corner = v:CreateTexture(nil, 'OVERLAY', nil, 7)
+ v.Corner:SetTexture[[Interface\QuestFrame\UI-Quest-BotLeftPatch]]
+ v.Corner:SetSize(132, 64)
+ v.Corner:SetPoint('BOTTOMLEFT', v, 21, 68)
+ tinsert(ns.skin, v.Corner)
end
+end
- local a, b, c, d = ReputationFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
+-- POP-UP (border)
+for i = 1, 4 do
+ local v = _G['StaticPopup'..i]
+ tinsert(ns.skinb, v)
+end
- local a, b, c, d = SkillFrame:GetRegions()
- for _, v in pairs({a, b, c ,d}) do
- tinsert(ns.skin, v)
- end
- for _, v in pairs({ReputationDetailCorner, ReputationDetailDivider}) do
- tinsert(ns.skin, v)
- end
+-- COLOUR PICKER
+tinsert(ns.skinb, ColorPickerFrame)
+tinsert(ns.skin, ColorPickerFrameHeader)
- local _, _, a, b, c, d = QuestLogFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- QuestLogFrame.Material = QuestLogFrame:CreateTexture(nil, 'OVERLAY', nil, 7)
- QuestLogFrame.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
- QuestLogFrame.Material:SetSize(510, 398)
- QuestLogFrame.Material:SetPoint('TOPLEFT', QuestLogDetailScrollFrame)
- QuestLogFrame.Material:SetVertexColor(.9, .9, .9)
+-- MENU
+tinsert(ns.skinb, GameMenuFrame)
+tinsert(ns.skin, GameMenuFrameHeader)
- for _, v in pairs({FriendsFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' and v ~= FriendsFrameIcon then
- tinsert(ns.skin, v)
- end
- end
- local _, a, b, c, d = SpellBookFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
+-- GRAPHICS MENU
+tinsert(ns.skinb, OptionsFrame)
+tinsert(ns.skin, OptionsFrameHeader)
- local _, a, b, c, d = TabardFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e}) do
- tinsert(ns.skin, v)
- end
- -- TAXI
- local _, a, b, c, d = TaxiFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
+-- SOUND MENU
+tinsert(ns.skinb, SoundOptionsFrame)
+tinsert(ns.skin, SoundOptionsFrameHeader)
- -- scoreboard
- local a, b, c, d, e, f, _, _, _, _, _, _, g = WorldStateScoreFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e, f, g}) do
- tinsert(ns.skin, v)
- end
+-- QUEST TIMER
+tinsert(ns.skinb, QuestTimerFrame)
+tinsert(ns.skin, QuestTimerHeader)
- -- worldmap
- for _, v in pairs({WorldMapFrame.BorderFrame:GetRegions()}) do
- if v:GetObjectType() == 'Texture' then
- tinsert(ns.skin, v)
+UpdateSkins = function()
+ for _, v in pairs(ns.skin) do
+ if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
+ v:SetVertexColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
end
end
-
-
-
- -- TRADE
- local _, _, a, b, c, d = TradeFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e}) do
- tinsert(ns.skin, v)
- end
-
-
- -- WARDROBE
- local _, a, b, c, d = DressUpFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e}) do
- tinsert(ns.skin, v)
+ for _, v in pairs(ns.skinb) do
+ if v and v:GetBackdropBorderColor() then
+ v:SetBackdropBorderColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
+ end
end
-
- -- WORLDMAP
- local _, a, b, c, d, e, _, _, f, g, h, j, k = WorldMapFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e, f, g, h, j, k}) do
- tinsert(ns.skin, v)
+ for _, v in pairs(ns.skinbu) do
+ if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
+ v:SetVertexColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
+ end
end
-
- local ADDON_LOADED = function(self, event, addon)
- if addon == 'Blizzard_TimeManager' then
- local a = TimeManagerClockButton:GetRegions()
- tinsert(ns.skin, a)
- elseif addon == 'Blizzard_AuctionUI' then
- local _, a, b, c, d, e, f = AuctionFrame:GetRegions()
- for _, v in pairs({a, b, c, d, e, f}) do
- tinsert(ns.skin, v)
- end
- local a, b = SideDressUpFrame:GetRegions()
- for _, v in pairs({a, b}) do
- tinsert(ns.skin, v)
- end
- local _, _, _, _, a = SideDressUpModelCloseButton:GetRegions()
- tinsert(ns.skin, a)
- for i = 1, 15 do
- local a = _G['AuctionFilterButton'..i]:GetNormalTexture()
- tinsert(ns.skin, a)
- end
- for _, v in pairs({BidCloseButton, BidBidButton, BidBuyoutButton}) do
- local a = v:GetRegions()
- tinsert(ns.skin, a)
- end
- elseif addon == 'Blizzard_CraftUI' then
- local _, a, b, c, d = CraftFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- elseif addon == 'Blizzard_InspectUI' then
- local a, b, c, d = InspectPaperDollFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- local a, b, c, d = InspectHonorFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- elseif addon == 'Blizzard_MacroUI' then
- local _, a, b, c, d = MacroFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- local a, b, c, d = MacroPopupFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- elseif addon == 'Blizzard_RaidUI' then
- local _, a = ReadyCheckFrame:GetRegions()
- tinsert(ns.skin, a)
- elseif addon == 'Blizzard_TalentUI' then
- local _, a, b, c, d = TalentFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- elseif addon == 'Blizzard_TradeSkillUI' then
- local _, a, b, c, d = TradeSkillFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
- end
- elseif addon == 'Blizzard_TrainerUI' then
- local _, a, b, c, d = ClassTrainerFrame:GetRegions()
- for _, v in pairs({a, b, c, d}) do
- tinsert(ns.skin, v)
+ -- offset menu buttons a lil bit
+ for _, v in pairs(ns.skinmenu) do
+ if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
+ if MODUI_VAR['theme'].r < .2 and MODUI_VAR['theme'].g < .2 and MODUI_VAR['theme'].b < .2 then
+ v:SetDesaturated(true)
+ v:SetVertexColor(.25, .25, .25)
+ else
+ v:SetDesaturated(false)
+ v:SetVertexColor(
+ MODUI_VAR['theme'].r < .7 and MODUI_VAR['theme'].r + .2 or .85,
+ MODUI_VAR['theme'].g < .7 and MODUI_VAR['theme'].g + .2 or .85,
+ MODUI_VAR['theme'].b < .7 and MODUI_VAR['theme'].b + .2 or .85
+ )
end
end
end
-
- -- QUESTS
- for _, v in pairs(
- {
- QuestFrameGreetingPanel,
- QuestFrameDetailPanel,
- QuestFrameProgressPanel,
- QuestFrameRewardPanel,
- GossipFrameGreetingPanel
- }
- ) do
- for _, j in pairs({v:GetRegions()}) do
- tinsert(ns.skin, j)
- end
-
- v.Material = v:CreateTexture(nil, 'OVERLAY', nil, 7)
- v.Material:SetTexture[[Interface\AddOns\modui_classic\art\quest\QuestBG.tga]]
- v.Material:SetSize(506, 506)
- v.Material:SetPoint('TOPLEFT', v, 24, -82)
- v.Material:SetVertexColor(.9, .9, .9)
-
- if v == GossipFrameGreetingPanel or v == QuestFrameGreetingPanel then
- v.Corner = v:CreateTexture(nil, 'OVERLAY', nil, 7)
- v.Corner:SetTexture[[Interface\QuestFrame\UI-Quest-BotLeftPatch]]
- v.Corner:SetSize(132, 64)
- v.Corner:SetPoint('BOTTOMLEFT', v, 21, 68)
- tinsert(ns.skin, v.Corner)
+end
+
+-- colour picker
+local ColourPicker = function(r, g, b, a, callback, theme)
+ ColorPickerFrame:SetColorRGB(
+ theme and MODUI_VAR['theme'].r or MODUI_VAR['theme_bu'].r,
+ theme and MODUI_VAR['theme'].g or MODUI_VAR['theme_bu'].g,
+ theme and MODUI_VAR['theme'].b or MODUI_VAR['theme_bu'].b
+ )
+ ColorPickerFrame.hasOpacity = false
+ ColorPickerFrame.func = callback
+ ColorPickerFrame:Hide()
+ ColorPickerFrame:Show()
+ ColorPickerFrame:SetPoint'CENTER'
+ if theme then
+ ColorPickerFrame.theme = true
+ end
+end
+
+ColorPickerFrame.reset = CreateFrame('Button', 'ColorPickerFrameReset', ColorPickerFrame, 'GameMenuButtonTemplate')
+ColorPickerFrame.reset:SetSize(144, 24)
+ColorPickerFrame.reset:SetText'Reset to Default'
+ColorPickerFrame.reset:SetPoint('BOTTOMLEFT', ColorPickerOkayButton, 0, 22)
+ColorPickerFrame.reset:Hide()
+
+ColorPickerFrame:HookScript('OnShow', function(self)
+ ns.colour[1] = MODUI_VAR['theme'].r
+ ns.colour[2] = MODUI_VAR['theme'].g
+ ns.colour[3] = MODUI_VAR['theme'].b
+ ns.colour_bu[1] = MODUI_VAR['theme_bu'].r
+ ns.colour_bu[2] = MODUI_VAR['theme_bu'].g
+ ns.colour_bu[3] = MODUI_VAR['theme_bu'].b
+ if ColorPickerFrame.theme then
+ self:SetHeight(220)
+ ColorPickerFrame.reset:Show()
+ end
+end)
+
+ColorPickerFrame:HookScript('OnHide', function()
+ ColorPickerFrame.reset:Hide()
+ ColorPickerFrame.theme = false
+ ColorPickerFrame.button = false
+end)
+
+ColorPickerFrame.reset:SetScript('OnClick', function()
+ MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b = 1, 1, 1
+ ColorPickerFrame:SetColorRGB(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
+ for _, v in pairs(ns.skin) do
+ if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
+ v:SetVertexColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
end
end
+end)
- -- POP-UP (border)
- for i = 1, 4 do
- local v = _G['StaticPopup'..i]
- tinsert(ns.skinb, v)
- end
+local icon = CreateFrame('Button', 'modcolourmenu', MainMenuBarBackpackButton)
+icon:SetSize(16, 16)
+icon:ClearAllPoints()
+icon:SetPoint('BOTTOM', MainMenuBarBackpackButton, 'TOP', .5, 1)
- -- COLOUR PICKER
- tinsert(ns.skinb, ColorPickerFrame)
- tinsert(ns.skin, ColorPickerFrameHeader)
-
-
- -- MENU
- tinsert(ns.skinb, GameMenuFrame)
- tinsert(ns.skin, GameMenuFrameHeader)
-
-
- -- GRAPHICS MENU
- tinsert(ns.skinb, OptionsFrame)
- tinsert(ns.skin, OptionsFrameHeader)
-
-
- -- SOUND MENU
- tinsert(ns.skinb, SoundOptionsFrame)
- tinsert(ns.skin, SoundOptionsFrameHeader)
-
- -- QUEST TIMER
- tinsert(ns.skinb, QuestTimerFrame)
- tinsert(ns.skin, QuestTimerHeader)
-
- local UpdateSkins = function()
- for _, v in pairs(ns.skin) do
- if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
- v:SetVertexColor(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- end
- end
- for _, v in pairs(ns.skinb) do
- if v and v:GetBackdropBorderColor() then
- v:SetBackdropBorderColor(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- end
- end
- for _, v in pairs(ns.skinbu) do
- if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
- v:SetVertexColor(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- end
- end
- -- offset menu buttons a lil bit
- for _, v in pairs(ns.skinmenu) do
- if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
- if MODUI_VAR['theme'].r < .2 and MODUI_VAR['theme'].g < .2 and MODUI_VAR['theme'].b < .2 then
- v:SetDesaturated(true)
- v:SetVertexColor(.25, .25, .25)
- else
- v:SetDesaturated(false)
- v:SetVertexColor(
- MODUI_VAR['theme'].r < .7 and MODUI_VAR['theme'].r + .2 or .85,
- MODUI_VAR['theme'].g < .7 and MODUI_VAR['theme'].g + .2 or .85,
- MODUI_VAR['theme'].b < .7 and MODUI_VAR['theme'].b + .2 or .85
- )
- end
- end
- end
- end
-
- -- colour picker
- local ColourPicker = function(r, g, b, a, callback, theme)
- ColorPickerFrame:SetColorRGB(
- theme and MODUI_VAR['theme'].r or MODUI_VAR['theme_bu'].r,
- theme and MODUI_VAR['theme'].g or MODUI_VAR['theme_bu'].g,
- theme and MODUI_VAR['theme'].b or MODUI_VAR['theme_bu'].b
- )
- ColorPickerFrame.hasOpacity = false
- ColorPickerFrame.func = callback
- ColorPickerFrame:Hide()
- ColorPickerFrame:Show()
- ColorPickerFrame:SetPoint'CENTER'
- if theme then
- ColorPickerFrame.theme = true
- end
- end
+local t = icon:CreateFontString(nil, 'ARTWORK')
+t:SetFont(STANDARD_TEXT_FONT, 8, 'OUTLINE')
+t:SetPoint('TOP', icon, -2, -4)
+t:SetJustifyH'CENTER'
+t:SetText'M'
+t:SetTextColor(1, 1, 1)
- ColorPickerFrame.reset = CreateFrame('Button', 'ColorPickerFrameReset', ColorPickerFrame, 'GameMenuButtonTemplate')
- ColorPickerFrame.reset:SetSize(144, 24)
- ColorPickerFrame.reset:SetText'Reset to Default'
- ColorPickerFrame.reset:SetPoint('BOTTOMLEFT', ColorPickerOkayButton, 0, 22)
- ColorPickerFrame.reset:Hide()
+local menu = CreateFrame('Frame', 'modoptions', UIParent, 'UIDropDownMenuTemplate')
- ColorPickerFrame:HookScript('OnShow', function(self)
- ns.colour[1] = MODUI_VAR['theme'].r
- ns.colour[2] = MODUI_VAR['theme'].g
- ns.colour[3] = MODUI_VAR['theme'].b
- ns.colour_bu[1] = MODUI_VAR['theme_bu'].r
- ns.colour_bu[2] = MODUI_VAR['theme_bu'].g
- ns.colour_bu[3] = MODUI_VAR['theme_bu'].b
- if ColorPickerFrame.theme then
- self:SetHeight(220)
- ColorPickerFrame.reset:Show()
+local ColourFrameFunc = function(colour, cancel)
+ if colour then
+ if cancel then
+ MODUI_VAR['theme'].r = ns.colour_bu[1]
+ MODUI_VAR['theme'].g = ns.colour_bu[2]
+ MODUI_VAR['theme'].b = ns.colour_bu[3]
+ else
+ MODUI_VAR['theme'].r = colour[1]
+ MODUI_VAR['theme'].g = colour[2]
+ MODUI_VAR['theme'].b = colour[3]
end
- end)
-
- ColorPickerFrame:HookScript('OnHide', function()
- ColorPickerFrame.reset:Hide()
- ColorPickerFrame.theme = false
- ColorPickerFrame.button = false
- end)
-
- ColorPickerFrame.reset:SetScript('OnClick', function()
- MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b = 1, 1, 1
- ColorPickerFrame:SetColorRGB(
+ else
+ MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b = ColorPickerFrame:GetColorRGB()
+ end
+ UpdateSkins()
+end
+
+local list = {
+ {
+ text = 'modui',
+ isTitle = true,
+ notCheckable = true,
+ fontObject = Game13Font,
+ },
+ {
+ text = 'UI Colour',
+ icon = 'Interface\\ICONS\\inv_misc_gem_variety_02',
+ func = function()
+ ColorPickerFrame:SetColorRGB(
MODUI_VAR['theme'].r,
MODUI_VAR['theme'].g,
MODUI_VAR['theme'].b
- )
- for _, v in pairs(ns.skin) do
- if v and v:GetObjectType() == 'Texture' and v:GetVertexColor() then
- v:SetVertexColor(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- end
- end
- end)
-
- local icon = CreateFrame('Button', 'modcolourmenu', MainMenuBarBackpackButton)
- icon:SetSize(16, 16)
- icon:ClearAllPoints()
- icon:SetPoint('BOTTOM', MainMenuBarBackpackButton, 'TOP', .5, 1)
-
- local t = icon:CreateFontString(nil, 'ARTWORK')
- t:SetFont(STANDARD_TEXT_FONT, 8, 'OUTLINE')
- t:SetPoint('TOP', icon, -2, -4)
- t:SetJustifyH'CENTER'
- t:SetText'M'
- t:SetTextColor(1, 1, 1)
-
- local menu = CreateFrame('Frame', 'modoptions', UIParent, 'UIDropDownMenuTemplate')
-
- local ColourFrameFunc = function(colour, cancel)
- if colour then
- if cancel then
- MODUI_VAR['theme'].r = ns.colour_bu[1]
- MODUI_VAR['theme'].g = ns.colour_bu[2]
- MODUI_VAR['theme'].b = ns.colour_bu[3]
- else
- MODUI_VAR['theme'].r = colour[1]
- MODUI_VAR['theme'].g = colour[2]
- MODUI_VAR['theme'].b = colour[3]
+ )
+ ColorPickerFrame.hasOpacity = false
+ ColorPickerFrame.func = function(colour, cancel)
+ ColourFrameFunc(colour, cancel, false)
end
- else
- MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b = ColorPickerFrame:GetColorRGB()
- end
- UpdateSkins()
- end
-
- local list = {
- {
- text = 'modui',
- isTitle = true,
- notCheckable = true,
- fontObject = Game13Font,
- },
- {
- text = 'UI Colour',
- icon = 'Interface\\ICONS\\inv_misc_gem_variety_02',
- func = function()
- ColorPickerFrame:SetColorRGB(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- ColorPickerFrame.hasOpacity = false
- ColorPickerFrame.func = function(colour, cancel)
- ColourFrameFunc(colour, cancel, false)
- end
- ColorPickerFrame:Show()
- ColorPickerFrame:SetPoint'CENTER'
- end,
- notCheckable = true,
- fontObject = Game13Font,
- },
- {
- text = 'Toggle Elements',
- icon = 'Interface\\PaperDollInfoFrame\\UI-EquipmentManager-Toggle',
- func = function()
- _G['modui_elementsmenu']:Show()
- end,
- notCheckable = true,
- fontObject = Game13Font,
- }
+ ColorPickerFrame:Show()
+ ColorPickerFrame:SetPoint'CENTER'
+ end,
+ notCheckable = true,
+ fontObject = Game13Font,
+ },
+ {
+ text = 'Toggle Elements',
+ icon = 'Interface\\PaperDollInfoFrame\\UI-EquipmentManager-Toggle',
+ func = function()
+ _G['modui_elementsmenu']:Show()
+ end,
+ notCheckable = true,
+ fontObject = Game13Font,
}
+}
- local OnClick = function()
- if DropDownList1:IsShown() then
- DropDownList1:Hide()
- else
- EasyMenu(list, menu, icon, 3, 111, 'MENU', 5)
- end
+local OnClick = function()
+ if DropDownList1:IsShown() then
+ DropDownList1:Hide()
+ else
+ EasyMenu(list, menu, icon, 3, 111, 'MENU', 5)
end
+end
- icon:SetScript('OnClick', OnClick)
+icon:SetScript('OnClick', OnClick)
- SLASH_MODUI1 = '/modui'
- SlashCmdList.MODUI = OnClick
+SLASH_MODUI1 = '/modui'
+SlashCmdList.MODUI = OnClick
- local OnShow = function(self)
- for _, v in pairs(
- {
- _G[self:GetName()..'Corner'],
- _G[self:GetName()..'Decoration']
- }
- ) do
- v:SetVertexColor(
- ns.colour[1], ns.colour[2], ns.colour[3]
- )
- end
- self:SetBackdropBorderColor(
- ns.colour[1], ns.colour[2], ns.colour[3]
+local OnShow = function(self)
+ for _, v in pairs(
+ {
+ _G[self:GetName()..'Corner'],
+ _G[self:GetName()..'Decoration']
+ }
+ ) do
+ v:SetVertexColor(
+ ns.colour[1], ns.colour[2], ns.colour[3]
)
end
+ self:SetBackdropBorderColor(
+ ns.colour[1], ns.colour[2], ns.colour[3]
+ )
+end
+
+local OnEvent = function(self, event, addon)
+ if event == 'ADDON_LOADED' then
+ ADDON_LOADED(self, event, addon)
+ end
+ if event == 'PLAYER_ENTERING_WORLD' then
+ if not MODUI_VAR['theme'] then
+ MODUI_VAR['theme'] = {r = 0, g = 0, b = 0}
+ end
- local OnEvent = function(self, event, addon)
- if event == 'ADDON_LOADED' then
- ADDON_LOADED(self, event, addon)
+ if not MODUI_VAR['theme_bu'] then
+ MODUI_VAR['theme_bu'] = {r = .9, g = .9, b = .9}
end
- if event == 'PLAYER_ENTERING_WORLD' then
- if not MODUI_VAR['theme'] then
- MODUI_VAR['theme'] = {r = 0, g = 0, b = 0}
- end
-
- if not MODUI_VAR['theme_bu'] then
- MODUI_VAR['theme_bu'] = {r = .9, g = .9, b = .9}
- end
- UpdateSkins()
- end
+ UpdateSkins()
end
+end
- hooksecurefunc('GroupLootFrame_OnShow', OnShow)
+hooksecurefunc('GroupLootFrame_OnShow', OnShow)
- local e = CreateFrame'Frame'
- e:RegisterEvent'VARIABLES_LOADED'
- e:RegisterEvent'ADDON_LOADED'
- e:RegisterEvent'PLAYER_ENTERING_WORLD'
- e:SetScript('OnEvent', OnEvent)
+UIWidgetTopCenterContainerFrame:ClearAllPoints()
+UIWidgetTopCenterContainerFrame:SetPoint("TOP", 0, -40)
- --
+local e = CreateFrame'Frame'
+e:RegisterEvent'VARIABLES_LOADED'
+e:RegisterEvent'ADDON_LOADED'
+e:RegisterEvent'PLAYER_ENTERING_WORLD'
+e:SetScript('OnEvent', OnEvent)
diff --git a/tooltip/content.lua b/tooltip/content.lua
index 8976f6b..3216858 100755
--- a/tooltip/content.lua
+++ b/tooltip/content.lua
@@ -1,251 +1,149 @@
-
-
- local _, ns = ...
-
- local classifications = {
- worldboss = ' Boss',
- rareelite = ' Rare Elite',
- rare = ' Rare',
- elite = ' Elite',
- }
-
- local tooltips = {
- GameTooltip,
- ItemRefTooltip
- }
-
- local AddPrice = function(tooltip, count, id)
- local _, item
-
- if id then
- item = id
- else
- _, item = tooltip:GetItem()
- end
-
- if item then
- local _, _, _, _, _, _, _, _, _, _, price = GetItemInfo(item)
-
- if price and price > 0 then
- tooltip:AddDoubleLine(SELL_PRICE..': ', GetCoinText(count and price*count or price), nil, nil, nil, 1, 1, 1)
- end
-
- if tooltip:IsShown() then
- tooltip:Show()
- end
- end
+local _, ns = ...
+
+local classifications = {
+ worldboss = ' Boss',
+ rareelite = ' Rare Elite',
+ rare = ' Rare',
+ elite = ' Elite',
+}
+
+local tooltips = {
+ GameTooltip,
+ ItemRefTooltip
+}
+
+local AddPrice = function(tooltip, count, id)
+ local _, item
+
+ if id then
+ item = id
+ else
+ _, item = tooltip:GetItem()
end
- local UnitColours = function(unit)
- if UnitIsPlayer(unit)then
- local _, class = UnitClass(unit)
- return ns.INTERNAL_CLASS_COLORS[class]
- elseif UnitReaction(unit, 'player') then
- return FACTION_BAR_COLORS[UnitReaction(unit, 'player')]
- else
- return nil
- end
- end
+ if item then
+ local _, _, _, _, _, _, _, _, _, _, price = GetItemInfo(item)
- local AddStatusBarColour = function(bar, unit)
- local colour = UnitColours(unit)
- if colour then
- bar:SetStatusBarColor(colour.r, colour.g, colour.b)
+ if price and price > 0 then
+ tooltip:AddDoubleLine(SELL_PRICE..': ', GetCoinText(count and price*count or price), nil, nil, nil, 1, 1, 1)
end
- end
- local AddRaidIcon = function(unit)
- local index = GetRaidTargetIndex(unit)
- return index and ' '..ICON_LIST[index]..'10|t' or ''
- end
-
- local AddRelationship = function(unit)
- local relationship = UnitRealmRelationship(unit)
- return (relationship == 2 or relationship == 3) and ' —|r' or '|r' -- ends colour formatting
- end
-
- local AddFaction = function(unit)
- local faction = UnitFactionGroup(unit)
- local path = '|TInterface\\COMMON\\icon-'
- local icon
- if faction == FACTION_HORDE then
- icon = path..'horde:14:14:0:0:64:64:14:50:14:50|t '
- elseif faction == FACTION_ALLIANCE then
- icon = path..'alliance:14:14:0:0:64:64:14:50:14:50|t '
- else
- icon = ''
+ if tooltip:IsShown() then
+ tooltip:Show()
end
- return icon
end
-
- local AddFlag = function(unit)
- local AFK = UnitIsAFK(unit) and ' |cff00ff00'..CHAT_FLAG_AFK..'|r'
- local DND = UnitIsDND(unit) and ' |cff00ff00'..CHAT_FLAG_DND..'|r'
- return AFK or DND or ''
+end
+
+local UnitColours = function(unit)
+ if UnitIsPlayer(unit)then
+ local _, class = UnitClass(unit)
+ return ns.INTERNAL_CLASS_COLORS[class]
+ elseif UnitReaction(unit, 'player') then
+ return FACTION_BAR_COLORS[UnitReaction(unit, 'player')]
+ else
+ return nil
end
+end
- local AddName = function(unit)
- local colour = UnitColours(unit) and ConvertRGBtoColorString(UnitColours(unit)) or nil
- local icon = AddRaidIcon(unit)
- local name = UnitName(unit)
- local relationship = AddRelationship(unit)
- local faction = AddFaction(unit)
- local flag = AddFlag(unit)
- if colour then -- band-aid fix the error from zoning -_-
- GameTooltipTextLeft1:SetFormattedText('%s%s%s%s%s%s', faction, flag, colour, name, relationship, icon)
- end
+local AddStatusBarColour = function(bar, unit)
+ local colour = UnitColours(unit)
+ if colour then
+ bar:SetStatusBarColor(colour.r, colour.g, colour.b)
end
-
- local AddGuild = function(unit, line, Guild)
- local colour = UnitIsInMyGuild(unit) and '004af1' or '13f62e'
- line:SetFormattedText('|cff'..colour..'<%s>|r', Guild)
+end
+
+local AddRaidIcon = function(unit)
+ local index = GetRaidTargetIndex(unit)
+ return index and ' '..ICON_LIST[index]..'10|t' or ''
+end
+
+local AddRelationship = function(unit)
+ local relationship = UnitRealmRelationship(unit)
+ return (relationship == 2 or relationship == 3) and ' —|r' or '|r' -- ends colour formatting
+end
+
+local AddFaction = function(unit)
+ local faction = UnitFactionGroup(unit)
+ local path = '|TInterface\\COMMON\\icon-'
+ local icon
+ if faction == FACTION_HORDE then
+ icon = path..'horde:14:14:0:0:64:64:14:50:14:50|t '
+ elseif faction == FACTION_ALLIANCE then
+ icon = path..'alliance:14:14:0:0:64:64:14:50:14:50|t '
+ else
+ icon = ''
end
-
- local AddClassification = function(unit)
- return classifications[UnitClassification(unit)] or ''
+ return icon
+end
+
+local AddFlag = function(unit)
+ local AFK = UnitIsAFK(unit) and ' |cff00ff00'..CHAT_FLAG_AFK..'|r'
+ local DND = UnitIsDND(unit) and ' |cff00ff00'..CHAT_FLAG_DND..'|r'
+ return AFK or DND or ''
+end
+
+local AddName = function(unit)
+ local colour = UnitColours(unit) and ConvertRGBtoColorString(UnitColours(unit)) or nil
+ local icon = AddRaidIcon(unit)
+ local name = UnitName(unit)
+ local relationship = AddRelationship(unit)
+ local faction = AddFaction(unit)
+ local flag = AddFlag(unit)
+ if colour then -- band-aid fix the error from zoning -_-
+ GameTooltipTextLeft1:SetFormattedText('%s%s%s%s%s%s', faction, flag, colour, name, relationship, icon)
end
-
- local AddHooks = function(unit)
- for _, v in pairs(tooltips) do
- hooksecurefunc(v, 'SetAuctionItem', function(self, type, index)
- local _, _, count = GetAuctionItemInfo(type, index)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetAuctionSellItem', function(self)
- local _, _, count = GetAuctionSellItemInfo()
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetBagItem', function(self, container, slot)
- local _, count = GetContainerItemInfo(container, slot)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetCraftItem', function(self, skill, slot)
- local count = 1
- if slot then _, _, count = GetCraftReagentInfo(skill, slot) end
- AddPrice(self, count)
- end)
-
- --[[hooksecurefunc(v, 'SetHyperLink', function(self, link, count)
- count = tonumber(count)
- if not count or count < 1 then
- local owner = self:GetOwner()
- count = owner and tonumber(owner.count)
- if not count or count < 1 then
- count = 1
- end
- end
- AddPrice(self, count)
- end)]]
-
- --[[hooksecurefunc(v, 'SetIventoryItem', function(self, unit, slot)
- if type(slot) ~= 'number' or slot < 0 then return end
- local count = 1
- if slot < 20 or slot > 39 and slot < 68 then
- count = GetInventoryItemCount(unit, slot)
- end
- AddPrice(self, count)
- end)]]
-
- hooksecurefunc(v, 'SetLootItem', function(self, slot)
- local _, _, count = GetLootSlotInfo(slot)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetLootRollItem', function(self, id)
- local _, _, count = GetLootRollItemInfo(id)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetMerchantItem', function(self, slot)
- local _, _, _, count = GetMerchantItemInfo(slot)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetMerchantCostItem', function(self, index, item)
- local _, count = GetMerchantItemCostItem(index, item)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetQuestItem', function(self, type, slot)
- local _, _, count = GetQuestItemInfo(type, slot)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetQuestLogItem', function(self, _, index)
- local _, _, count = GetQuestLogRewardInfo(index)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetSendMailItem', function(index)
- local _, _, count = GetSendMailItem(index)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetTradePlayerItem', function(self, index)
- local _, _, count = GetTradePlayerItemInfo(index)
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetTradeSkillItem', function(self, skill, slot)
- local count = 1
- if slot then _, _, count = GetTradeSkillReagentInfo(skill, slot) end
- AddPrice(self, count)
- end)
-
- hooksecurefunc(v, 'SetTradeTargetItem', function(self, index)
- local _, _, count = GetTradeTargetItemInfo(index)
- AddPrice(self, count)
- end)
+end
+
+local AddGuild = function(unit, line, Guild)
+ local colour = UnitIsInMyGuild(unit) and '004af1' or '13f62e'
+ line:SetFormattedText('|cff'..colour..'<%s>|r', Guild)
+end
+
+local AddClassification = function(unit)
+ return classifications[UnitClassification(unit)] or ''
+end
+
+local AddContents = function(self)
+ local _, unit = self:GetUnit()
+ if not unit then return end
+
+ local Guild = GetGuildInfo(unit)
+ -- health bar: colour to unit type
+ AddStatusBarColour(GameTooltipStatusBar, unit)
+ -- line 1: format name
+ AddName(unit)
+ -- format further lines
+ for i = 2, self:NumLines() do
+ local line = _G['GameTooltipTextLeft'..i]
+ local t = line:GetText()
+ -- ALL lines
+ -- line:SetTextColor(.8, .8, .6)
+ -- line 2: guild
+ if Guild and t:find(Guild) then
+ AddGuild(unit, line, Guild)
end
- end
-
- local AddContents = function(self)
- local _, unit = self:GetUnit()
- if not unit then return end
-
- local Guild = GetGuildInfo(unit)
- -- health bar: colour to unit type
- AddStatusBarColour(GameTooltipStatusBar, unit)
- -- line 1: format name
- AddName(unit)
- -- format further lines
- for i = 2, self:NumLines() do
- local line = _G['GameTooltipTextLeft'..i]
- local t = line:GetText()
- -- ALL lines
- -- line:SetTextColor(.8, .8, .6)
- -- line 2: guild
- if Guild and t:find(Guild) then
- AddGuild(unit, line, Guild)
- end
- -- line 3: level
- if t:find(TOOLTIP_UNIT_LEVEL or 'Level %s') then
- local classification = AddClassification(unit)
- line:SetText(t..classification)
- end
- -- hide pvp/faction flags.
- if t:find(PVP)
+ -- line 3: level
+ if t:find(TOOLTIP_UNIT_LEVEL or 'Level %s') then
+ local classification = AddClassification(unit)
+ line:SetText(t..classification)
+ end
+ -- hide pvp/faction flags.
+ if t:find(PVP)
or t:find(FACTION_HORDE)
or t:find(FACTION_ALLIANCE) then
- line:SetText''
- line:Hide()
- end
+ line:SetText''
+ line:Hide()
end
end
+end
- local OnEvent = function(self, event)
- if MODUI_VAR['elements']['tooltip'].enable then
- AddHooks()
- GameTooltip:HookScript('OnTooltipSetUnit', AddContents)
- end
- end
+local OnEvent = function(self, event)
+ GameTooltip:HookScript('OnTooltipSetUnit', AddContents)
+end
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
+local e = CreateFrame'Frame'
+e:RegisterEvent'PLAYER_LOGIN'
+e:SetScript('OnEvent', OnEvent)
- --
+--
diff --git a/tooltip/layout.lua b/tooltip/layout.lua
index fe81a9e..3bca05f 100755
--- a/tooltip/layout.lua
+++ b/tooltip/layout.lua
@@ -1,169 +1,189 @@
+local _, ns = ...
+-- todo: statusbar
- local _, ns = ...
+--GAME_TOOLTIP_BACKDROP_STYLE_DEFAULT['edgeFile'] = ''
+--GAME_TOOLTIP_BACKDROP_STYLE_DEFAULT['insets'] = {left = -2, right = -2, top = -2, bottom = -2}
- -- todo: statusbar
- GAME_TOOLTIP_BACKDROP_STYLE_DEFAULT['edgeFile'] = ''
- GAME_TOOLTIP_BACKDROP_STYLE_DEFAULT['insets'] = {left = -2, right = -2, top = -2, bottom = -2}
- local tooltips = {
- 'GameTooltip',
- 'ShoppingTooltip1',
- 'ShoppingTooltip2',
- 'ItemRefTooltip',
- 'ItemRefShoppingTooltip1',
- 'ItemRefShoppingTooltip2',
- 'WorldMapTooltip',
- }
+local tooltips = {
+ 'GameTooltip',
+ 'ShoppingTooltip1',
+ 'ShoppingTooltip2',
+ 'ItemRefTooltip',
+ 'ItemRefShoppingTooltip1',
+ 'ItemRefShoppingTooltip2',
+ 'WorldMapTooltip',
+}
- local GetMouseoverUnit = function()
- local _, unit = GameTooltip:GetUnit()
- if not unit or not UnitExists(unit) or UnitIsUnit(unit, 'mouseover') then
- return true
- else
- return false
- end
+local GetMouseoverUnit = function()
+ local _, unit = GameTooltip:GetUnit()
+ if not unit or not UnitExists(unit) or UnitIsUnit(unit, 'mouseover') then
+ return true
+ else
+ return false
+ end
+end
+
+local AddBackdrop = function(self)
+
+ self:SetFrameLevel(999)
+ self:SetBackdropColor(0, 0, 0, 0.7)
+
+ if not self.BD then
+ self.BD = CreateFrame('Frame', nil, self, "BackdropTemplate")
+ self.BD:ClearAllPoints()
+ self.BD:SetPoint('TOPLEFT', -8.5, 10)
+ self.BD:SetPoint('BOTTOMRIGHT', 9, -10)
+ self.BD:SetBackdrop({
+ bgFile = '',
+ edgeFile = [[Interface\LFGFRAME\LFGBorder]],
+ edgeSize = 18,
+ insets = {left = -2, right = -2, top = -2, bottom = -2},
+ })
+ tinsert(ns.skinb, self.BD)
+ self.BD:SetBackdropBorderColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
+
+ -- self.BD.shadow = self:CreateTexture(nil, 'BACKGROUND')
+ -- self.BD.shadow:SetPoint('TOPLEFT', self.BD, 0, 0)
+ -- self.BD.shadow:SetPoint('BOTTOMRIGHT', self.BD, 0, 0)
+ -- self.BD.shadow:SetTexture[[Interface\Scenarios\ScenarioParts]]
+ -- self.BD.shadow:SetVertexColor(0, 0, 0, .6)
+ -- self.BD.shadow:SetTexCoord(0, .641, 0, .18)
end
- local AddBackdrop = function(self)
- self:SetFrameLevel(999)
- self:SetBackdropColor(0, 0, 0, 1)
- if not self.BD then
- self.BD = CreateFrame('Frame', nil, self)
- self.BD:SetPoint('TOPLEFT', -8.5, 10)
- self.BD:SetPoint('BOTTOMRIGHT', 9, -10)
- self.BD:SetBackdrop({
- bgFile = '',
- edgeFile = [[Interface\LFGFRAME\LFGBorder]],
- edgeSize = 18,
- })
- tinsert(ns.skinb, self.BD)
-
- self.BD.shadow = self:CreateTexture(nil, 'BACKGROUND')
- self.BD.shadow:SetPoint('TOPLEFT', self.BD, -5, 12)
- self.BD.shadow:SetPoint('BOTTOMRIGHT', self.BD, 5, -11)
- self.BD.shadow:SetTexture[[Interface\Scenarios\ScenarioParts]]
- self.BD.shadow:SetVertexColor(0, 0, 0, .6)
- self.BD.shadow:SetTexCoord(0, .641, 0, .18)
- end
+
+end
+
+local AddStatusBarBG = function(bar)
+ bar.bg = bar:CreateTexture(nil, 'BACKGROUND', nil, 7)
+ ns.SB(bar.bg)
+ bar.bg:SetAllPoints()
+ bar.bg:SetVertexColor(.15, .15, .15)
+end
+
+local AddStatusBar = function(bar, tooltip, vertical)
+ -- we might need to use the ugly unit offset onupdate in this function
+ ns.BD(bar)
+ ns.SB(bar)
+ bar:SetHeight(4)
+ bar:ClearAllPoints() -- reposition hp bar left of tooltip
+ if vertical then
+ bar:SetPoint('TOPLEFT', tooltip)
+ bar:SetPoint('BOTTOMRIGHT', tooltip, 'BOTTOMLEFT', 5, 0)
+ bar:SetOrientation'VERTICAL'
+ bar:SetRotatesTexture(true)
+ else
+ bar:SetPoint('TOPLEFT', tooltip, 0, 0)
+ bar:SetPoint('BOTTOMRIGHT', tooltip, 'TOPRIGHT', 0, -5)
+ bar:SetOrientation'HORIZONTAL'
+ bar:SetRotatesTexture(false)
end
- local AddStatusBarBG = function(bar)
- bar.bg = bar:CreateTexture(nil, 'BACKGROUND', nil, 7)
- ns.SB(bar.bg)
- bar.bg:SetAllPoints()
- bar.bg:SetVertexColor(.15, .15, .15)
+ if not bar.bg then
+ AddStatusBarBG(bar)
end
+end
- local AddStatusBar = function(bar, tooltip, vertical)
- -- we might need to use the ugly unit offset onupdate in this function
- ns.BD(bar)
- ns.SB(bar)
- bar:SetHeight(4)
- bar:ClearAllPoints() -- reposition hp bar left of tooltip
- if vertical then
- bar:SetPoint('TOPLEFT', tooltip)
- bar:SetPoint('BOTTOMRIGHT', tooltip, 'BOTTOMLEFT', 5, 0)
- bar:SetOrientation'VERTICAL'
- bar:SetRotatesTexture(true)
+local MouseUpdate = function(tooltip, parent)
+ if GetMouseFocus() ~= WorldFrame then
+ return
+ end
+ local x, y = GetCursorPosition()
+ local scale = tooltip:GetEffectiveScale()
+ tooltip:ClearAllPoints()
+ tooltip:SetPoint('TOPLEFT', UIParent, 'BOTTOMLEFT', (x/scale + 25), (y/scale + -5))
+end
+
+local AddAnchor = function(tooltip, parent)
+ local isUnit = GetMouseoverUnit()
+ if MODUI_VAR['elements']['tooltip'].mouseanchor then
+ if GetMouseFocus() ~= WorldFrame then
+ tooltip:ClearAllPoints()
+ tooltip:SetOwner(parent, 'ANCHOR_TOPRIGHT', 0, 10)
else
- bar:SetPoint('TOPLEFT', tooltip, 0, 0)
- bar:SetPoint('BOTTOMRIGHT', tooltip, 'TOPRIGHT', 0, -5)
- bar:SetOrientation'HORIZONTAL'
- bar:SetRotatesTexture(false)
+ MouseUpdate(tooltip, parent)
+ AddStatusBar(GameTooltipStatusBar, tooltip, false)
end
-
- if not bar.bg then
- AddStatusBarBG(bar)
- end
- end
-
- local MouseUpdate = function(tooltip, parent)
- if GetMouseFocus() ~= WorldFrame then
- return
- end
- local x, y = GetCursorPosition()
- local scale = tooltip:GetEffectiveScale()
- tooltip:ClearAllPoints()
- tooltip:SetPoint('TOPLEFT', UIParent, 'BOTTOMLEFT', (x/scale + 25), (y/scale + -5))
- end
-
- local AddAnchor = function(tooltip, parent)
- local isUnit = GetMouseoverUnit()
- if MODUI_VAR['elements']['tooltip'].mouseanchor then
- if GetMouseFocus() ~= WorldFrame then
- tooltip:ClearAllPoints()
- tooltip:SetOwner(parent, 'ANCHOR_TOPRIGHT', 0, 10)
- else
- MouseUpdate(tooltip, parent)
- AddStatusBar(GameTooltipStatusBar, tooltip, false)
- end
+ else
+ if not isUnit then
+ tooltip:ClearAllPoints()
+ tooltip:SetOwner(parent, 'ANCHOR_TOPRIGHT', 0, 10)
else
- if not isUnit then
- tooltip:ClearAllPoints()
- tooltip:SetOwner(parent, 'ANCHOR_TOPRIGHT', 0, 10)
- else
- tooltip:ClearAllPoints()
- tooltip:SetPoint('BOTTOMRIGHT', UIParent, -33, 33)
- AddStatusBar(GameTooltipStatusBar, tooltip, false)
- end
+ tooltip:ClearAllPoints()
+ tooltip:SetPoint('BOTTOMRIGHT', UIParent, -33, 33)
+ AddStatusBar(GameTooltipStatusBar, tooltip, false)
end
end
-
- local UpdateStyle = function(self)
- local _, link = self:GetItem()
- if self.BD then
- self.BD:ClearAllPoints()
- self.BD:SetPoint('TOPLEFT', -8.5, 10)
- self.BD:SetPoint('BOTTOMRIGHT', 9, -10)
- self.BD:SetBackdrop({
- bgFile = '',
- edgeFile = [[Interface\LFGFRAME\LFGBorder]],
- edgeSize = 18,
- })
- self.BD:SetBackdropBorderColor(
- MODUI_VAR['theme'].r,
- MODUI_VAR['theme'].g,
- MODUI_VAR['theme'].b
- )
- end
+end
+
+local UpdateStyle = function(self)
+
+ if self.BD then
+ self.BD:ClearAllPoints()
+ self.BD:SetPoint('TOPLEFT', -8.5, 10)
+ self.BD:SetPoint('BOTTOMRIGHT', 9, -10)
+ self.BD:SetBackdrop({
+ bgFile = '',
+ edgeFile = [[Interface\LFGFRAME\LFGBorder]],
+ edgeSize = 16,
+ })
+ self.BD:SetBackdropBorderColor(
+ MODUI_VAR['theme'].r,
+ MODUI_VAR['theme'].g,
+ MODUI_VAR['theme'].b
+ )
end
+end
- local OnEvent = function(self, event)
- if MODUI_VAR['elements']['tooltip'].enable then
- for _, v in next, tooltips do
- local f = _G[v]
- ns.BD(f)
- f:HookScript('OnShow', AddBackdrop)
- f:HookScript('OnHide', AddBackdrop)
- f:HookScript('OnTooltipCleared', AddBackdrop)
- end
+local OnEvent = function(self, event)
- hooksecurefunc('GameTooltip_UpdateStyle', UpdateStyle)
- hooksecurefunc('GameTooltip_SetBackdropStyle', UpdateStyle)
- hooksecurefunc('GameTooltip_SetDefaultAnchor', AddAnchor)
- if MODUI_VAR['elements']['tooltip'].mouseanchor then
- GameTooltip:HookScript('OnUpdate', MouseUpdate)
- end
- if MODUI_VAR['elements']['tooltip'].disablefade then
- self.hasUnitTooltip = false
- self:SetScript('OnUpdate', function(self)
- local mouseoverExists = UnitExists("mouseover")
- if self.hasUnitTooltip and not mouseoverExists then
- GameTooltip:Hide()
- self.hasUnitTooltip = nil
- elseif not self.hasUnitTooltip and mouseoverExists then
- self.hasUnitTooltip = true
- end
- end)
+
+
+ if MODUI_VAR['elements']['tooltip'].enable then
+ for _, v in next, tooltips do
+ local f = _G[v]
+
+ f:SetBackdropBorderColor(0, 0, 0, 1)
+ f.SetBackdropBorderColor = function() end
+
+ if f.NineSlice then
+ f.NineSlice:SetAlpha(0)
end
+
+ ns.BD(f)
+ f:HookScript('OnShow', AddBackdrop)
+ f:HookScript('OnHide', AddBackdrop)
+ f:HookScript('OnTooltipCleared', AddBackdrop)
end
- end
- local e = CreateFrame'Frame'
- e:RegisterEvent'PLAYER_LOGIN'
- e:SetScript('OnEvent', OnEvent)
+ -- hooksecurefunc('GameTooltip_UpdateStyle', UpdateStyle)
+ -- hooksecurefunc('SharedTooltip_SetBackdropStyle', UpdateStyle)
+ hooksecurefunc('GameTooltip_SetDefaultAnchor', AddAnchor)
+ if MODUI_VAR['elements']['tooltip'].mouseanchor then
+ GameTooltip:HookScript('OnUpdate', MouseUpdate)
+ end
+ if MODUI_VAR['elements']['tooltip'].disablefade then
+ self.hasUnitTooltip = false
+ self:SetScript('OnUpdate', function(self)
+ local mouseoverExists = UnitExists("mouseover")
+ if self.hasUnitTooltip and not mouseoverExists then
+ GameTooltip:Hide()
+ self.hasUnitTooltip = nil
+ elseif not self.hasUnitTooltip and mouseoverExists then
+ self.hasUnitTooltip = true
+ end
+ end)
+ end
+ end
+end
- --
+local e = CreateFrame'Frame'
+e:RegisterEvent'PLAYER_LOGIN'
+e:SetScript('OnEvent', OnEvent)
diff --git a/unit/druidbar.lua b/unit/druidbar.lua
deleted file mode 100755
index 4f76572..0000000
--- a/unit/druidbar.lua
+++ /dev/null
@@ -1,74 +0,0 @@
-
- local _, ns = ...
-
- local events = {
- 'PLAYER_LOGIN',
- 'UNIT_POWER_UPDATE',
- 'UPDATE_SHAPESHIFT_FORM',
- }
-
- local AddDruidBar = function()
- local mana = PowerBarColor['MANA']
-
- local bar = CreateFrame('StatusBar', 'modui_druidbar', PlayerFrame)
- ns.SB(bar)
- bar:SetSize(118, 8)
- bar:SetPoint('TOPLEFT', PlayerFrame, 'TOPLEFT', 107, -66)
- bar:SetStatusBarColor(mana.r, mana.g, mana.b)
-
- bar.border = CreateFrame('Frame', nil, UIParent)
- bar.border:SetSize(258, 33)
- bar.border:SetPoint('TOPLEFT', PlayerFrame, 'TOPLEFT', 100, -62)
-
- bar.border.t = bar.border:CreateTexture(nil, 'BACKGROUND')
- bar.border.t:SetAllPoints(bar.border)
- bar.border.t:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\border]]
- tinsert(ns.skin, bar.border.t)
-
- bar.background = CreateFrame('Frame', nil, PlayerFrame)
- bar.background:SetSize(258, 33)
- bar.background:SetPoint('TOPLEFT', PlayerFrame, 'TOPLEFT', 100, -62)
-
- bar.background.t = bar.background:CreateTexture(nil, 'BACKGROUND')
- bar.background.t:SetAllPoints(bar.background)
- bar.background.t:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\background]]
- tinsert(ns.skin, bar.background.t)
- end
-
- local UpdatePower = function(self)
- self:SetMinMaxValues(0, UnitPowerMax('player', 0))
- self:SetValue(UnitPower('player', 0))
- end
-
- local ToggleDruidBar = function(self)
- local _, class = UnitClass'player'
- local form = GetShapeshiftForm()
- self:Hide()
- self.border:Hide()
- self.background:Hide()
- if class == 'DRUID' and (form == 1 or form == 3) then
- self:Show()
- self.border:Show()
- self.background:Show()
- end
- end
-
- local OnEvent = function(self, event, ...)
- if event == 'PLAYER_LOGIN' then
- AddDruidBar()
- ToggleDruidBar(_G['modui_druidbar'])
- elseif event == 'UNIT_POWER_UPDATE' then
- local bar = _G['modui_druidbar']
- if bar then UpdatePower(bar) end
- elseif event == 'UPDATE_SHAPESHIFT_FORM' then
- local bar = _G['modui_druidbar']
- if bar then ToggleDruidBar(bar) end
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/unit/energy.lua b/unit/energy.lua
deleted file mode 100755
index 5bf156f..0000000
--- a/unit/energy.lua
+++ /dev/null
@@ -1,78 +0,0 @@
-
- local _, ns = ...
-
- local _, class = UnitClass'player'
- if not (class == 'ROGUE' or class == 'DRUID') then return end
-
- local events = {
- 'PLAYER_LOGIN',
- 'PLAYER_REGEN_DISABLED',
- 'PLAYER_REGEN_ENABLED',
- }
-
- local last_tick = GetTime()
- local last_value = 0
-
- local SetEnergyValue = function(self, value)
- local x = self:GetWidth()
- local v, max = UnitPower'player', UnitPowerMax'player'
- local type = UnitPowerType'player'
-
- if type ~= Enum.PowerType.Energy then
- self.energy.spark:Hide()
- else
- local position = (x*value)/2
- self.energy.spark:Show()
- self.energy.spark:SetPoint('CENTER', self, 'LEFT', position, 0)
- end
-
- end
-
- local UpdateEnergy = function(self, unit)
- local energy = UnitPower('player', Enum.PowerType.Energy)
- local time = GetTime()
- local v = time - last_tick
-
- if energy > last_value or time >= last_tick + 2 then
- last_tick = time
- end
-
- SetEnergyValue(self:GetParent(), v)
-
- last_value = energy
- end
-
- local AddEnergy = function()
- PlayerFrameManaBar.energy = CreateFrame('Statusbar', 'PlayerFrameManaBar_modui_energy', PlayerFrameManaBar)
-
- PlayerFrameManaBar.energy.spark = PlayerFrameManaBar.energy:CreateTexture(nil, 'OVERLAY')
- PlayerFrameManaBar.energy.spark:SetTexture[[Interface\CastingBar\UI-CastingBar-Spark]]
- PlayerFrameManaBar.energy.spark:SetSize(32, 32)
- PlayerFrameManaBar.energy.spark:SetPoint('CENTER', PlayerFrameManaBar, 0, 0)
- PlayerFrameManaBar.energy.spark:SetBlendMode'ADD'
- PlayerFrameManaBar.energy.spark:SetAlpha(.4)
-
- PlayerFrameManaBar.energy:RegisterEvent'UNIT_POWER_UPDATE'
- PlayerFrameManaBar.energy:SetScript('OnUpdate', UpdateEnergy)
- end
-
- local ToggleCombat = function(alpha)
- PlayerFrameManaBar.energy.spark:SetAlpha(alpha)
- end
-
- local OnEvent = function(self, event, ...)
- if event == 'PLAYER_LOGIN' then
- AddEnergy()
- elseif event == 'PLAYER_REGEN_DISABLED' then
- ToggleCombat(1)
- elseif event == 'PLAYER_REGEN_ENABLED' then
- ToggleCombat(.3)
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
diff --git a/unit/smooth.lua b/unit/smooth.lua
new file mode 100755
index 0000000..edf7425
--- /dev/null
+++ b/unit/smooth.lua
@@ -0,0 +1,155 @@
+---------------------------------------------------------------------
+-- Smooth animations -- Ls
+
+local smoothing = {}
+local pairs = pairs
+local floor = math.floor
+local mabs = math.abs
+local UnitGUID = UnitGUID
+local TARGET_FPS = 60
+local AMOUNT = .33
+local smoothframe = CreateFrame("Frame")
+
+local barstosmooth = {
+ PlayerFrameHealthBar = "player",
+ PlayerFrameManaBar = "player",
+ TargetFrameHealthBar = "target",
+ TargetFrameManaBar = "target",
+ FocusFrameHealthBar = "focus",
+ FocusFrameManaBar = "focus",
+}
+
+local function clamp(v, min, max)
+ min = min or 0
+ max = max or 1
+
+ if v > max then
+ return max
+ elseif v < min then
+ return min
+ end
+
+ return v
+end
+
+local function lerp(startValue, endValue, amount)
+ return (1 - amount) * startValue + amount * endValue
+end
+
+local function isCloseEnough(new, target, range)
+ if range > 0 then
+ return mabs((new - target) / range) <= 0.001
+ end
+
+ return true
+end
+
+local function AnimationTick(_, elapsed)
+ for unitFrame, info in next, smoothing do
+ local newValue = lerp(unitFrame._value, info, clamp(AMOUNT * elapsed * TARGET_FPS))
+
+ if isCloseEnough(newValue, info, unitFrame._max - unitFrame._min) then
+ newValue = info
+ smoothing[unitFrame] = nil
+ end
+
+ unitFrame:SetValue_(floor(newValue))
+ unitFrame._value = newValue
+ end
+end
+
+local function SetSmoothedValue(self, value)
+ value = tonumber(value)
+ self.finalValue = value
+
+ if self.unit then
+ local guid = UnitGUID(self.unit)
+ if guid ~= self.guid then
+ smoothing[self] = nil
+ self:SetValue_(floor(value))
+ end
+ self.guid = guid
+ end
+
+ self._value = self:GetValue()
+ smoothing[self] = clamp(value, self._min, self._max)
+end
+
+local function SmoothSetValue(self, min, max)
+ min, max = tonumber(min), tonumber(max)
+
+ self:SetMinMaxValues_(min, max)
+
+ if self._max and self._max ~= max then
+ local ratio = 1
+ if max ~= 0 and self._max and self._max ~= 0 then
+ ratio = max / (self._max or max)
+ end
+
+ local target = smoothing[self]
+ if target then
+ smoothing[self] = target * ratio
+ end
+
+ local cur = self._value
+ if cur then
+ self:SetValue_(cur * ratio)
+ self._value = cur * ratio
+ end
+ end
+
+ self._min = min
+ self._max = max
+end
+
+
+local function SmoothBar(bar)
+ bar._min, bar._max = bar:GetMinMaxValues()
+ bar._value = bar:GetValue()
+
+ if not bar.SetValue_ then
+ bar.SetValue_ = bar.SetValue
+ bar.SetValue = SetSmoothedValue
+ end
+ if not bar.SetMinMaxValues_ then
+ bar.SetMinMaxValues_ = bar.SetMinMaxValues
+ bar.SetMinMaxValues = SmoothSetValue
+ end
+end
+
+local function onUpdate()
+ for _, plate in pairs(C_NamePlate.GetNamePlates(true)) do
+ if not plate:IsForbidden() and plate:IsVisible() and plate.UnitFrame:IsShown() then
+ SmoothBar(plate.UnitFrame.healthBar)
+ end
+ end
+ AnimationTick()
+end
+
+local function init()
+ for k,v in pairs (barstosmooth) do
+ if _G[k] then
+ SmoothBar(_G[k])
+ _G[k]:HookScript("OnHide", function()
+ _G[k].guid = nil;
+ _G[k].max_ = nil
+ _G[k].min_ = nil
+ end)
+ if v ~= "" then
+ _G[k].unit = v
+ end
+ end
+ end
+end
+
+
+
+smoothframe:RegisterEvent("ADDON_LOADED")
+smoothframe:SetScript("OnEvent", function(self, event)
+ if event == "ADDON_LOADED" then
+ init()
+ smoothframe:SetScript("OnUpdate", AnimationTick)
+ end
+ self:UnregisterEvent("ADDON_LOADED")
+ self:SetScript("OnEvent", nil)
+end)
diff --git a/unit/unit.lua b/unit/unit.lua
index f7e80c6..75c84d2 100755
--- a/unit/unit.lua
+++ b/unit/unit.lua
@@ -1,445 +1,485 @@
-
- local _, ns = ...
-
- local LCD = LibStub'LibClassicDurations'
- LCD:Register'modui'
-
- local LCMH = LibStub'LibClassicMobHealth-1.0'
-
- local events = {
- 'PLAYER_LOGIN',
- 'GROUP_ROSTER_UPDATE',
- 'PLAYER_TARGET_CHANGED',
- 'UNIT_SPELLCAST_START',
- 'UNIT_SPELLCAST_CHANNEL_START',
- 'UNIT_FACTION'
- }
-
- local AddPlayerFrame = function()
- for _, v in pairs(
- {
- PlayerFrameHealthBarText,
- PlayerFrameHealthBarTextLeft,
- PlayerFrameHealthBarTextRight,
- PlayerFrameManaBarText,
- PlayerFrameManaBarTextLeft,
- PlayerFrameManaBarTextRight,
- }
- ) do
- v:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
- end
- for _, v in pairs(
- {
- PlayerFrameHealthBar,
- PlayerFrameManaBar
- }
- ) do
- --ns.SB(v)
- end
- if not PlayerFrame.bg then
- local _, class = UnitClass'player'
- local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
- PlayerFrame.bg = PlayerFrame:CreateTexture()
- PlayerFrame.bg:SetPoint('TOPLEFT', PlayerFrameBackground)
- PlayerFrame.bg:SetPoint('BOTTOMRIGHT', PlayerFrameBackground, 0, 22)
- PlayerFrame.bg:SetTexture[[Interface/AddOns/modui_classic/art/statusbar/namebg.tga]]
- PlayerFrame.bg:SetVertexColor(colour.r, colour.g, colour.b)
- end
-
- PlayerPVPIcon:SetSize(48, 48)
- PlayerPVPIcon:ClearAllPoints()
- PlayerPVPIcon:SetPoint('CENTER', PlayerFrame, 'LEFT', 60, 16)
-
- if MODUI_VAR['elements']['unit'].castbar then
- CastingBarFrame.Icon:SetSize(16, 16)
- CastingBarFrame.Icon:ClearAllPoints()
- CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -25, 0)
- CastingBarFrame.Icon:SetTexCoord(.1, .9, .1, .9)
-
- CastingBarFrame.IconF = CreateFrame('Frame', nil, CastingBarFrame)
- CastingBarFrame.IconF:SetAllPoints(CastingBarFrame.Icon)
- ns.BD(CastingBarFrame.IconF)
- ns.BUBorder(CastingBarFrame.IconF, 18)
- for i = 1, 4 do
- tinsert(ns.skinbu, CastingBarFrame.IconF.bo[i])
- CastingBarFrame.IconF.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
- end
- CastingBarFrame.Icon:SetParent(CastingBarFrame.IconF)
-
- CastingBarFrame.SafeZone = CastingBarFrame:CreateTexture(nil, 'BORDER')
- ns.SB(CastingBarFrame.SafeZone)
- CastingBarFrame.SafeZone:SetVertexColor(.69, .31, .31)
- end
- end
-
- local UpdateCastingBarLatency = function(start, endtime)
- local width = CastingBarFrame:GetWidth()
- local _, _, _, ms = GetNetStats()
- local x = (ms/1e3)/((endtime/1e3) - (start/1e3))
-
- if x > 1 then x = 1 end
-
- CastingBarFrame.SafeZone:SetWidth(width*x)
- CastingBarFrame.SafeZone:ClearAllPoints()
- CastingBarFrame.SafeZone:SetPoint(channel and 'LEFT' or 'RIGHT')
- CastingBarFrame.SafeZone:SetPoint'TOP'
- CastingBarFrame.SafeZone:SetPoint'BOTTOM'
- end
-
- local UpdateCastingBarIcon = function(texture)
- if CastingBarFrame.Spark.offsetY < 1 then
- CastingBarFrame.Icon:ClearAllPoints()
- CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -25, 0)
- else
- CastingBarFrame.Icon:SetTexture(texture)
- CastingBarFrame.Icon:Show()
- CastingBarFrame.Icon:ClearAllPoints()
- CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -32, 3)
- end
- end
-
- local UpdateCastingBar = function(channel)
- local _, texture, start, endtime
- if channel then
- _, _, texture, start, endtime = ChannelInfo()
- else
- _, _, texture, start, endtime = CastingInfo()
- end
- UpdateCastingBarLatency(start, endtime, channel)
- UpdateCastingBarIcon(texture)
- end
-
- local UpdateTargetValue = function()
- local v, max, found = LCMH:GetUnitHealth'target'
- local display = GetCVar'statusTextDisplay'
- TextStatusBar_UpdateTextStringWithValues(TargetFrameHealthBar, TargetFrameHealthBarText, v, 0, max)
- if TargetFrameHealthBar.RightText and display == 'BOTH' and not TargetFrameHealthBar.showPercentage then
- TargetFrameHealthBar.RightText:SetText(v)
- end
- end
-
- local AddTargetFrame = function()
- for _, v in pairs(
- {
- TargetFrameHealthBar,
- TargetFrameManaBar
- }
- ) do
- --ns.SB(v)
- end
-
- TargetFrameHealthBar:HookScript('OnValueChanged', UpdateTargetValue)
-
- TargetFrameNameBackground:SetTexture[[Interface/AddOns/modui_classic/art/statusbar/namebg.tga]]
-
- TargetFrame.Elite = TargetFrameTextureFrame:CreateTexture(nil, 'BORDER')
- TargetFrame.Elite:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Elite]]
- TargetFrame.Elite:SetSize(128, 128)
- TargetFrame.Elite:SetPoint('TOPRIGHT', TargetFrame)
- TargetFrame.Elite:Hide()
-
- TargetFrame.Rare = TargetFrameTextureFrame:CreateTexture(nil, 'BORDER')
- TargetFrame.Rare:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Rare-Elite]]
- TargetFrame.Rare:SetSize(128, 128)
- TargetFrame.Rare:SetPoint('TOPRIGHT', TargetFrame)
- TargetFrame.Rare:Hide()
-
- TargetFrameHealthBarText = TargetFrameTextureFrame:CreateFontString(nil, 'OVERLAY', 'TextStatusBarText')
- TargetFrameHealthBarText:SetPoint('CENTER', -50, 3)
- TargetFrameHealthBar.TextString = TargetFrameHealthBarText
-
- TargetFrameHealthBarTextLeft = TargetFrameTextureFrame:CreateFontString(nil, 'OVERLAY', 'TextStatusBarText')
- TargetFrameHealthBarTextLeft:SetPoint('LEFT', 8, 3)
- TargetFrameHealthBar.LeftText = TargetFrameHealthBarTextLeft
-
- TargetFrameHealthBarTextRight = TargetFrameTextureFrame:CreateFontString(nil, 'OVERLAY', 'TextStatusBarText')
- TargetFrameHealthBarTextRight:SetPoint('RIGHT', -110, 3)
- TargetFrameHealthBar.RightText = TargetFrameHealthBarTextRight
-
- for _, v in pairs(
- {
- TargetFrameHealthBarText,
- TargetFrameHealthBarTextLeft,
- TargetFrameHealthBarTextRight,
- }
- ) do
- v:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
- end
-
- TargetFrameTextureFramePVPIcon:SetSize(48, 48)
- TargetFrameTextureFramePVPIcon:ClearAllPoints()
- TargetFrameTextureFramePVPIcon:SetPoint('CENTER', TargetFrame, 'RIGHT', -42, 16)
- end
-
- local AddToTFrame = function()
- TargetFrameToTPortrait:SetSize(37, 37)
- TargetFrameToTPortrait:SetPoint('TOPLEFT', 5, -5)
-
- for _, v in pairs(
- {
- TargetFrameToTHealthBar,
- TargetFrameToTManaBar
- }
- ) do
- if v then
- --ns.SB(v)
- end
- end
- end
-
- local AddPartyFrame = function()
- for i = 1, 4 do
- for _, v in pairs(
- {
- _G['PartyMemberFrame'..i..'HealthBar'],
- _G['PartyMemberFrame'..i..'ManaBar']
- }
- ) do
- --ns.BD(v)
- --ns.SB(v)
- end
- end
- end
-
- local AddHealthTextColour = function(t, statusbar)
- local min, max = statusbar:GetMinMaxValues()
- local v = statusbar:GetValue()
- ns.GRADIENT_COLOUR(t, v, min, max)
- end
-
- local AddManaTextColour = function(t, class, powertype)
- if MODUI_VAR['elements']['unit'].vcolour then
- if class == 'ROGUE' or (class == 'DRUID' and powertype == 3) then
- t:SetTextColor(250/255, 240/255, 200/255)
- elseif class == 'WARRIOR' or (class == 'DRUID' and powertype == 1) then
- t:SetTextColor(250/255, 108/255, 108/255)
- else
- t:SetTextColor(.6, .65, 1)
- end
- else
- t:SetTextColor(1, 1, 1)
- end
- end
-
- local AddTargetAura = function(self)
- -- nb: needs update: these are being generated ad-hoc
- for i = 1, MAX_TARGET_BUFFS do
- local n = 'TargetFrameBuff'..i
- local bu = _G[n]
- local cd = _G[n..'Cooldown']
- if bu and not bu.skinned then
- ns.BUBorder(bu, 18, 18, 3, 4)
- for j = 1, 4 do
- tinsert(ns.skinbu, bu.bo[j])
- bu.bo[j]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
- end
-
- cd:SetHideCountdownNumbers(false)
-
- local t = cd:GetRegions()
- t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
- t:ClearAllPoints()
- t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
- bu.skinned = true
- end
- end
- for i = 1, MAX_TARGET_DEBUFFS do
- local n = 'TargetFrameDebuff'..i
- local bu = _G[n]
- local cd = _G[n..'Cooldown']
-
- if bu and not bu.skinned then
- cd:SetHideCountdownNumbers(false)
-
- local t = cd:GetRegions()
- t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
- t:ClearAllPoints()
- t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
- bu.skinned = true
- end
- end
- end
-
- local AddAuraDuration = function(self)
- AddTargetAura(self)
- for i = 1, MAX_TARGET_BUFFS do
- local name, icon, count, dtype, duration, expiration, caster, canstealorpurge, _ , spellid, _, _, isplayer, nameplateshowall = UnitBuff(self.unit, i, nil)
- if name then
- local n = self:GetName()..'Buff'..i
- local bu = _G[n]
- local cd = _G[n..'Cooldown']
-
- local duration2, expiration2 = LCD:GetAuraDurationByUnit(self.unit, spellid, caster)
- if duration == 0 and duration2 then
- duration = duration2
- expiration = expiration2
- end
-
- CooldownFrame_Set(cd, expiration - duration, duration, duration > 0, true)
- else
- break
- end
- end
-
- local num = 1
- local i = 1
- local max = self.maxDebuffs or MAX_TARGET_DEBUFFS
- while num <= max and i <= max do
- local name, icon, count, dtype, duration, expiration, caster, _, _, spellid, _, _, isplayer, nameplates= UnitDebuff(self.unit, i, 'INCLUDE_NAME_PLATE_ONLY')
- if name then
- if TargetFrame_ShouldShowDebuffs(self.unit, caster, nameplateshowall, casterisplayer) then
- local n = self:GetName()..'Debuff'..num
- local bu = _G[n]
- local cd = _G[n..'Cooldown']
-
- local duration2, expiration2 = LCD:GetAuraDurationByUnit(self.unit, spellid, caster)
- if duration == 0 and duration2 then
- duration = duration2
- expiration = expiration2
- end
-
- CooldownFrame_Set(cd, expiration - duration, duration, duration > 0, true)
- num = num + 1
- end
- else
- break
- end
- i = i + 1
- end
- end
-
- local AddPartyPets = function()
- local var = GetCVar'showPartyPets'
- if not var == '1' then SetCVar('showPartyPets', 1) end
- end
-
- local UpdateTargetNameClassColour = function()
- if UnitIsPlayer'target' then
- local _, class = UnitClass'target'
- local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
- TargetFrameNameBackground:SetVertexColor(colour.r, colour.g, colour.b)
- end
- end
-
- local UpdatePartyTextClassColour = function()
- for i = 1, MAX_PARTY_MEMBERS do
- local name = _G['PartyMemberFrame'..i..'Name']
- if UnitIsPlayer('party'..i) then
- local _, class = UnitClass('party'..i)
- local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
- if colour then
- name:SetTextColor(colour.r, colour.g, colour.b)
- end
- else
- name:SetTextColor(1, .8, 0)
- end
- end
- end
-
- local UpdateTextStringColour = function(statusbar)
- local _, class = UnitClass'player'
- local n = statusbar:GetName()
- for _, t in pairs(
- {
- statusbar.TextString,
- statusbar.LeftText,
- statusbar.RightText,
- }
- ) do
- if t and n == 'PlayerFrameManaBar' then
- AddManaTextColour(t, class, UnitPowerType'player')
- elseif t and (n == 'PlayerFrameHealthBar' or n == 'TargetFrameHealthBar') then
- AddHealthTextColour(t, statusbar)
- end
- end
- end
-
- local CheckClassification = function(self)
-
- local classification = UnitClassification(self.unit)
-
- for _, v in pairs(
- {
- self.Elite,
- self.Rare
- }
- ) do
- v:Hide()
- end
-
- self.borderTexture:SetTexture[[Interface\TargetingFrame\UI-TargetingFrame]]
-
- if classification == 'worldboss' or classification == 'elite' or classification == 'rareelite' then
- self.Elite:Show()
- elseif classification == 'rare' then
- self.Rare:Show()
- end
- end
-
- local UpdateToT = function(self, elapsed)
- local _, class = UnitClass'targettarget'
- local colour = RAID_CLASS_COLORS[class]
- local name = UnitName'targettarget'
-
- if UnitIsPlayer'targettarget' then
- TargetFrameToTTextureFrameName:SetTextColor(colour.r, colour.g, colour.b)
- else
- TargetFrameToTTextureFrameName:SetTextColor(1, .8, 0)
- end
-
- TargetFrameToTTextureFrameName:ClearAllPoints()
- TargetFrameToTTextureFrameName:SetPoint('BOTTOMLEFT', TargetFrameToTTextureFrame, 49, 0)
- end
-
- local function OnEvent(self, event)
- if not MODUI_VAR['elements']['unit'].enable then return end
-
- if event == 'PLAYER_LOGIN' then
- if MODUI_VAR['elements']['unit'].player then
- AddPlayerFrame()
- end
-
- if MODUI_VAR['elements']['unit'].target then
- AddTargetFrame()
- end
-
- if MODUI_VAR['elements']['unit'].tot then
- AddToTFrame()
- -- TargetFrameToT:HookScript('OnUpdate', UpdateToT) tainting i think
- end
-
- if MODUI_VAR['elements']['unit'].rcolour then
- hooksecurefunc('TargetFrame_CheckClassification', CheckClassification)
- end
-
- if MODUI_VAR['elements']['unit'].vcolour then
- hooksecurefunc('TextStatusBar_UpdateTextString', UpdateTextStringColour)
- end
-
- if MODUI_VAR['elements']['unit'].auras then
- hooksecurefunc('TargetFrame_UpdateAuras', AddAuraDuration)
- end
- end
-
- if event == 'UNIT_SPELLCAST_START' or event == 'UNIT_SPELLCAST_CHANNEL_START' then
- if MODUI_VAR['elements']['unit'].castbar then
- UpdateCastingBar(event == 'UNIT_SPELLCAST_CHANNEL_START' and true or false)
- end
- end
-
- if MODUI_VAR['elements']['unit'].target then
- UpdateTargetNameClassColour()
- end
-
- if MODUI_VAR['elements']['unit'].party then
- AddPartyPets()
- if not InCombatLockdown() then UpdatePartyTextClassColour() end
- end
- end
-
- local e = CreateFrame'Frame'
- for _, v in pairs(events) do e:RegisterEvent(v) end
- e:SetScript('OnEvent', OnEvent)
-
-
- --
+local _, ns = ...
+
+local events = {
+ 'PLAYER_LOGIN',
+ 'GROUP_ROSTER_UPDATE',
+ 'RAID_ROSTER_UPDATE',
+ 'PLAYER_TARGET_CHANGED',
+ 'PLAYER_FOCUS_CHANGED',
+ 'UNIT_SPELLCAST_START',
+ 'UNIT_SPELLCAST_CHANNEL_START',
+ 'UNIT_FACTION'
+}
+
+local AddPlayerFrame = function()
+ for _, v in pairs(
+ {
+ PlayerFrameHealthBarText,
+ PlayerFrameHealthBarTextLeft,
+ PlayerFrameHealthBarTextRight,
+ PlayerFrameManaBarText,
+ PlayerFrameManaBarTextLeft,
+ PlayerFrameManaBarTextRight,
+ }
+ ) do
+ v:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
+ end
+
+ PlayerFrame:ClearAllPoints();
+ PlayerFrame:SetPoint("TOPLEFT", UIParent, 300, -290);
+ PlayerFrame:SetUserPlaced(true)
+
+
+ if not PlayerFrame.bg then
+ local _, class = UnitClass'player'
+ local colour = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
+ PlayerFrame.bg = PlayerFrame:CreateTexture()
+ PlayerFrame.bg:SetPoint('TOPLEFT', PlayerFrameBackground)
+ PlayerFrame.bg:SetPoint('BOTTOMRIGHT', PlayerFrameBackground, 0, 22)
+ PlayerFrame.bg:SetVertexColor(colour.r, colour.g, colour.b)
+ end
+
+ PlayerPVPIcon:SetAlpha(0)
+
+
+ CastingBarFrame.Icon:SetSize(16, 16)
+ CastingBarFrame.Icon:ClearAllPoints()
+ CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -25, 0)
+ CastingBarFrame.Icon:SetTexCoord(.1, .9, .1, .9)
+
+ CastingBarFrame.IconF = CreateFrame('Frame', nil, CastingBarFrame, "BackdropTemplate")
+ CastingBarFrame.IconF:SetAllPoints(CastingBarFrame.Icon)
+
+ ns.BD(CastingBarFrame.IconF)
+ ns.BUBorder(CastingBarFrame.IconF, 18)
+
+ for i = 1, 4 do
+ tinsert(ns.skinbu, CastingBarFrame.IconF.bo[i])
+ CastingBarFrame.IconF.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
+ CastingBarFrame.Icon:SetParent(CastingBarFrame.IconF)
+
+ CastingBarFrame.SafeZone = CastingBarFrame:CreateTexture(nil, 'BORDER')
+ ns.SB(CastingBarFrame.SafeZone)
+ CastingBarFrame.SafeZone:SetVertexColor(.69, .31, .31)
+
+
+ PetFrame:SetPoint("TOPLEFT", -30, 30)
+end
+
+local UpdateCastingBarLatency = function(start, endtime)
+ if endtime then
+ local width = CastingBarFrame:GetWidth()
+ local _, _, _, ms = GetNetStats()
+ local x = (ms/1e3)/((endtime/1e3) - (start/1e3))
+
+ if x > 1 then x = 1 end
+
+ CastingBarFrame.SafeZone:SetWidth(width*x)
+ CastingBarFrame.SafeZone:ClearAllPoints()
+ CastingBarFrame.SafeZone:SetPoint(channel and 'LEFT' or 'RIGHT')
+ CastingBarFrame.SafeZone:SetPoint'TOP'
+ CastingBarFrame.SafeZone:SetPoint'BOTTOM'
+ end
+end
+
+local UpdateCastingBarIcon = function(texture)
+ if CastingBarFrame.Spark.offsetY < 1 then
+ CastingBarFrame.Icon:ClearAllPoints()
+ CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -25, 0)
+ else
+ CastingBarFrame.Icon:SetTexture(texture)
+ CastingBarFrame.Icon:Show()
+ CastingBarFrame.Icon:ClearAllPoints()
+ CastingBarFrame.Icon:SetPoint('LEFT', CastingBarFrame, -32, 3)
+ end
+end
+
+local UpdateCastingBar = function(channel, unit)
+
+ if UnitIsPlayer(unit) then
+ seconds = GetTime();
+ local name, _, texture, start, endtime
+ if channel then
+ name, _, texture, start, endtime = ChannelInfo()
+ else
+ name, _, texture, start, endtime = CastingInfo()
+ end
+ if name then
+ UpdateCastingBarLatency(start, endtime, channel)
+ UpdateCastingBarIcon(texture)
+ end
+ end
+end
+
+local AddFocusFrame = function()
+
+ FocusFrame.Elite = FocusFrameTextureFrame:CreateTexture(nil, 'BORDER')
+ FocusFrame.Elite:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Elite]]
+ FocusFrame.Elite:SetSize(128, 128)
+ FocusFrame.Elite:SetPoint('TOPRIGHT', FocusFrame)
+ FocusFrame.Elite:Hide()
+
+ FocusFrame.Rare = FocusFrameTextureFrame:CreateTexture(nil, 'BORDER')
+ FocusFrame.Rare:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Rare-Elite]]
+ FocusFrame.Rare:SetSize(128, 128)
+ FocusFrame.Rare:SetPoint('TOPRIGHT', FocusFrame)
+ FocusFrame.Rare:Hide()
+
+
+ FocusFrameNameBackground:SetVertexColor(0.0, 0.0, 0.0, 0.5)
+
+ FocusFrameSpellBar.Border:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+
+ FocusFrameTextureFramePVPIcon:SetAlpha(0)
+
+ FocusFrameSpellBar.Icon:SetSize(14, 14)
+ FocusFrameSpellBar.Icon:ClearAllPoints()
+ FocusFrameSpellBar.Icon:SetPoint('LEFT', FocusFrameSpellBar, -25, 0)
+ FocusFrameSpellBar.Icon:SetTexCoord(.1, .9, .1, .9)
+
+ FocusFrameSpellBar.IconF = CreateFrame('Frame', nil, FocusFrameSpellBar, "BackdropTemplate")
+ FocusFrameSpellBar.IconF:SetAllPoints(FocusFrameSpellBar.Icon)
+ ns.BD(FocusFrameSpellBar.IconF, 1, -2)
+ ns.BUBorder(FocusFrameSpellBar.IconF, 16, 16, 5, 5)
+
+
+ for i = 1, 4 do
+ tinsert(ns.skinbu, FocusFrameSpellBar.IconF.bo[i])
+ FocusFrameSpellBar.IconF.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
+ FocusFrameSpellBar.Icon:SetParent(FocusFrameSpellBar.IconF)
+end
+
+
+
+local AddTargetFrame = function()
+
+ for _, v in pairs(
+ {
+ TargetFrameTextureFrame.HealthBarText,
+ TargetFrameTextureFrame.ManaBarText,
+ }
+ ) do
+ v:SetFont(STANDARD_TEXT_FONT, 10, 'OUTLINE')
+ end
+
+ TargetFrameNameBackground:Hide()
+ TargetFrame.Elite = TargetFrameTextureFrame:CreateTexture(nil, 'BORDER')
+ TargetFrame.Elite:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Elite]]
+ TargetFrame.Elite:SetSize(128, 128)
+ TargetFrame.Elite:SetPoint('TOPRIGHT', TargetFrame)
+ TargetFrame.Elite:Hide()
+
+ TargetFrame.Rare = TargetFrameTextureFrame:CreateTexture(nil, 'BORDER')
+ TargetFrame.Rare:SetTexture[[Interface\AddOns\modui_classic\art\unitframe\UI-TargetingFrame-Rare-Elite]]
+ TargetFrame.Rare:SetSize(128, 128)
+ TargetFrame.Rare:SetPoint('TOPRIGHT', TargetFrame)
+ TargetFrame.Rare:Hide()
+
+ TargetFrameSpellBar.Border:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+
+ TargetFrameTextureFramePVPIcon:SetAlpha(0)
+
+ TargetFrameSpellBar.Icon:SetSize(14, 14)
+ TargetFrameSpellBar.Icon:ClearAllPoints()
+ TargetFrameSpellBar.Icon:SetPoint('LEFT', TargetFrameSpellBar, -25, 0)
+ TargetFrameSpellBar.Icon:SetTexCoord(.1, .9, .1, .9)
+
+ TargetFrameSpellBar.IconF = CreateFrame('Frame', nil, TargetFrameSpellBar, "BackdropTemplate")
+ TargetFrameSpellBar.IconF:SetAllPoints(TargetFrameSpellBar.Icon)
+ ns.BD(TargetFrameSpellBar.IconF, 1, -2)
+ ns.BUBorder(TargetFrameSpellBar.IconF, 16, 16, 5, 5)
+
+
+ for i = 1, 4 do
+ tinsert(ns.skinbu, TargetFrameSpellBar.IconF.bo[i])
+ TargetFrameSpellBar.IconF.bo[i]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
+ TargetFrameSpellBar.Icon:SetParent(TargetFrameSpellBar.IconF)
+end
+
+local AddToTFrame = function()
+ TargetFrameToTPortrait:SetSize(37, 37)
+ TargetFrameToTPortrait:SetPoint('TOPLEFT', 5, -5)
+end
+
+local AddTargetAura = function(self)
+ -- nb: needs update: these are being generated ad-hoc
+ for i = 1, MAX_TARGET_BUFFS do
+ local n = 'TargetFrameBuff'..i
+ local bu = _G[n]
+ local cd = _G[n..'Cooldown']
+
+ if bu and not bu.skinned then
+ ns.BUBorder(bu, 20, 20, 3, 4)
+ for j = 1, 4 do
+ tinsert(ns.skinbu, bu.bo[j])
+ bu.bo[j]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
+
+ cd:SetHideCountdownNumbers(false)
+
+ local t = cd:GetRegions()
+ t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
+ t:ClearAllPoints()
+ t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
+ bu.skinned = true
+ end
+ end
+ for i = 1, MAX_TARGET_DEBUFFS do
+ local n = 'TargetFrameDebuff'..i
+ local bu = _G[n]
+ local cd = _G[n..'Cooldown']
+
+ if bu and not bu.skinned then
+ ns.BUBorder(bu, 20, 20, 3, 4)
+ cd:SetHideCountdownNumbers(false)
+
+ local t = cd:GetRegions()
+ t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
+ t:ClearAllPoints()
+ t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
+ bu.skinned = true
+ end
+ end
+
+
+
+ for i = 1, MAX_TARGET_BUFFS do
+ local n = 'FocusFrameBuff'..i
+ local bu = _G[n]
+ local cd = _G[n..'Cooldown']
+
+ if bu and not bu.skinned then
+ ns.BUBorder(bu, 20, 20, 3, 4)
+ for j = 1, 4 do
+ tinsert(ns.skinbu, bu.bo[j])
+ bu.bo[j]:SetVertexColor(MODUI_VAR['theme'].r, MODUI_VAR['theme'].g, MODUI_VAR['theme'].b)
+ end
+
+ cd:SetHideCountdownNumbers(false)
+
+ local t = cd:GetRegions()
+ t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
+ t:ClearAllPoints()
+ t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
+ bu.skinned = true
+ end
+ end
+ for i = 1, MAX_TARGET_DEBUFFS do
+ local n = 'FocusFrameDebuff'..i
+ local bu = _G[n]
+ local cd = _G[n..'Cooldown']
+
+ if bu and not bu.skinned then
+ ns.BUBorder(bu, 20, 20, 3, 4)
+ cd:SetHideCountdownNumbers(false)
+
+ local t = cd:GetRegions()
+ t:SetFont(STANDARD_TEXT_FONT, 7, 'OUTLINE')
+ t:ClearAllPoints()
+ t:SetPoint('CENTER', cd, 'BOTTOM', 0, 3)
+ bu.skinned = true
+ end
+ end
+
+end
+
+local AddAuraDuration = function(self)
+ AddTargetAura(self)
+end
+
+local UpdateTargetNameClassColour = function()
+ TargetFrameNameBackground:SetVertexColor(0.0, 0.0, 0.0, 0.5)
+ FocusFrameNameBackground:SetVertexColor(0.0, 0.0, 0.0, 0.5)
+end
+
+local UpdatePartyTextClassColour = function()
+ for i = 1, MAX_PARTY_MEMBERS do
+ local name = _G['PartyMemberFrame'..i..'Name']
+ name:SetTextColor(1, .8, 0)
+ end
+end
+
+local CheckClassification = function(self)
+
+ local classification = UnitClassification(self.unit)
+
+ for _, v in pairs(
+ {
+ self.Elite,
+ self.Rare
+ }
+ ) do
+ v:Hide()
+ end
+
+ self.borderTexture:SetTexture[[Interface\TargetingFrame\UI-TargetingFrame]]
+
+ if classification == 'worldboss' or classification == 'elite' or classification == 'rareelite' then
+ self.Elite:Show()
+ elseif classification == 'rare' then
+ self.Rare:Show()
+ end
+end
+
+local UpdateToT = function(self, elapsed)
+ local _, class = UnitClass'targettarget'
+ local colour = RAID_CLASS_COLORS[class]
+ local name = UnitName'targettarget'
+
+ TargetFrameToTTextureFrameName:SetTextColor(1, .8, 0)
+
+ TargetFrameToTTextureFrameName:ClearAllPoints()
+ TargetFrameToTTextureFrameName:SetPoint('BOTTOMLEFT', TargetFrameToTTextureFrame, 49, 0)
+end
+
+local true_format = function(value)
+ if value > 1e7 then
+ return (math.floor(value / 1e6)) .. 'm'
+ elseif value > 1e6 then
+ return (math.floor((value / 1e6) * 10) / 10) .. 'm'
+ elseif value > 1e4 then
+ return (math.floor(value / 1e3)) .. 'k'
+ elseif value > 1e3 then
+ return (math.floor((value / 1e3) * 10) / 10) .. 'k'
+ else
+ return value
+ end
+end
+
+local New_TextStatusBar_UpdateTextStringWithValues = function(statusFrame, textString, value, valueMin, valueMax)
+ local value = statusFrame.finalValue or statusFrame:GetValue();
+ local unit = statusFrame.unit
+
+ if (statusFrame.LeftText and statusFrame.RightText) then
+ statusFrame.LeftText:SetText("");
+ statusFrame.RightText:SetText("");
+ statusFrame.LeftText:Hide();
+ statusFrame.RightText:Hide();
+ end
+
+ if ((tonumber(valueMax) ~= valueMax or valueMax > 0) and not (statusFrame.pauseUpdates)) then
+ statusFrame:Show();
+
+ if ((statusFrame.cvar and GetCVar(statusFrame.cvar) == "1" and statusFrame.textLockable) or statusFrame.forceShow) then
+ textString:Show();
+ elseif (statusFrame.lockShow > 0 and (not statusFrame.forceHideText)) then
+ textString:Show();
+ else
+ textString:SetText("");
+ textString:Hide();
+ return ;
+ end
+
+ local valueDisplay = value;
+ local valueMaxDisplay = valueMax;
+
+ local textDisplay = GetCVar("statusTextDisplay");
+ if (value and valueMax > 0 and ((textDisplay ~= "NUMERIC" and textDisplay ~= "NONE") or statusFrame.showPercentage) and not statusFrame.showNumeric) then
+ if (value == 0 and statusFrame.zeroText) then
+ textString:SetText(statusFrame.zeroText);
+ statusFrame.isZero = 1;
+ textString:Show();
+ elseif (textDisplay == "BOTH" and not statusFrame.showPercentage) then
+ if (statusFrame.LeftText and statusFrame.RightText) then
+ if (not statusFrame.powerToken or statusFrame.powerToken == "MANA") then
+ statusFrame.LeftText:SetText(math.ceil((value / valueMax) * 100) .. "%");
+ statusFrame.LeftText:Show();
+ end
+ statusFrame.RightText:SetText(valueDisplay);
+ statusFrame.RightText:Show();
+ textString:Hide();
+ else
+ valueDisplay = "(" .. math.ceil((value / valueMax) * 100) .. "%) " .. valueDisplay .. " / " .. valueMaxDisplay;
+ end
+ textString:SetText(valueDisplay);
+ else
+ valueDisplay = math.ceil((value / valueMax) * 100) .. "%";
+ if (statusFrame.prefix and (statusFrame.alwaysPrefix or not (statusFrame.cvar and GetCVar(statusFrame.cvar) == "1" and statusFrame.textLockable))) then
+ textString:SetText(statusFrame.prefix .. " " .. valueDisplay);
+ else
+ textString:SetText(valueDisplay);
+ end
+ end
+ elseif (value == 0 and statusFrame.zeroText) then
+ textString:SetText(statusFrame.zeroText);
+ statusFrame.isZero = 1;
+ textString:Show();
+ return ;
+ else
+ statusFrame.isZero = nil;
+ if (statusFrame.prefix and (statusFrame.alwaysPrefix or not (statusFrame.cvar and GetCVar(statusFrame.cvar) == "1" and statusFrame.textLockable))) then
+ textString:SetText(statusFrame.prefix .. " " .. valueDisplay .. " / " .. valueMaxDisplay);
+ else
+ if (value > 1e5) then
+ textString:SetFormattedText("%s || %.0f%%", true_format(value), 100 * value / valueMax);
+ else
+ textString:SetText(value)
+ end
+ end
+ end
+ elseif unit and UnitIsDeadOrGhost(unit) then
+ textString:SetText("")
+ else
+ textString:Hide();
+ textString:SetText("");
+ if (not statusFrame.alwaysShow) then
+ statusFrame:Hide();
+ else
+ statusFrame:SetValue(0);
+ end
+ end
+end
+
+local function OnEvent(self, event, unit)
+ if event == 'PLAYER_LOGIN' then
+ AddPlayerFrame()
+ AddTargetFrame()
+ AddToTFrame()
+ AddFocusFrame()
+ hooksecurefunc('TargetFrame_CheckClassification', CheckClassification)
+ hooksecurefunc('TargetFrame_UpdateAuras', AddAuraDuration)
+ hooksecurefunc("TextStatusBar_UpdateTextStringWithValues", New_TextStatusBar_UpdateTextStringWithValues)
+ end
+
+ if event == 'UNIT_SPELLCAST_START' or event == 'UNIT_SPELLCAST_CHANNEL_START' then
+ UpdateCastingBar(event == 'UNIT_SPELLCAST_CHANNEL_START' and true or false, unit)
+ end
+
+ UpdateTargetNameClassColour()
+end
+
+local e = CreateFrame'Frame'
+for _, v in pairs(events) do e:RegisterEvent(v) end
+e:SetScript('OnEvent', OnEvent)
+
+hooksecurefunc("PlayerFrame_UpdateStatus", function()
+ if IsResting("player") then
+ PlayerStatusTexture:Hide()
+ PlayerRestIcon:Hide()
+ PlayerRestGlow:Hide()
+ PlayerStatusGlow:Hide()
+ PlayerAttackIcon:Hide();
+ elseif PlayerFrame.inCombat then
+ PlayerStatusTexture:Hide()
+ PlayerRestIcon:Hide()
+ PlayerAttackGlow:Hide()
+ PlayerRestGlow:Hide()
+ PlayerStatusGlow:Hide()
+ PlayerAttackBackground:Hide()
+ PlayerAttackIcon:Show();
+ elseif ( PlayerFrame.onHateList ) then
+ PlayerAttackIcon:Show();
+ else
+ end
+end)
+
+PlayerHitIndicator:Hide();
+PlayerHitIndicator.Show=function() end
+
+
+PlayerFrameGroupIndicator:HookScript("OnShow", function(self) self:Hide() end);
+
+
diff --git a/worldmap/worldmap.lua b/worldmap/worldmap.lua
index f79d999..27f95c5 100755
--- a/worldmap/worldmap.lua
+++ b/worldmap/worldmap.lua
@@ -1,112 +1,116 @@
+local _, ns = ...
+
+local size = 5
+local elapsed = 0
+
+local coord = CreateFrame('Frame', nil, WorldMapFrame)
+coord:SetFrameLevel(WorldMapFrame:GetFrameLevel() + 2)
+coord:SetPoint('BOTTOM', WorldMapFrame, 8, 10)
+coord:SetSize(200, 16)
+
+coord.Player = coord:CreateFontString(nil, 'OVERLAY')
+coord.Player:SetFont(STANDARD_TEXT_FONT, 13, 'OUTLINE')
+coord.Player:SetShadowOffset(0, -0)
+coord.Player:SetJustifyH'CENTER'
+coord.Player:SetPoint('BOTTOM', -100, 0)
+coord.Player:SetTextColor(1, 1, 1)
+
+coord.Cursor = coord:CreateFontString(nil, 'OVERLAY')
+coord.Cursor:SetFont(STANDARD_TEXT_FONT, 13, 'OUTLINE')
+coord.Cursor:SetShadowOffset(0, -0)
+coord.Cursor:SetJustifyH'CENTER'
+coord.Cursor:SetPoint('BOTTOM', 100, 0)
+coord.Cursor:SetTextColor(1, 1, 1)
+
+coord:SetScript('OnUpdate', function(self, elapsed)
+ local x, y
+ local id = C_Map.GetBestMapForUnit'player'
+ if id then
+ local player = C_Map.GetPlayerMapPosition(id, 'player')
+ if player then
+ x, y = player:GetXY()
+ end
+ end
-
- local _, ns = ...
-
- local size = 5
- local elapsed = 0
-
- local coord = CreateFrame('Frame', nil, WorldMapFrame)
- coord:SetFrameLevel(WorldMapFrame:GetFrameLevel() + 2)
- coord:SetPoint('BOTTOM', WorldMapFrame, 8, 10)
- coord:SetSize(200, 16)
-
- coord.Player = coord:CreateFontString(nil, 'OVERLAY')
- coord.Player:SetFont(STANDARD_TEXT_FONT, 13, 'OUTLINE')
- coord.Player:SetShadowOffset(0, -0)
- coord.Player:SetJustifyH'CENTER'
- coord.Player:SetPoint('BOTTOM', -100, 0)
- coord.Player:SetTextColor(1, 1, 1)
-
- coord.Cursor = coord:CreateFontString(nil, 'OVERLAY')
- coord.Cursor:SetFont(STANDARD_TEXT_FONT, 13, 'OUTLINE')
- coord.Cursor:SetShadowOffset(0, -0)
- coord.Cursor:SetJustifyH'CENTER'
- coord.Cursor:SetPoint('BOTTOM', 100, 0)
- coord.Cursor:SetTextColor(1, 1, 1)
-
- coord:SetScript('OnUpdate', function(self, elapsed)
- local x, y
- local id = C_Map.GetBestMapForUnit'player'
- if id then
- local player = C_Map.GetPlayerMapPosition(id, 'player')
- if player then
- x, y = player:GetXY()
+ x = x or 0
+ y = y or 0
+
+ coord.Player:SetShown(x + y > 0)
+ coord.Player:SetText(PLAYER..format(': %.0f / %.0f', x*100, y*100))
+
+ x, y = WorldMapFrame.ScrollContainer:GetNormalizedCursorPosition()
+
+ coord.Cursor:SetShown(x + y > 0)
+ coord.Cursor:SetText('Mouse'..format(': %.0f / %.0f', x*100, y*100))
+end)
+
+
+WorldMapFrame:HookScript('OnUpdate', function(self, e)
+ elapsed = elapsed + e
+ if elapsed > .5 then -- update frequency
+ elapsed = 0
+ local groupSize = GetNumGroupMembers()
+ if groupSize > 0 then
+ local groupType = IsInRaid() and 'Raid' or 'Party'
+ for i = 1, groupSize do
+ local f = _G['WorldMap'..groupType..i]
+ if f then
+ if not f.overlay then
+ f.overlay = f:CreateTexture(nil, 'OVERLAY')
+ f.overlay:SetDrawLayer('OVERLAY', 7)
+ end
+
+ f.overlay:ClearAllPoints()
+
+ if WorldMapFrame_InWindowedMode() then
+ f.overlay:SetPoint('TOPLEFT', f.icon, -size - 6, size + 6)
+ f.overlay:SetPoint('BOTTOMRIGHT', f.icon, size + 6, -size - 6)
+ else
+ f.overlay:SetPoint('TOPLEFT', f.icon, -size, size)
+ f.overlay:SetPoint('BOTTOMRIGHT', f.icon, size, -size)
+ end
+
+ local _, _, subgroup = GetRaidRosterInfo(i)
+
+ f.overlay:SetTexture(groupType == 'Raid' and ('Interface\\AddOns\\modui\\art\\worldmap\\raid'..subgroup) or 'Interface\\AddOns\\modui\\art\\worldmap\\party')
+ if f.unit and f:IsShown() then
+ local _, class = UnitClass(f.unit)
+ local color = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
+ if color then
+ f.overlay:SetVertexColor(color.r, color.g, color.b)
+ else
+ f.overlay:SetVertexColor(103/255, 103/255, 103/255)
+ end
+ if GetTime()%1 < .5 then
+ if UnitAffectingCombat(f.unit) then
+ f.overlay:SetVertexColor(1, 0, 0)
+ elseif UnitIsDeadOrGhost(f.unit) then
+ f.overlay:SetVertexColor(.2, .2, .2)
+ elseif UnitIsAFK(f.unit) then
+ f.overlay:SetVertexColor(89/255, 0/255, 165/255)
+ end
+ end
+ end
+ end
end
end
-
- x = x or 0
- y = y or 0
-
- coord.Player:SetShown(x + y > 0)
- coord.Player:SetText(PLAYER..format(': %.0f / %.0f', x*100, y*100))
-
- x, y = WorldMapFrame.ScrollContainer:GetNormalizedCursorPosition()
-
- coord.Cursor:SetShown(x + y > 0)
- coord.Cursor:SetText('Mouse'..format(': %.0f / %.0f', x*100, y*100))
- end)
-
-
- WorldMapFrame:HookScript('OnUpdate', function(self, e)
- elapsed = elapsed + e
- if elapsed > .5 then -- update frequency
- elapsed = 0
- local groupSize = GetNumGroupMembers()
- if groupSize > 0 then
- local groupType = IsInRaid() and 'Raid' or 'Party'
- for i = 1, groupSize do
- local f = _G['WorldMap'..groupType..i]
- if f then
- if not f.overlay then
- f.overlay = f:CreateTexture(nil, 'OVERLAY')
- f.overlay:SetDrawLayer('OVERLAY', 7)
- end
-
- f.overlay:ClearAllPoints()
-
- if WorldMapFrame_InWindowedMode() then
- f.overlay:SetPoint('TOPLEFT', f.icon, -size - 6, size + 6)
- f.overlay:SetPoint('BOTTOMRIGHT', f.icon, size + 6, -size - 6)
- else
- f.overlay:SetPoint('TOPLEFT', f.icon, -size, size)
- f.overlay:SetPoint('BOTTOMRIGHT', f.icon, size, -size)
- end
-
- local _, _, subgroup = GetRaidRosterInfo(i)
-
- f.overlay:SetTexture(groupType == 'Raid' and ('Interface\\AddOns\\modui\\art\\worldmap\\raid'..subgroup) or 'Interface\\AddOns\\modui\\art\\worldmap\\party')
- if f.unit and f:IsShown() then
- local _, class = UnitClass(f.unit)
- local color = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
- if color then
- f.overlay:SetVertexColor(color.r, color.g, color.b)
- else
- f.overlay:SetVertexColor(103/255, 103/255, 103/255)
- end
- if GetTime()%1 < .5 then
- if UnitAffectingCombat(f.unit) then
- f.overlay:SetVertexColor(1, 0, 0)
- elseif UnitIsDeadOrGhost(f.unit) then
- f.overlay:SetVertexColor(.2, .2, .2)
- elseif UnitIsAFK(f.unit) then
- f.overlay:SetVertexColor(89/255, 0/255, 165/255)
- end
- end
- end
- end
- end
- end
- end
- end)
-
- WorldMapFrame:SetScale(.8)
- WorldMapFrame.BlackoutFrame:EnableMouse(false)
- WorldMapFrame.BlackoutFrame:SetAlpha(0)
-
- WorldMapFrame.ScrollContainer.GetCursorPosition = function(frame)
- local x, y = MapCanvasScrollControllerMixin.GetCursorPosition(frame)
- local s = WorldMapFrame:GetScale()
- return x/s, y/s
end
+end)
+
+WorldMapFrame:SetScale(.8)
+WorldMapFrame.BlackoutFrame:EnableMouse(false)
+WorldMapFrame.BlackoutFrame:SetAlpha(0)
+
+local WorldMapHolder = CreateFrame("Frame", nil, UIParent)
+WorldMapHolder:SetSize(WorldMapFrame:GetWidth(), WorldMapFrame:GetHeight())
+WorldMapHolder:SetPoint("CENTER", UIParent, 0, 0)
+
+WorldMapFrame:SetParent(WorldMapHolder)
+WorldMapFrame:ClearAllPoints()
+WorldMapFrame:SetPoint("CENTER", WorldMapHolder, 0, 0)
- --
+WorldMapFrame.ScrollContainer.GetCursorPosition = function(frame)
+ local x, y = MapCanvasScrollControllerMixin.GetCursorPosition(frame)
+ local s = WorldMapFrame:GetScale()
+ return x/s, y/s
+end