/branches
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<Frame name="DA_MenuContainer" toplevel="true" frameStrata="HIGH" virtual="true"> |
<Size><AbsDimension x="220" y="32"/></Size> |
<Backdrop bgFile="Interface\Tooltips\UI-Tooltip-Background" edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true"> |
<EdgeSize><AbsValue val="16"/></EdgeSize> |
<TileSize><AbsValue val="16"/></TileSize> |
<BackgroundInsets><AbsInset left="5" right="5" top="5" bottom="5"/></BackgroundInsets> |
</Backdrop> |
</Frame> |
<Button name="DA_MinimapButton" frameStrata="LOW" movable="true" virtual="true"> |
<Size><AbsDimension x="32" y="32"/></Size> |
<NormalTexture file="Interface\AddOns\DagAssist\Images\MinmapIcon" /> |
<PushedTexture file="Interface\AddOns\DagAssist\Images\MinmapIconDown" /> |
</Button> |
<Button name="DA_MenuButtonTemplate" virtual="true"> |
<Size> |
<AbsDimension x="200" y="18"/> |
</Size> |
<ButtonText name="$parentText" justifyH="LEFT" justifyV="MIDDLE" > |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parent" relativePoint="LEFT"> |
</Anchor> |
</Anchors> |
</ButtonText> |
<NormalFont style="GameFontHighlightSmall"/> |
<HighlightFont style="GameFontHighlightSmall"/> |
<DisabledFont style="GameFontDisableSmall"/> |
<HighlightTexture setAllPoints="true"> |
<Color r="1" g="1" b="0" a="0.1" /> |
</HighlightTexture> |
<PushedTexture setAllPoints="true"> |
<Color r="0" g="1" b="1" a="0.1" /> |
</PushedTexture > |
</Button> |
<Button name="DA_MenuSpellButtonTemplate" inherits="DA_MenuButtonTemplate" virtual="true"> |
<ButtonText name="$parentText" justifyH="LEFT" justifyV="MIDDLE" > |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parent" relativePoint="LEFT"> |
<Offset><AbsDimension x="29" y="0"/></Offset> |
</Anchor> |
</Anchors> |
</ButtonText> |
<Layers> |
<Layer level="OVERLAY"> |
<Texture name="$parentIcon"> |
<Size><AbsDimension x="17" y="17"/></Size> |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parent" relativePoint="LEFT"> |
<Offset><AbsDimension x="10" y="0"/></Offset> |
</Anchor> |
</Anchors> |
</Texture> |
</Layer> |
</Layers> |
</Button> |
<Button name="DA_MenuLabelTemplate" virtual="true" > |
<Size> |
<AbsDimension x="200" y="18"/> |
</Size> |
<ButtonText name="$parentText" justifyH="LEFT" justifyV="MIDDLE"> |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parent" relativePoint="LEFT"> |
<Offset><AbsDimension x="5" y="0"/></Offset> |
</Anchor> |
</Anchors> |
</ButtonText> |
<NormalFont style="GameFontNormalSmall"/> |
<HighlightFont style="GameFontNormalSmall"/> |
<DisabledFont style="GameFontNormalSmall"/> |
<PushedTextOffset> |
<AbsDimension x="0" y="0" /> |
</PushedTextOffset> |
</Button> |
</Ui> |
------------------------------------------------ |
-- DagAssist -- |
-- Dagos of Cenarius -- |
------------------------------------------------ |
if (not DagAssist) then |
DagAssist = {}; |
end |
function DagAssist:Debug(msg) |
DEFAULT_CHAT_FRAME:AddMessage(msg); |
end |
--Set up the minimap button |
DagAssist.MinimapButton = CreateFrame("Button", "DA_Minimap", Minimap, "SecureHandlerClickTemplate, DA_MinimapButton"); |
local btnMinimap = DagAssist.MinimapButton; |
btnMinimap:RegisterForDrag("LeftButton"); |
btnMinimap:SetClampedToScreen(true); |
local texture = btnMinimap:CreateTexture(nil, "ARTWORK"); |
texture:SetTexture("Interface\\AddOns\\DagAssist\\Images\\MinmapIconHighlight"); |
texture:SetBlendMode("BLEND"); |
texture:SetAllPoints(btnMinimap); |
btnMinimap:SetHighlightTexture(texture); |
-- btnMinimap:SetAttribute("_onenter", [[ |
-- keepOpen = true; |
-- ]]); |
-- btnMinimap:SetAttribute("_onleave", [[ |
-- keepOpen = false; |
-- control:SetTimer(2.5, ""); |
-- ]]); |
-- btnMinimap:SetAttribute("_ontimer", [[ |
-- if not keepOpen then |
-- control:Run(Close); |
-- end |
-- ]]); |
-- btnMinimap:SetAttribute("_onupdate", [[ |
-- if self:IsUnderMouse(true) then |
-- open = 0 |
-- else |
-- open = open + elapsed |
-- end |
-- if open > 2.5 then |
-- control:Run(Close) |
-- end |
-- ]]); |
DagAssist.Menu = CreateFrame("Frame", "DA_Menu", btnMinimap, "SecureHandlerBaseTemplate, DA_MenuContainer"); |
DagAssist.Menu:SetClampedToScreen(true); |
DagAssist.Menu:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b); |
DagAssist.Menu:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b, 1); |
DagAssist.Menu:Hide(); |
btnMinimap:SetFrameRef("dag_menu", DagAssist.Menu); |
btnMinimap:Execute([[ |
menuItems = table.new(); |
Close = [=[ |
self:GetFrameRef("dag_menu"):Hide(); |
]=] |
Show = [=[ |
local previous; |
local dag_menu = self:GetFrameRef("dag_menu"); |
dag_menu:Show(); |
dag_menu:SetPoint("TOPLEFT", self, "BOTTOMLEFT"); |
local menuHeight = 20; |
for i, button in ipairs(menuItems) do |
local visible = button:GetAttribute("visible"); |
local enabled = button:GetAttribute("enabled"); |
if (visible) then |
menuHeight = menuHeight + 18; |
if (previous) then |
button:SetPoint("TOPLEFT", previous, "BOTTOMLEFT"); |
else |
button:SetPoint("TOPLEFT", dag_menu, "TOPLEFT", 10, -10); |
end |
if (enabled) then |
button:Enable(); |
else |
button:Disable(); |
end |
previous = button; |
button:Show(); |
else |
button:Hide(); |
end |
end |
dag_menu:SetHeight(menuHeight); |
]=] |
table.insert(menuItems, dag_menu); |
]]); |
btnMinimap:SetAttribute("_onclick", [[ |
if self:GetFrameRef("dag_menu"):IsVisible() then |
control:Run(Close); |
else |
control:Run(Show); |
end |
]]); |
btnMinimap:SetScript("OnDragStart", |
function(self, event, ...) |
self:StartMoving(); |
self.Dragging = true; |
if (InCombatLockdown() ~= 1) then |
btnMinimap:Execute([[ |
control:Run(Close); |
]]); |
end |
end |
) |
btnMinimap:SetScript("OnDragStop", |
function(self, event, ...) |
self:StopMovingOrSizing(); |
if (self.Dragging) then |
self.Dragging = false; |
local s = self:GetEffectiveScale(); |
DA_Vars.Minimap.X = self:GetLeft() * s; |
DA_Vars.Minimap.Y = self:GetTop() * s; |
end |
end |
) |
btnMinimap:SetScript("OnEnter", |
function(self, event, ...) |
DagAssist:SetMenuItemVisibility(); |
end |
) |
btnMinimap:RegisterForClicks("AnyDown"); |
btnMinimap:SetScript("OnEvent", function(self, event, ...) |
if (type(DagAssist[event]) == 'function') then |
DagAssist[event](DagAssist, event); |
end |
end) |
btnMinimap:RegisterEvent("VARIABLES_LOADED"); |
function DagAssist:VARIABLES_LOADED(event) |
if (not DA_Vars) then |
DA_Vars = {Minimap = {}}; |
end |
if (DA_Vars.Minimap.X and DA_Vars.Minimap.Y) then |
--Restore last position |
local s = btnMinimap:GetEffectiveScale(); |
btnMinimap:ClearAllPoints() |
btnMinimap:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", DA_Vars.Minimap.X / s, DA_Vars.Minimap.Y /s); |
else |
btnMinimap:SetPoint("CENTER", Minimap, "BOTTOMLEFT", 15, 15); |
end |
local menu = DagAssist.Menu; |
for index = 1, table.getn(DagAssist.MenuList) do |
local value = DagAssist.MenuList[index]; |
if ((value.type == "spell" or value.type == "buff") and value.id) then |
value.text = GetSpellInfo(value.id); |
elseif (value.type == "item" and value.id) then |
value.text = GetItemInfo(value.id); |
end |
local btnMenuItem; |
if (value.type == "header") or (value.type == "spacer") then |
btnMenuItem = CreateFrame("Button", "DA_MenuButton"..index, menu, "SecureHandlerBaseTemplate, DA_MenuLabelTemplate"); |
if (value.text == "" and value.reagent and value.reagent ~= "") then |
value.text = GetItemInfo(value.reagent); |
end |
elseif value.type == "spell" or value.type == "buff" then |
btnMenuItem = CreateFrame("Button", "DA_MenuButton"..index, menu, "SecureActionButtonTemplate, SecureHandlerBaseTemplate, DA_MenuSpellButtonTemplate"); |
btnMenuItem:SetAttribute("type","spell"); |
btnMenuItem:SetAttribute("*spell1",value.text); |
btnMenuItem:SetAttribute("checkselfcast","1"); |
btnMenuItem:SetAttribute("checkfocuscast","1"); |
elseif value.type == "item" then |
btnMenuItem = CreateFrame("Button", "DA_MenuButton"..index, menu, "SecureActionButtonTemplate, SecureHandlerBaseTemplate, DA_MenuSpellButtonTemplate"); |
btnMenuItem:SetAttribute("type","item"); |
btnMenuItem:SetAttribute("*item1", value.text); |
btnMenuItem:SetAttribute("checkselfcast","1"); |
btnMenuItem:SetAttribute("checkfocuscast","1"); |
end |
btnMenuItem:SetFrameRef("dag_menu", DagAssist.Menu); |
btnMinimap:WrapScript(btnMenuItem, "OnClick", [[control:Run(Close)]]) |
btnMenuItem:SetClampedToScreen(true); |
btnMenuItem:SetAttribute("visible", false); |
btnMenuItem:SetAttribute("enabled", false); |
value.button = btnMenuItem; |
value.buttonIcon = _G["DA_MenuButton"..index.."Icon"]; |
DagAssist:SetButtonIcon(value); |
btnMenuItem:SetFrameLevel(btnMenuItem:GetFrameLevel() + 1); |
btnMenuItem:SetText(value.text); |
btnMinimap:SetFrameRef("child", btnMenuItem); |
btnMinimap:Execute([[ |
table.insert(menuItems, self:GetFrameRef("child")); |
]]); |
end |
--Add the close button |
btnMenuItem = CreateFrame("Button", "DA_MenuButtonClose", menu, "SecureActionButtonTemplate, SecureHandlerBaseTemplate, DA_MenuButtonTemplate"); |
btnMenuItem:SetText("Close"); |
btnMenuItem:SetAttribute("type", "click"); |
btnMenuItem:SetAttribute("clickbutton", btnMinimap); |
btnMenuItem:SetAttribute("visible", true); |
btnMenuItem:SetAttribute("enabled", true); |
btnMinimap:SetFrameRef("child", btnMenuItem); |
btnMinimap:Execute([[ |
table.insert(menuItems, self:GetFrameRef("child")); |
]]); |
DagAssist:SetMenuItemVisibility(); |
DagAssist.MinimapButton:Show(); |
btnMinimap:RegisterEvent("BAG_UPDATE"); |
btnMinimap:RegisterEvent("LEARNED_SPELL_IN_TAB"); |
btnMinimap:RegisterEvent("PLAYER_REGEN_DISABLED"); |
btnMinimap:RegisterEvent("PLAYER_REGEN_ENABLED"); |
end |
function DagAssist:BAG_UPDATE(event) |
DagAssist:SetMenuItemVisibility(); |
end |
function DagAssist:LEARNED_SPELL_IN_TAB(event) |
DagAssist:SetMenuItemVisibility(); |
end |
function DagAssist:PLAYER_REGEN_DISABLED(event) |
DagAssist:SetMenuItemVisibility(); |
end |
function DagAssist:PLAYER_REGEN_ENABLED(event) |
DagAssist:SetMenuItemVisibility(); |
end |
function DagAssist:PlayerKnowsSpell(spellId) |
-- Calling GetSpellInfo with the spellID will always return spell information. |
-- Calling GetSpellInfo with the spell name will only return a value if the player knows the spell |
-- By nesting two calls to GetSpellInfo, we can test if the player knows the spellId |
local value = GetSpellInfo(spellId); |
if (value ~= nil) then |
return (GetSpellInfo(value) ~= nil); |
else |
return false; |
end |
end |
function DagAssist:SetMenuItemVisibility() |
--Don't update the menu item visibility if the player is in combat. |
if (InCombatLockdown()) then |
return; |
end |
local previousItem = nil; |
for index = 1, table.getn(DagAssist.MenuList) do |
local value = DagAssist.MenuList[index]; |
if (not value.text) then |
if ((value.type == "spell" or value.type == "buff") and value.id) then |
value.text = GetSpellInfo(value.id); |
elseif (value.type == "item" and value.id) then |
value.text = GetItemInfo(value.id); |
end |
end |
if ((value.button) and (value.reagent) and (value.reagent ~= "")) then |
if (not value.reagentname) then value.reagentname = GetItemInfo(value.reagent) end |
if (value.text and value.reagentname) then |
-- If the item acting as reagent has never been seen by this client, then value.reagentname will be nil |
value.button:SetText(value.text .. " (" .. GetItemCount(value.reagentname, false) .. ")"); |
end |
end |
if ((value.type) and (value.type ~= "") and (value.button)) then |
if (value.type == "header") then |
value.visible = true; |
elseif ((value.type == "spell") or (value.type == "buff")) then |
if ((value.text) and (value.text ~= "")) then |
if (DagAssist:PlayerKnowsSpell(value.text)) then |
value.visible = true; |
if (not value.IconSet) then |
DagAssist:SetButtonIcon(value); |
end |
if (IsUsableSpell(value.text)) then |
value.enabled = true; |
else |
value.enabled = false; |
end |
local startTime, duration, cooldownEnabled; |
startTime, duration, cooldownEnabled = GetSpellCooldown(value.id); |
local secondsRemaining = math.ceil(duration - (GetTime() - startTime)); |
if (secondsRemaining > 1) then |
if (secondsRemaining > 60) then |
secondsRemaining = math.ceil(secondsRemaining / 60); |
secondsRemaining = string.format(MINUTES_ABBR, secondsRemaining); |
else |
secondsRemaining = string.format(SECONDS_ABBR, secondsRemaining); |
end |
value.enabled = false; |
value.button:SetText(value.text.." ("..secondsRemaining..")"); |
else |
value.button:SetText(value.text); |
end |
else |
value.visible = false; |
end |
else |
value.visible = false; |
end |
elseif (value.type == "item") then |
value.visible = true; |
if (not value.IconSet) then |
DagAssist:SetButtonIcon(value); |
end |
if (GetItemCount(value.text, false)) > 0 then |
local displayName = value.text; |
if (value.hearthstone) then |
--Set the text and cooldown |
displayName = GetBindLocation(); |
end |
local startTime, duration, cooldownEnabled; |
startTime, duration, cooldownEnabled = GetItemCooldown(value.id); |
local secondsRemaining = math.ceil(duration - (GetTime() - startTime)); |
if ((cooldownEnabled == 1) and (secondsRemaining > 1)) then |
if (secondsRemaining > 60) then |
secondsRemaining = math.ceil(secondsRemaining / 60); |
secondsRemaining = string.format(MINUTES_ABBR, secondsRemaining); |
else |
secondsRemaining = string.format(SECONDS_ABBR, secondsRemaining); |
end |
value.enabled = false; |
value.button:SetText(displayName.." ("..secondsRemaining..")"); |
else |
value.enabled = true; |
value.button:SetText(displayName); |
end |
else |
value.enabled = false; |
end |
elseif (value.type == "special") then |
value.visible = true; |
elseif (value.type == "spacer") then |
value.visible = true; |
end |
if (value.enabled) then |
value.button:SetAttribute("enabled", true); |
else |
value.button:SetAttribute("enabled", false); |
end |
if (value.visible) then |
if previousItem then |
if ((value.type == "header") and (previousItem.type == "header")) then |
if previousItem.button then |
previousItem.button:SetAttribute("visible", false); |
end |
previousItem = previousItem.previous; |
end |
end |
if previousItem then |
value.count = previousItem.count + 1; |
value.previous = previousItem; |
else |
value.count = 1; |
end |
previousItem = value; |
value.button:SetAttribute("visible", true); |
else |
value.button:SetAttribute("visible", false); |
end |
end |
end |
end |
function DagAssist:SetButtonIcon(tableEntry) |
local itemTexture; |
if (tableEntry.text) then |
if ((tableEntry.type == "spell") or (tableEntry.type == "buff")) then |
itemTexture = GetSpellTexture(tableEntry.text); |
elseif tableEntry.type == "item" then |
--Get the item texture |
_, _, _, _, _, _, _, _, _, itemTexture = GetItemInfo(tableEntry.text); |
end |
end |
if (itemTexture) then |
tableEntry.buttonIcon:SetTexture(itemTexture); |
tableEntry.IconSet = true; |
end |
end |
------------------------------------------------ |
-- DagAssist -- |
-- Dagos of Cenarius -- |
------------------------------------------------ |
2.07 |
* Updated Paladin and Warlock menus with suggestions from Raloo @ Wowinterface. Thanks! |
2.06 |
* Added Aspect of the Dragonhawk |
2.05 |
* Updated for 3.0.8 |
2.04 |
* Added Deathgate and Runeforging for Death Knights |
* Fixed the redundant Track Humanoids |
2.03 |
* Fixed problem with items not in the cache causing an error on first startup |
* Self-cast and focus-cast shortcuts now work |
* Glowing-hand selection now functions properly |
* Added spell cooldowns |
* Fixed the %d problem with spell & item cooldowns |
2.02 |
* Fixed the buff type |
2.01 |
* Fixed several small bugs |
2.0 |
* Initial release for 3.0 / WotLK |
* Complete rewrite of inner workings |
* Added many abilities and professions |
* Translations are no longer necessary. Using the built-in localization for everything |
## Interface: 40000 |
## Title: DagAssist |
## Author: Dagos (Cenarius) |
## Notes: Convenient shortcut menu |
## Version: 4.00 |
## DefaultState: enabled |
## LoadOnDemand: 0 |
## SavedVariablesPerCharacter: DA_Vars |
DagAssist_Menu.lua |
DagAssist.xml |
DagAssist.lua |
------------------------------------------------ |
-- DagAssist -- |
-- Dagos of Cenarius -- |
------------------------------------------------ |
if (not DagAssist) then |
DagAssist = {}; |
end |
-------------------------------------------------- |
-- To find a spell or item ID, use Wowhead. Look up the item or spell and the check the URL for the ID |
-- TelePort:Ironforge = http://www.wowhead.com/?spell=3562 |
-- ID = 3562 |
-------------------------------------------------- |
DagAssist.MenuList = { |
----------- |
--CLASS ABILITIES-- |
----------- |
--WARRIOR |
{["text"] = CLASS, ["type"] = "header"}, |
--DEATHKNIGHT |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 50977}, --Death Gate |
{["type"] = "spell", ["id"] = 53428}, --Runeforging |
--PALADIN |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 48950}, --Redemption |
{["type"] = "spell", ["id"] = 25780}, --Righteous Fury |
{["type"] = "spell", ["id"] = 5502}, --Sense Undead |
--Seals |
{["text"] = "Seals", ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 20165}, --Seal of Light |
{["type"] = "spell", ["id"] = 20166}, --Seal of Wisdom |
{["type"] = "spell", ["id"] = 21084}, --Seal of Righteousness |
{["type"] = "spell", ["id"] = 31801}, --Seal of Vengeance |
{["type"] = "spell", ["id"] = 53736}, --Seal of Corruption |
{["type"] = "spell", ["id"] = 20164}, --Seal of Justice |
{["type"] = "spell", ["id"] = 31892}, --Seal of Blood |
{["type"] = "spell", ["id"] = 53720}, --Seal of the Martyr |
--Blessings |
{["text"] = "Blessings", ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 48932}, --Blessing of Might |
{["type"] = "spell", ["id"] = 48936}, --Blessing of Wisdom |
{["type"] = "spell", ["id"] = 58054}, --Blessing of Kings |
{["type"] = "spell", ["id"] = 20911}, --Blessing of Sanctuary |
{["text"] = "Symbol of Kings", ["type"] = "header", ["reagent"] = 21177}, |
{["type"] = "spell", ["id"] = 48934}, --Greater Blessing of Might |
{["type"] = "spell", ["id"] = 48938}, --Greater Blessing of Wisdom |
{["type"] = "spell", ["id"] = 25898}, --Greater Blessing of Kings |
{["type"] = "spell", ["id"] = 25899}, --Greater Blessing of Sanctuary |
--PRIEST |
{["text"] = CLASS, ["type"] = "header"}, |
--SHAMAN |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 556}, --Astral Recall |
{["type"] = "spell", ["id"] = 6196}, --Far Sight |
--DRUID |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 18960}, --Teleport: Moonglade |
--{["type"] = "spell", ["id"] = 5225}, --Track Humanoids |
--ROGUE |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 1804}, --Pick Lock |
--MAGE |
--Teleports |
{["text"] = "", ["type"] = "header", ["reagent"] = 17031}, |
{["type"] = "spell", ["id"] = 53140}, --Teleport: Dalaran |
{["type"] = "spell", ["id"] = 3565}, --Teleport: Darnassus |
{["type"] = "spell", ["id"] = 32271}, --Teleport: Exodar |
{["type"] = "spell", ["id"] = 3562}, --Teleport: Ironforge |
{["type"] = "spell", ["id"] = 3567}, --Teleport: Orgrimmar |
{["type"] = "spell", ["id"] = 33690}, --Teleport: Shattrath |
{["type"] = "spell", ["id"] = 32272}, --Teleport: Silvermoon |
{["type"] = "spell", ["id"] = 49358}, --Teleport: Stonard |
{["type"] = "spell", ["id"] = 3561}, --Teleport: Stormwind |
{["type"] = "spell", ["id"] = 49359}, --Teleport: Theramore |
{["type"] = "spell", ["id"] = 3566}, --Teleport: Thunder Bluff |
{["type"] = "spell", ["id"] = 3563}, --Teleport: Undercity |
--Portals |
{["text"] = "", ["type"] = "header", ["reagent"] = 17032}, |
{["type"] = "spell", ["id"] = 53142}, --Portal: Dalaran |
{["type"] = "spell", ["id"] = 11419}, --Portal: Darnassus |
{["type"] = "spell", ["id"] = 32266}, --Portal: Exodar |
{["type"] = "spell", ["id"] = 11416}, --Portal: Ironforge |
{["type"] = "spell", ["id"] = 11417}, --Portal: Orgrimmar |
{["type"] = "spell", ["id"] = 33691}, --Portal: Shattrath |
{["type"] = "spell", ["id"] = 32267}, --Portal: Silvermoon |
{["type"] = "spell", ["id"] = 49361}, --Portal: Stonard |
{["type"] = "spell", ["id"] = 10059}, --Portal: Stormwind |
{["type"] = "spell", ["id"] = 49360}, --Portal: Theramore |
{["type"] = "spell", ["id"] = 11420}, --Portal: Thunder Bluff |
{["type"] = "spell", ["id"] = 11418}, --Portal: Undercity |
--WARLOCK |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 126}, --Eye of Kilrogg |
{["type"] = "spell", ["id"] = 5500}, --Sense Demons |
{["type"] = "spell", ["id"] = 5697}, --Unending Breathe |
{["type"] = "spell", ["id"] = 132}, --Detect Invisability |
--Buffs |
{["text"] = "Buffs", ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 696}, --Demon Skin |
{["type"] = "spell", ["id"] = 47889}, --Demon Armor |
{["type"] = "spell", ["id"] = 47893}, --Felarmor |
--Soul shards |
{["text"] = "", ["type"] = "header", ["reagent"] = 6265}, |
{["type"] = "spell", ["id"] = 6366}, --Create Firestone |
{["type"] = "spell", ["id"] = 6201}, --Create Healthstone |
{["type"] = "spell", ["id"] = 2362}, --Create Spellstone |
{["type"] = "spell", ["id"] = 47884}, --Create Soulstone |
{["type"] = "spell", ["id"] = 29893}, --Ritual of Souls |
{["type"] = "spell", ["id"] = 698}, --Ritual of Summoning |
--Minions |
{["text"] = "Minions", ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 691}, --Summon Felhunter |
{["type"] = "spell", ["id"] = 30146}, --Summon Felguard |
{["type"] = "spell", ["id"] = 712}, --Summon Succubus |
{["type"] = "spell", ["id"] = 697}, --Summon Voidwalker |
{["type"] = "spell", ["id"] = 688}, --Summon Imp |
--HUNTER |
{["text"] = CLASS, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 13161}, --Aspect of the Beast |
{["type"] = "spell", ["id"] = 5118}, --Aspect of the Cheetah |
{["type"] = "spell", ["id"] = 61846}, --Aspect of the Dragonhawk |
{["type"] = "spell", ["id"] = 13165}, --Aspect of the Hawk |
{["type"] = "spell", ["id"] = 13163}, --Aspect of the Monkey |
{["type"] = "spell", ["id"] = 13159}, --Aspect of the Pack |
{["type"] = "spell", ["id"] = 34074}, --Aspect of the Viper |
{["type"] = "spell", ["id"] = 20043}, --Aspect of the Wild |
{["type"] = "spell", ["id"] = 1494}, --Track Beasts |
{["type"] = "spell", ["id"] = 19878}, --Track Demons |
{["type"] = "spell", ["id"] = 19879}, --Track Dragonkin |
{["type"] = "spell", ["id"] = 19880}, --Track Elementals |
{["type"] = "spell", ["id"] = 19882}, --Track Giants |
{["type"] = "spell", ["id"] = 19885}, --Track Hidden |
{["type"] = "spell", ["id"] = 19883}, --Track Humanoids (maybe redundant, it will be covered by the druid spell?) |
{["type"] = "spell", ["id"] = 19884}, --Track Undead |
----------- |
--RACIALS-- |
----------- |
--DRAENEI |
--DWARF |
{["text"] = RACE, ["type"] = "header"}, |
{["type"] = "spell", ["id"] = 2481}, --Find Treasure |
--GNOME |
--HUMAN |
--NIGHT ELF |
--BLOOD ELF |
--ORC |
--TAUREN |
--TROLL |
--UNDEAD |
----------- |
--PROFESSIONS-- |
{["text"] = TRADE_SKILLS, ["type"] = "header"}, |
----------- |
--ALCHEMY |
{["type"] = "spell", ["id"] = 2259}, --Alchemy |
{["type"] = "spell", ["id"] = 28677}, --Elixer Master |
{["type"] = "spell", ["id"] = 28675}, --Potion Master |
{["type"] = "spell", ["id"] = 28672}, --Transmutation Master |
--BLACKSMITHING |
{["type"] = "spell", ["id"] = 2018}, --Blacksmithing |
{["type"] = "spell", ["id"] = 9788}, --Armorsmithing |
{["type"] = "spell", ["id"] = 17041}, --Master Axesmith |
{["type"] = "spell", ["id"] = 17040}, --Master Hammersmith |
{["type"] = "spell", ["id"] = 17039}, --Master Swordsmith |
--COOKING |
{["type"] = "spell", ["id"] = 2550}, --Cooking |
{["type"] = "spell", ["id"] = 818}, --Basic Campfire |
--ENCHANTING |
{["type"] = "spell", ["id"] = 7411}, --Enchanting |
{["type"] = "spell", ["id"] = 13262}, --Disenchant |
--ENGINEERING |
{["type"] = "spell", ["id"] = 4036}, --Engineering |
{["type"] = "spell", ["id"] = 20219}, --Gnomish Engineer |
{["type"] = "spell", ["id"] = 20222}, --Goblin Engineer |
{["type"] = "spell", ["id"] = 56273}, --Wormhole: Gadgetzan |
--FIRST AID |
{["type"] = "spell", ["id"] = 3273}, --First Aid |
--FISHING |
{["type"] = "spell", ["id"] = 7620}, --Fishing |
--HERBALISM |
{["type"] = "spell", ["id"] = 2383}, --Find Herbs |
--INSCRIPTION |
{["type"] = "spell", ["id"] = 45357}, --Inscription |
{["type"] = "spell", ["id"] = 51005}, --Milling |
{["type"] = "spell", ["id"] = 52175}, --Decipher |
--JEWELCRAFTING |
{["type"] = "spell", ["id"] = 25229}, --Jewelcrafting |
{["type"] = "spell", ["id"] = 31252}, --Prospecting |
--LEATHERWORKING |
{["type"] = "spell", ["id"] = 2108}, --Leatherworking |
--MINING |
{["type"] = "spell", ["id"] = 2580}, --Find Minerals |
{["type"] = "spell", ["id"] = 2656}, --Smelting |
--SKINNING |
--TAILORING |
{["type"] = "spell", ["id"] = 3908}, --Tailoring |
----------- |
--HEARTHSTONE-- |
{["text"] = HOME, ["type"] = "header"}, |
----------- |
{["text"] = HOME, ["type"] = "item", ["hearthstone"] = true, ["id"] = 6948}, |
{["type"] = "spacer"} |
}; |