if select(2, UnitClass('player')) ~= 'SHAMAN' then return end |
|
local _G = _G |
local TL, TC, TR = 'TOPLEFT', 'TOP', 'TOPRIGHT' |
local ML, MC, MR = 'LEFT', 'CENTER', 'RIGHT' |
local BL, BC, BR = 'BOTTOMLEFT', 'BOTTOM', 'BOTTOMRIGHT' |
|
local ADDON_NAME = 'idShamanTotemButtons' |
local BUTTON_NAME = ADDON_NAME .. 'Button' |
local BUTTON_PADDING = 1 |
|
local addon = CreateFrame('Frame') |
|
local earthtotems = { |
8143,--'Tremor Totem', |
8075,--'Strength of Earth Totem', |
2484,--'Earthbind Totem', |
8071,--'Stoneskin Totem', |
2062,--'Earth Elemental Totem', |
5730,--'Stoneclaw Totem', |
} |
|
local firetotems = { |
1535,--'Fire Nova Totem', |
8181,--'Frost Resistance Totem', |
8190,--'Magma Totem', |
3599,--'Searing Totem', |
2894,--'Fire Elemental Totem', |
8227,--'Flametongue Totem', |
} |
if select(5, GetTalentInfo(1, 20)) > 0 then |
table.insert(firetotems, 1, 30706)--'Totem of Wrath',--TALENT |
end |
|
local windtotems = { |
3738,--'Wrath of Air Totem', |
8512,--'Windfury Totem', |
8835,--'Grace of Air Totem', |
8177,--'Grounding Totem', |
10595,--'Nature Resistance Totem', |
6495,--'Sentry Totem', |
15107,--'Windwall Totem', |
25908,--'Tranquil Air Totem', |
} |
|
local watertotems = { |
5675,--'Mana Spring Totem', |
8166,--'Poison Cleansing Totem', |
8170,--'Disease Cleansing Totem', |
8184,--'Fire Resistance Totem', |
5394,--'Healing Stream Totem', |
} |
if select(5, GetTalentInfo(3, 16)) > 0 then |
table.insert(firetotems, 16190)--'Mana Tide Totem',--TALENT |
end |
|
local totemtypes = { |
windtotems, |
watertotems, |
earthtotems, |
firetotems, |
} |
|
function addon:createButton (name) |
local button = CreateFrame('CheckButton', name, UIParent, 'SecureActionButtonTemplate, ActionButtonTemplate') |
local icon = _G[name .. 'Icon'] |
local texture = _G[name .. 'NormalTexture2'] or _G[name .. 'NormalTexture'] |
local checkedtexture = _G[name]:GetCheckedTexture():SetTexture() |
|
button:RegisterForClicks('AnyUp') |
|
_G[name..'Name']:Hide() |
_G[name..'HotKey']:Hide() |
|
icon:SetTexCoord(0.08,0.92,0.08,0.92) |
texture:SetTexCoord(0,0,0,0) |
|
return button |
end |
|
function addon:setButtonSpell(button, spellid) |
local name = GetSpellInfo(spellid) |
|
if not GetSpellTexture(name) then |
return |
end |
|
self.Totems[name] = button |
|
button:SetAttribute('type', 'spell') |
button:SetAttribute('spell', name) |
|
_G[button:GetName()..'Icon']:SetTexture(GetSpellTexture(name)) |
|
button:SetScript('OnEnter', function () |
GameTooltip:SetOwner(this, 'ANCHOR_RIGHT') |
GameTooltip:SetHyperlink(GetSpellLink(spellid)) |
GameTooltip:Show() |
end) |
button:SetScript('OnLeave', function () |
GameTooltip:Hide() |
end) |
end |
|
function addon:createBar (name, first, last, p1, p2, padding) |
local bar = CreateFrame('Frame', name, UIParent) |
local cols = last - first + 1 |
local button |
|
bar.Buttons = {} |
|
for i = first, last do |
button = self:createButton(BUTTON_NAME .. i) |
table.insert(bar.Buttons, button) |
button:SetParent(bar) |
button:ClearAllPoints() |
|
if i == first then |
button:SetPoint(p1, bar, p1, 0, 0) |
else |
button:SetPoint(p1, _G[BUTTON_NAME .. i - 1], p2, padding, 0) |
end |
end |
|
bar:SetWidth(button:GetWidth() * cols + (cols - 1) * BUTTON_PADDING) |
bar:SetHeight(button:GetHeight()) |
|
return bar |
end |
|
function addon:PLAYER_LOGIN () |
-- EARTH! |
-- FIRE! |
-- WIND! |
-- WATER! |
-- HEART! |
-- Go Planet! |
-- |
-- By your powers combined, I am Captain Planet! |
-- |
-- Captain Planet, He's our hero |
-- Gonna take pollution down to zero |
-- |
-- He's our powers magnified |
-- And he's fighting on the planet's side |
-- |
-- Captain Planet, He's out hero |
-- Gonna take pollution down to zero |
-- |
-- Gonna help him put asunder |
-- Bad guys who like to loot and plunder |
-- |
-- "You'll pay for this, Captain Planet!" |
-- |
-- We're the Planeteers |
-- You can be one too |
-- 'Cause saving our planet is the thing to do! |
-- |
-- Looting and Polluting is not the way |
-- Hear what Captain planet has to say! |
-- |
-- The power is yours! |
|
|
local earth = self:createBar(ADDON_NAME .. 'BarEarth', 1, 6, ML, MR, BUTTON_PADDING) |
local fire = self:createBar(ADDON_NAME .. 'BarFire', 7, 13, ML, MR, BUTTON_PADDING) |
local wind = self:createBar(ADDON_NAME .. 'BarWind', 14, 21, ML, MR, BUTTON_PADDING) |
local water = self:createBar(ADDON_NAME .. 'BarWater', 22, 27, ML, MR, BUTTON_PADDING) |
|
self.Totems = {} |
self.Bars = {} |
self.Bars.Earth = earth |
self.Bars.Fire = fire |
self.Bars.Wind = wind |
self.Bars.Water = water |
|
for i=1,#earthtotems do |
self:setButtonSpell(earth.Buttons[i], earthtotems[i]) |
end |
for i=1,#firetotems do |
self:setButtonSpell(fire.Buttons[i], firetotems[i]) |
end |
for i=1,#windtotems do |
self:setButtonSpell(wind.Buttons[i], windtotems[i]) |
end |
for i=1,#watertotems do |
self:setButtonSpell(water.Buttons[i], watertotems[i]) |
end |
|
earth:SetPoint(MC, UIParent, MC, 400, 0) |
fire:SetPoint(TL, earth, BL, 0, -BUTTON_PADDING) |
wind:SetPoint(TL, fire, BL, 0, -BUTTON_PADDING) |
water:SetPoint(TL, wind, BL, 0, -BUTTON_PADDING) |
end |
|
function addon:PLAYER_TOTEM_UPDATE (totemtype) |
local name |
local texture |
|
for i, spellid in ipairs(totemtypes[totemtype]) do |
name = GetSpellInfo(spellid) |
texture = GetSpellTexture(name) |
if texture then |
self.Totems[name]:SetButtonState('NORMAL') |
end |
end |
end |
|
function addon:SPELL_UPDATE_COOLDOWN () |
local name |
local texture |
local start, duration, enable |
|
for i, totemtype in ipairs(totemtypes) do |
for j, spellid in ipairs(totemtype) do |
name = GetSpellInfo(spellid) |
texture = GetSpellTexture(name) |
if texture then |
start, duration, enable = GetSpellCooldown(name) |
CooldownFrame_SetTimer(_G[self.Totems[name]:GetName() .. 'Cooldown'], start, duration, enable) |
end |
end |
end |
end |
|
function addon.OnEvent (frame, event, ...) |
if event == 'PLAYER_LOGIN' then |
addon:PLAYER_LOGIN() |
elseif event == 'PLAYER_TOTEM_UPDATE' then |
addon:PLAYER_TOTEM_UPDATE(...) |
elseif event == 'SPELL_UPDATE_COOLDOWN' then |
addon:SPELL_UPDATE_COOLDOWN(...) |
end |
end |
|
addon:SetScript('OnEvent', addon.OnEvent) |
addon:RegisterEvent('PLAYER_LOGIN') |
addon:RegisterEvent('PLAYER_TOTEM_UPDATE') |
addon:RegisterEvent('SPELL_UPDATE_COOLDOWN') |
|
_G.idShamanTotemButtons = addon |
|