diff --git a/DafuqIBrokeInButtons.txt b/DafuqIBrokeInButtons.txt new file mode 100644 index 0000000..5084a99 --- /dev/null +++ b/DafuqIBrokeInButtons.txt @@ -0,0 +1,4 @@ +Following settings will be lost: +UIButtons mover position +custom roll numbers +quick actions for dropdown mode diff --git a/ElvUI_SLE/core/core.lua b/ElvUI_SLE/core/core.lua index 653b45c..3f359ef 100644 --- a/ElvUI_SLE/core/core.lua +++ b/ElvUI_SLE/core/core.lua @@ -232,6 +232,8 @@ end function SLE:FixDatabase() --For when we dramatically change some options if E.db.sle.chat.combathide == true then E.db.sle.chat.combathide = "BOTH" end if E.db.sle.chat.combathide == false then E.db.sle.chat.combathide = "NONE" end + if E.db.sle.uibuttons.position == "uib_vert" then E.db.sle.uibuttons.orientation = "vertical" end + if E.db.sle.uibuttons.position == "uib_hor" then E.db.sle.uibuttons.orientation = "horizontal" end end function SLE:Initialize() diff --git a/ElvUI_SLE/core/toolkit.lua b/ElvUI_SLE/core/toolkit.lua index 32b1fb8..d5618a9 100644 --- a/ElvUI_SLE/core/toolkit.lua +++ b/ElvUI_SLE/core/toolkit.lua @@ -13,7 +13,6 @@ local I = E:GetModule('SLE_InstDif') local S = E:GetModule("SLE_ScreenSaver") local G = E:GetModule("SLE_Garrison") local EF = E:GetModule('SLE_ErrorFrame'); -local lib = LibStub("LibRealmInfo") local LocTable = {} LocTable[1], LocTable[2], LocTable[3], LocTable[4], LocTable[5], LocTable[6], LocTable[7] = GetAvailableLocales() @@ -66,7 +65,7 @@ local function UpdateAll() end LT:LootShow() LT:Update() - UB:FrameSize() + UB.Holder:FrameSize() RM:UpdateBar(true) F:UpdateLayout() CH:GMIconUpdate() diff --git a/ElvUI_SLE/defaults/private.lua b/ElvUI_SLE/defaults/private.lua index 229a75c..d6a06af 100644 --- a/ElvUI_SLE/defaults/private.lua +++ b/ElvUI_SLE/defaults/private.lua @@ -57,7 +57,7 @@ V['sle'] = { }, ['backgrounds'] = false, - + ['uiButtonStyle'] = "dropdown", } diff --git a/ElvUI_SLE/defaults/profile.lua b/ElvUI_SLE/defaults/profile.lua index 821435d..ceb6ec4 100644 --- a/ElvUI_SLE/defaults/profile.lua +++ b/ElvUI_SLE/defaults/profile.lua @@ -399,30 +399,31 @@ P['sle'] = { ['enable'] = false, ['size'] = 17, ['mouse'] = false, + ['menuBackdrop'] = false, ['dropdownBackdrop'] = false, - ['position'] = "uib_vert", + ['orientation'] = "vertical", ['spacing'] = 3, ['point'] = "TOPLEFT", ['anchor'] = "TOPRIGHT", ['xoffset'] = 0, ['yoffset'] = 0, - ['roll'] = { + ['customroll'] = { ['min'] = "1", ['max'] = "50", }, - ['cfunc'] = { + ['Config'] = { ['enabled'] = false, ['called'] = "Reload", }, - ['afunc'] = { + ['Addon'] = { ['enabled'] = false, ['called'] = "Manager", }, - ['sfunc'] = { + ['Status'] = { ['enabled'] = false, ['called'] = "AFK", }, - ['rfunc'] = { + ['Roll'] = { ['enabled'] = false, ['called'] = "Hundred", }, diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua new file mode 100644 index 0000000..f4b405a --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua @@ -0,0 +1,522 @@ +local MAJOR, MINOR = "LibElv-UIButtons-1.0", 01 +local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR) + +if not lib then return end +local E, L, V, P, G = unpack(ElvUI) +local S = E:GetModule("Skins") + +local function EqualizeDB(db, default) + for key, value in pairs(default) do + if not db[key] and type(default[key]) ~= "table" then + db[key] = default[key] + elseif type(default[key]) == "table" then + EqualizeDB(db[key], default[key]) + end + end +end + +local function MoverSize(menu) + local db = menu.db + if db.orientation == "vertical" then + menu:SetWidth(db.size + (E.PixelMode and 2 or 4)) + menu:SetHeight((db.size*menu.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(menu.NumBut-1))+2) + elseif db.orientation == "horizontal" then + menu:SetWidth((db.size*menu.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(menu.NumBut-1))+2) + menu:SetHeight(db.size + (E.PixelMode and 2 or 4)) + end +end + +local function SetupMover(menu, name, own) + local exist = false + for i = 1, #E.ConfigModeLayouts do + if E.ConfigModeLayouts[i] == "UIButtons" then + exist = true + break + end + end + if not exist then + tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "UIButtons") + E.ConfigModeLocalizedStrings["UIButtons"] = L["UI Buttons"] + end + E:CreateMover(menu, menu:GetName().."Mover", name, nil, nil, nil, own or "ALL,UIButtons") +end + +local function ToggleCats(menu) + for i = 1, #menu.ToggleTable do + if menu.ToggleTable[i].opened then + menu.HoldersTable[i]:Show() + else + menu.HoldersTable[i]:Hide() + end + end +end + +local function OnEnter(menu) + menu:SetAlpha(1) +end + +local function OnLeave(menu) + if menu.db.mouse then + menu:SetAlpha(0) + end +end + +local function CreateCoreButton(menu, name, text) + if _G[menu:GetName().."_Core_"..name] then return end + local button, holder + if menu.style == "classic" then + menu[name] = CreateFrame("Button", menu:GetName().."_Core_"..name, menu) + button = menu[name] + elseif menu.style == "dropdown" then + menu[name] = CreateFrame("Frame", menu:GetName().."_Core_"..name, menu) + menu[name].Toggle = CreateFrame("Button", menu:GetName().."_Core_"..name.."Toggle", menu) + holder = menu[name] + holder.width = 0 + holder:CreateBackdrop("Transparent") + button = menu[name].Toggle + else + lib:CustomStyleCoreButton(menu, name, text) + end + button:SetScript('OnEnter', function(self) menu:OnEnter() end) + button:SetScript('OnLeave', function(self) menu:OnLeave() end) + -- button:SetSize(17, 17) --For testing purposes + button.text = button:CreateFontString(nil, "OVERLAY") + button.text:SetPoint("CENTER", button, "CENTER", 0, 0) + + S:HandleButton(button) + + if text then + local t = button:CreateFontString(nil,"OVERLAY",button) + t:FontTemplate() + t:SetPoint("CENTER", button, 'CENTER', 0, -1) + t:SetJustifyH("CENTER") + t:SetText(text) + button:SetFontString(t) + end + + tinsert(menu.ToggleTable, button) + if holder then tinsert(menu.HoldersTable, holder) end + if menu.style == "dropdown" then + if not menu[name.."Table"] then + menu[name.."Table"] = {} + end + menu:ToggleSetup(button, holder) + tinsert(menu.GroupsTable, name) + end + + menu.NumBut = menu.NumBut + 1 +end + +local function CreateDropdownButton(menu, core, name, text, tooltip1, tooltip2, click, addon, always) + if addon then + local enabled = GetAddOnEnableState(menu.myname, addon) + if enabled == 0 then return end + end + if _G[menu:GetName().."_Core_"..core..name] or not menu[core.."Table"] then return end + menu[core][name] = CreateFrame("Button", menu:GetName().."_Core_"..core..name, menu[core]) + local b = menu[core][name] + local toggle = menu[core].Toggle + + b:SetScript("OnClick", function(self) + click() + toggle.opened = false + menu:ToggleCats() + end) + + if tooltip1 then + b:SetScript("OnEnter", function(self) + menu:OnEnter() + GameTooltip:SetOwner(self) + GameTooltip:AddLine(tooltip1, 1, .96, .41, .6, .6, 1) + if tooltip2 then GameTooltip:AddLine(tooltip2, 1, 1, 1, 1, 1, 1) end + GameTooltip:Show() + end) + b:SetScript("OnLeave", function(self) + menu:OnLeave() + GameTooltip:Hide() + end) + else + b:SetScript('OnEnter', function(self) menu:OnEnter() end) + b:SetScript('OnLeave', function(self) menu:OnLeave() end) + end + S:HandleButton(b) + + if text and type(text) == "string" then + b.text = b:CreateFontString(nil,"OVERLAY",b) + b.text:FontTemplate() + b.text:SetPoint("CENTER", b, 'CENTER', 0, -1) + b.text:SetJustifyH("CENTER") + b.text:SetText(text) + b:SetFontString(b.text) + end + + tinsert(menu[core.."Table"], b) +end + +local function CreateSeparator(menu, core, name, size, space) + if _G[menu:GetName().."_Core_"..core..name.."_Separator"] or not menu[core.."Table"] then return end + menu[core][name] = CreateFrame("Frame", menu:GetName().."_Core_"..core..name.."_Separator", menu[core]) + local f = menu[core][name] + f.isSeparator = true + f.size = size or 1 + f.space = space or 2 + f:CreateBackdrop("Transparent") + f:SetScript('OnEnter', function(self) menu:OnEnter() end) + f:SetScript('OnLeave', function(self) menu:OnLeave() end) + tinsert(menu[core.."Table"], f) +end + +local function ToggleSetup(menu, button, holder) + local db = menu.db + button.opened = false + holder:Hide() + button:SetScript("OnClick", function(self, button, down) + if button == "LeftButton" then + if self.opened then + self.opened = false + else + self.opened = true + for i = 1, #menu.ToggleTable do + if menu.ToggleTable[i] ~= self then menu.ToggleTable[i].opened = false end + end + end + menu:ToggleCats() + end + end) + holder:SetScript('OnEnter', function(self) menu:OnEnter() end) + holder:SetScript('OnLeave', function(self) menu:OnLeave() end) +end + +local function UpdateDropdownLayout(menu, group) + local count = -1 + local sepS, sepC = 0, 0 + local header = menu[group] + local db = menu.db + header:ClearAllPoints() + header:Point(db.point, header.Toggle, db.anchor, db.xoffset, db.yoffset) + local T = menu[group.."Table"] + for i = 1, #T do + local button, prev, next = T[i], T[i-1], T[i+1] + local y_offset = prev and ((E.PixelMode and -db.spacing or -(db.spacing+2))-(prev.isSeparator and prev.space or 0)-(button.isSeparator and button.space or 0)) or 0 + button:Point("TOP", (prev or header), (prev and "BOTTOM" or "TOP"), 0, y_offset) + count = button.isSeparator and count or count + 1 + sepS = (button.isSeparator and sepS + ((prev and 2 or 1)*button.space + button.size)) or sepS + sepC = button.isSeparator and sepC + 1 or sepC + end + header:Size(header.width, (db.size * (count+1))+(db.spacing*(count))+sepS+(.5*sepC)) + if menu.db.dropdownBackdrop then + header.backdrop:Show() + else + header.backdrop:Hide() + end +end + +local function UpdateMouseOverSetting(menu) + if menu.db.mouse then + menu:SetAlpha(0) + else + menu:SetAlpha(1) + end +end + +local function Positioning(menu) + local db = menu.db + + --position check + local header = menu + if db.orientation == "vertical" then + for i = 1, #menu.ToggleTable do + local button, prev = menu.ToggleTable[i], menu.ToggleTable[i-1] + menu.ToggleTable[i]:ClearAllPoints() + menu.ToggleTable[i]:Point("TOP", (prev or header), prev and "BOTTOM" or "TOP", 0, prev and (E.PixelMode and -db.spacing or -(db.spacing+2)) or (E.PixelMode and -1 or -2)) + end + elseif db.orientation == "horizontal" then + for i = 1, #menu.ToggleTable do + local button, prev = menu.ToggleTable[i], menu.ToggleTable[i-1] + menu.ToggleTable[i]:ClearAllPoints() + menu.ToggleTable[i]:Point("LEFT", (prev or header), prev and "RIGHT" or "LEFT", prev and (E.PixelMode and db.spacing or db.spacing+2) or (E.PixelMode and 1 or 2), 0) + end + end + if menu.style == "dropdown" then + for i = 1, #menu.GroupsTable do + menu:UpdateDropdownLayout(menu.GroupsTable[i]) + end + end +end + +local function FrameSize(menu) + local db = menu.db + if not db.size then return end + menu:MoverSize() + + for i = 1, #menu.ToggleTable do + menu.ToggleTable[i]:Size(db.size) + end + + if menu.style == "dropdown" then + for i = 1, #menu.GroupsTable do + local group = menu.GroupsTable[i] + local mass = menu[group.."Table"] + for w = 1, #mass do + if mass[w].text and mass[w].text:GetWidth() > menu.HoldersTable[i].width then + menu.HoldersTable[i].width = mass[w].text:GetWidth() + 10 + end + end + for n = 1, #mass do + if mass[n].isSeparator then + mass[n]:Size(menu.HoldersTable[i].width - 2, mass[n].size) + else + mass[n]:Size(menu.HoldersTable[i].width, db.size) + end + end + end + end + + menu:Positioning() +end + +local function UpdateBackdrop(menu) + if menu.db.menuBackdrop then + menu.backdrop:Show() + else + menu.backdrop:Hide() + end +end + +local function ToggleShow(menu) + if not menu.db.enable then + menu:Hide() + else + menu:Show() + menu:UpdateMouseOverSetting() + menu:UpdateBackdrop() + end +end + +function lib:CreateFrame(name, db, default, style, styleDefault) + if _G[name] then return end + if not name then print("Sorry but you didn't set a name for this menu bar. Aborting creation"); return end + if not db then print("Sorry but you didn't set database for this menu bar. Aborting creation"); return end + if not default then print("Sorry but you didn't set defaults for this menu bar. Aborting creation"); return end + if not style and not styleDefault then print("Sorry but you didn't set defaults for this menu bar's style. Aborting creation"); return end + local menu = CreateFrame("Frame", name, E.UIParent) + menu.db = db + EqualizeDB(menu.db, default) + if not style and styleDefault then style = styleDefault end + menu.style = style + + menu:SetFrameStrata("HIGH") + menu:SetFrameLevel(5) + menu:SetClampedToScreen(true) + menu:Point("LEFT", E.UIParent, "LEFT", -2, 0); + menu:Size(17, 17); --Cause the damn thing doesn't want to show up without default size lol + menu.myname = UnitName('player') + menu:CreateBackdrop() + + menu.NumBut = 0 + menu.ToggleTable = {} + menu.HoldersTable = {} + menu.GroupsTable = {} + + --Setting API + menu.CreateCoreButton = CreateCoreButton + menu.CreateDropdownButton = CreateDropdownButton + menu.CreateSeparator = CreateSeparator + menu.ToggleSetup = ToggleSetup + menu.ToggleCats = ToggleCats + menu.UpdateDropdownLayout = UpdateDropdownLayout + menu.Positioning = Positioning + menu.MoverSize = MoverSize + menu.UpdateMouseOverSetting = UpdateMouseOverSetting + menu.FrameSize = FrameSize + menu.SetupMover = SetupMover + menu.ToggleShow = ToggleShow + menu.UpdateBackdrop = UpdateBackdrop + menu.OnEnter = OnEnter + menu.OnLeave = OnLeave + + + menu:SetScript('OnEnter', function(self) menu:OnEnter() end) + menu:SetScript('OnLeave', function(self) menu:OnLeave() end) + + return menu +end + +local function GenerateTable(menu, coreGroup, groupName, groupTitle) + local positionValues = { + TOPLEFT = 'TOPLEFT', + LEFT = 'LEFT', + BOTTOMLEFT = 'BOTTOMLEFT', + RIGHT = 'RIGHT', + TOPRIGHT = 'TOPRIGHT', + BOTTOMRIGHT = 'BOTTOMRIGHT', + CENTER = 'CENTER', + TOP = 'TOP', + BOTTOM = 'BOTTOM', + }; + + local isDefault = coreGroup == true and true or false + if isDefault and not E.Options.args.uibuttons then + E.Options.args.uibuttons = { + type = "group", + name = L["UI Buttons"], + order = 77, + childGroups = 'select', + args = { + }, + } + coreGroup = E.Options.args.uibuttons + end + coreGroup.args[groupName] = { + type = "group", + name = groupTitle, + order = 1, + args = { + header = { + order = 1, + type = "header", + name = groupTitle, + }, + enabled = { + order = 3, + type = "toggle", + name = L["Enable"], + desc = L["Show/Hide UI buttons."], + get = function(info) return menu.db.enable end, + set = function(info, value) menu.db.enable = value; menu:ToggleShow() end + }, + style = { + order = 4, + name = L["UI Buttons Style"], + type = "select", + values = { + ["classic"] = L['Classic'], + ["dropdown"] = L['Dropdown'], + }, + disabled = function() return not menu.db.enable end, + get = function(info) return E.private.sle.uiButtonStyle end, + set = function(info, value) E.private.sle.uiButtonStyle = value; E:StaticPopup_Show("PRIVATE_RL") end, + }, + space = { + order = 5, + type = 'description', + name = "", + }, + size = { + order = 6, + type = "range", + name = L['Size'], + desc = L["Sets size of buttons"], + min = 12, max = 25, step = 1, + disabled = function() return not menu.db.enable end, + get = function(info) return menu.db.size end, + set = function(info, value) menu.db.size = value; menu:FrameSize() end, + }, + spacing = { + order = 7, + type = "range", + name = L['Button Spacing'], + desc = L['The spacing between buttons.'], + min = 1, max = 10, step = 1, + disabled = function() return not menu.db.enable end, + get = function(info) return menu.db.spacing end, + set = function(info, value) menu.db.spacing = value; menu:FrameSize() end, + }, + mouse = { + order = 8, + type = "toggle", + name = L["Mouse Over"], + desc = L["Show on mouse over."], + disabled = function() return not menu.db.enable end, + get = function(info) return menu.db.mouse end, + set = function(info, value) menu.db.mouse = value; menu:UpdateMouseOverSetting() end + }, + menuBackdrop = { + order = 9, + type = "toggle", + name = L["Backdrop"], + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.menuBackdrop end, + set = function(info, value) menu.db.menuBackdrop = value; menu:UpdateBackdrop() end + }, + dropdownBackdrop = { + order = 10, + type = "toggle", + name = L["Dropdown Backdrop"], + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.dropdownBackdrop end, + set = function(info, value) menu.db.dropdownBackdrop = value; menu:FrameSize() end + }, + orientation = { + order = 11, + name = L["Buttons position"], + desc = L["Layout for UI buttons."], + type = "select", + values = { + ["horizontal"] = L['Horizontal'], + ["vertical"] = L['Vertical'], + }, + disabled = function() return not menu.db.enable end, + get = function(info) return menu.db.orientation end, + set = function(info, value) menu.db.orientation = value; menu:FrameSize() end, + }, + point = { + type = 'select', + order = 13, + name = L['Anchor Point'], + desc = L['What point of dropdown will be attached to the toggle button.'], + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.point end, + set = function(info, value) menu.db.point = value; menu:FrameSize() end, + values = positionValues, + }, + anchor = { + type = 'select', + order = 14, + name = L['Attach To'], + desc = L['What point to anchor dropdown on the toggle button.'], + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.anchor end, + set = function(info, value) menu.db.anchor = value; menu:FrameSize() end, + values = positionValues, + }, + xoffset = { + order = 15, + type = "range", + name = L['X-Offset'], + desc = L["Horizontal offset of dropdown from the toggle button."], + min = -10, max = 10, step = 1, + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.xoffset end, + set = function(info, value) menu.db.xoffset = value; menu:FrameSize() end, + }, + yoffset = { + order = 16, + type = "range", + name = L['Y-Offset'], + desc = L["Vertical offset of dropdown from the toggle button."], + min = -10, max = 10, step = 1, + disabled = function() return not menu.db.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return menu.db.yoffset end, + set = function(info, value) menu.db.yoffset = value; menu:FrameSize() end, + }, + }, + } +end + +function lib:CreateOptions(menu, default, groupName, groupTitle) + menu:RegisterEvent("ADDON_LOADED") + menu:SetScript("OnEvent", function(self, event, addon) + if addon ~= "ElvUI_Config" then return end + self:UnregisterEvent("ADDON_LOADED") + GenerateTable(self, default, groupName, groupTitle) + end) +end + +--This function is for creating own menu style. Replacing is not encouraged, hooking recommended. +function lib:CustomStyleCoreButton(menu, name, text) +end + +if not LibStub("LibElvUIPlugin-1.0").plugins[MAJOR] then + LibStub("LibElvUIPlugin-1.0"):RegisterPlugin(MAJOR, function() end, true) +end \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc new file mode 100644 index 0000000..c8ba530 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc @@ -0,0 +1,7 @@ +## Interface: 40300 +## Author: Darth Predator +## Version: 1.0 +## Title: Lib UIButtons 1.0 +## RequiredDeps: ElvUI + +LibElv-UIButtons-1.0.lua \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml new file mode 100644 index 0000000..1f3e540 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml @@ -0,0 +1,4 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui/"> + <Include file="locales\load_locales.xml"/> + <Script file="LibElv-UIButtons-1.0.lua"/> +</Ui> \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/english.lua b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/english.lua new file mode 100644 index 0000000..124d0d3 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/english.lua @@ -0,0 +1,8 @@ +--Russian localization +local AceLocale = LibStub:GetLibrary("AceLocale-3.0") +local L = AceLocale:NewLocale("ElvUI", "ruRU") + +if not L then return; end + +--UI buttons-- +L["LibUIButtons_DESC"] = "This adds a small bar with some useful buttons which acts as a small menu for common things.\nThe options below are provided by LibElv-UIButtons. If you see them that means one of your addons is using this library." diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/load_locales.xml b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/load_locales.xml new file mode 100644 index 0000000..c322415 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/load_locales.xml @@ -0,0 +1,4 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui/"> + <Script file="english.lua"/> + <Script file="russian.lua"/> +</Ui> \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/russian.lua b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/russian.lua new file mode 100644 index 0000000..2a0df9a --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/russian.lua @@ -0,0 +1,22 @@ +--Russian localization +local AceLocale = LibStub:GetLibrary("AceLocale-3.0") +local L = AceLocale:NewLocale("ElvUI", "ruRU") + +if not L then return; end + +--UI buttons-- +L["LibUIButtons_DESC"] = "Добавляет небольшую полосу с кнопками, дающими доступ к набору полезных функций.\nЭти опции выводятся библиотекой LibElv-UIButtons. Если вы их видите, то один из Ваших аддонов ее использует." +L["UI Buttons"] = "Меню интерфейса" +L["Show/Hide UI buttons."] = "Показать/скрыть меню" +L["Mouse Over"] = "При наведении" +L["Show on mouse over."] = "Отображать при наведении мыши." +L["Dropdown Backdrop"] = "Фон выпадающего списка" +L["Buttons position"] = "Положение кнопок" +L["Layout for UI buttons."] = "Режим положения кнопок" +L["UI Buttons Style"] = "Стиль меню" +L['Dropdown'] = "Выпадающий список" +L["Sets size of buttons"] = "Устанавливает размер кнопок" +L['What point of dropdown will be attached to the toggle button.'] = "Какая точка выпадающего списка будет крепиться к кнопке его открытия." +L['What point to anchor dropdown on the toggle button.'] = "К какой точке кнопки будет крепиться ее выпадающий список." +L["Horizontal offset of dropdown from the toggle button."] = "Отступ выпадающего списка от кнопки его открытия по горизонтали." +L["Vertical offset of dropdown from the toggle button."] = "Отступ выпадающего списка от кнопки его открытия по вертикали." \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibRealmInfo/LibRealmInfo.lua b/ElvUI_SLE/libs/LibRealmInfo/LibRealmInfo.lua deleted file mode 100644 index 5570e68..0000000 --- a/ElvUI_SLE/libs/LibRealmInfo/LibRealmInfo.lua +++ /dev/null @@ -1,1271 +0,0 @@ ---[[-------------------------------------------------------------------- - LibRealmInfo - World of Warcraft library for obtaining information about realms. - Copyright 2014 Phanx <addons@phanx.net> - Do not distribute as a standalone addon. - See accompanying LICENSE and README files for more details. - https://github.com/Phanx/LibRealmInfo - http://wow.curseforge.com/addons/librealminfo - http://www.wowinterface.com/downloads/info22987-LibRealmInfo -----------------------------------------------------------------------]] - -local MAJOR, MINOR = "LibRealmInfo", 3 -assert(LibStub, MAJOR.." requires LibStub") -local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR) -if not lib then return end - -local standalone = (...) == MAJOR -local data, connections -local Unpack - -local function debug(...) - if standalone then - print("|cffff7f7f["..MAJOR.."]|r", ...) - end -end - ------------------------------------------------------------------------- - -function lib:GetRealmInfo(realmID) - realmID = tonumber(realmID) - if not realmID then return end - - if Unpack then - Unpack() - end - - local info = data[realmID] - if info then - return info.name, info.apiName, info.rules, info.locale, info.battlegroup, info.region, info.timezone, info.connected, info.latinName - end - - debug("No info found for realm", realmID) -end - ------------------------------------------------------------------------- - -local currentRegion -local portalToRegion = { US = "US", EU = "EU", RU = "EU", KR = "KR", CN = "CN", TW = "TW" } -local localeToRegion = { deDE = "EU", esES = "EU", esMX = "US", frFR = "EU", itIT = "EU", ruRU = "EU", koKR = "KR", enCN = "CN", zhCN = "CN", enTW = "TW", zhTW = "TW" } --- enGB client returns enUS, ptPT client returns ptBR, no way to tell what's what --- not actually sure if enCN and enTW return accurately - -local function GetCurrentRegion() - if not currentRegion then - local realmID, _ = tonumber(strmatch(UnitGUID("player"), "Player:(%d+)")) - if not realmID then - _, _, _, _, realmID = BNGetToonInfo(BNGetInfo() or 1) - end - if realmID then - _, _, _, _, _, currentRegion = lib:GetRealmInfo(realmID) - end - if not currentRegion then - local portal = GetCVar("portal") - if portal then - currentRegion = portalToRegion[strupper(portal)] - else - currentRegion = localeToRegion[GetLocale()] - end - end - if not currentRegion then - return debug("Could not determine current region.") - end - end - return currentRegion -end - -function lib:GetRealmInfoByName(searchName, searchRegion) - searchName = gsub(searchName, "%s", "") - searchRegion = searchRegion or GetCurrentRegion() - debug("GetRealmInfoByName", searchName, searchRegion, GetCurrentRegion()) - - if Unpack then - Unpack() - end - - for id, info in pairs(data) do - if info.region == searchRegion and info.apiName == searchName then - return id, info.name, info.apiName, info.rules, info.locale, info.battlegroup, info.region, info.timezone, info.connected, info.latinName - end - end -end - ------------------------------------------------------------------------- - -function lib:GetRealmInfoByUnit(unit) - local guid = unit and UnitGUID(unit) - if guid then - local realmID = tonumber(strmatch(guid, "Player:(%d+)")) - if realmID then - return self:GetRealmInfo(realmID) - end - end -end - ------------------------------------------------------------------------- - -function Unpack() - debug("Unpacking data...") - - for id, info in pairs(data) do - local name, rules, locale, battlegroup, region, timezone = strsplit(",", info) - local name, translit = strsplit("|", name) - data[id] = { - name = name, - apiName = (gsub(name, "%s", "")), - latinName = translit, -- only for ruRU language realms - rules = rules, - locale = locale, - battlegroup = battlegroup, - region = region, - timezone = timezone, -- only for US region realms - } - end - - for i = 1, #connections do - local t = { strsplit(",", connections[i]) } - for j = 1, #t do - local id = tonumber(t[j]) - t[j] = id - local info = data[id] - if info then - info.connected = t - elseif standalone then - print("|cffff7f7f["..MAJOR.."]|r No data for connected realm", id, "from", connections[i]) - end - end - end - - connections = nil - Unpack = nil - collectgarbage() - - debug("Done unpacking data.") - - local auto = { GetAutoCompleteRealms() } - if #auto > 1 then - local id, _, _, _, _, _, _, _, connected = lib:GetRealmInfoByName(GetRealmName()) - if not id then - return - end - if not connected then - print("|cffffff7fLibRealmInfo:|r Missing connected realm info for", id, GetRealmName()) - return - end - for i = 1, #auto do - local name = auto[i] - auto[name] = true - auto[i] = nil - end - for i = 1, #connected do - local _, name = GetRealmInfo(connected[i]) - if auto[name] then - auto[name] = nil - else - auto[name] = connected[i] - end - end - if next(auto) then - print("|cffffff7fLibRealmInfo:|r Incomplete connected realm info for", id, GetRealmName()) - for name, id in pairs(auto) do - print(name, id == true and "MISSING" or "INCORRECT") - end - end - end -end - ------------------------------------------------------------------------- - -data = { ---{{ NORTH AMERICA -[1136]="Aegwynn,PVP,enUS,Vengeance,US,CST", -[1284]="Aerie Peak,PVE,enUS,Vindication,US,PST", -[1129]="Agamaggan,PVP,enUS,Shadowburn,US,CST", -[106]="Aggramar,PVE,enUS,Vindication,US,CST", -[1137]="Akama,PVP,enUS,Reckoning,US,CST", -[1070]="Alexstrasza,PVE,enUS,Rampage,US,CST", -[52]="Alleria,PVE,enUS,Rampage,US,CST", -[1282]="Altar of Storms,PVP,enUS,Ruin,US,EST", -[1293]="Alterac Mountains,PVP,enUS,Ruin,US,EST", -[1418]="Aman'Thul,PVE,enUS,Bloodlust,US,AEST", -[1276]="Andorhal,PVP,enUS,Shadowburn,US,EST", -[1264]="Anetheron,PVP,enUS,Ruin,US,EST", -[1363]="Antonidas,PVE,enUS,Cyclone,US,PST", -[1346]="Anub'arak,PVP,enUS,Vengeance,US,EST", -[1288]="Anvilmar,PVE,enUS,Ruin,US,PST", -[1165]="Arathor,PVE,enUS,Reckoning,US,PST", -[56]="Archimonde,PVP,enUS,Shadowburn,US,CST", -[1566]="Area 52,PVE,enUS,Vindication,US,EST", -[75]="Argent Dawn,RP,enUS,Ruin,US,EST", -[69]="Arthas,PVP,enUS,Ruin,US,EST", -[1297]="Arygos,PVE,enUS,Vindication,US,EST", -[1555]="Auchindoun,PVP,enUS,Vindication,US,EST", -[77]="Azgalor,PVP,enUS,Ruin,US,CST", -[121]="Azjol-Nerub,PVE,enUS,Cyclone,US,MST", -[3209]="Azralon,PVP,ptBR,Shadowburn,US", -[1128]="Azshara,PVP,enUS,Ruin,US,EST", -[1549]="Azuremyst,PVE,enUS,Shadowburn,US,PST", -[1190]="Baelgun,PVE,enUS,Shadowburn,US,PST", -[1075]="Balnazzar,PVP,enUS,Ruin,US,CST", -[1419]="Barthilas,PVP,enUS,Bloodlust,US,AEST", -[1280]="Black Dragonflight,PVP,enUS,Ruin,US,EST", -[54]="Blackhand,PVE,enUS,Rampage,US,CST", -[10]="Blackrock,PVP,enUS,Bloodlust,US,PST", -[1347]="Blackwater Raiders,RP,enUS,Reckoning,US,PST", -[1296]="Blackwing Lair,PVP,enUS,Shadowburn,US,PST", -[1564]="Blade's Edge,PVE,enUS,Vindication,US,PST", -[1353]="Bladefist,PVE,enUS,Vengeance,US,PST", -[73]="Bleeding Hollow,PVP,enUS,Ruin,US,EST", -[1558]="Blood Furnace,PVP,enUS,Ruin,US,CST", -[64]="Bloodhoof,PVE,enUS,Ruin,US,EST", -[119]="Bloodscalp,PVP,enUS,Cyclone,US,MST", -[83]="Bonechewer,PVP,enUS,Vengeance,US,PST", -[1371]="Borean Tundra,PVE,enUS,Reckoning,US,CST", -[112]="Boulderfist,PVP,enUS,Cyclone,US,PST", -[117]="Bronzebeard,PVE,enUS,Cyclone,US,PST", -[91]="Burning Blade,PVP,enUS,Vindication,US,EST", -[102]="Burning Legion,PVP,enUS,Shadowburn,US,CST", -[1430]="Caelestrasz,PVE,enUS,Bloodlust,US,AEST", -[1361]="Cairne,PVE,enUS,Cyclone,US,CST", -[88]="Cenarion Circle,RP,enUS,Cyclone,US,PST", -[2]="Cenarius,PVE,enUS,Cyclone,US,PST", -[1067]="Cho'gall,PVP,enUS,Vindication,US,CST", -[1138]="Chromaggus,PVP,enUS,Vengeance,US,CST", -[1556]="Coilfang,PVP,enUS,Shadowburn,US,PST", -[107]="Crushridge,PVP,enUS,Vengeance,US,PST", -[109]="Daggerspine,PVP,enUS,Vengeance,US,PST", -[66]="Dalaran,PVE,enUS,Rampage,US,EST", -[1278]="Dalvengyr,PVP,enUS,Shadowburn,US,EST", -[157]="Dark Iron,PVP,enUS,Shadowburn,US,PST", -[120]="Darkspear,PVP,enUS,Cyclone,US,MST", -[1351]="Darrowmere,PVE,enUS,Reckoning,US,PST", -[1434]="Dath'Remar,PVE,enUS,Bloodlust,US,AEST", -[1582]="Dawnbringer,PVE,enUS,Ruin,US,CST", -[15]="Deathwing,PVP,enUS,Shadowburn,US,MST", -[1286]="Demon Soul,PVP,enUS,Shadowburn,US,EST", -[1271]="Dentarg,PVE,enUS,Rampage,US,EST", -[79]="Destromath,PVP,enUS,Ruin,US,PST", -[81]="Dethecus,PVP,enUS,Shadowburn,US,PST", -[154]="Detheroc,PVP,enUS,Shadowburn,US,CST", -[13]="Doomhammer,PVE,enUS,Shadowburn,US,MST", -[115]="Draenor,PVE,enUS,Cyclone,US,PST", -[114]="Dragonblight,PVE,enUS,Cyclone,US,PST", -[84]="Dragonmaw,PVP,enUS,Reckoning,US,PST", -[1362]="Drak'Tharon,PVP,enUS,Reckoning,US,CST", -[1140]="Drak'thul,PVE,enUS,Reckoning,US,CST", -[1139]="Draka,PVE,enUS,Cyclone,US,CST", -[1425]="Drakkari,PVP,esMX,Vindication,US,CST", -[1429]="Dreadmaul,PVP,enUS,Bloodlust,US,AEST", -[1377]="Drenden,PVE,enUS,Reckoning,US,EST", -[111]="Dunemaul,PVP,enUS,Cyclone,US,PST", -[63]="Durotan,PVE,enUS,Ruin,US,EST", -[1258]="Duskwood,PVE,enUS,Ruin,US,EST", -[100]="Earthen Ring,RP,enUS,Vindication,US,EST", -[1342]="Echo Isles,PVE,enUS,Cyclone,US,PST", -[47]="Eitrigg,PVE,enUS,Vengeance,US,CST", -[123]="Eldre'Thalas,PVE,enUS,Reckoning,US,EST", -[67]="Elune,PVE,enUS,Ruin,US,EST", -[162]="Emerald Dream,RPPVP,enUS,Shadowburn,US,CST", -[96]="Eonar,PVE,enUS,Vindication,US,EST", -[93]="Eredar,PVP,enUS,Shadowburn,US,EST", -[1277]="Executus,PVP,enUS,Shadowburn,US,EST", -[1565]="Exodar,PVE,enUS,Ruin,US,EST", -[1370]="Farstriders,RP,enUS,Bloodlust,US,CST", -[118]="Feathermoon,RP,enUS,Reckoning,US,PST", -[1345]="Fenris,PVE,enUS,Cyclone,US,EST", -[127]="Firetree,PVP,enUS,Reckoning,US,EST", -[1576]="Fizzcrank,PVE,enUS,Vindication,US,CST", -[128]="Frostmane,PVP,enUS,Reckoning,US,CST", -[1133]="Frostmourne,PVP,enUS,Bloodlust,US,AEST", -[7]="Frostwolf,PVP,enUS,Bloodlust,US,PST", -[1581]="Galakrond,PVE,enUS,Rampage,US,PST", -[3234]="Gallywix,PVE,ptBR,Ruin,US", -[1141]="Garithos,PVP,enUS,Vengeance,US,CST", -[51]="Garona,PVE,enUS,Rampage,US,CST", -[1373]="Garrosh,PVE,enUS,Vengeance,US,EST", -[1578]="Ghostlands,PVE,enUS,Rampage,US,CST", -[97]="Gilneas,PVE,enUS,Ruin,US,EST", -[1287]="Gnomeregan,PVE,enUS,Shadowburn,US,PST", -[3207]="Goldrinn,PVE,ptBR,Rampage,US", -[92]="Gorefiend,PVP,enUS,Shadowburn,US,EST", -[80]="Gorgonnash,PVP,enUS,Ruin,US,PST", -[158]="Greymane,PVE,enUS,Shadowburn,US,CST", -[1579]="Grizzly Hills,PVE,enUS,Ruin,US,EST", -[1068]="Gul'dan,PVP,enUS,Ruin,US,CST", -[1149]="Gundrak,PVP,enUS,Vengeance,US,AEST", -[129]="Gurubashi,PVP,enUS,Vengeance,US,PST", -[1142]="Hakkar,PVP,enUS,Vengeance,US,CST", -[1266]="Haomarush,PVP,enUS,Shadowburn,US,EST", -[53]="Hellscream,PVE,enUS,Rampage,US,CST", -[1368]="Hydraxis,PVE,enUS,Reckoning,US,CST", -[6]="Hyjal,PVE,enUS,Vengeance,US,PST", -[14]="Icecrown,PVE,enUS,Vindication,US,MST", -[57]="Illidan,PVP,enUS,Rampage,US,CST", -[1291]="Jaedenar,PVP,enUS,Shadowburn,US,EST", -[1144]="Jubei'Thos,PVP,enUS,Vengeance,US,AEST", -[1069]="Kael'thas,PVE,enUS,Rampage,US,CST", -[155]="Kalecgos,PVP,enUS,Shadowburn,US,PST", -[98]="Kargath,PVE,enUS,Vindication,US,EST", -[16]="Kel'Thuzad,PVP,enUS,Vindication,US,MST", -[65]="Khadgar,PVE,enUS,Rampage,US,EST", -[1143]="Khaz Modan,PVE,enUS,Cyclone,US,CST", -[1134]="Khaz'goroth,PVE,enUS,Bloodlust,US,AEST", -[9]="Kil'jaeden,PVP,enUS,Bloodlust,US,PST", -[4]="Kilrogg,PVE,enUS,Bloodlust,US,PST", -[1071]="Kirin Tor,RP,enUS,Rampage,US,CST", -[1146]="Korgath,PVP,enUS,Vengeance,US,CST", -[1349]="Korialstrasz,PVE,enUS,Reckoning,US,PST", -[1147]="Kul Tiras,PVE,enUS,Vengeance,US,CST", -[101]="Laughing Skull,PVP,enUS,Vindication,US,CST", -[1295]="Lethon,PVP,enUS,Shadowburn,US,PST", -[1]="Lightbringer,PVE,enUS,Cyclone,US,PST", -[95]="Lightning's Blade,PVP,enUS,Vindication,US,EST", -[1130]="Lightninghoof,RPPVP,enUS,Shadowburn,US,CST", -[99]="Llane,PVE,enUS,Vindication,US,EST", -[68]="Lothar,PVE,enUS,Ruin,US,EST", -[1173]="Madoran,PVE,enUS,Ruin,US,CST", -[163]="Maelstrom,RPPVP,enUS,Shadowburn,US,CST", -[78]="Magtheridon,PVP,enUS,Ruin,US,EST", -[1357]="Maiev,PVP,enUS,Cyclone,US,PST", -[59]="Mal'Ganis,PVP,enUS,Vindication,US,CST", -[1132]="Malfurion,PVE,enUS,Ruin,US,CST", -[1148]="Malorne,PVP,enUS,Reckoning,US,CST", -[104]="Malygos,PVE,enUS,Vindication,US,CST", -[70]="Mannoroth,PVP,enUS,Ruin,US,EST", -[62]="Medivh,PVE,enUS,Ruin,US,EST", -[1350]="Misha,PVE,enUS,Vengeance,US,PST", -[1374]="Mok'Nathal,PVE,enUS,Reckoning,US,CST", -[1365]="Moon Guard,RP,enUS,Reckoning,US,CST", -[153]="Moonrunner,PVE,enUS,Shadowburn,US,PST", -[1145]="Mug'thol,PVP,enUS,Reckoning,US,CST", -[1182]="Muradin,PVE,enUS,Vengeance,US,CST", -[1432]="Nagrand,PVE,enUS,Bloodlust,US,AEST", -[89]="Nathrezim,PVP,enUS,Vengeance,US,MST", -[1367]="Nazgrel,PVE,enUS,Bloodlust,US,EST", -[1131]="Nazjatar,PVP,enUS,Ruin,US,PST", -[3208]="Nemesis,PVP,ptBR,Rampage,US", -[8]="Ner'zhul,PVP,enUS,Reckoning,US,PST", -[1375]="Nesingwary,PVE,enUS,Bloodlust,US,CST", -[1359]="Nordrassil,PVE,enUS,Vengeance,US,PST", -[1262]="Norgannon,PVE,enUS,Vindication,US,EST", -[1285]="Onyxia,PVP,enUS,Vindication,US,PST", -[122]="Perenolde,PVE,enUS,Cyclone,US,MST", -[5]="Proudmoore,PVE,enUS,Bloodlust,US,PST", -[1428]="Quel'Thalas,PVE,esMX,Vindication,US,CST", -[1372]="Quel'dorei,PVE,enUS,Bloodlust,US,CST", -[1427]="Ragnaros,PVP,esMX,Vindication,US,CST", -[1072]="Ravencrest,PVE,enUS,Rampage,US,CST", -[1352]="Ravenholdt,RPPVP,enUS,Shadowburn,US,EST", -[1151]="Rexxar,PVE,enUS,Vengeance,US,CST", -[1358]="Rivendare,PVP,enUS,Reckoning,US,PST", -[151]="Runetotem,PVE,enUS,Vengeance,US,CST", -[76]="Sargeras,PVP,enUS,Shadowburn,US,CST", -[1153]="Saurfang,PVE,enUS,Vengeance,US,AEST", -[126]="Scarlet Crusade,RP,enUS,Reckoning,US,CST", -[1267]="Scilla,PVP,enUS,Shadowburn,US,EST", -[1185]="Sen'jin,PVE,enUS,Bloodlust,US,CST", -[1290]="Sentinels,RP,enUS,Rampage,US,PST", -[125]="Shadow Council,RP,enUS,Reckoning,US,MST", -[94]="Shadowmoon,PVP,enUS,Shadowburn,US,EST", -[85]="Shadowsong,PVE,enUS,Reckoning,US,PST", -[1364]="Shandris,PVE,enUS,Cyclone,US,EST", -[1557]="Shattered Halls,PVP,enUS,Shadowburn,US,PST", -[72]="Shattered Hand,PVP,enUS,Shadowburn,US,EST", -[1354]="Shu'halo,PVE,enUS,Vengeance,US,PST", -[12]="Silver Hand,RP,enUS,Bloodlust,US,PST", -[86]="Silvermoon,PVE,enUS,Reckoning,US,PST", -[1356]="Sisters of Elune,RP,enUS,Cyclone,US,CST", -[74]="Skullcrusher,PVP,enUS,Ruin,US,EST", -[131]="Skywall,PVE,enUS,Reckoning,US,PST", -[130]="Smolderthorn,PVP,enUS,Vengeance,US,EST", -[82]="Spinebreaker,PVP,enUS,Shadowburn,US,PST", -[124]="Spirestone,PVP,enUS,Reckoning,US,PST", -[160]="Staghelm,PVE,enUS,Shadowburn,US,CST", -[1260]="Steamwheedle Cartel,RP,enUS,Rampage,US,EST", -[108]="Stonemaul,PVP,enUS,Cyclone,US,PST", -[60]="Stormrage,PVE,enUS,Ruin,US,EST", -[58]="Stormreaver,PVP,enUS,Rampage,US,CST", -[110]="Stormscale,PVP,enUS,Reckoning,US,PST", -[113]="Suramar,PVE,enUS,Cyclone,US,PST", -[1292]="Tanaris,PVE,enUS,Shadowburn,US,EST", -[90]="Terenas,PVE,enUS,Reckoning,US,MST", -[1563]="Terokkar,PVE,enUS,Rampage,US,CST", -[1433]="Thaurissan,PVP,enUS,Bloodlust,US,AEST", -[1344]="The Forgotten Coast,PVP,enUS,Ruin,US,EST", -[1570]="The Scryers,RP,enUS,Ruin,US,PST", -[1559]="The Underbog,PVP,enUS,Shadowburn,US,CST", -[1289]="The Venture Co,RPPVP,enUS,Shadowburn,US,PST", -[1154]="Thorium Brotherhood,RP,enUS,Bloodlust,US,CST", -[1263]="Thrall,PVE,enUS,Rampage,US,EST", -[105]="Thunderhorn,PVE,enUS,Vindication,US,CST", -[103]="Thunderlord,PVP,enUS,Ruin,US,CST", -[11]="Tichondrius,PVP,enUS,Bloodlust,US,PST", -[3210]="Tol Barad,PVP,ptBR,Shadowburn,US", -[1360]="Tortheldrin,PVP,enUS,Reckoning,US,EST", -[1175]="Trollbane,PVE,enUS,Ruin,US,EST", -[1265]="Turalyon,PVE,enUS,Vindication,US,EST", -[164]="Twisting Nether,RPPVP,enUS,Shadowburn,US,CST", -[1283]="Uldaman,PVE,enUS,Rampage,US,EST", -[116]="Uldum,PVE,enUS,Cyclone,US,PST", -[1294]="Undermine,PVE,enUS,Ruin,US,EST", -[156]="Ursin,PVP,enUS,Shadowburn,US,PST", -[3]="Uther,PVE,enUS,Vengeance,US,PST", -[1348]="Vashj,PVP,enUS,Bloodlust,US,PST", -[1184]="Vek'nilash,PVE,enUS,Bloodlust,US,CST", -[1567]="Velen,PVE,enUS,Vindication,US,PST", -[71]="Warsong,PVP,enUS,Ruin,US,EST", -[55]="Whisperwind,PVE,enUS,Rampage,US,CST", -[159]="Wildhammer,PVP,enUS,Shadowburn,US,CST", -[87]="Windrunner,PVE,enUS,Reckoning,US,PST", -[1355]="Winterhoof,PVE,enUS,Bloodlust,US,CST", -[1369]="Wyrmrest Accord,RP,enUS,Cyclone,US,PST", -[1270]="Ysera,PVE,enUS,Ruin,US,EST", -[1268]="Ysondre,PVP,enUS,Ruin,US,EST", -[1572]="Zangarmarsh,PVE,enUS,Rampage,US,MST", -[61]="Zul'jin,PVE,enUS,Ruin,US,EST", -[1259]="Zuluhed,PVP,enUS,Shadowburn,US,EST", ---}} ---{{ EUROPE -[577]="Aegwynn,PVP,deDE,Misery,EU", -[1312]="Aerie Peak,PVE,enGB,Reckoning / Abrechnung,EU", -[518]="Agamaggan,PVP,enGB,Reckoning / Abrechnung,EU", -[1413]="Aggra (Português),PVP,ptPT,Misery,EU", -[500]="Aggramar,PVE,enGB,Vengeance / Rache,EU", -[1093]="Ahn'Qiraj,PVP,enGB,Vindication,EU", -[519]="Al'Akir,PVP,enGB,Glutsturm / Emberstorm,EU", -[562]="Alexstrasza,PVE,deDE,Sturmangriff / Charge,EU", -[563]="Alleria,PVE,deDE,Reckoning / Abrechnung,EU", -[1391]="Alonsus,PVE,enGB,Reckoning / Abrechnung,EU", -[601]="Aman'Thul,PVE,deDE,Reckoning / Abrechnung,EU", -[1330]="Ambossar,PVE,deDE,Reckoning / Abrechnung,EU", -[1394]="Anachronos,PVE,enGB,Reckoning / Abrechnung,EU", -[1104]="Anetheron,PVP,deDE,Glutsturm / Emberstorm,EU", -[564]="Antonidas,PVE,deDE,Vengeance / Rache,EU", -[608]="Anub'arak,PVP,deDE,Glutsturm / Emberstorm,EU", -[512]="Arak-arahm,PVP,frFR,Embuscade / Hinterhalt,EU", -[1334]="Arathi,PVP,frFR,Sturmangriff / Charge,EU", -[501]="Arathor,PVE,enGB,Vindication,EU", -[539]="Archimonde,PVP,frFR,Misery,EU", -[1404]="Area 52,PVE,deDE,Embuscade / Hinterhalt,EU", -[536]="Argent Dawn,RP,enGB,Reckoning / Abrechnung,EU", -[578]="Arthas,PVP,deDE,Glutsturm / Emberstorm,EU", -[1406]="Arygos,PVE,deDE,Embuscade / Hinterhalt,EU", -[1923]="Ясеневый лес|Ashenvale,PVP,ruRU,Vindication,EU", -[502]="Aszune,PVE,enGB,Reckoning / Abrechnung,EU", -[1597]="Auchindoun,PVP,enGB,Vindication,EU", -[503]="Azjol-Nerub,PVE,enGB,Cruelty / Crueldad,EU", -[579]="Azshara,PVP,deDE,Glutsturm / Emberstorm,EU", -[1922]="Азурегос|Azuregos,PVE,ruRU,Vindication,EU", -[1417]="Azuremyst,PVE,enGB,Glutsturm / Emberstorm,EU", -[565]="Baelgun,PVE,deDE,Reckoning / Abrechnung,EU", -[607]="Balnazzar,PVP,enGB,Vindication,EU", -[3691]="Blackhand,PVE,deDE,Vengeance / Rache,EU", -[580]="Blackmoore,PVP,deDE,Glutsturm / Emberstorm,EU", -[581]="Blackrock,PVP,deDE,Glutsturm / Emberstorm,EU", -[1929]="Черный Шрам|Blackscar,PVP,ruRU,Vindication,EU", -[1416]="Blade's Edge,PVE,enGB,Glutsturm / Emberstorm,EU", -[521]="Bladefist,PVP,enGB,Cruelty / Crueldad,EU", -[630]="Bloodfeather,PVP,enGB,Cruelty / Crueldad,EU", -[504]="Bloodhoof,PVE,enGB,Reckoning / Abrechnung,EU", -[522]="Bloodscalp,PVP,enGB,Reckoning / Abrechnung,EU", -[1613]="Blutkessel,PVP,deDE,Glutsturm / Emberstorm,EU", -[1924]="Пиратская бухта|Booty Bay,PVP,ruRU,Vindication,EU", -[1625]="Борейская тундра|Borean Tundra,PVE,ruRU,Sturmangriff / Charge,EU", -[1299]="Boulderfist,PVP,enGB,Vindication,EU", -[1393]="Bronze Dragonflight,PVE,enGB,Cruelty / Crueldad,EU", -[1081]="Bronzebeard,PVE,enGB,Reckoning / Abrechnung,EU", -[523]="Burning Blade,PVP,enGB,Reckoning / Abrechnung,EU", -[524]="Burning Legion,PVP,enGB,Cruelty / Crueldad,EU", -[1392]="Burning Steppes,PVP,enGB,Cruelty / Crueldad,EU", -[1381]="C'Thun,PVP,esES,Cruelty / Crueldad,EU", -[1307]="Chamber of Aspects,PVE,enGB,Misery,EU", -[1620]="Chants éternels,PVE,frFR,Sturmangriff / Charge,EU", -[545]="Cho'gall,PVP,frFR,Vengeance / Rache,EU", -[1083]="Chromaggus,PVP,enGB,Vindication,EU", -[1395]="Colinas Pardas,PVE,esES,Cruelty / Crueldad,EU", -[1127]="Confrérie du Thorium,RP,frFR,Embuscade / Hinterhalt,EU", -[644]="Conseil des Ombres,RPPVP,frFR,Embuscade / Hinterhalt,EU", -[525]="Crushridge,PVP,enGB,Reckoning / Abrechnung,EU", -[1337]="Culte de la Rive noire,RPPVP,frFR,Embuscade / Hinterhalt,EU", -[526]="Daggerspine,PVP,enGB,Vindication,EU", -[538]="Dalaran,PVE,frFR,Sturmangriff / Charge,EU", -[1321]="Dalvengyr,PVP,deDE,Glutsturm / Emberstorm,EU", -[1317]="Darkmoon Faire,RP,enGB,Cruelty / Crueldad,EU", -[631]="Darksorrow,PVP,enGB,Cruelty / Crueldad,EU", -[1389]="Darkspear,PVE,enGB,Cruelty / Crueldad,EU", -[1619]="Das Konsortium,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[614]="Das Syndikat,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[1605]="Страж Смерти|Deathguard,PVP,ruRU,Vindication,EU", -[1617]="Ткач Смерти|Deathweaver,PVP,ruRU,Vindication,EU", -[527]="Deathwing,PVP,enGB,Vindication,EU", -[1609]="Подземье|Deepholm,PVP,ruRU,Sturmangriff / Charge,EU", -[635]="Defias Brotherhood,RPPVP,enGB,Glutsturm / Emberstorm,EU", -[1084]="Dentarg,PVP,enGB,Reckoning / Abrechnung,EU", -[1327]="Der Mithrilorden,RP,deDE,Embuscade / Hinterhalt,EU", -[617]="Der Rat von Dalaran,RP,deDE,Embuscade / Hinterhalt,EU", -[1326]="Der abyssische Rat,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[582]="Destromath,PVP,deDE,Glutsturm / Emberstorm,EU", -[531]="Dethecus,PVP,deDE,Embuscade / Hinterhalt,EU", -[1618]="Die Aldor,RP,deDE,Sturmangriff / Charge,EU", -[1121]="Die Arguswacht,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[1333]="Die Nachtwache,RP,deDE,Embuscade / Hinterhalt,EU", -[576]="Die Silberne Hand,RP,deDE,Glutsturm / Emberstorm,EU", -[1119]="Die Todeskrallen,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[1118]="Die ewige Wacht,RP,deDE,Glutsturm / Emberstorm,EU", -[505]="Doomhammer,PVE,enGB,Embuscade / Hinterhalt,EU", -[506]="Draenor,PVE,enGB,Embuscade / Hinterhalt,EU", -[507]="Dragonblight,PVE,enGB,Vindication,EU", -[528]="Dragonmaw,PVP,enGB,Reckoning / Abrechnung,EU", -[1092]="Drak'thul,PVP,enGB,Reckoning / Abrechnung,EU", -[641]="Drek'Thar,PVE,frFR,Embuscade / Hinterhalt,EU", -[1378]="Dun Modr,PVP,esES,Cruelty / Crueldad,EU", -[600]="Dun Morogh,PVE,deDE,Embuscade / Hinterhalt,EU", -[529]="Dunemaul,PVP,enGB,Vindication,EU", -[535]="Durotan,PVE,deDE,Glutsturm / Emberstorm,EU", -[561]="Earthen Ring,RP,enGB,Cruelty / Crueldad,EU", -[1612]="Echsenkessel,PVP,deDE,Sturmangriff / Charge,EU", -[1123]="Eitrigg,PVE,frFR,Embuscade / Hinterhalt,EU", -[1336]="Eldre'Thalas,PVP,frFR,Vengeance / Rache,EU", -[540]="Elune,PVE,frFR,Misery,EU", -[508]="Emerald Dream,PVE,enGB,Embuscade / Hinterhalt,EU", -[1091]="Emeriss,PVP,enGB,Reckoning / Abrechnung,EU", -[1310]="Eonar,PVE,enGB,Glutsturm / Emberstorm,EU", -[583]="Eredar,PVP,deDE,Vengeance / Rache,EU", -[1925]="Вечная Песня|Eversong,PVE,ruRU,Vindication,EU", -[1087]="Executus,PVP,enGB,Cruelty / Crueldad,EU", -[1385]="Exodar,PVE,esES,Cruelty / Crueldad,EU", -[1611]="Festung der Stürme,PVP,deDE,Glutsturm / Emberstorm,EU", -[1623]="Дракономор|Fordragon,PVE,ruRU,Sturmangriff / Charge,EU", -[516]="Forscherliga,RP,deDE,Embuscade / Hinterhalt,EU", -[1300]="Frostmane,PVP,enGB,Misery,EU", -[584]="Frostmourne,PVP,deDE,Glutsturm / Emberstorm,EU", -[632]="Frostwhisper,PVP,enGB,Cruelty / Crueldad,EU", -[585]="Frostwolf,PVP,deDE,Vengeance / Rache,EU", -[1614]="Галакронд|Galakrond,PVE,ruRU,Sturmangriff / Charge,EU", -[509]="Garona,PVP,frFR,Embuscade / Hinterhalt,EU", -[1401]="Garrosh,PVE,deDE,Embuscade / Hinterhalt,EU", -[606]="Genjuros,PVP,enGB,Cruelty / Crueldad,EU", -[1588]="Ghostlands,PVE,enGB,Vindication,EU", -[567]="Gilneas,PVE,deDE,Reckoning / Abrechnung,EU", -[1928]="Голдринн|Goldrinn,PVE,ruRU,Vindication,EU", -[1602]="Гордунни|Gordunni,PVP,ruRU,Vindication,EU", -[586]="Gorgonnash,PVP,deDE,Glutsturm / Emberstorm,EU", -[1610]="Седогрив|Greymane,PVP,ruRU,Vindication,EU", -[1303]="Grim Batol,PVP,enGB,Misery,EU", -[1927]="Гром|Grom,PVP,ruRU,Vindication,EU", -[587]="Gul'dan,PVP,deDE,Glutsturm / Emberstorm,EU", -[646]="Hakkar,PVP,enGB,Reckoning / Abrechnung,EU", -[638]="Haomarush,PVP,enGB,Reckoning / Abrechnung,EU", -[1587]="Hellfire,PVE,enGB,Vindication,EU", -[619]="Hellscream,PVE,enGB,Vengeance / Rache,EU", -[1615]="Ревущий фьорд|Howling Fjord,PVP,ruRU,Sturmangriff / Charge,EU", -[542]="Hyjal,PVE,frFR,Misery,EU", -[541]="Illidan,PVP,frFR,Sturmangriff / Charge,EU", -[1304]="Jaedenar,PVP,enGB,Vindication,EU", -[543]="Kael'thas,PVP,frFR,Embuscade / Hinterhalt,EU", -[1596]="Karazhan,PVP,enGB,Vindication,EU", -[568]="Kargath,PVE,deDE,Reckoning / Abrechnung,EU", -[1305]="Kazzak,PVP,enGB,Misery,EU", -[588]="Kel'Thuzad,PVP,deDE,Glutsturm / Emberstorm,EU", -[1080]="Khadgar,PVE,enGB,Reckoning / Abrechnung,EU", -[640]="Khaz Modan,PVE,frFR,Sturmangriff / Charge,EU", -[569]="Khaz'goroth,PVE,deDE,Embuscade / Hinterhalt,EU", -[589]="Kil'jaeden,PVP,deDE,Glutsturm / Emberstorm,EU", -[1311]="Kilrogg,PVE,enGB,Misery,EU", -[537]="Kirin Tor,RP,frFR,Glutsturm / Emberstorm,EU", -[633]="Kor'gall,PVP,enGB,Cruelty / Crueldad,EU", -[616]="Krag'jin,PVP,deDE,Glutsturm / Emberstorm,EU", -[1332]="Krasus,PVE,frFR,Embuscade / Hinterhalt,EU", -[1082]="Kul Tiras,PVE,enGB,Reckoning / Abrechnung,EU", -[613]="Kult der Verdammten,RPPVP,deDE,Glutsturm / Emberstorm,EU", -[1086]="La Croisade écarlate,RPPVP,frFR,Embuscade / Hinterhalt,EU", -[621]="Laughing Skull,PVP,enGB,Vindication,EU", -[1626]="Les Clairvoyants,RP,frFR,Embuscade / Hinterhalt,EU", -[647]="Les Sentinelles,RP,frFR,Embuscade / Hinterhalt,EU", -[1603]="Король-лич|Lich King,PVP,ruRU,Vindication,EU", -[1388]="Lightbringer,PVE,enGB,Cruelty / Crueldad,EU", -[637]="Lightning's Blade,PVP,enGB,Vindication,EU", -[1409]="Lordaeron,PVE,deDE,Glutsturm / Emberstorm,EU", -[1387]="Los Errantes,PVE,esES,Cruelty / Crueldad,EU", -[570]="Lothar,PVE,deDE,Reckoning / Abrechnung,EU", -[571]="Madmortem,PVE,deDE,Vengeance / Rache,EU", -[3681]="Magtheridon,PVE,enGB,Cruelty / Crueldad,EU", -[590]="Mal'Ganis,PVP,deDE,Sturmangriff / Charge,EU", -[572]="Malfurion,PVE,deDE,Reckoning / Abrechnung,EU", -[1324]="Malorne,PVE,deDE,Reckoning / Abrechnung,EU", -[1098]="Malygos,PVE,deDE,Reckoning / Abrechnung,EU", -[591]="Mannoroth,PVP,deDE,Glutsturm / Emberstorm,EU", -[1621]="Marécage de Zangar,PVE,frFR,Sturmangriff / Charge,EU", -[1089]="Mazrigos,PVE,enGB,Cruelty / Crueldad,EU", -[517]="Medivh,PVE,frFR,Vengeance / Rache,EU", -[1386]="Minahonda,PVE,esES,Cruelty / Crueldad,EU", -[1085]="Moonglade,RP,enGB,Reckoning / Abrechnung,EU", -[1319]="Mug'thol,PVP,deDE,Embuscade / Hinterhalt,EU", -[1589]="Nagrand,PVE,enGB,Misery,EU", -[594]="Nathrezim,PVP,deDE,Glutsturm / Emberstorm,EU", -[1624]="Naxxramas,PVP,frFR,Sturmangriff / Charge,EU", -[1105]="Nazjatar,PVP,deDE,Glutsturm / Emberstorm,EU", -[612]="Nefarian,PVP,deDE,Glutsturm / Emberstorm,EU", -[1316]="Nemesis,PVP,itIT,Misery,EU", -[624]="Neptulon,PVP,enGB,Cruelty / Crueldad,EU", -[544]="Ner'zhul,PVP,frFR,Embuscade / Hinterhalt,EU", -[611]="Nera'thor,PVP,deDE,Glutsturm / Emberstorm,EU", -[1607]="Nethersturm,PVE,deDE,Sturmangriff / Charge,EU", -[618]="Nordrassil,PVE,enGB,Cruelty / Crueldad,EU", -[1408]="Norgannon,PVE,deDE,Embuscade / Hinterhalt,EU", -[574]="Nozdormu,PVE,deDE,Embuscade / Hinterhalt,EU", -[610]="Onyxia,PVP,deDE,Embuscade / Hinterhalt,EU", -[1301]="Outland,PVP,enGB,Misery,EU", -[575]="Perenolde,PVE,deDE,Embuscade / Hinterhalt,EU", -[1309]="Pozzo dell'Eternità,PVE,itIT,Misery,EU", -[593]="Proudmoore,PVE,deDE,Vengeance / Rache,EU", -[623]="Quel'Thalas,PVE,enGB,Cruelty / Crueldad,EU", -[626]="Ragnaros,PVP,enGB,Sturmangriff / Charge,EU", -[1322]="Rajaxx,PVP,deDE,Glutsturm / Emberstorm,EU", -[642]="Rashgarroth,PVP,frFR,Embuscade / Hinterhalt,EU", -[554]="Ravencrest,PVP,enGB,Vengeance / Rache,EU", -[1308]="Ravenholdt,RPPVP,enGB,Glutsturm / Emberstorm,EU", -[1616]="Разувий|Razuvious,PVP,ruRU,Sturmangriff / Charge,EU", -[1099]="Rexxar,PVE,deDE,Reckoning / Abrechnung,EU", -[547]="Runetotem,PVE,enGB,Misery,EU", -[1382]="Sanguino,PVP,esES,Cruelty / Crueldad,EU", -[546]="Sargeras,PVP,frFR,Embuscade / Hinterhalt,EU", -[1314]="Saurfang,PVE,enGB,Cruelty / Crueldad,EU", -[1096]="Scarshield Legion,RPPVP,enGB,Glutsturm / Emberstorm,EU", -[602]="Sen'jin,PVE,deDE,Embuscade / Hinterhalt,EU", -[548]="Shadowsong,PVE,enGB,Reckoning / Abrechnung,EU", -[1598]="Shattered Halls,PVP,enGB,Vindication,EU", -[556]="Shattered Hand,PVP,enGB,Cruelty / Crueldad,EU", -[1608]="Shattrath,PVE,deDE,Embuscade / Hinterhalt,EU", -[1383]="Shen'dralar,PVP,esES,Cruelty / Crueldad,EU", -[549]="Silvermoon,PVE,enGB,Misery,EU", -[533]="Sinstralis,PVP,frFR,Vengeance / Rache,EU", -[557]="Skullcrusher,PVP,enGB,Glutsturm / Emberstorm,EU", -[1604]="Свежеватель Душ|Soulflayer,PVP,ruRU,Vindication,EU", -[558]="Spinebreaker,PVP,enGB,Reckoning / Abrechnung,EU", -[1606]="Sporeggar,RPPVP,enGB,Glutsturm / Emberstorm,EU", -[1117]="Steamwheedle Cartel,RP,enGB,Reckoning / Abrechnung,EU", -[550]="Stormrage,PVE,enGB,Glutsturm / Emberstorm,EU", -[559]="Stormreaver,PVP,enGB,Reckoning / Abrechnung,EU", -[560]="Stormscale,PVP,enGB,Vengeance / Rache,EU", -[511]="Sunstrider,PVP,enGB,Vindication,EU", -[1331]="Suramar,PVE,frFR,Vengeance / Rache,EU", -[3687]="Sylvanas,PVP,enGB,Sturmangriff / Charge,EU", -[1320]="Taerar,PVP,deDE,Sturmangriff / Charge,EU", -[1090]="Talnivarr,PVP,enGB,Vindication,EU", -[1306]="Tarren Mill,PVP,enGB,Reckoning / Abrechnung,EU", -[1407]="Teldrassil,PVE,deDE,Embuscade / Hinterhalt,EU", -[1622]="Temple noir,PVP,frFR,Sturmangriff / Charge,EU", -[551]="Terenas,PVE,enGB,Embuscade / Hinterhalt,EU", -[1415]="Terokkar,PVE,enGB,Cruelty / Crueldad,EU", -[615]="Terrordar,PVP,deDE,Embuscade / Hinterhalt,EU", -[627]="The Maelstrom,PVP,enGB,Vindication,EU", -[1595]="The Sha'tar,RP,enGB,Reckoning / Abrechnung,EU", -[636]="The Venture Co,RPPVP,enGB,Glutsturm / Emberstorm,EU", -[605]="Theradras,PVP,deDE,Embuscade / Hinterhalt,EU", -[1926]="Термоштепсель|Thermaplugg,PVP,ruRU,Vindication,EU", -[604]="Thrall,PVE,deDE,Glutsturm / Emberstorm,EU", -[643]="Throk'Feroth,PVP,frFR,Embuscade / Hinterhalt,EU", -[552]="Thunderhorn,PVE,enGB,Misery,EU", -[1106]="Tichondrius,PVE,deDE,Glutsturm / Emberstorm,EU", -[1328]="Tirion,PVE,deDE,Glutsturm / Emberstorm,EU", -[1405]="Todeswache,RP,deDE,Embuscade / Hinterhalt,EU", -[1088]="Trollbane,PVP,enGB,Vindication,EU", -[553]="Turalyon,PVE,enGB,Embuscade / Hinterhalt,EU", -[513]="Twilight's Hammer,PVP,enGB,Reckoning / Abrechnung,EU", -[625]="Twisting Nether,PVP,enGB,Sturmangriff / Charge,EU", -[1384]="Tyrande,PVE,esES,Cruelty / Crueldad,EU", -[1122]="Uldaman,PVE,frFR,Embuscade / Hinterhalt,EU", -[1323]="Ulduar,PVE,deDE,Reckoning / Abrechnung,EU", -[1380]="Uldum,PVP,esES,Cruelty / Crueldad,EU", -[1400]="Un'Goro,PVE,deDE,Embuscade / Hinterhalt,EU", -[645]="Varimathras,PVE,frFR,Misery,EU", -[629]="Vashj,PVP,enGB,Reckoning / Abrechnung,EU", -[1318]="Vek'lor,PVP,deDE,Glutsturm / Emberstorm,EU", -[1298]="Vek'nilash,PVE,enGB,Glutsturm / Emberstorm,EU", -[510]="Vol'jin,PVE,frFR,Embuscade / Hinterhalt,EU", -[1313]="Wildhammer,PVE,enGB,Misery,EU", -[609]="Wrathbringer,PVP,deDE,Glutsturm / Emberstorm,EU", -[639]="Xavius,PVP,enGB,Glutsturm / Emberstorm,EU", -[1097]="Ysera,PVE,deDE,Reckoning / Abrechnung,EU", -[1335]="Ysondre,PVP,frFR,Vengeance / Rache,EU", -[515]="Zenedar,PVP,enGB,Cruelty / Crueldad,EU", -[592]="Zirkel des Cenarius,RP,deDE,Embuscade / Hinterhalt,EU", -[1379]="Zul'jin,PVP,esES,Cruelty / Crueldad,EU", -[573]="Zuluhed,PVP,deDE,Glutsturm / Emberstorm,EU", ---}} ---[[ {{ KOREA -[]="가로나,PVP,koKR,격노의 전장,KR", -[]="굴단,PVP,koKR,징벌의 전장,KR", -[]="노르간논,PVP,koKR,징벌의 전장,KR", -[]="달라란,PVP,koKR,격노의 전장,KR", -[]="데스윙,PVP,koKR,격노의 전장,KR", -[]="듀로탄,PVP,koKR,징벌의 전장,KR", -[]="렉사르,PVE,koKR,격노의 전장,KR", -[]="말퓨리온,PVP,koKR,격노의 전장,KR", -[]="불타는 군단,PVE,koKR,격노의 전장,KR", -[]="세나리우스,PVP,koKR,격노의 전장,KR", -[]="스톰레이지,PVE,koKR,징벌의 전장,KR", -[]="아즈샤라,PVP,koKR,징벌의 전장,KR", -[]="알렉스트라자,PVP,koKR,격노의 전장,KR", -[]="와일드해머,PVE,koKR,격노의 전장,KR", -[]="윈드러너,PVE,koKR,징벌의 전장,KR", -[]="줄진,PVP,koKR,징벌의 전장,KR", -[]="하이잘,PVP,koKR,격노의 전장,KR", -[]="헬스크림,PVP,koKR,격노의 전장,KR", ---}} ]] ---{{ CHINA -[925]="万色星辰,PVE,zhCN,Battle Group 9,CN", -[922]="世界之树,PVE,zhCN,Battle Group 9,CN", -[1494]="丹莫德,PVP,zhCN,Battle Group 13,CN", -[794]="主宰之剑,PVP,zhCN,Battle Group 4,CN", -[1696]="亚雷戈斯,PVE,zhCN,Battle Group 16,CN", -[2124]="亡语者,PVP,zhCN,Battle Group 21,CN", -[1663]="伊兰尼库斯,PVP,zhCN,Battle Group 15,CN", -[790]="伊利丹,PVP,zhCN,Battle Group 4,CN", -[940]="伊森利恩,PVP,zhCN,Battle Group 10,CN", -[1694]="伊森德雷,PVP,zhCN,Battle Group 16,CN", -[746]="伊瑟拉,PVE,zhCN,Battle Group 2,CN", -[1502]="伊莫塔尔,PVP,zhCN,Battle Group 14,CN", -[951]="伊萨里奥斯,PVP,zhCN,Battle Group 10,CN", -[944]="元素之力,PVP,zhCN,Battle Group 10,CN", -[864]="克尔苏加德,PVP,zhCN,Battle Group 8,CN", -[1207]="克洛玛古斯,PVP,zhCN,Battle Group 11,CN", -[1209]="克苏恩,PVP,zhCN,Battle Group 11,CN", -[1809]="军团要塞,PVP,zhCN,Battle Group 17,CN", -[2137]="冬拥湖,PVP,zhCN,Battle Group 21,CN", -[1693]="冬泉谷,PVP,zhCN,Battle Group 16,CN", -[1657]="冰川之拳,PVP,zhCN,Battle Group 15,CN", -[758]="冰霜之刃,PVP,zhCN,Battle Group 3,CN", -[852]="冰风岗,PVP,zhCN,Battle Group 7,CN", -[1794]="凤凰之神,PVP,zhCN,Battle Group 17,CN", -[863]="凯尔萨斯,PVP,zhCN,Battle Group 8,CN", -[814]="凯恩血蹄,PVP,zhCN,Battle Group 5,CN", -[867]="利刃之拳,PVP,zhCN,Battle Group 7,CN", -[1658]="刺骨利刃,PVP,zhCN,Battle Group 15,CN", -[927]="加兹鲁维,PVP,zhCN,Battle Group 9,CN", -[1498]="加基森,PVP,zhCN,Battle Group 13,CN", -[1944]="加尔,PVP,zhCN,Battle Group 19,CN", -[1499]="加里索斯,PVP,zhCN,Battle Group 13,CN", -[840]="勇士岛,PVP,zhCN,Battle Group 6,CN", -[828]="千针石林,PVP,zhCN,Battle Group 6,CN", -[771]="卡德加,PVP,zhCN,Battle Group 3,CN", -[720]="卡德罗斯,PVP,zhCN,Battle Group 1,CN", -[721]="卡扎克,PVP,zhCN,Battle Group 1,CN", -[1216]="卡拉赞,PVP,zhCN,Battle Group 11,CN", -[916]="卡珊德拉,PVP,zhCN,Battle Group 9,CN", -[1692]="厄祖玛特,PVP,zhCN,Battle Group 16,CN", -[1489]="古加尔,PVP,zhCN,Battle Group 13,CN", -[857]="古尔丹,PVP,zhCN,Battle Group 7,CN", -[1223]="古拉巴什,PVP,zhCN,Battle Group 12,CN", -[2127]="古达克,PVP,zhCN,Battle Group 21,CN", -[1808]="哈兰,PVP,zhCN,Battle Group 17,CN", -[1224]="哈卡,PVP,zhCN,Battle Group 12,CN", -[1971]="嚎风峡湾,PVP,zhCN,Battle Group 20,CN", -[718]="回音山,PVE,zhCN,Battle Group 1,CN", -[714]="国王之谷,PVP,zhCN,Battle Group 1,CN", -[745]="图拉扬,PVE,zhCN,Battle Group 2,CN", -[833]="圣火神殿,PVP,zhCN,Battle Group 6,CN", -[762]="地狱之石,PVP,zhCN,Battle Group 3,CN", -[761]="地狱咆哮,PVP,zhCN,Battle Group 3,CN", -[1496]="埃克索图斯,PVP,zhCN,Battle Group 13,CN", -[750]="埃加洛尔,PVP,zhCN,Battle Group 3,CN", -[797]="埃德萨拉,PVP,zhCN,Battle Group 5,CN", -[751]="埃苏雷格,PVP,zhCN,Battle Group 3,CN", -[846]="埃雷达尔,PVP,zhCN,Battle Group 7,CN", -[859]="基尔加丹,PVP,zhCN,Battle Group 7,CN", -[719]="基尔罗格,PVP,zhCN,Battle Group 1,CN", -[1512]="塔纳利斯,PVP,zhCN,Battle Group 14,CN", -[1687]="塞拉摩,PVP,zhCN,Battle Group 16,CN", -[1514]="塞拉赞恩,PVP,zhCN,Battle Group 14,CN", -[1820]="塞泰克,PVP,zhCN,Battle Group 18,CN", -[782]="塞纳里奥,PVE,zhCN,Battle Group 4,CN", -[1949]="壁炉谷,PVP,zhCN,Battle Group 19,CN", -[781]="夏维安,PVP,zhCN,Battle Group 4,CN", -[1507]="外域,PVP,zhCN,Battle Group 14,CN", -[930]="大地之怒,PVP,zhCN,Battle Group 10,CN", -[1503]="大漩涡,PVP,zhCN,Battle Group 14,CN", -[1508]="天空之墙,PVP,zhCN,Battle Group 14,CN", -[1824]="太阳之井,PVP,zhCN,Battle Group 18,CN", -[1682]="夺灵者,PVP,zhCN,Battle Group 16,CN", -[1228]="奈法利安,PVP,zhCN,Battle Group 12,CN", -[734]="奈萨里奥,PVP,zhCN,Battle Group 2,CN", -[1965]="奎尔丹纳斯,PVP,zhCN,Battle Group 20,CN", -[1229]="奎尔萨拉斯,PVP,zhCN,Battle Group 12,CN", -[1505]="奥妮克希亚,PVP,zhCN,Battle Group 14,CN", -[2120]="奥尔加隆,PVP,zhCN,Battle Group 21,CN", -[757]="奥拉基尔,PVP,zhCN,Battle Group 3,CN", -[1506]="奥斯里安,PVP,zhCN,Battle Group 14,CN", -[850]="奥特兰克,PVP,zhCN,Battle Group 7,CN", -[706]="奥蕾莉亚,PVE,zhCN,Battle Group 1,CN", -[705]="奥达曼,PVP,zhCN,Battle Group 1,CN", -[918]="守护之剑,PVP,zhCN,Battle Group 9,CN", -[1198]="安其拉,PVP,zhCN,Battle Group 11,CN", -[2122]="安加萨,PVP,zhCN,Battle Group 21,CN", -[952]="安多哈尔,PVP,zhCN,Battle Group 10,CN", -[704]="安威玛尔,PVP,zhCN,Battle Group 1,CN", -[1517]="安戈洛,PVP,zhCN,Battle Group 14,CN", -[2121]="安格博达,PVP,zhCN,Battle Group 21,CN", -[1199]="安纳塞隆,PVP,zhCN,Battle Group 11,CN", -[1933]="安苏,PVP,zhCN,Battle Group 19,CN", -[938]="密林游侠,PVP,zhCN,Battle Group 10,CN", -[858]="寒冰皇冠,PVP,zhCN,Battle Group 7,CN", -[710]="尘风峡谷,PVP,zhCN,Battle Group 1,CN", -[788]="屠魔山谷,PVP,zhCN,Battle Group 4,CN", -[740]="山丘之王,PVP,zhCN,Battle Group 2,CN", -[861]="巨龙之吼,PVP,zhCN,Battle Group 7,CN", -[1670]="巫妖之王,PVP,zhCN,Battle Group 15,CN", -[851]="巴尔古恩,PVP,zhCN,Battle Group 7,CN", -[1486]="巴瑟拉斯,PVP,zhCN,Battle Group 13,CN", -[1203]="巴纳扎尔,PVP,zhCN,Battle Group 11,CN", -[921]="布兰卡德,PVP,zhCN,Battle Group 9,CN", -[800]="布莱克摩,PVP,zhCN,Battle Group 5,CN", -[1501]="布莱恩,PVE,zhCN,Battle Group 13,CN", -[1937]="布鲁塔卢斯,PVP,zhCN,Battle Group 19,CN", -[885]="希尔瓦娜斯,PVP,zhCN,Battle Group 8,CN", -[1819]="希雷诺斯,PVP,zhCN,Battle Group 18,CN", -[1676]="幽暗沼泽,PVP,zhCN,Battle Group 15,CN", -[1226]="库尔提拉斯,PVP,zhCN,Battle Group 12,CN", -[723]="库德兰,PVP,zhCN,Battle Group 1,CN", -[766]="弗塞雷迦,PVP,zhCN,Battle Group 3,CN", -[2133]="影之哀伤,PVP,zhCN,Battle Group 21,CN", -[891]="影牙要塞,PVP,zhCN,Battle Group 8,CN", -[1214]="德拉诺,PVP,zhCN,Battle Group 11,CN", -[1488]="恐怖图腾,PVP,zhCN,Battle Group 13,CN", -[924]="恶魔之翼,PVP,zhCN,Battle Group 9,CN", -[1492]="恶魔之魂,PVP,zhCN,Battle Group 13,CN", -[767]="戈古纳斯,PVP,zhCN,Battle Group 3,CN", -[1947]="戈提克,PVP,zhCN,Battle Group 19,CN", -[793]="战歌,PVP,zhCN,Battle Group 4,CN", -[1695]="扎拉赞恩,PVP,zhCN,Battle Group 16,CN", -[1515]="托塞德林,PVP,zhCN,Battle Group 14,CN", -[1823]="托尔巴拉德,PVP,zhCN,Battle Group 18,CN", -[772]="拉文凯斯,PVP,zhCN,Battle Group 4,CN", -[1231]="拉文霍德,PVP,zhCN,Battle Group 12,CN", -[865]="拉格纳洛斯,PVP,zhCN,Battle Group 7,CN", -[1230]="拉贾克斯,PVP,zhCN,Battle Group 12,CN", -[954]="提尔之手,PVP,zhCN,Battle Group 10,CN", -[882]="提瑞斯法,PVP,zhCN,Battle Group 8,CN", -[1815]="摩摩尔,PVP,zhCN,Battle Group 18,CN", -[920]="斩魔者,PVP,zhCN,Battle Group 9,CN", -[878]="斯坦索姆,PVP,zhCN,Battle Group 8,CN", -[1240]="无尽之海,PVP,zhCN,Battle Group 12,CN", -[1803]="无底海渊,PVP,zhCN,Battle Group 17,CN", -[946]="日落沼泽,PVP,zhCN,Battle Group 10,CN", -[737]="普瑞斯托,PVE,zhCN,Battle Group 2,CN", -[827]="普罗德摩,PVP,zhCN,Battle Group 6,CN", -[756]="暗影之月,PVP,zhCN,Battle Group 3,CN", -[849]="暗影议会,PVP,zhCN,Battle Group 7,CN", -[1821]="暗影迷宫,PVP,zhCN,Battle Group 18,CN", -[943]="暮色森林,PVP,zhCN,Battle Group 10,CN", -[708]="暴风祭坛,PVP,zhCN,Battle Group 1,CN", -[791]="月光林地,PVE,zhCN,Battle Group 4,CN", -[792]="月神殿,PVE,zhCN,Battle Group 4,CN", -[1827]="末日祷告祭坛,PVP,zhCN,Battle Group 18,CN", -[1939]="末日行者,PVP,zhCN,Battle Group 19,CN", -[959]="朵丹尼尔,PVP,zhCN,Battle Group 10,CN", -[802]="杜隆坦,PVP,zhCN,Battle Group 5,CN", -[1222]="格瑞姆巴托,PVP,zhCN,Battle Group 12,CN", -[1500]="格雷迈恩,PVP,zhCN,Battle Group 13,CN", -[1807]="格鲁尔,PVP,zhCN,Battle Group 17,CN", -[1212]="桑德兰,PVP,zhCN,Battle Group 11,CN", -[775]="梅尔加尼,PVP,zhCN,Battle Group 4,CN", -[776]="梦境之树,PVE,zhCN,Battle Group 4,CN", -[1232]="森金,PVP,zhCN,Battle Group 12,CN", -[741]="死亡之翼,PVP,zhCN,Battle Group 2,CN", -[1802]="死亡熔炉,PVP,zhCN,Battle Group 17,CN", -[769]="毁灭之锤,PVP,zhCN,Battle Group 3,CN", -[928]="水晶之刺,PVP,zhCN,Battle Group 9,CN", -[956]="永夜港,PVE,zhCN,Battle Group 10,CN", -[1236]="永恒之井,PVP,zhCN,Battle Group 12,CN", -[1970]="沙怒,PVP,zhCN,Battle Group 20,CN", -[960]="法拉希姆,PVP,zhCN,Battle Group 10,CN", -[787]="泰兰德,PVE,zhCN,Battle Group 4,CN", -[1234]="泰拉尔,PVP,zhCN,Battle Group 12,CN", -[1227]="洛丹伦,PVP,zhCN,Battle Group 12,CN", -[2129]="洛肯,PVP,zhCN,Battle Group 21,CN", -[730]="洛萨,PVP,zhCN,Battle Group 2,CN", -[1225]="海克泰尔,PVP,zhCN,Battle Group 12,CN", -[768]="海加尔,PVP,zhCN,Battle Group 4,CN", -[1237]="海达希亚,PVE,zhCN,Battle Group 12,CN", -[936]="浸毒之骨,PVP,zhCN,Battle Group 9,CN", -[1793]="深渊之喉,PVP,zhCN,Battle Group 17,CN", -[1659]="深渊之巢,PVP,zhCN,Battle Group 15,CN", -[926]="激流之傲,PVP,zhCN,Battle Group 9,CN", -[860]="激流堡,PVP,zhCN,Battle Group 7,CN", -[1664]="火喉,PVP,zhCN,Battle Group 15,CN", -[1662]="火烟之谷,PVP,zhCN,Battle Group 15,CN", -[770]="火焰之树,PVP,zhCN,Battle Group 3,CN", -[810]="火羽山,PVP,zhCN,Battle Group 5,CN", -[1484]="灰谷,PVP,zhCN,Battle Group 13,CN", -[727]="烈焰峰,PVP,zhCN,Battle Group 2,CN", -[1681]="烈焰荆棘,PVP,zhCN,Battle Group 16,CN", -[838]="熊猫酒仙,PVP,zhCN,Battle Group 6,CN", -[1221]="熔火之心,PVP,zhCN,Battle Group 11,CN", -[1941]="熵魔,PVP,zhCN,Battle Group 19,CN", -[829]="燃烧之刃,PVP,zhCN,Battle Group 6,CN", -[1206]="燃烧军团,PVP,zhCN,Battle Group 11,CN", -[738]="燃烧平原,PVP,zhCN,Battle Group 2,CN", -[755]="爱斯特纳,PVP,zhCN,Battle Group 3,CN", -[915]="狂热之刃,PVP,zhCN,Battle Group 9,CN", -[815]="狂风峭壁,PVP,zhCN,Battle Group 5,CN", -[731]="玛多兰,PVE,zhCN,Battle Group 2,CN", -[773]="玛法里奥,PVP,zhCN,Battle Group 4,CN", -[2130]="玛洛加尔,PVP,zhCN,Battle Group 21,CN", -[732]="玛瑟里顿,PVP,zhCN,Battle Group 2,CN", -[869]="玛诺洛斯,PVP,zhCN,Battle Group 8,CN", -[822]="玛里苟斯,PVP,zhCN,Battle Group 6,CN", -[874]="瑞文戴尔,PVP,zhCN,Battle Group 8,CN", -[1513]="瑟莱德丝,PVP,zhCN,Battle Group 14,CN", -[1829]="瓦丝琪,PVP,zhCN,Battle Group 18,CN", -[1235]="瓦拉斯塔兹,PVP,zhCN,Battle Group 12,CN", -[1202]="瓦里玛萨斯,PVE,zhCN,Battle Group 11,CN", -[835]="甜水绿洲,PVP,zhCN,Battle Group 6,CN", -[1934]="生态船,PVP,zhCN,Battle Group 19,CN", -[707]="白银之手,PVE,zhCN,Battle Group 1,CN", -[1936]="白骨荒野,PVP,zhCN,Battle Group 19,CN", -[1948]="盖斯,PVP,zhCN,Battle Group 19,CN", -[786]="石爪峰,PVP,zhCN,Battle Group 4,CN", -[1685]="石锤,PVP,zhCN,Battle Group 16,CN", -[1208]="破碎岭,PVP,zhCN,Battle Group 11,CN", -[1519]="祖尔金,PVP,zhCN,Battle Group 14,CN", -[1830]="祖阿曼,PVP,zhCN,Battle Group 18,CN", -[941]="神圣之歌,PVE,zhCN,Battle Group 10,CN", -[1813]="穆戈尔,PVP,zhCN,Battle Group 18,CN", -[803]="符文图腾,PVP,zhCN,Battle Group 5,CN", -[1672]="米奈希尔,PVP,zhCN,Battle Group 15,CN", -[742]="索拉丁,PVP,zhCN,Battle Group 2,CN", -[807]="红云台地,PVP,zhCN,Battle Group 5,CN", -[717]="红龙军团,PVP,zhCN,Battle Group 1,CN", -[806]="红龙女王,PVP,zhCN,Battle Group 5,CN", -[1239]="纳克萨玛斯,PVP,zhCN,Battle Group 12,CN", -[825]="纳沙塔尔,PVP,zhCN,Battle Group 6,CN", -[2123]="织亡者,PVP,zhCN,Battle Group 21,CN", -[729]="罗宁,PVP,zhCN,Battle Group 2,CN", -[841]="羽月,PVE,zhCN,Battle Group 6,CN", -[1832]="翡翠梦境,PVE,zhCN,Battle Group 18,CN", -[872]="耐奥祖,PVP,zhCN,Battle Group 8,CN", -[778]="耐普图隆,PVP,zhCN,Battle Group 4,CN", -[856]="耳语海岸,PVE,zhCN,Battle Group 7,CN", -[1942]="能源舰,PVP,zhCN,Battle Group 19,CN", -[843]="自由之风,PVP,zhCN,Battle Group 6,CN", -[754]="艾森娜,PVE,zhCN,Battle Group 3,CN", -[847]="艾欧纳尔,PVP,zhCN,Battle Group 7,CN", -[1485]="艾维娜,PVE,zhCN,Battle Group 13,CN", -[703]="艾苏恩,PVP,zhCN,Battle Group 1,CN", -[1495]="艾莫莉丝,PVP,zhCN,Battle Group 13,CN", -[753]="艾萨拉,PVP,zhCN,Battle Group 3,CN", -[1812]="艾露恩,PVE,zhCN,Battle Group 17,CN", -[949]="芬里斯,PVP,zhCN,Battle Group 10,CN", -[929]="苏塔恩,PVP,zhCN,Battle Group 9,CN", -[1828]="范克里夫,PVP,zhCN,Battle Group 18,CN", -[1233]="范达尔鹿盔,PVP,zhCN,Battle Group 12,CN", -[1510]="荆棘谷,PVP,zhCN,Battle Group 14,CN", -[2131]="莫德雷萨,PVP,zhCN,Battle Group 21,CN", -[1241]="莱索恩,PVP,zhCN,Battle Group 12,CN", -[1497]="菲拉斯,PVP,zhCN,Battle Group 13,CN", -[1943]="菲米丝,PVP,zhCN,Battle Group 19,CN", -[2132]="萨塔里奥,PVP,zhCN,Battle Group 21,CN", -[830]="萨尔,PVP,zhCN,Battle Group 6,CN", -[739]="萨格拉斯,PVP,zhCN,Battle Group 2,CN", -[1969]="萨洛拉丝,PVP,zhCN,Battle Group 20,CN", -[1238]="萨菲隆,PVP,zhCN,Battle Group 12,CN", -[725]="蓝龙军团,PVP,zhCN,Battle Group 2,CN", -[709]="藏宝海湾,PVP,zhCN,Battle Group 1,CN", -[842]="蜘蛛王国,PVP,zhCN,Battle Group 6,CN", -[1946]="血吼,PVP,zhCN,Battle Group 19,CN", -[839]="血牙魔王,PVP,zhCN,Battle Group 6,CN", -[799]="血环,PVP,zhCN,Battle Group 5,CN", -[1205]="血羽,PVP,zhCN,Battle Group 11,CN", -[886]="血色十字军,PVP,zhCN,Battle Group 8,CN", -[1487]="血顶,PVP,zhCN,Battle Group 13,CN", -[1817]="试炼之环,PVP,zhCN,Battle Group 18,CN", -[826]="诺兹多姆,PVE,zhCN,Battle Group 6,CN", -[1504]="诺森德,PVP,zhCN,Battle Group 14,CN", -[736]="诺莫瑞根,PVP,zhCN,Battle Group 2,CN", -[1950]="贫瘠之地,PVE,zhCN,Battle Group 19,CN", -[933]="踏梦者,PVP,zhCN,Battle Group 10,CN", -[780]="轻风之语,PVE,zhCN,Battle Group 4,CN", -[2125]="达克萨隆,PVP,zhCN,Battle Group 21,CN", -[1940]="达基萨斯,PVP,zhCN,Battle Group 19,CN", -[1938]="达尔坎,PVP,zhCN,Battle Group 19,CN", -[1490]="达文格尔,PVP,zhCN,Battle Group 13,CN", -[760]="达斯雷玛,PVP,zhCN,Battle Group 3,CN", -[711]="达纳斯,PVP,zhCN,Battle Group 1,CN", -[855]="达隆米尔,PVP,zhCN,Battle Group 7,CN", -[917]="迅捷微风,PVP,zhCN,Battle Group 9,CN", -[2135]="远古海滩,PVP,zhCN,Battle Group 21,CN", -[2118]="迦拉克隆,PVE,zhCN,Battle Group 21,CN", -[1667]="迦玛兰,PVP,zhCN,Battle Group 15,CN", -[812]="迦罗娜,PVP,zhCN,Battle Group 5,CN", -[1945]="迦顿,PVP,zhCN,Battle Group 19,CN", -[712]="迪托马斯,PVP,zhCN,Battle Group 1,CN", -[1493]="迪瑟洛克,PVP,zhCN,Battle Group 13,CN", -[1511]="逐日者,PVE,zhCN,Battle Group 14,CN", -[883]="通灵学院,PVP,zhCN,Battle Group 8,CN", -[887]="遗忘海岸,PVE,zhCN,Battle Group 8,CN", -[1668]="金度,PVP,zhCN,Battle Group 15,CN", -[962]="金色平原,rppvp,zhCN,Battle Group 10,CN", -[744]="铜龙军团,PVP,zhCN,Battle Group 2,CN", -[889]="银月,PVE,zhCN,Battle Group 8,CN", -[888]="银松森林,PVE,zhCN,Battle Group 8,CN", -[784]="闪电之刃,PVP,zhCN,Battle Group 4,CN", -[749]="阿克蒙德,PVP,zhCN,Battle Group 3,CN", -[1200]="阿努巴拉克,PVP,zhCN,Battle Group 11,CN", -[1482]="阿卡玛,PVP,zhCN,Battle Group 13,CN", -[1795]="阿古斯,PVP,zhCN,Battle Group 17,CN", -[844]="阿尔萨斯,PVP,zhCN,Battle Group 7,CN", -[1483]="阿扎达斯,PVP,zhCN,Battle Group 13,CN", -[1201]="阿拉希,PVP,zhCN,Battle Group 11,CN", -[845]="阿拉索,PVP,zhCN,Battle Group 7,CN", -[1935]="阿斯塔洛,PVP,zhCN,Battle Group 19,CN", -[1932]="阿曼尼,PVP,zhCN,Battle Group 19,CN", -[700]="阿格拉玛,PVP,zhCN,Battle Group 1,CN", -[1931]="阿比迪斯,PVP,zhCN,Battle Group 19,CN", -[1210]="阿纳克洛斯,PVP,zhCN,Battle Group 11,CN", -[748]="阿迦玛甘,PVP,zhCN,Battle Group 3,CN", -[931]="雏龙之翼,PVP,zhCN,Battle Group 9,CN", -[817]="雷克萨,PVP,zhCN,Battle Group 6,CN", -[816]="雷斧堡垒,PVP,zhCN,Battle Group 5,CN", -[1211]="雷霆之怒,PVP,zhCN,Battle Group 11,CN", -[726]="雷霆之王,PVP,zhCN,Battle Group 2,CN", -[818]="雷霆号角,PVP,zhCN,Battle Group 5,CN", -[1955]="霍格,PVP,zhCN,Battle Group 20,CN", -[877]="霜之哀伤,PVE,zhCN,Battle Group 8,CN", -[876]="霜狼,PVP,zhCN,Battle Group 8,CN", -[764]="风暴之怒,PVP,zhCN,Battle Group 3,CN", -[953]="风暴之眼,PVP,zhCN,Battle Group 10,CN", -[1509]="风暴之鳞,PVP,zhCN,Battle Group 14,CN", -[2134]="风暴峭壁,PVP,zhCN,Battle Group 21,CN", -[765]="风行者,PVP,zhCN,Battle Group 3,CN", -[804]="鬼雾峰,PVP,zhCN,Battle Group 5,CN", -[1798]="鲜血熔炉,PVP,zhCN,Battle Group 17,CN", -[890]="鹰巢山,PVP,zhCN,Battle Group 8,CN", -[1810]="麦姆,PVP,zhCN,Battle Group 17,CN", -[774]="麦维影歌,PVP,zhCN,Battle Group 4,CN", -[870]="麦迪文,PVE,zhCN,Battle Group 8,CN", -[808]="黄金之路,PVE,zhCN,Battle Group 5,CN", -[1204]="黑手军团,PVP,zhCN,Battle Group 11,CN", -[805]="黑暗之矛,PVP,zhCN,Battle Group 5,CN", -[1801]="黑暗之门,PVP,zhCN,Battle Group 17,CN", -[1516]="黑暗虚空,PVP,zhCN,Battle Group 14,CN", -[932]="黑暗魅影,PVP,zhCN,Battle Group 9,CN", -[716]="黑石尖塔,PVP,zhCN,Battle Group 1,CN", -[1213]="黑翼之巢,PVP,zhCN,Battle Group 11,CN", -[1491]="黑铁,PVP,zhCN,Battle Group 13,CN", -[2126]="黑锋哨站,PVP,zhCN,Battle Group 21,CN", -[715]="黑龙军团,PVP,zhCN,Battle Group 1,CN", -[1215]="龙骨平原,PVP,zhCN,Battle Group 11,CN", ---}} ---{{ TAIWAN -[982]="世界之樹,PVE,zhTW,嗜血,TW", -[1038]="亞雷戈斯,PVE,zhTW,嗜血,TW", -[977]="冰霜之刺,PVP,zhTW,嗜血,TW", -[1001]="冰風崗哨,PVP,zhTW,嗜血,TW", -[979]="地獄吼,PVP,zhTW,嗜血,TW", -[1043]="夜空之歌,PVP,zhTW,嗜血,TW", -[980]="天空之牆,PVE,zhTW,嗜血,TW", -[1057]="寒冰皇冠,PVP,zhTW,嗜血,TW", -[964]="尖石,PVP,zhTW,嗜血,TW", -[1023]="屠魔山谷,PVP,zhTW,嗜血,TW", -[966]="巨龍之喉,PVP,zhTW,嗜血,TW", -[1049]="憤怒使者,PVP,zhTW,嗜血,TW", -[978]="日落沼澤,PVP,zhTW,嗜血,TW", -[963]="暗影之月,PVE,zhTW,嗜血,TW", -[985]="水晶之刺,PVP,zhTW,嗜血,TW", -[999]="狂熱之刃,PVP,zhTW,嗜血,TW", -[1056]="眾星之子,PVE,zhTW,嗜血,TW", -[1006]="米奈希爾,PVP,zhTW,嗜血,TW", -[1046]="聖光之願,PVE,zhTW,嗜血,TW", -[1037]="血之谷,PVP,zhTW,嗜血,TW", -[1033]="語風,PVE,zhTW,嗜血,TW", -[1048]="銀翼要塞,PVP,zhTW,嗜血,TW", -[1054]="阿薩斯,PVP,zhTW,嗜血,TW", -[965]="雷鱗,PVP,zhTW,嗜血,TW", ---}} -} - ------------------------------------------------------------------------- - -connections = { ---{{ NORTH AMERICA --- http://us.battle.net/wow/en/blog/11393305 -"1136,83,109,129,1142", -- Aegwynn, Bonechewer, Daggerspine, Gurubashi, Hakkar -"1129,56,1291,1559", -- Agamaggan, Archimonde, Jaedenar, The Underbog -"106,1576", -- Aggramar, Fizzcrank -"1137,84,1145", -- Akama, Dragonmaw, Mug'thol -"1070,1563", -- Alexstrasza, Terokkar -"52,65", -- Alleria, Khadgar -"1282,1264,78,1268", -- Altar of Storms, Anetheron, Magtheridon, Ysondre -"1293,1075,80,1344,71", -- Alterac Mountains, Balnazzar, Gorgonnash, The Forgotten Coast, Warsong -"1276,1267,156,1259", -- Andorhal, Scilla, Ursin, Zuluhed -"1363,116", -- Antonidas, Uldum -"1346,1138,107,1141,130", -- Anub'arak, Chromaggus, Crushridge, Garithos, Nathrezim, Smolderthorn -"1288,1294", -- Anvilmar, Undermine -"1165,1377", -- Arathor, Drenden -"75,1570", -- Argent Dawn, The Scryers -"1297,99", -- Arygos, Llane -"1555,1067,101", -- Auchindoun, Cho'gall, Laughing Skull -"77,1128,79,103", -- Azgalor, Azshara, Destromath, Thunderlord -"121,1143", -- Azjol-Nerub, Khaz Modan -"1549,160", -- Azuremyst, Staghelm -"1190,13", -- Baelgun, Doomhammer -"1280,1068,74", -- Black Dragonflight, Gul'dan, Skullcrusher -"54,1581", -- Blackhand, Galakrond -"1347,125", -- Blackwater Raiders, Shadow Council -"1296,81,154,1266,1295", -- Blackwing Lair, Dethecus, Detheroc, Haomarush, Lethon -"1353,1147", -- Bladefist, Kul Tiras -"1564,105", -- Blade's Edge, Thunderhorn -"1558,70,1131", -- Blood Furnace, Mannoroth, Nazjatar -"64,1258", -- Bloodhoof, Duskwood -"119,112,111,1357,108", -- Bloodscalp, Boulderfist, Dunemaul, Maiev, Stonemaul -"1371,85", -- Borean Tundra, Shadowsong -"117,1364", -- Bronzebeard, Shandris -"91,95,1285", -- Burning Blade, Lightning's Blade, Onyxia -"1430,1432", -- Caelestrasz, Nagrand -"1361,122", -- Cairne, Perenolde -"88,1356", -- Cenarion Circle, Sisters of Elune -"1556,1278,157,1286,72", -- Coilfang, Dalvengyr, Dark Iron, Demon Soul, Shattered Hand -"1351,87", -- Darrowmere, Windrunner -"1434,1134", -- Dath'Remar, Khaz'goroth -"1582,1173", -- Dawnbringer, Madoran -"15,1277,155,1557", -- Deathwing, Executus, Kalecgos, Shattered Halls -"1271,55", -- Dentarg, Whisperwind -"115,1342", -- Draenor, Echo Isles -"114,1345", -- Dragonblight, Fenris -"1139,113", -- Draka, Suramar -"1362,127,1148,1358,124,110", -- Drak'Tharon, Firetree, Malorne, Rivendare, Spirestone, Stormscale -"1140,131", -- Drak'thul, Skywall -"1429,1433", -- Dreadmaul, Thaurissan -"63,1270", -- Durotan, Ysera -"58,1354", -- Eitrigg, Shu'halo -"123,1349", -- Eldre'Thalas, Korialstrasz -"67,97", -- Elune, Gilneas -"96,1567", -- Eonar, Velen -"93,92,82,159", -- Eredar, Gorefiend, Spinebreaker, Wildhammer -"1565,62", -- Exodar, Medivh -"1370,12,1154", -- Farstriders, Silver Hand, Thorium Brotherhood -"118,126", -- Feathermoon, Scarlet Crusade -"128,8,1360", -- Frostmane, Ner'zhul, Tortheldrin -"7,1348", -- Frostwolf, Vashj -"1578,1069", -- Ghostlands, Kael'thas -"1287,153", -- Gnomeregan, Moonrunner -"158,1292", -- Greymane, Tanaris -"1579,68", -- Grizzly Hills, Lothar -"1149,1144", -- Gundrak, Jubei'Thos -"53,1572", -- Hellscream, Zangarmarsh -"1368,90", -- Hydraxis, Terenas -"14,104", -- Icecrown, Malygos -"98,1262", -- Kargath, Norgannon -"4,1355", -- Kilrogg, Winterhoof -"1071,1290,1260", -- Kirin Tor, Sentinels, Steamwheedle Cartel -"1130,163,1289", -- Lightninghoof, Maelstrom, The Venture Co -"1132,1175", -- Malfurion, Trollbane -"1350,1151", -- Misha, Rexxar -"1374,86", -- Mok'Nathal, Silvermoon -"1182,1359", -- Muradin, Nordrassil -"1367,1375,1184", -- Nazgrel, Nesingwary, Vek'nilash -"1372,1185", -- Quel'dorei, Sen'jin -"1072,1283", -- Ravencrest, Uldaman -"1352,164", -- Ravenholdt, Twisting Nether -"151,3", -- Runetotem, Uther ---}} - ---{{ EUROPE --- Current: http://eu.battle.net/wow/en/forum/topic/8715582685 --- Upcoming: http://eu.battle.net/wow/en/forum/topic/9582578502 - --- ENGLISH -"1312,1081", -- Aerie Peak / Bronzebeard -"518,522,525,1091,646,513", -- Agamaggan / Bloodscalp / Crushridge / Emeriss / Hakkar / Twilight's Hammer -"1413,1303", -- Aggra / Grim Batol -"500,619", -- Aggramar / Hellscream -"1093,607,1299,1083,526,621,1598,511,1090,1088", -- Ahn'Qiraj / Balnazzar / Boulderfist / Chromaggus / Daggerspine / Laughing Skull / Shattered Halls / Sunstrider / Talnivarr / Trollbane -"519,557,639", -- Al'Akir / Skullcrusher / Xavius -"1391,1394,1082", -- Alonsus / Anachronos / Kul Tiras -"501,1587", -- Arathor / Hellfire -"502,548", -- Aszune / Shadowsong -"1597,529,1304", -- Auchindoun / Dunemaul / Jaedenar -"503,623", -- Azjol-Nerub / Quel'Thalas -"1417,550", -- Azuremyst / Stormrage -"521,632,515", -- Bladefist / Frostwhisper / Zenedar -"1416,1298", -- Blade's Edge / Vek'nilash --- OCT 8: add 1310 Eonar -"630,1392,1087,633,556", -- Bloodfeather / Burning Steppes / Executus / Kor'gall / Shattered Hand -"504,1080", -- Bloodhoof / Khadgar -"1393,618", -- Bronze Dragonflight / Nordrassil -"523,1092", -- Burning Blade / Drak'thul -"1317,561", -- Darkmoon Faire / Earthen Ring -"631,606,624", -- Darksorrow / Genjuros / Neptulon -"1389,1314,1415", -- Darkspear / Saurfang / Terokkar -"527,1596,637,627", -- Deathwing / Karazhan / Lightning's Blade / The Maelstrom -"635,1308,1096,1606,636", -- Defias Brotherhood / Ravenholdt / Scarshield Legion / Sporeggar / The Venture Co -"1084,1306", -- Dentarg / Tarren Mill -"505,553", -- Doomhammer / Turalyon -"507,1588", -- Dragonblight / Ghostlands -"528,638,558,559,629", -- Dragonmaw / Haomarush / Spinebreaker / Stormreaver / Vashj -"508,551", -- Emerald Dream / Terenas -"1311,1589,547", -- Kilrogg / Nagrand / Runetotem -"1388,1089", -- Lightbringer / Mazrigos -"1085,1595", -- Moonglade / The Sha'tar --- OCT 8: add 1117 Steamwheedle Cartel -"552,1313", -- Thunderhorn / Wildhammer - --- FRENCH -"512,642,543,643", -- Arak-arahm / Rashgarroth / Kael'Thas / Throk'Feroth -"1334,541,1624,1622", -- Arathi / Illidan / Naxxramas / Temple noir -"1620,510", -- Chants éternels / Vol'jin -"545,1336,533", -- Cho'gall / Eldre'Thalas / Sinstralis -"1127,1626,647", -- Confrérie du Thorium / Les Clairvoyants / Les Sentinelles -"644,1337,1086", -- Conseil des Ombres / Culte de la Rive noire / La Croisade écarlate -"538,1621", -- Dalaran / Marécage de Zangar -"641,1122", -- Drek'Thar / Uldaman -"1123,1332", -- Eitrigg / Krasus -"540,645", -- Elune / Varimathras -"509,544,546", -- Garona / Ner'zhul / Sargeras -"517,1331", -- Medivh / Suramar - --- GERMAN -"563,1099", -- Alleria / Rexxar -"562,1607", -- Alexstrasza / Nethersturm -"1330,568", -- Ambossar / Kargath -"1104,1611,587,589,594,1322", -- Anetheron / Festung der Stürme / Gul'dan / Kil'jaeden / Nathrezim / Rajaxx -"608,1321,584,1105,573", -- Anub'arak / Dalvengyr / Frostmourne / Nazjatar / Zuluhed -"1404,602,1400", -- Area 52 / Sen'jin / Un'Goro -"578,1613,588,1318,609", -- Arthas / Blutkessel / Kel'Thuzad / Vek'lor / Wrathbringer -"1406,569", -- Arygos / Khaz'goroth -"579,616", -- Azshara / Krag'jin -"565,570", -- Baelgun / Lothar -"1327,617", -- Der Mithrilorden / Der Rat von Dalaran -"582,586,591,612,611", -- Destromath / Gorgonnash / Mannoroth / Nefarian / Nera'thor -"531,1319,610,615,605", -- Dethecus / Mug'thol / Onyxia / Terrordar / Theradras -"614,1326,1121,1119,613", -- Das Syndikat / Der abyssische Rat / Die Arguswacht / Die Todeskrallen / Kult der Verdammten --- OCT 8: add 1619 Das Konsortium -"1118,576", -- Die ewige Wacht / Die Silberne Hand -"1333,516", -- Die Nachtwache / Forscherliga -"535,1328", -- Durotan / Tirion -"600,1408", -- Dun Morogh / Norgannon -"1612,590,1320", -- Echsenkessel / Mal'Ganis / Taerar -"1401,574,1608", -- Garrosh / Nozdormu / Shattrath -"567,1323", -- Gilneas / Ulduar -"1409,1106", -- Lordaeron / Tichondrius -"571,593", -- Madmortem / Proudmoore -"572,1098", -- Malfurion / Malygos -"1324,1097", -- Malorne / Ysera -"575,1407", -- Perenolde / Teldrassil -"1405,592", -- Todeswache / Zirkel des Cenarius - --- SPANISH -"1395,1387,1384", -- Colinas Pardas / Los Errantes / Tyrande -"1385,1386", -- Exodar / Minahonda -"1382,1383,1380,1379", -- Sanguino / Shen'dralar / Uldum / Zul'jin - --- RUSSIAN -"1924,1617", -- Booty Bay (RU) / Deathweaver (RU) -"1609,1616", -- Deepholm (RU) / Razuvious (RU) -"1927,1926", -- Grom (RU) / Thermaplugg (RU) -"1603,1610", -- Lich King (RU) / Greymane (RU) ---}} -} ---_G.LRI_RealmInfo=data ---_G.LRI_ConnectedRealms=connection \ No newline at end of file diff --git a/ElvUI_SLE/libs/load_libs.xml b/ElvUI_SLE/libs/load_libs.xml index 2c3125d..9c721fe 100644 --- a/ElvUI_SLE/libs/load_libs.xml +++ b/ElvUI_SLE/libs/load_libs.xml @@ -1 +1 @@ -<Ui xmlns="http://www.blizzard.com/wow/ui/"> <Script file="AceAddon-3.0\AceAddon-3.0.lua"/> <Script file="AceConsole-3.0\AceConsole-3.0.lua"/> <Script file="AceDB-3.0\AceDB-3.0.lua"/> <Script file="AceDBOptions-3.0\AceDBOptions-3.0.lua"/> <Include file="AceGUI-3.0\AceGUI-3.0.xml"/> <Include file="AceConfig-3.0\AceConfig-3.0.xml"/> <Include file="LibBabble-SubZone-3.0\lib.xml"/> <Script file="oUF_NecroStrike\oUF_NecroStrike.lua"/> <Script file="LibQTip-1.0\LibQTip-1.0.lua"/> <Script file="LibRangeCheck-2.0\LibRangeCheck-2.0.lua"/> <Script file="LibRealmInfo\LibRealmInfo.lua"/> </Ui> \ No newline at end of file +<Ui xmlns="http://www.blizzard.com/wow/ui/"> <Script file="AceAddon-3.0\AceAddon-3.0.lua"/> <Script file="AceConsole-3.0\AceConsole-3.0.lua"/> <Script file="AceDB-3.0\AceDB-3.0.lua"/> <Script file="AceDBOptions-3.0\AceDBOptions-3.0.lua"/> <Include file="AceGUI-3.0\AceGUI-3.0.xml"/> <Include file="AceConfig-3.0\AceConfig-3.0.xml"/> <Include file="LibBabble-SubZone-3.0\lib.xml"/> <Script file="oUF_NecroStrike\oUF_NecroStrike.lua"/> <Script file="LibQTip-1.0\LibQTip-1.0.lua"/> <Script file="LibRangeCheck-2.0\LibRangeCheck-2.0.lua"/> <Include file="LibElv-UIButtons-1.0\load_uibuttons.xml"/> </Ui> \ No newline at end of file diff --git a/ElvUI_SLE/locales/russian.lua b/ElvUI_SLE/locales/russian.lua index bf11ebd..f8b36be 100644 --- a/ElvUI_SLE/locales/russian.lua +++ b/ElvUI_SLE/locales/russian.lua @@ -421,15 +421,8 @@ L["Tooltip Y-offset"] = "Смещение подсказки по Y" L["Offset the tooltip on the Y-axis."] = "Смещает подсказку по оси Y относительно выбранной точки крепления." --UI buttons-- +L["S&L UI Buttons"] = "Меню S&L" L["UB_DESC"] = "Добавляет небольшую полосу с кнопками, дающими доступ к набору полезных функций." -L["UI Buttons"] = "Меню интерфейса" -L["Additional menu with useful buttons"] = "Дополнительное меню с полезными кнопками" -L["Show/Hide UI buttons."] = "Показать/скрыть меню" -L["Mouse Over"] = "При наведении" -L["Show on mouse over."] = "Отображать при наведении мыши." -L["Dropdown Backdrop"] = "Фон выпадающего списка" -L["Buttons position"] = "Положение кнопок" -L["Layout for UI buttons."] = "Режим положения кнопок" L["Click to reload your interface"] = "Нажмите для перезагрузки интерфейса" L["Click to toggle config window"] = "Нажмите для отображения окна настроек" L["Click to toggle the AddOn Manager frame."] = "Нажмите для отображения окна менеджера аддонов." @@ -440,22 +433,15 @@ L["Move UI"] = "Разблокировать элементы" L["Reload UI"] = "Перезагрузить интерфейс" L["AddOns Manager"] = "Менеджер аддонов" L["Boss Mod"] = "Босс мод" -L["BenikUI Config"] = "Настройки BenikUI" -L["Click to toggle BenikUI config group"] = "Нажмите, чтобы открыть группу настроек BenikUI" L["AddOns"] = "Аддоны" L["S&L Config"] = "Настройки Shadow & Light" L["Click to toggle Shadow & Light config group"] = "Нажмите, чтобы открыть группу настроек Shadow & Light" L["Do a roll with custom limits. Those limits can be set in S&L config."] = "Сделать бросок с собственными пределами. Они могут быть выставлены в настройках S&L." -L['What point of dropdown will be attached to the toggle button.'] = "Какая точка выпадающего списка будет крепиться к кнопке его открытия." -L['What point to anchor dropdown on the toggle button.'] = "К какой точке кнопки будет крепиться ее выпадающий список." -L["Horizontal offset of dropdown from the toggle button."] = "Отступ выпадающего списка от кнопки его открытия по горизонтали." -L["Vertical offset of dropdown from the toggle button."] = "Отступ выпадающего списка от кнопки его открытия по вертикали." L["Minimum Roll Value"] = "Минимальное значение броска" L["The lower limit for custom roll button."] = "Нижняя граница броска при использовании собственных установок." L["Maximum Roll Value"] = "Масимальное значение броска" L["The higher limit for custom roll button."] = "Верхняя граница броска при использовании собственных установок." L["Custom roll limits are set incorrectly! Minimum should be smaller then or equial to maximum."] = "Пределы для броска указаны некорректно! Минимальное значение должно быть меньше максимального." -L["Sets size of buttons"] = "Устанавливает размер кнопок" L["Quick Action"] = "Быстрое действие" L["Use quick access (on right click) for this button."] = "Функция для быстрого действия. Вызывается нажатием ПКМ на кнопке открытия списка." L["UI Buttons Style"] = "Стиль меню" diff --git a/ElvUI_SLE/modules/uibuttons.lua b/ElvUI_SLE/modules/uibuttons.lua index f94eaa6..a0292a0 100644 --- a/ElvUI_SLE/modules/uibuttons.lua +++ b/ElvUI_SLE/modules/uibuttons.lua @@ -1,19 +1,12 @@ local E, L, V, P, G = unpack(ElvUI); local UB = E:GetModule('SLE_UIButtons'); local ACD = LibStub("AceConfigDialog-3.0") +local lib = LibStub("LibElv-UIButtons-1.0") local SLE = E:GetModule("SLE") -local Sk = E:GetModule("Skins") - -local BorderColor = E['media'].bordercolor -UB.NumBut = 4 -UB.ToggleTable = {} -UB.ConfigTable = {} -UB.AddonTable = {} -UB.StatusTable = {} -UB.RollTable = {} +local S = E:GetModule("Skins") local function CustomRollCall() - local min, max = tonumber(E.db.sle.uibuttons.roll.min), tonumber(E.db.sle.uibuttons.roll.max) + local min, max = tonumber(E.db.sle.uibuttons.customroll.min), tonumber(E.db.sle.uibuttons.customroll.max) if min <= max then RandomRoll(min, max) else @@ -21,558 +14,154 @@ local function CustomRollCall() end end -function UB:OnEnter(self) - UB.menuHolder:SetAlpha(1) -end - -function UB:OnLeave(self) - if E.db.sle.uibuttons.mouse then - UB.menuHolder:SetAlpha(0) - end -end - -function UB:UpdateMouseOverSetting() - if E.db.sle.uibuttons.mouse then - UB.menuHolder:SetAlpha(0) - else - UB.menuHolder:SetAlpha(1) - end -end - -function UB:CreateFrame() - UB.menuHolder = CreateFrame("Frame", "SLEUIButtonHolder", E.UIParent) - UB.menuHolder:SetFrameStrata("HIGH") - UB.menuHolder:SetFrameLevel(5) - UB.menuHolder:SetClampedToScreen(true) - UB.menuHolder:Point("LEFT", E.UIParent, "LEFT", -2, 0); - UB.menuHolder:HookScript('OnEnter', UB.OnEnter) - UB.menuHolder:HookScript('OnLeave', UB.OnLeave) - - if E.private.sle.uiButtonStyle == "classic" then - UB:CreateCoreButton("Config", "C") - UB:CreateCoreButton("Reload", "R") - UB:CreateCoreButton("MoveUI", "M") - UB:CreateCoreButton("Boss", "B") - UB:CreateCoreButton("Addon", "A") - UB.NumBut = 5 - - UB:ClassicSetup() - - UB.ToggleTable = { - UB.menuHolder.Config, - UB.menuHolder.Reload, - UB.menuHolder.MoveUI, - UB.menuHolder.Boss, - UB.menuHolder.Addon, - } - else - UB.menuHolder.Config = CreateFrame("Frame", "SLEUIConfigHolder", UB.menuHolder) - UB.menuHolder.Config:CreateBackdrop("Transparent") - UB:CreateCoreButton("Config", "C") - UB:ConfigSetup() - - UB.menuHolder.Addon = CreateFrame("Frame", "SLEUIAddonHolder", UB.menuHolder) - UB.menuHolder.Addon:CreateBackdrop("Transparent") - UB:CreateCoreButton("Addon", "A") - UB:AddonSetup() - - UB.menuHolder.Status = CreateFrame("Frame", "SLEUIStatusHolder", UB.menuHolder) - UB.menuHolder.Status:CreateBackdrop("Transparent") - UB:CreateCoreButton("Status", "S") - UB:StatusSetup() - - UB.menuHolder.Roll = CreateFrame("Frame", "SLEUIRollHolder", UB.menuHolder) - UB.menuHolder.Roll:CreateBackdrop("Transparent") - UB:CreateCoreButton("Roll", "R") - UB:RollSetup() - - UB.ToggleTable = { - UB.menuHolder.Config.Toggle, - UB.menuHolder.Addon.Toggle, - UB.menuHolder.Status.Toggle, - UB.menuHolder.Roll.Toggle, - } - end -end - -function UB:CreateCoreButton(name, text) - local button - if E.private.sle.uiButtonStyle == "classic" then - UB.menuHolder[name] = CreateFrame("Button", "SLEUI"..name, UB.menuHolder) - button = UB.menuHolder[name] - else - UB.menuHolder[name].Toggle = CreateFrame("Button", "SLEUI"..name.."Toggle", UB.menuHolder) - button = UB.menuHolder[name].Toggle - end - button.text = button:CreateFontString(nil, "OVERLAY") - button.text:SetPoint("CENTER", button, "CENTER", 0, 0) - UB.menuHolder[name]:HookScript('OnEnter', UB.OnEnter) - UB.menuHolder[name]:HookScript('OnLeave', UB.OnLeave) - Sk:HandleButton(button) - - if text then - local t = button:CreateFontString(nil,"OVERLAY",button) - t:FontTemplate() - t:SetPoint("CENTER", button, 'CENTER', 0, -1) - t:SetJustifyH("CENTER") - t:SetText(text) - button:SetFontString(t) - end -end - ---[[ -A function to create a dropdown button for pretty much anything in any UB's dropdown. -UB:CreateDropdownButton(always, parent, name, text, tooltip1, tooltip2, click, addon) - -always - (boolean) true if the button should be shown no matter what -parent - (string) a group the button will be in: Config, Addon, Status, Roll -name - (string) unique button's name used for table reference and actual name creation -text - (string) a string that will be shown on button -tooltip1 (string) - upper line of button's tooltip shown in yellow-ish color. Mandatory for creating a tooltip. If tooltip is not needed set to nil -tooltip2 (string) - lower line of the tooltip shown in white color. If not needed set to nil -click - (function) a function executed on button click. Preferably in the form of function() <your stuff here> end -addon (string) - if button's function requires an addon to function should be addon's name for IsAddOnLoaded check. the button will not be shown if check is failed. - -To hook your button into UB dropdown use this method: - -local E = ElvUI[1] -local UB = E:GetModule('SLE_UIButtons'); -local function MyButtonInsert() - UB:CreateDropdownButton(always, parent, name, text, tooltip1, tooltip2, click, addon) -end -hooksecurefunc(UB, "InsertButtons", MyButtonInsert) - -You can have as many buttons created inside your function as you want. -]] - -function UB:CreateDropdownButton(always, parent, name, text, tooltip1, tooltip2, click, addon) - if type(always) ~= "boolean" then - SLE:Print(format("You function contains unappropriate type for 1st argument \""..E["media"].hexvaluecolor.."always|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Your type is "..E["media"].hexvaluecolor.."%s|r (should be \"boolean\"). Parent: "..E["media"].hexvaluecolor.."%s|r. Name: "..E["media"].hexvaluecolor.."%s|r", type(always), parent, name)) - return - elseif not UB.menuHolder[parent] then - SLE:Print(format("You function contains unappropriate type for 2nd argument \""..E["media"].hexvaluecolor.."parent|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Parent frame: "..E["media"].hexvaluecolor.."UB.menuHolder.%s|r doesn't exist.", parent)) - return - elseif not name or type(name) ~= "string" then - SLE:Print(format("You function contains unappropriate type for 3rd argument \""..E["media"].hexvaluecolor.."name|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Your type is "..E["media"].hexvaluecolor.."%s|r (should be \"strigh\"). Parent: "..E["media"].hexvaluecolor.."%s|r.", type(name), parent)) - return - elseif type(click) ~= "function" then - SLE:Print(format("You function contains unappropriate type for 7th argument \""..E["media"].hexvaluecolor.."click|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Your type is "..E["media"].hexvaluecolor.."%s|r (should be \"function\"). Parent: "..E["media"].hexvaluecolor.."%s|r. Name: "..E["media"].hexvaluecolor.."%s|r", type(click), parent, name)) - return - elseif (tooltip1 and type(tooltip1) ~= "string") or (tooltip2 and type(tooltip2) ~= "string") then - SLE:Print(format("You function contains unappropriate type for 5th or 6th argument \""..E["media"].hexvaluecolor.."tooltip|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Parent: "..E["media"].hexvaluecolor.."%s|r. Name: "..E["media"].hexvaluecolor.."%s|r", parent, name)) - return - elseif (addon and type(addon) ~= "string" and type(addon) ~= nil and name ~= "Boss") then - SLE:Print(format("You function contains unappropriate type for 8rd argument \""..E["media"].hexvaluecolor.."addon|r\" in function "..E["media"].hexvaluecolor.."UB:CreateDropdownButton|r. Your type is "..E["media"].hexvaluecolor.."%s|r (should be \"strigh\"). Parent: "..E["media"].hexvaluecolor.."%s|r. Name: "..E["media"].hexvaluecolor.."%s|r", type(addon), parent, name)) - return - end - UB.menuHolder[parent][name] = CreateFrame("Button", "SLEUI"..parent..name, UB.menuHolder[parent]) - local b = UB.menuHolder[parent][name] - local toggle = UB.menuHolder[parent].Toggle - if addon and name == "Boss" then - b.shown = true - b.bossmode = function() end - if IsAddOnLoaded("DBM-Core") then - b.bossmode = function() DBM:LoadGUI() end - -- elseif IsAddOnLoaded("Bigwigs") then - -- b.bossmode = function() end - elseif IsAddOnLoaded("VEM-Core") then - b.bossmode = function() VEM:LoadGUI() end - -- elseif IsAddOnLoaded("DXE_Loader") then - -- b.bossmode = function() end - -- elseif IsAddOnLoaded("") then - -- b.bossmode = function() end - else - b.shown = false - end - elseif always and type(always) == "boolean" then - b.shown = true - elseif addon then - if IsAddOnLoaded(addon) then - b.shown = true - else - b.shown = false - end - end - if not b.shown then return end - - b:SetScript("OnClick", function(self) - click() - toggle.opened = false - UB:ToggleCats() - end) - - if tooltip1 then - b:SetScript("OnEnter", function(self) - UB:OnEnter() - GameTooltip:SetOwner(self) - GameTooltip:AddLine(tooltip1, 1, .96, .41, .6, .6, 1) - if tooltip2 then GameTooltip:AddLine(tooltip2, 1, 1, 1, 1, 1, 1) end - GameTooltip:Show() - end) - b:SetScript("OnLeave", function(self) - UB:OnLeave() - GameTooltip:Hide() - end) - else - b:HookScript('OnEnter', UB.OnEnter) - b:HookScript('OnEnter', UB.OnEnter) - end - Sk:HandleButton(b) - - if text and type(text) == "string" then - b.text = b:CreateFontString(nil,"OVERLAY",b) - b.text:FontTemplate() - b.text:SetPoint("CENTER", b, 'CENTER', 0, -1) - b.text:SetJustifyH("CENTER") - b.text:SetText(text) - b:SetFontString(b.text) - end - - tinsert(UB[parent.."Table"], b) -end - -function UB:CreateSeparator(parent, name, size, space) - UB.menuHolder[parent][name] = CreateFrame("Frame", "SLEUI"..parent..name, UB.menuHolder[parent]) - local f = UB.menuHolder[parent][name] - f.isSeparator = true - f.shown = true - f.size = size or 1 - f.space = space or 2 - f:CreateBackdrop("Transparent") - - tinsert(UB[parent.."Table"], f) -end - -function UB:ToggleCats() - if UB.menuHolder.Config.Toggle.opened then - UB.menuHolder.Config:Show() - else - UB.menuHolder.Config:Hide() - end - if UB.menuHolder.Addon.Toggle.opened then - UB.menuHolder.Addon:Show() - else - UB.menuHolder.Addon:Hide() - end - if UB.menuHolder.Status.Toggle.opened then - UB.menuHolder.Status:Show() - else - UB.menuHolder.Status:Hide() - end - if UB.menuHolder.Roll.Toggle.opened then - UB.menuHolder.Roll:Show() - else - UB.menuHolder.Roll:Hide() - end -end - -function UB:ClassicSetup() +function UB:ClassicSetup(menu) local button - local db = E.db.sle.uibuttons - button = UB.menuHolder.Config + button = menu.Config button:SetScript("OnClick", function(self) E:ToggleConfig() end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) + button:HookScript('OnEnter', function(self) menu:OnEnter() end) + button:HookScript('OnLeave', function(self) menu:OnLeave() end) - button = UB.menuHolder.Reload + button = menu.Reload button:SetScript("OnClick", function(self) ReloadUI() end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) + button:HookScript('OnEnter', function(self) menu:OnEnter() end) + button:HookScript('OnLeave', function(self) menu:OnLeave() end) - button = UB.menuHolder.MoveUI + button = menu.MoveUI button:SetScript("OnClick", function(self) E:ToggleConfigMode() end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) + button:HookScript('OnEnter', function(self) menu:OnEnter() end) + button:HookScript('OnLeave', function(self) menu:OnLeave() end) - button = UB.menuHolder.Boss + button = menu.Boss button:SetScript("OnClick", function(self) if IsAddOnLoaded("DBM-Core") then DBM:LoadGUI() - -- elseif IsAddOnLoaded("Bigwigs") then - -- b.bossmode = function() end elseif IsAddOnLoaded("VEM-Core") then VEM:LoadGUI() - -- elseif IsAddOnLoaded("DXE_Loader") then - -- b.bossmode = function() end - -- elseif IsAddOnLoaded("") then - -- b.bossmode = function() end end end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) + button:HookScript('OnEnter', function(self) menu:OnEnter() end) + button:HookScript('OnLeave', function(self) menu:OnLeave() end) - button = UB.menuHolder.Addon + button = menu.Addon button:SetScript("OnClick", function(self) GameMenuButtonAddons:Click() end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) + button:HookScript('OnEnter', function(self) menu:OnEnter() end) + button:HookScript('OnLeave', function(self) menu:OnLeave() end) end -function UB:ConfigSetup() - local button = UB.menuHolder.Config.Toggle - local db = E.db.sle.uibuttons - button.opened = false - - UB.menuHolder.Config:Hide() - button:RegisterForClicks("LeftButtonDown", "RightButtonDown"); - button:SetScript("OnClick", function(self, button, down) - if button == "LeftButton" then - if self.opened then - self.opened = false - else - self.opened = true - UB.menuHolder.Addon.Toggle.opened = false - UB.menuHolder.Status.Toggle.opened = false - UB.menuHolder.Roll.Toggle.opened = false - end - UB:ToggleCats() - elseif button == "RightButton" and E.db.sle.uibuttons.cfunc.enable then - UB.menuHolder.Config[E.db.sle.uibuttons.cfunc.called]:Click() - end - end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) - +function UB:ConfigSetup(menu) --UB:CreateSeparator("Config", "SLE_StartSeparator", 1, 2) - UB:CreateDropdownButton(true, "Config", "Elv", "ElvUI", L["ElvUI Config"], L["Click to toggle config window"], function() E:ToggleConfig() end) - UB:CreateDropdownButton(true, "Config", "SLE", "S&L", L["S&L Config"], L["Click to toggle Shadow & Light config group"], function() E:ToggleConfig(); ACD:SelectGroup("ElvUI", "sle", "options") end) - UB:CreateSeparator("Config", "SLE_FirstSeparator", 4, 2) - UB:CreateDropdownButton(true, "Config", "Reload", "/reloadui", L["Reload UI"], L["Click to reload your interface"], function() ReloadUI() end) - UB:CreateDropdownButton(true, "Config", "MoveUI", "/moveui", L["Move UI"], L["Click to unlock moving ElvUI elements"], function() E:ToggleConfigMode() end) + menu:CreateDropdownButton("Config", "Elv", "ElvUI", L["ElvUI Config"], L["Click to toggle config window"], function() E:ToggleConfig() end, nil, true) + menu:CreateDropdownButton("Config", "SLE", "S&L", L["S&L Config"], L["Click to toggle Shadow & Light config group"], function() E:ToggleConfig(); ACD:SelectGroup("ElvUI", "sle", "options") end, nil, true) + menu:CreateSeparator("Config", "First", 4, 2) + menu:CreateDropdownButton( "Config", "Reload", "/reloadui", L["Reload UI"], L["Click to reload your interface"], function() ReloadUI() end, nil, true) + menu:CreateDropdownButton("Config", "MoveUI", "/moveui", L["Move UI"], L["Click to unlock moving ElvUI elements"], function() E:ToggleConfigMode() end, nil, true) --UB:CreateSeparator("Config", "SLE_EndSeparator", 1, 2) end -function UB:AddonSetup() - local button = UB.menuHolder.Addon.Toggle - button.opened = false - UB.menuHolder.Addon:Hide() - - button:RegisterForClicks("LeftButtonDown", "RightButtonDown"); - button:SetScript("OnClick", function(self, button, down) - if button == "LeftButton" then - if self.opened then - self.opened = false - else - self.opened = true - UB.menuHolder.Config.Toggle.opened = false - UB.menuHolder.Status.Toggle.opened = false - UB.menuHolder.Roll.Toggle.opened = false - end - UB:ToggleCats() - elseif button == "RightButton" and E.db.sle.uibuttons.afunc.enable then - UB.menuHolder.Addon[E.db.sle.uibuttons.afunc.called]:Click() - end - end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) - +function UB:AddonSetup(menu) --UB:CreateSeparator("Addon", "SLE_StartSeparator", 1, 2) - UB:CreateDropdownButton(true, "Addon", "Manager", L["AddOns"], L["AddOns Manager"], L["Click to toggle the AddOn Manager frame."], function() GameMenuButtonAddons:Click() end) - UB:CreateDropdownButton(false, "Addon", "Boss", L["Boss Mod"], L["Boss Mod"], L["Click to toggle the Configuration/Option Window from the Bossmod you have enabled."], function() UB.menuHolder.Addon.Boss.bossmode() end, true) - UB:CreateSeparator("Addon", "SLE_FirstSeparator", 4, 2) - UB:CreateDropdownButton(false, "Addon", "Altoholic", "Altoholic", nil, nil, function() Altoholic:ToggleUI() end, "Altoholic") - UB:CreateDropdownButton(false, "Addon", "AtlasLoot", "AtlasLoot", nil, nil, function() AtlasLoot.GUI:Toggle() end, "AtlasLoot") - UB:CreateDropdownButton(false, "Addon", "WeakAuras", "WeakAuras", nil, nil, function() SlashCmdList.WEAKAURAS() end, "WeakAuras") - UB:CreateDropdownButton(false, "Addon", "xCT", "xCT+", nil, nil, function() xCT_Plus:ToggleConfigTool() end, "xCT+") - UB:CreateDropdownButton(false, "Addon", "Swatter", "Swatter", nil, nil, function() Swatter.ErrorShow() end, "!Swatter") + menu:CreateDropdownButton("Addon", "Manager", L["AddOns"], L["AddOns Manager"], L["Click to toggle the AddOn Manager frame."], function() GameMenuButtonAddons:Click() end, nil, true) + + menu:CreateDropdownButton("Addon", "DBM", L["Boss Mod"], L["Boss Mod"], L["Click to toggle the Configuration/Option Window from the Bossmod you have enabled."], function() DBM:LoadGUI() end, "DBM-Core") + menu:CreateDropdownButton("Addon", "VEM", L["Boss Mod"], L["Boss Mod"], L["Click to toggle the Configuration/Option Window from the Bossmod you have enabled."], function() VEM:LoadGUI() end, "VEM-Core") + menu:CreateSeparator("Addon", "First", 4, 2) + menu:CreateDropdownButton("Addon", "Altoholic", "Altoholic", nil, nil, function() Altoholic:ToggleUI() end, "Altoholic") + menu:CreateDropdownButton("Addon", "AtlasLoot", "AtlasLoot", nil, nil, function() AtlasLoot.GUI:Toggle() end, "AtlasLoot") + menu:CreateDropdownButton("Addon", "WeakAuras", "WeakAuras", nil, nil, function() SlashCmdList.WEAKAURAS() end, "WeakAuras") + menu:CreateDropdownButton("Addon", "xCT", "xCT+", nil, nil, function() xCT_Plus:ToggleConfigTool() end, "xCT+") + menu:CreateDropdownButton("Addon", "Swatter", "Swatter", nil, nil, function() Swatter.ErrorShow() end, "!Swatter") --Always keep at the bottom-- - UB:CreateDropdownButton(false, "Addon", "WowLua", "WowLua", nil, nil, function() SlashCmdList["WOWLUA"]("") end, "WowLua") + menu:CreateDropdownButton("Addon", "WowLua", "WowLua", nil, nil, function() SlashCmdList["WOWLUA"]("") end, "WowLua", false) --UB:CreateSeparator("Addon", "SLE_EndSeparator", 1, 2) end -function UB:StatusSetup() - local button = UB.menuHolder.Status.Toggle - local db = E.db.sle.uibuttons - button.opened = false - UB.menuHolder.Status:Point("TOP", button, "BOTTOM", 0, -4) - UB.menuHolder.Status:Hide() - button:RegisterForClicks("LeftButtonDown", "RightButtonDown"); - button:SetScript("OnClick", function(self, button, down) - if button == "LeftButton" then - if self.opened then - self.opened = false - else - self.opened = true - UB.menuHolder.Config.Toggle.opened = false - UB.menuHolder.Addon.Toggle.opened = false - UB.menuHolder.Roll.Toggle.opened = false - end - UB:ToggleCats() - elseif button == "RightButton" and E.db.sle.uibuttons.sfunc.enable then - UB.menuHolder.Status[E.db.sle.uibuttons.sfunc.called]:Click() - end - end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) - - UB:CreateDropdownButton(true, "Status", "AFK", L["AFK"], nil, nil, function() SendChatMessage("" ,"AFK" ) end) - UB:CreateDropdownButton(true, "Status", "DND", L["DND"], nil, nil, function() SendChatMessage("" ,"DND" ) end) +function UB:StatusSetup(menu) + menu:CreateDropdownButton("Status", "AFK", L["AFK"], nil, nil, function() SendChatMessage("" ,"AFK" ) end) + menu:CreateDropdownButton("Status", "DND", L["DND"], nil, nil, function() SendChatMessage("" ,"DND" ) end) end -function UB:RollSetup() - local button = UB.menuHolder.Roll.Toggle - local db = E.db.sle.uibuttons - button.opened = false - UB.menuHolder.Roll:Point("TOP", button, "BOTTOM", 0, -4) - UB.menuHolder.Roll:Hide() - button:RegisterForClicks("LeftButtonDown", "RightButtonDown"); - button:SetScript("OnClick", function(self, button, down) - if button == "LeftButton" then - if self.opened then - self.opened = false - else - self.opened = true - UB.menuHolder.Config.Toggle.opened = false - UB.menuHolder.Addon.Toggle.opened = false - UB.menuHolder.Status.Toggle.opened = false - end - UB:ToggleCats() - elseif button == "RightButton" and E.db.sle.uibuttons.rfunc.enable then - UB.menuHolder.Roll[E.db.sle.uibuttons.rfunc.called]:Click() - end - end) - button:HookScript('OnEnter', UB.OnEnter) - button:HookScript('OnLeave', UB.OnLeave) - - UB:CreateDropdownButton(true, "Roll", "Ten", "1-10", nil, nil, function() RandomRoll(1, 10) end) - UB:CreateDropdownButton(true, "Roll", "Twenty", "1-20", nil, nil, function() RandomRoll(1, 20) end) - UB:CreateDropdownButton(true, "Roll", "Thirty", "1-30", nil, nil, function() RandomRoll(1, 30) end) - UB:CreateDropdownButton(true, "Roll", "Forty", "1-40", nil, nil, function() RandomRoll(1, 40) end) - UB:CreateDropdownButton(true, "Roll", "Hundred", "1-100", nil, nil, function() RandomRoll(1, 100) end) - UB:CreateDropdownButton(true, "Roll", "Custom", L["Custom"], nil, nil, function() CusomRollCall() end) +function UB:RollSetup(menu) + menu:CreateDropdownButton("Roll", "Ten", "1-10", nil, nil, function() RandomRoll(1, 10) end) + menu:CreateDropdownButton("Roll", "Twenty", "1-20", nil, nil, function() RandomRoll(1, 20) end) + menu:CreateDropdownButton("Roll", "Thirty", "1-30", nil, nil, function() RandomRoll(1, 30) end) + menu:CreateDropdownButton("Roll", "Forty", "1-40", nil, nil, function() RandomRoll(1, 40) end) + menu:CreateDropdownButton("Roll", "Hundred", "1-100", nil, nil, function() RandomRoll(1, 100) end) + menu:CreateDropdownButton("Roll", "Custom", L["Custom"], nil, nil, function() CustomRollCall() end) end -function UB:MoverSize() - local db = E.db.sle.uibuttons - if db.position == "uib_vert" then - UB.menuHolder:SetWidth(db.size + (E.PixelMode and 2 or 4)) - UB.menuHolder:SetHeight((db.size*UB.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(UB.NumBut-1))+2) +function UB:SetupBar(menu) + if E.private.sle.uiButtonStyle == "classic" then + menu:CreateCoreButton("Config", "C") + menu:CreateCoreButton("Reload", "R") + menu:CreateCoreButton("MoveUI", "M") + menu:CreateCoreButton("Boss", "B") + menu:CreateCoreButton("Addon", "A") + UB:ClassicSetup(menu) else - UB.menuHolder:SetWidth((db.size*UB.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(UB.NumBut-1))+2) - UB.menuHolder:SetHeight(db.size + (E.PixelMode and 2 or 4)) - end -end + menu:CreateCoreButton("Config", "C") + UB:ConfigSetup(menu) -function UB:FrameSize() - local db = E.db.sle.uibuttons - if not db.size then return end - UB:MoverSize() + menu:CreateCoreButton("Addon", "A") + UB:AddonSetup(menu) - for i = 1, #UB.ToggleTable do - UB.ToggleTable[i]:Size(db.size) - end + menu:CreateCoreButton("Status", "S") + UB:StatusSetup(menu) - if E.private.sle.uiButtonStyle == "dropdown" then - for i = 1, #UB.MetaTable do - local group = UB.MetaTable[i] - local mass = UB[group.."Table"] - for n = 1, #mass do - if mass[n].isSeparator then - mass[n]:Size((db.size * 3.1) - 2, mass[n].size) - else - mass[n]:Size(db.size * 3.1, db.size) - end - end - end + menu:CreateCoreButton("Roll", "R") + UB:RollSetup(menu) end - - UB:Positioning() end -function UB:UpdateDropdownLayout(group, backdrop) - local count = -1 - local sepS, sepC = 0, 0 - local header = UB.menuHolder[group] - local db = E.db.sle.uibuttons - header:ClearAllPoints() - header:Point(db.point, header.Toggle, db.anchor, db.xoffset, db.yoffset) - local T = UB[group.."Table"] - for i = 1, #T do - local button, prev, next = T[i], T[i-1], T[i+1] - local y_offset = prev and ((E.PixelMode and -db.spacing or -(db.spacing+2))-(prev.isSeparator and prev.space or 0)-(button.isSeparator and button.space or 0)) or 0 - button:Point("TOP", (prev or header), (prev and "BOTTOM" or "TOP"), 0, y_offset) - count = button.isSeparator and count or count + 1 - sepS = (button.isSeparator and sepS + ((prev and 2 or 1)*button.space + button.size)) or sepS - sepC = button.isSeparator and sepC + 1 or sepC +function UB:RightClicks(menu) + for i = 1, #menu.ToggleTable do + menu.ToggleTable[i]:RegisterForClicks("LeftButtonDown", "RightButtonDown") end - header:Size(db.size * 3.1, (db.size * (count+1))+(db.spacing*(count))+sepS+(.5*sepC)) - if backdrop then - header.backdrop:Show() - else - header.backdrop:Hide() - end -end - -function UB:Positioning() - local db = E.db.sle.uibuttons - - --position check - local header = UB.menuHolder - if db.position == "uib_vert" then - for i = 1, #UB.ToggleTable do - local button, prev = UB.ToggleTable[i], UB.ToggleTable[i-1] - UB.ToggleTable[i]:ClearAllPoints() - UB.ToggleTable[i]:Point("TOP", (prev or header), prev and "BOTTOM" or "TOP", 0, prev and (E.PixelMode and -db.spacing or -(db.spacing+2)) or (E.PixelMode and -1 or -2)) + menu.Config.Toggle:HookScript("OnClick", function(self, button, down) + if button == "RightButton" and E.db.sle.uibuttons.Config.enable then + menu.Config[menu.db.Config.called]:Click() end - else - for i = 1, #UB.ToggleTable do - local button, prev = UB.ToggleTable[i], UB.ToggleTable[i-1] - UB.ToggleTable[i]:ClearAllPoints() - UB.ToggleTable[i]:Point("LEFT", (prev or header), prev and "RIGHT" or "LEFT", prev and (E.PixelMode and db.spacing or db.spacing+2) or (E.PixelMode and 1 or 2), 0) + end) + menu.Addon.Toggle:HookScript("OnClick", function(self, button, down) + if button == "RightButton" and E.db.sle.uibuttons.Addon.enable then + menu.Addon[menu.db.Addon.called]:Click() end - end - if E.private.sle.uiButtonStyle == "dropdown" then - for i = 1, #UB.MetaTable do - UB:UpdateDropdownLayout(UB.MetaTable[i], E.db.sle.uibuttons.dropdownBackdrop) + end) + menu.Status.Toggle:HookScript("OnClick", function(self, button, down) + if button == "RightButton" and E.db.sle.uibuttons.Status.enable then + menu.Status[menu.db.Status.called]:Click() end - end + end) + menu.Roll.Toggle:HookScript("OnClick", function(self, button, down) + if button == "RightButton" and E.db.sle.uibuttons.Roll.enable then + menu.Roll[menu.db.Roll.called]:Click() + end + end) end -function UB:Toggle() - if not E.db.sle.uibuttons.enable then - UB.menuHolder:Hide() - else - UB.menuHolder:Show() - UB:UpdateMouseOverSetting() - end -end +function UB:Initialize() + UB.Holder = lib:CreateFrame("SLE_UIButtons", E.db.sle.uibuttons, P.sle.uibuttons, E.private.sle.uiButtonStyle, "dropdown") + local menu = UB.Holder + menu:SetupMover(L["S&L UI Buttons"], "ALL,S&L,S&L MISC,UIButtons") -function UB:CreateMetaTable() - if E.private.sle.uiButtonStyle ~= "dropdown" then return end - UB.MetaTable = { - "Config", - "Addon", - "Status", - "Roll", - } -end + UB:SetupBar(menu) -function UB:InsertButtons() - --This function is purely cosmetic and used only for hooking other button creating funct to it by any external addon -end + menu:FrameSize() + menu:ToggleShow() -function UB:Initialize() - UB:CreateFrame() - - UB:InsertButtons() --For external buttons - - UB:CreateMetaTable() - - UB:FrameSize() - UB:Toggle() - - E.FrameLocks['SLEUIButtonHolder'] = true - - E:CreateMover(UB.menuHolder, "UIBFrameMover", L["UI Buttons"], nil, nil, nil, "ALL,S&L,S&L MISC") - UB:MoverSize() + UB.FrameSize = menu.FrameSize + + UB:RightClicks(menu) + + -- lib:CreateOptions(menu, true, "slebuttons", "SLE Buttons") end \ No newline at end of file diff --git a/ElvUI_SLE/options/core_c.lua b/ElvUI_SLE/options/core_c.lua index af3d191..386cac4 100644 --- a/ElvUI_SLE/options/core_c.lua +++ b/ElvUI_SLE/options/core_c.lua @@ -1,6 +1,7 @@ local E, L, V, P, G = unpack(ElvUI) local SLE = E:GetModule('SLE') local LT = E:GetModule('SLE_Loot') +local ACD = LibStub("AceConfigDialog-3.0") local function configTable() E.Options.args.ElvUI_Header.name = E.Options.args.ElvUI_Header.name.." + Shadow & Light"..format(": |cff99ff33%s|r",SLE.version) @@ -23,7 +24,7 @@ local function configTable() type = 'description', name = '', order = 2, - image = function() return 'Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Title', 650, 410 end, + image = function() return 'Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Title', 555, 350 end, }, --[[info = { order = 3, @@ -37,6 +38,72 @@ local function configTable() desc = L['Run the installation process.'], func = function() SLE:Install(); E:ToggleConfig() end, }, + SettingsButton = { + order = 5, + type = 'execute', + name = L["General"].." "..SETTINGS, + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "general") end, + }, + MinimapButton = { + order = 6, + type = 'execute', + name = L["Minimap"], + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "minimap") end, + }, + MarkersButton = { + order = 7, + type = 'execute', + name = L["Raid Markers"], + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "raidmarkerbars") end, + }, + EquipButton = { + order = 8, + type = 'execute', + name = L['Equipment Manager'], + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "equipmanager") end, + }, + FarmButton = { + order = 9, + type = 'execute', + name = L['Farm'], + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "farm") end, + }, + LootButton = { + order = 10, + type = 'execute', + name = L['Loot'], + func = function() ACD:SelectGroup("ElvUI", "sle", "options", "loot") end, + }, + MediaButton = { + order = 11, + type = 'execute', + name = L["Media"], + func = function() ACD:SelectGroup("ElvUI", "sle", "media") end, + }, + ScreensaverButton = { + order = 12, + type = 'execute', + name = L["Screensaver"], + func = function() ACD:SelectGroup("ElvUI", "sle", "screensaver") end, + }, + ArmoryButton = { + order = 13, + type = 'execute', + name = L["Armory Mode"], + func = function() ACD:SelectGroup("ElvUI", "sle", "armory") end, + }, + DatatextButton = { + order = 14, + type = 'execute', + name = L["Panels & Dashboard"], + func = function() ACD:SelectGroup("ElvUI", "sle", "datatext") end, + }, + HelpButton = { + order = 15, + type = 'execute', + name = L['About/Help'], + func = function() ACD:SelectGroup("ElvUI", "sle", "help") end, + }, options = { order = 1, type = "group", diff --git a/ElvUI_SLE/options/uibuttons_c.lua b/ElvUI_SLE/options/uibuttons_c.lua index 50266d5..63792e6 100644 --- a/ElvUI_SLE/options/uibuttons_c.lua +++ b/ElvUI_SLE/options/uibuttons_c.lua @@ -14,6 +14,7 @@ local positionValues = { }; local function configTable() + local Bar = UB.Holder E.Options.args.sle.args.options.args.general.args.uibuttons = { type = "group", name = L["UI Buttons"], @@ -35,7 +36,7 @@ local function configTable() name = L["Enable"], desc = L["Show/Hide UI buttons."], get = function(info) return E.db.sle.uibuttons.enable end, - set = function(info, value) E.db.sle.uibuttons.enable = value; UB:Toggle() end + set = function(info, value) E.db.sle.uibuttons.enable = value; Bar:ToggleShow() end }, style = { order = 4, @@ -62,7 +63,7 @@ local function configTable() min = 12, max = 25, step = 1, disabled = function() return not E.db.sle.uibuttons.enable end, get = function(info) return E.db.sle.uibuttons.size end, - set = function(info, value) E.db.sle.uibuttons.size = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.size = value; Bar:FrameSize() end, }, spacing = { order = 7, @@ -72,7 +73,7 @@ local function configTable() min = 1, max = 10, step = 1, disabled = function() return not E.db.sle.uibuttons.enable end, get = function(info) return E.db.sle.uibuttons.spacing end, - set = function(info, value) E.db.sle.uibuttons.spacing = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.spacing = value; Bar:FrameSize() end, }, mouse = { order = 8, @@ -81,28 +82,36 @@ local function configTable() desc = L["Show on mouse over."], disabled = function() return not E.db.sle.uibuttons.enable end, get = function(info) return E.db.sle.uibuttons.mouse end, - set = function(info, value) E.db.sle.uibuttons.mouse = value; UB:UpdateMouseOverSetting() end + set = function(info, value) E.db.sle.uibuttons.mouse = value; Bar:UpdateMouseOverSetting() end + }, + menuBackdrop = { + order = 9, + type = "toggle", + name = L["Backdrop"], + disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, + get = function(info) return E.db.sle.uibuttons.menuBackdrop end, + set = function(info, value) E.db.sle.uibuttons.menuBackdrop = value; Bar:UpdateBackdrop() end }, dropdownBackdrop = { - order = 8, + order = 10, type = "toggle", name = L["Dropdown Backdrop"], disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, get = function(info) return E.db.sle.uibuttons.dropdownBackdrop end, - set = function(info, value) E.db.sle.uibuttons.dropdownBackdrop = value; UB:FrameSize() end + set = function(info, value) E.db.sle.uibuttons.dropdownBackdrop = value; Bar:FrameSize() end }, - position = { - order = 10, + orientation = { + order = 11, name = L["Buttons position"], desc = L["Layout for UI buttons."], type = "select", values = { - ["uib_hor"] = L['Horizontal'], - ["uib_vert"] = L['Vertical'], + ["horizontal"] = L['Horizontal'], + ["vertical"] = L['Vertical'], }, disabled = function() return not E.db.sle.uibuttons.enable end, - get = function(info) return E.db.sle.uibuttons.position end, - set = function(info, value) E.db.sle.uibuttons.position = value; UB:FrameSize() end, + get = function(info) return E.db.sle.uibuttons.orientation end, + set = function(info, value) E.db.sle.uibuttons.orientation = value; Bar:FrameSize() end, }, point = { type = 'select', @@ -111,7 +120,7 @@ local function configTable() desc = L['What point of dropdown will be attached to the toggle button.'], disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, get = function(info) return E.db.sle.uibuttons.point end, - set = function(info, value) E.db.sle.uibuttons.point = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.point = value; Bar:FrameSize() end, values = positionValues, }, anchor = { @@ -121,7 +130,7 @@ local function configTable() desc = L['What point to anchor dropdown on the toggle button.'], disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, get = function(info) return E.db.sle.uibuttons.anchor end, - set = function(info, value) E.db.sle.uibuttons.anchor = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.anchor = value; Bar:FrameSize() end, values = positionValues, }, xoffset = { @@ -132,7 +141,7 @@ local function configTable() min = -10, max = 10, step = 1, disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, get = function(info) return E.db.sle.uibuttons.xoffset end, - set = function(info, value) E.db.sle.uibuttons.xoffset = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.xoffset = value; Bar:FrameSize() end, }, yoffset = { order = 16, @@ -142,7 +151,7 @@ local function configTable() min = -10, max = 10, step = 1, disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, get = function(info) return E.db.sle.uibuttons.yoffset end, - set = function(info, value) E.db.sle.uibuttons.yoffset = value; UB:FrameSize() end, + set = function(info, value) E.db.sle.uibuttons.yoffset = value; Bar:FrameSize() end, }, minroll = { order = 17, @@ -150,8 +159,8 @@ local function configTable() name = L["Minimum Roll Value"], desc = L["The lower limit for custom roll button."], disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, - get = function(info) return E.db.sle.uibuttons.roll.min end, - set = function(info, value) E.db.sle.uibuttons.roll.min = value; end, + get = function(info) return E.db.sle.uibuttons.customroll.min end, + set = function(info, value) E.db.sle.uibuttons.customroll.min = value; end, }, maxroll = { order = 18, @@ -159,10 +168,10 @@ local function configTable() name = L["Maximum Roll Value"], desc = L["The higher limit for custom roll button."], disabled = function() return not E.db.sle.uibuttons.enable or E.private.sle.uiButtonStyle == "classic" end, - get = function(info) return E.db.sle.uibuttons.roll.max end, - set = function(info, value) E.db.sle.uibuttons.roll.max = value; end, + get = function(info) return E.db.sle.uibuttons.customroll.max end, + set = function(info, value) E.db.sle.uibuttons.customroll.max = value; end, }, - cFunc = { + Config = { order = 19, name = "\"C\" "..L["Quick Action"], type = "group", @@ -174,8 +183,8 @@ local function configTable() type = "toggle", name = L["Enable"], desc = L["Use quick access (on right click) for this button."], - get = function(info) return E.db.sle.uibuttons.cfunc.enable end, - set = function(info, value) E.db.sle.uibuttons.cfunc.enable = value end + get = function(info) return E.db.sle.uibuttons.Config.enable end, + set = function(info, value) E.db.sle.uibuttons.Config.enable = value end }, called = { order = 2, @@ -188,12 +197,12 @@ local function configTable() ["Reload"] = L["Reload UI"], ["MoveUI"] = L["Move UI"], }, - get = function(info) return E.db.sle.uibuttons.cfunc.called end, - set = function(info, value) E.db.sle.uibuttons.cfunc.called = value; end, + get = function(info) return E.db.sle.uibuttons.Config.called end, + set = function(info, value) E.db.sle.uibuttons.Config.called = value; end, }, }, }, - aFunc = { + Addon = { order = 20, name = "\"A\" "..L["Quick Action"], type = "group", @@ -205,8 +214,8 @@ local function configTable() type = "toggle", name = L["Enable"], desc = L["Use quick access (on right click) for this button."], - get = function(info) return E.db.sle.uibuttons.afunc.enable end, - set = function(info, value) E.db.sle.uibuttons.afunc.enable = value end + get = function(info) return E.db.sle.uibuttons.Addon.enable end, + set = function(info, value) E.db.sle.uibuttons.Addon.enable = value end }, called = { order = 2, @@ -214,15 +223,15 @@ local function configTable() desc = L["Function called by quick access."], type = "select", values = { - ["Manager"] = L["Addons"], + ["Manager"] = L["AddOns"], ["Boss"] = L["Boss Mod"], }, - get = function(info) return E.db.sle.uibuttons.afunc.called end, - set = function(info, value) E.db.sle.uibuttons.afunc.called = value; end, + get = function(info) return E.db.sle.uibuttons.Addon.called end, + set = function(info, value) E.db.sle.uibuttons.Addon.called = value; end, }, }, }, - sFunc = { + Status = { order = 21, name = "\"S\" "..L["Quick Action"], type = "group", @@ -234,8 +243,8 @@ local function configTable() type = "toggle", name = L["Enable"], desc = L["Use quick access (on right click) for this button."], - get = function(info) return E.db.sle.uibuttons.sfunc.enable end, - set = function(info, value) E.db.sle.uibuttons.sfunc.enable = value end + get = function(info) return E.db.sle.uibuttons.Status.enable end, + set = function(info, value) E.db.sle.uibuttons.Status.enable = value end }, called = { order = 2, @@ -246,12 +255,12 @@ local function configTable() ["AFK"] = L["AFK"], ["DND"] = L["DND"], }, - get = function(info) return E.db.sle.uibuttons.sfunc.called end, - set = function(info, value) E.db.sle.uibuttons.sfunc.called = value; end, + get = function(info) return E.db.sle.uibuttons.Status.called end, + set = function(info, value) E.db.sle.uibuttons.Status.called = value; end, }, }, }, - rFunc = { + Roll = { order = 22, name = "\"R\" "..L["Quick Action"], type = "group", @@ -263,8 +272,8 @@ local function configTable() type = "toggle", name = L["Enable"], desc = L["Use quick access (on right click) for this button."], - get = function(info) return E.db.sle.uibuttons.rfunc.enable end, - set = function(info, value) E.db.sle.uibuttons.rfunc.enable = value end + get = function(info) return E.db.sle.uibuttons.Roll.enable end, + set = function(info, value) E.db.sle.uibuttons.Roll.enable = value end }, called = { order = 2, @@ -280,18 +289,13 @@ local function configTable() ["Custom"] = L["Custom"], }, - get = function(info) return E.db.sle.uibuttons.rfunc.called end, - set = function(info, value) E.db.sle.uibuttons.rfunc.called = value; end, + get = function(info) return E.db.sle.uibuttons.Roll.called end, + set = function(info, value) E.db.sle.uibuttons.Roll.called = value; end, }, }, }, }, } - if E.private.sle.uiButtonStyle == "dropdown" then - if IsAddOnLoaded("ElvUI_BenikUI") then - E.Options.args.sle.args.options.args.general.args.uibuttons.args.cFunc.args.called.values["Benik"] = "BenikUI" - end - end end table.insert(E.SLEConfigs, configTable) \ No newline at end of file