You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
11653 lines
593 KiB
11653 lines
593 KiB
----------------------------------------------------------------------
|
|
-- Leatrix Plus 9.1.01 (7th July 2021)
|
|
----------------------------------------------------------------------
|
|
|
|
-- 01:Functions 20:Live 50:RunOnce 70:Logout
|
|
-- 02:Locks 30:Isolated 60:Events 80:Commands
|
|
-- 03:Restarts 40:Player 62:Profile 90:Panel
|
|
|
|
----------------------------------------------------------------------
|
|
-- Leatrix Plus
|
|
----------------------------------------------------------------------
|
|
|
|
-- Create global table
|
|
_G.LeaPlusDB = _G.LeaPlusDB or {}
|
|
|
|
-- Create locals
|
|
local LeaPlusLC, LeaPlusCB, LeaDropList, LeaConfigList = {}, {}, {}, {}
|
|
local ClientVersion = GetBuildInfo()
|
|
local GameLocale = GetLocale()
|
|
local void
|
|
|
|
-- Version
|
|
LeaPlusLC["AddonVer"] = "9.1.01"
|
|
|
|
-- Get locale table
|
|
local void, Leatrix_Plus = ...
|
|
local L = Leatrix_Plus.L
|
|
|
|
-- Check Wow version is valid
|
|
do
|
|
local gameversion, gamebuild, gamedate, gametocversion = GetBuildInfo()
|
|
if gametocversion and gametocversion < 90000 then
|
|
-- Game client is Wow Classic
|
|
C_Timer.After(2, function()
|
|
print(L["LEATRIX PLUS: WRONG VERSION INSTALLED!"])
|
|
end)
|
|
return
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L00: Leatrix Plus
|
|
----------------------------------------------------------------------
|
|
|
|
-- Initialise variables
|
|
LeaPlusLC["ShowErrorsFlag"] = 1
|
|
LeaPlusLC["NumberOfPages"] = 9
|
|
LeaPlusLC["RaidColors"] = RAID_CLASS_COLORS
|
|
|
|
-- Create event frame
|
|
local LpEvt = CreateFrame("FRAME")
|
|
LpEvt:RegisterEvent("ADDON_LOADED")
|
|
LpEvt:RegisterEvent("PLAYER_LOGIN")
|
|
|
|
----------------------------------------------------------------------
|
|
-- L01: Functions
|
|
----------------------------------------------------------------------
|
|
|
|
-- Print text
|
|
function LeaPlusLC:Print(text)
|
|
DEFAULT_CHAT_FRAME:AddMessage(L[text], 1.0, 0.85, 0.0)
|
|
end
|
|
|
|
-- Lock and unlock an item
|
|
function LeaPlusLC:LockItem(item, lock)
|
|
if lock then
|
|
item:Disable()
|
|
item:SetAlpha(0.3)
|
|
else
|
|
item:Enable()
|
|
item:SetAlpha(1.0)
|
|
end
|
|
end
|
|
|
|
-- Hide configuration panels
|
|
function LeaPlusLC:HideConfigPanels()
|
|
for k, v in pairs(LeaConfigList) do
|
|
v:Hide()
|
|
end
|
|
end
|
|
|
|
-- Display on-screen message
|
|
function LeaPlusLC:DisplayMessage(self)
|
|
ActionStatus:DisplayMessage(self)
|
|
end
|
|
|
|
-- Load a string variable or set it to default if it's not set to "On" or "Off"
|
|
function LeaPlusLC:LoadVarChk(var, def)
|
|
if LeaPlusDB[var] and type(LeaPlusDB[var]) == "string" and LeaPlusDB[var] == "On" or LeaPlusDB[var] == "Off" then
|
|
LeaPlusLC[var] = LeaPlusDB[var]
|
|
else
|
|
LeaPlusLC[var] = def
|
|
LeaPlusDB[var] = def
|
|
end
|
|
end
|
|
|
|
-- Load a numeric variable and set it to default if it's not within a given range
|
|
function LeaPlusLC:LoadVarNum(var, def, valmin, valmax)
|
|
if LeaPlusDB[var] and type(LeaPlusDB[var]) == "number" and LeaPlusDB[var] >= valmin and LeaPlusDB[var] <= valmax then
|
|
LeaPlusLC[var] = LeaPlusDB[var]
|
|
else
|
|
LeaPlusLC[var] = def
|
|
LeaPlusDB[var] = def
|
|
end
|
|
end
|
|
|
|
-- Load an anchor point variable and set it to default if the anchor point is invalid
|
|
function LeaPlusLC:LoadVarAnc(var, def)
|
|
if LeaPlusDB[var] and type(LeaPlusDB[var]) == "string" and LeaPlusDB[var] == "CENTER" or LeaPlusDB[var] == "TOP" or LeaPlusDB[var] == "BOTTOM" or LeaPlusDB[var] == "LEFT" or LeaPlusDB[var] == "RIGHT" or LeaPlusDB[var] == "TOPLEFT" or LeaPlusDB[var] == "TOPRIGHT" or LeaPlusDB[var] == "BOTTOMLEFT" or LeaPlusDB[var] == "BOTTOMRIGHT" then
|
|
LeaPlusLC[var] = LeaPlusDB[var]
|
|
else
|
|
LeaPlusLC[var] = def
|
|
LeaPlusDB[var] = def
|
|
end
|
|
end
|
|
|
|
-- Show tooltips for checkboxes
|
|
function LeaPlusLC:TipSee()
|
|
GameTooltip:SetOwner(self, "ANCHOR_NONE")
|
|
local parent = self:GetParent()
|
|
local pscale = parent:GetEffectiveScale()
|
|
local gscale = UIParent:GetEffectiveScale()
|
|
local tscale = GameTooltip:GetEffectiveScale()
|
|
local gap = ((UIParent:GetRight() * gscale) - (parent:GetRight() * pscale))
|
|
if gap < (250 * tscale) then
|
|
GameTooltip:SetPoint("TOPRIGHT", parent, "TOPLEFT", 0, 0)
|
|
else
|
|
GameTooltip:SetPoint("TOPLEFT", parent, "TOPRIGHT", 0, 0)
|
|
end
|
|
GameTooltip:SetText(self.tiptext, nil, nil, nil, nil, true)
|
|
end
|
|
|
|
-- Show tooltips for configuration buttons and dropdown menus
|
|
function LeaPlusLC:ShowTooltip()
|
|
GameTooltip:SetOwner(self, "ANCHOR_NONE")
|
|
local parent = LeaPlusLC["PageF"]
|
|
local pscale = parent:GetEffectiveScale()
|
|
local gscale = UIParent:GetEffectiveScale()
|
|
local tscale = GameTooltip:GetEffectiveScale()
|
|
local gap = ((UIParent:GetRight() * gscale) - (LeaPlusLC["PageF"]:GetRight() * pscale))
|
|
if gap < (250 * tscale) then
|
|
GameTooltip:SetPoint("TOPRIGHT", parent, "TOPLEFT", 0, 0)
|
|
else
|
|
GameTooltip:SetPoint("TOPLEFT", parent, "TOPRIGHT", 0, 0)
|
|
end
|
|
GameTooltip:SetText(self.tiptext, nil, nil, nil, nil, true)
|
|
end
|
|
|
|
-- Show tooltips for interface settings (not currently used)
|
|
function LeaPlusLC:ShowFacetip()
|
|
GameTooltip:SetOwner(self, "ANCHOR_TOP")
|
|
GameTooltip:SetText(self.tiptext, nil, nil, nil, nil, true)
|
|
end
|
|
|
|
-- Create configuration button
|
|
function LeaPlusLC:CfgBtn(name, parent)
|
|
local CfgBtn = CreateFrame("BUTTON", nil, parent)
|
|
LeaPlusCB[name] = CfgBtn
|
|
CfgBtn:SetWidth(20)
|
|
CfgBtn:SetHeight(20)
|
|
CfgBtn:SetPoint("LEFT", parent.f, "RIGHT", 0, 0)
|
|
|
|
CfgBtn.t = CfgBtn:CreateTexture(nil, "BORDER")
|
|
CfgBtn.t:SetAllPoints()
|
|
CfgBtn.t:SetTexture("Interface\\WorldMap\\Gear_64.png")
|
|
CfgBtn.t:SetTexCoord(0, 0.50, 0, 0.50);
|
|
CfgBtn.t:SetVertexColor(1.0, 0.82, 0, 1.0)
|
|
|
|
CfgBtn:SetHighlightTexture("Interface\\WorldMap\\Gear_64.png")
|
|
CfgBtn:GetHighlightTexture():SetTexCoord(0, 0.50, 0, 0.50);
|
|
|
|
CfgBtn.tiptext = L["Click to configure the settings for this option."]
|
|
CfgBtn:SetScript("OnEnter", LeaPlusLC.ShowTooltip)
|
|
CfgBtn:SetScript("OnLeave", GameTooltip_Hide)
|
|
end
|
|
|
|
-- Capitalise first character in a string
|
|
function LeaPlusLC:CapFirst(str)
|
|
return gsub(string.lower(str), "^%l", strupper)
|
|
end
|
|
|
|
-- Toggle Zygor addon
|
|
function LeaPlusLC:ZygorToggle()
|
|
if select(2, GetAddOnInfo("ZygorGuidesViewer")) then
|
|
if not IsAddOnLoaded("ZygorGuidesViewer") then
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
EnableAddOn("ZygorGuidesViewer")
|
|
ReloadUI();
|
|
end
|
|
else
|
|
DisableAddOn("ZygorGuidesViewer")
|
|
ReloadUI();
|
|
end
|
|
else
|
|
-- Zygor cannot be found
|
|
LeaPlusLC:Print("Zygor addon not found.");
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Show memory usage stat
|
|
function LeaPlusLC:ShowMemoryUsage(frame, anchor, x, y)
|
|
|
|
-- Create frame
|
|
local memframe = CreateFrame("FRAME", nil, frame)
|
|
memframe:ClearAllPoints()
|
|
memframe:SetPoint(anchor, x, y)
|
|
memframe:SetWidth(100)
|
|
memframe:SetHeight(20)
|
|
|
|
-- Create labels
|
|
local pretext = memframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
pretext:SetPoint("TOPLEFT", 0, 0)
|
|
pretext:SetText(L["Memory Usage"])
|
|
|
|
local memtext = memframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
memtext:SetPoint("TOPLEFT", 0, 0 - 30)
|
|
|
|
-- Create stat
|
|
local memstat = memframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
memstat:SetPoint("BOTTOMLEFT", memtext, "BOTTOMRIGHT")
|
|
memstat:SetText("(calculating...)")
|
|
|
|
-- Create update script
|
|
local memtime = -1
|
|
memframe:SetScript("OnUpdate", function(self, elapsed)
|
|
if memtime > 2 or memtime == -1 then
|
|
UpdateAddOnMemoryUsage();
|
|
memtext = GetAddOnMemoryUsage("Leatrix_Plus")
|
|
memtext = math.floor(memtext + .5) .. " KB"
|
|
memstat:SetText(memtext);
|
|
memtime = 0;
|
|
end
|
|
memtime = memtime + elapsed;
|
|
end)
|
|
|
|
-- Release memory
|
|
LeaPlusLC.ShowMemoryUsage = nil
|
|
|
|
end
|
|
|
|
-- Check if player is in LFG queue
|
|
function LeaPlusLC:IsInLFGQueue()
|
|
if GetLFGMode(LE_LFG_CATEGORY_LFD) or
|
|
GetLFGMode(LE_LFG_CATEGORY_LFR) or
|
|
GetLFGMode(LE_LFG_CATEGORY_RF) or
|
|
GetLFGMode(LE_LFG_CATEGORY_SCENARIO) or
|
|
GetLFGMode(LE_LFG_CATEGORY_FLEXRAID) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- Check if player is in combat
|
|
function LeaPlusLC:PlayerInCombat()
|
|
if (UnitAffectingCombat("player")) then
|
|
LeaPlusLC:Print("You cannot do that in combat.")
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- Hide panel and pages
|
|
function LeaPlusLC:HideFrames()
|
|
|
|
-- Hide option pages
|
|
for i = 0, LeaPlusLC["NumberOfPages"] do
|
|
if LeaPlusLC["Page"..i] then
|
|
LeaPlusLC["Page"..i]:Hide();
|
|
end;
|
|
end
|
|
|
|
-- Hide options panel
|
|
LeaPlusLC["PageF"]:Hide();
|
|
|
|
end
|
|
|
|
-- Find out if Leatrix Plus is showing (main panel or config panel)
|
|
function LeaPlusLC:IsPlusShowing()
|
|
if LeaPlusLC["PageF"]:IsShown() then return true end
|
|
for k, v in pairs(LeaConfigList) do
|
|
if v:IsShown() then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Check if a name is in your friends list or guild (does not check realm as realm is unknown for some checks)
|
|
function LeaPlusLC:FriendCheck(name)
|
|
|
|
-- Do nothing if name is empty (such as whispering from the Battle.net app)
|
|
if not name then return end
|
|
|
|
-- Update friends list
|
|
C_FriendList.ShowFriends()
|
|
|
|
-- Remove realm
|
|
name = strsplit("-", name, 2)
|
|
|
|
-- Check character friends
|
|
for i = 1, C_FriendList.GetNumFriends() do
|
|
-- Return true if name matches with or without realm
|
|
local charFriendName = C_FriendList.GetFriendInfoByIndex(i).name
|
|
charFriendName = strsplit("-", charFriendName, 2)
|
|
if name == charFriendName then
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- Check Battle.net friends
|
|
local numfriends = BNGetNumFriends()
|
|
for i = 1, numfriends do
|
|
local numtoons = C_BattleNet.GetFriendNumGameAccounts(i)
|
|
for j = 1, numtoons do
|
|
local gameAccountInfo = C_BattleNet.GetFriendGameAccountInfo(i, j)
|
|
local characterName = gameAccountInfo.characterName
|
|
local client = gameAccountInfo.clientProgram
|
|
if client == "WoW" and characterName == name then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Check guild roster (new members may need to press J to refresh roster)
|
|
local gCount = GetNumGuildMembers()
|
|
for i = 1, gCount do
|
|
local gName, void, void, void, void, void, void, void, gOnline, void, void, void, void, gMobile = GetGuildRosterInfo(i)
|
|
if gOnline and not gMobile then
|
|
gName = strsplit("-", gName, 2)
|
|
if gName == name then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- Convert color code (from RGB or RGB Percent to Hex or Hex Percent and vice versa)
|
|
function LeaPlusLC:ConvertColor(r, g, b)
|
|
if r and g and b then
|
|
LeaPlusLC:Print("Source: |cffffffff" .. r .. " " .. g .. " " .. b .. " ")
|
|
-- Source is RGB or RGB Percent
|
|
local r = r <= 255 and r >= 0 and r or 0
|
|
local g = g <= 255 and g >= 0 and g or 0
|
|
local b = b <= 255 and b >= 0 and b or 0
|
|
-- RGB Percent to Hex
|
|
LeaPlusLC:Print("RGB Percent to Hex: |cffffffff" .. strupper(string.format("%02x%02x%02x", r * 255, g * 255, b * 255)))
|
|
-- RGB to Hex
|
|
LeaPlusLC:Print("RGB to Hex: |cffffffff" .. strupper(string.format("%02x%02x%02x", r, g, b)))
|
|
else
|
|
LeaPlusLC:Print("Source: |cffffffff" .. r)
|
|
-- Source is Hex
|
|
local rhex, ghex, bhex = string.sub(r, 1, 2), string.sub(r, 3, 4), string.sub(r, 5, 6)
|
|
-- Hex to RGB Percent
|
|
LeaPlusLC:Print("Hex to RGB Percent: |cffffffff" .. string.format("%.2f", tonumber(rhex, 16) / 255) .. " " .. string.format("%.2f", tonumber(ghex, 16) / 255) .. " " .. string.format("%.2f", tonumber(bhex, 16) / 255))
|
|
-- Hex to RGB
|
|
LeaPlusLC:Print("Hex to RGB: |cffffffff" .. tonumber(rhex, 16) .. " " .. tonumber(ghex, 16) .. " " .. tonumber(bhex, 16))
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L02: Locks
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to set lock state for configuration buttons
|
|
function LeaPlusLC:LockOption(option, item, reloadreq)
|
|
if reloadreq then
|
|
-- Option change requires UI reload
|
|
if LeaPlusLC[option] ~= LeaPlusDB[option] or LeaPlusLC[option] == "Off" then
|
|
LeaPlusLC:LockItem(LeaPlusCB[item], true)
|
|
else
|
|
LeaPlusLC:LockItem(LeaPlusCB[item], false)
|
|
end
|
|
else
|
|
-- Option change does not require UI reload
|
|
if LeaPlusLC[option] == "Off" then
|
|
LeaPlusLC:LockItem(LeaPlusCB[item], true)
|
|
else
|
|
LeaPlusLC:LockItem(LeaPlusCB[item], false)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Set lock state for configuration buttons
|
|
function LeaPlusLC:SetDim()
|
|
LeaPlusLC:LockOption("AutomateQuests", "AutomateQuestsBtn", false) -- Automate quests
|
|
LeaPlusLC:LockOption("AutoRepairGear", "AutoRepairBtn", false) -- Repair automatically
|
|
LeaPlusLC:LockOption("InviteFromWhisper", "InvWhisperBtn", false) -- Invite from whispers
|
|
LeaPlusLC:LockOption("NoChatButtons", "NoChatButtonsBtn", true) -- Hide chat buttons
|
|
LeaPlusLC:LockOption("MailFontChange", "MailTextBtn", true) -- Resize mail text
|
|
LeaPlusLC:LockOption("QuestFontChange", "QuestTextBtn", true) -- Resize quest text
|
|
LeaPlusLC:LockOption("MinimapMod", "ModMinimapBtn", true) -- Enhance minimap
|
|
LeaPlusLC:LockOption("TipModEnable", "MoveTooltipButton", true) -- Enhance tooltip
|
|
LeaPlusLC:LockOption("ShowCooldowns", "CooldownsButton", true) -- Show cooldowns
|
|
LeaPlusLC:LockOption("ShowBorders", "ModBordersBtn", true) -- Show borders
|
|
LeaPlusLC:LockOption("ShowPlayerChain", "ModPlayerChain", true) -- Show player chain
|
|
LeaPlusLC:LockOption("FrmEnabled", "MoveFramesButton", true) -- Manage frames
|
|
LeaPlusLC:LockOption("ManageBuffs", "ManageBuffsButton", true) -- Manage buffs
|
|
LeaPlusLC:LockOption("ManagePowerBar", "ManagePowerBarButton", true) -- Manage power bar
|
|
LeaPlusLC:LockOption("ManageWidget", "ManageWidgetButton", true) -- Manage widget
|
|
LeaPlusLC:LockOption("ManageFocus", "ManageFocusButton", true) -- Manage focus
|
|
LeaPlusLC:LockOption("ClassColFrames", "ClassColFramesBtn", true) -- Class colored frames
|
|
LeaPlusLC:LockOption("SetWeatherDensity", "SetWeatherDensityBtn", false) -- Set weather density
|
|
LeaPlusLC:LockOption("MuteGameSounds", "MuteGameSoundsBtn", false) -- Mute game sounds
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L03: Restarts
|
|
----------------------------------------------------------------------
|
|
|
|
-- Set the reload button state
|
|
function LeaPlusLC:ReloadCheck()
|
|
|
|
-- Chat
|
|
if (LeaPlusLC["UseEasyChatResizing"] ~= LeaPlusDB["UseEasyChatResizing"]) -- Use easy resizing
|
|
or (LeaPlusLC["NoCombatLogTab"] ~= LeaPlusDB["NoCombatLogTab"]) -- Hide the combat log
|
|
or (LeaPlusLC["NoChatButtons"] ~= LeaPlusDB["NoChatButtons"]) -- Hide chat buttons
|
|
or (LeaPlusLC["NoSocialButton"] ~= LeaPlusDB["NoSocialButton"]) -- Hide social button
|
|
or (LeaPlusLC["UnclampChat"] ~= LeaPlusDB["UnclampChat"]) -- Unclamp chat frame
|
|
or (LeaPlusLC["MoveChatEditBoxToTop"] ~= LeaPlusDB["MoveChatEditBoxToTop"]) -- Move editbox to top
|
|
or (LeaPlusLC["NoStickyChat"] ~= LeaPlusDB["NoStickyChat"]) -- Disable sticky chat
|
|
or (LeaPlusLC["NoStickyEditbox"] ~= LeaPlusDB["NoStickyEditbox"]) -- Disable sticky editbox
|
|
or (LeaPlusLC["UseArrowKeysInChat"] ~= LeaPlusDB["UseArrowKeysInChat"]) -- Use arrow keys in chat
|
|
or (LeaPlusLC["NoChatFade"] ~= LeaPlusDB["NoChatFade"]) -- Disable chat fade
|
|
or (LeaPlusLC["RecentChatWindow"] ~= LeaPlusDB["RecentChatWindow"]) -- Recent chat window
|
|
or (LeaPlusLC["MaxChatHstory"] ~= LeaPlusDB["MaxChatHstory"]) -- Increase chat history
|
|
|
|
-- Text
|
|
or (LeaPlusLC["HideErrorMessages"] ~= LeaPlusDB["HideErrorMessages"]) -- Hide error messages
|
|
or (LeaPlusLC["NoHitIndicators"] ~= LeaPlusDB["NoHitIndicators"]) -- Hide portrait text
|
|
or (LeaPlusLC["HideZoneText"] ~= LeaPlusDB["HideZoneText"]) -- Hide zone text
|
|
or (LeaPlusLC["MailFontChange"] ~= LeaPlusDB["MailFontChange"]) -- Resize mail text
|
|
or (LeaPlusLC["QuestFontChange"] ~= LeaPlusDB["QuestFontChange"]) -- Resize quest text
|
|
|
|
-- Interface
|
|
or (LeaPlusLC["MinimapMod"] ~= LeaPlusDB["MinimapMod"]) -- Enhance minimap
|
|
or (LeaPlusLC["TipModEnable"] ~= LeaPlusDB["TipModEnable"]) -- Enhance tooltip
|
|
or (LeaPlusLC["EnhanceDressup"] ~= LeaPlusDB["EnhanceDressup"]) -- Enhance dressup
|
|
or (LeaPlusLC["ShowVolume"] ~= LeaPlusDB["ShowVolume"]) -- Show volume slider
|
|
or (LeaPlusLC["ShowCooldowns"] ~= LeaPlusDB["ShowCooldowns"]) -- Show cooldowns
|
|
or (LeaPlusLC["DurabilityStatus"] ~= LeaPlusDB["DurabilityStatus"]) -- Show durability status
|
|
or (LeaPlusLC["ShowPetSaveBtn"] ~= LeaPlusDB["ShowPetSaveBtn"]) -- Show pet save button
|
|
or (LeaPlusLC["ShowRaidToggle"] ~= LeaPlusDB["ShowRaidToggle"]) -- Show raid button
|
|
or (LeaPlusLC["ShowBorders"] ~= LeaPlusDB["ShowBorders"]) -- Show borders
|
|
or (LeaPlusLC["ShowPlayerChain"] ~= LeaPlusDB["ShowPlayerChain"]) -- Show player chain
|
|
or (LeaPlusLC["ShowWowheadLinks"] ~= LeaPlusDB["ShowWowheadLinks"]) -- Show Wowhead links
|
|
|
|
-- Frames
|
|
or (LeaPlusLC["FrmEnabled"] ~= LeaPlusDB["FrmEnabled"]) -- Manage frames
|
|
or (LeaPlusLC["ManageBuffs"] ~= LeaPlusDB["ManageBuffs"]) -- Manage buffs
|
|
or (LeaPlusLC["ManagePowerBar"] ~= LeaPlusDB["ManagePowerBar"]) -- Manage power bar
|
|
or (LeaPlusLC["ManageWidget"] ~= LeaPlusDB["ManageWidget"]) -- Manage widget
|
|
or (LeaPlusLC["ManageFocus"] ~= LeaPlusDB["ManageFocus"]) -- Manage focus
|
|
or (LeaPlusLC["ClassColFrames"] ~= LeaPlusDB["ClassColFrames"]) -- Class colored frames
|
|
or (LeaPlusLC["NoAlerts"] ~= LeaPlusDB["NoAlerts"]) -- Hide alerts
|
|
or (LeaPlusLC["HideBodyguard"] ~= LeaPlusDB["HideBodyguard"]) -- Hide bodyguard gossip
|
|
or (LeaPlusLC["HideTalkingFrame"] ~= LeaPlusDB["HideTalkingFrame"]) -- Hide talking frame
|
|
or (LeaPlusLC["HideCleanupBtns"] ~= LeaPlusDB["HideCleanupBtns"]) -- Hide clean-up buttons
|
|
or (LeaPlusLC["HideBossBanner"] ~= LeaPlusDB["HideBossBanner"]) -- Hide boss banner
|
|
or (LeaPlusLC["HideLevelUpDisplay"] ~= LeaPlusDB["HideLevelUpDisplay"]) -- Hide level-up display
|
|
or (LeaPlusLC["NoGryphons"] ~= LeaPlusDB["NoGryphons"]) -- Hide gryphons
|
|
or (LeaPlusLC["NoClassBar"] ~= LeaPlusDB["NoClassBar"]) -- Hide stance bar
|
|
or (LeaPlusLC["NoCommandBar"] ~= LeaPlusDB["NoCommandBar"]) -- Hide order hall bar
|
|
|
|
-- System
|
|
or (LeaPlusLC["NoRestedEmotes"] ~= LeaPlusDB["NoRestedEmotes"]) -- Silence rested emotes
|
|
or (LeaPlusLC["NoBagAutomation"] ~= LeaPlusDB["NoBagAutomation"]) -- Disable bag automation
|
|
or (LeaPlusLC["NoPetAutomation"] ~= LeaPlusDB["NoPetAutomation"]) -- Disable pet automation
|
|
or (LeaPlusLC["CharAddonList"] ~= LeaPlusDB["CharAddonList"]) -- Show character addons
|
|
or (LeaPlusLC["SaveProfFilters"] ~= LeaPlusDB["SaveProfFilters"]) -- Save profession filters
|
|
or (LeaPlusLC["FasterLooting"] ~= LeaPlusDB["FasterLooting"]) -- Faster auto loot
|
|
or (LeaPlusLC["FasterMovieSkip"] ~= LeaPlusDB["FasterMovieSkip"]) -- Faster movie skip
|
|
or (LeaPlusLC["CombatPlates"] ~= LeaPlusDB["CombatPlates"]) -- Combat plates
|
|
or (LeaPlusLC["EasyItemDestroy"] ~= LeaPlusDB["EasyItemDestroy"]) -- Easy item destroy
|
|
or (LeaPlusLC["LockoutSharing"] ~= LeaPlusDB["LockoutSharing"]) -- Lockout sharing
|
|
|
|
-- Settings
|
|
or (LeaPlusLC["EnableHotkey"] ~= LeaPlusDB["EnableHotkey"]) -- Enable hotkey
|
|
|
|
then
|
|
-- Enable the reload button
|
|
LeaPlusLC:LockItem(LeaPlusCB["ReloadUIButton"], false)
|
|
LeaPlusCB["ReloadUIButton"].f:Show()
|
|
else
|
|
-- Disable the reload button
|
|
LeaPlusLC:LockItem(LeaPlusCB["ReloadUIButton"], true)
|
|
LeaPlusCB["ReloadUIButton"].f:Hide()
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L20: Live
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:Live()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automatically accept Dungeon Finder queue requests
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["AutoConfirmRole"] == "On" then
|
|
LFDRoleCheckPopupAcceptButton:SetScript("OnShow", function()
|
|
local leader = ""
|
|
for i = 1, GetNumSubgroupMembers() do
|
|
if UnitIsGroupLeader("party" .. i) then
|
|
leader = UnitName("party" .. i)
|
|
break
|
|
end
|
|
end
|
|
if LeaPlusLC:FriendCheck(leader) then
|
|
LFDRoleCheckPopupAcceptButton:Click()
|
|
end
|
|
end)
|
|
else
|
|
LFDRoleCheckPopupAcceptButton:SetScript("OnShow", nil)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Invite from whispers
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["InviteFromWhisper"] == "On" then
|
|
LpEvt:RegisterEvent("CHAT_MSG_WHISPER");
|
|
LpEvt:RegisterEvent("CHAT_MSG_BN_WHISPER");
|
|
else
|
|
LpEvt:UnregisterEvent("CHAT_MSG_WHISPER");
|
|
LpEvt:UnregisterEvent("CHAT_MSG_BN_WHISPER");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block duels
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoDuelRequests"] == "On" then
|
|
LpEvt:RegisterEvent("DUEL_REQUESTED");
|
|
else
|
|
LpEvt:UnregisterEvent("DUEL_REQUESTED");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block pet battle duels
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoPetDuels"] == "On" then
|
|
LpEvt:RegisterEvent("PET_BATTLE_PVP_DUEL_REQUESTED");
|
|
else
|
|
LpEvt:UnregisterEvent("PET_BATTLE_PVP_DUEL_REQUESTED");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block party invites and Party from friends
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoPartyInvites"] == "On" or LeaPlusLC["AcceptPartyFriends"] == "On" then
|
|
LpEvt:RegisterEvent("PARTY_INVITE_REQUEST");
|
|
else
|
|
LpEvt:UnregisterEvent("PARTY_INVITE_REQUEST");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Release in PvP
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["AutoReleasePvP"] == "On" then
|
|
LpEvt:RegisterEvent("PLAYER_DEAD");
|
|
else
|
|
LpEvt:UnregisterEvent("PLAYER_DEAD");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Accept resurrection
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["AutoAcceptRes"] == "On" then
|
|
LpEvt:RegisterEvent("RESURRECT_REQUEST");
|
|
else
|
|
LpEvt:UnregisterEvent("RESURRECT_REQUEST");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automatic summon
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["AutoAcceptSummon"] == "On" then
|
|
LpEvt:RegisterEvent("CONFIRM_SUMMON");
|
|
else
|
|
LpEvt:UnregisterEvent("CONFIRM_SUMMON");
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable loot warnings
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoConfirmLoot"] == "On" then
|
|
LpEvt:RegisterEvent("CONFIRM_LOOT_ROLL")
|
|
LpEvt:RegisterEvent("CONFIRM_DISENCHANT_ROLL")
|
|
LpEvt:RegisterEvent("LOOT_BIND_CONFIRM")
|
|
LpEvt:RegisterEvent("MERCHANT_CONFIRM_TRADE_TIMER_REMOVAL")
|
|
LpEvt:RegisterEvent("MAIL_LOCK_SEND_ITEMS")
|
|
else
|
|
LpEvt:UnregisterEvent("CONFIRM_LOOT_ROLL")
|
|
LpEvt:UnregisterEvent("CONFIRM_DISENCHANT_ROLL")
|
|
LpEvt:UnregisterEvent("LOOT_BIND_CONFIRM")
|
|
LpEvt:UnregisterEvent("MERCHANT_CONFIRM_TRADE_TIMER_REMOVAL")
|
|
LpEvt:UnregisterEvent("MAIL_LOCK_SEND_ITEMS")
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L30: Isolated
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:Isolated()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Easy item destroy
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["EasyItemDestroy"] == "On" then
|
|
|
|
-- Get the type "DELETE" into the field to confirm text
|
|
local TypeDeleteLine = gsub(DELETE_GOOD_ITEM, "[\r\n]", "@")
|
|
local void, TypeDeleteLine = strsplit("@", TypeDeleteLine, 2)
|
|
|
|
-- Add hyperlinks to regular item destroy
|
|
RunScript('StaticPopupDialogs["DELETE_ITEM"].OnHyperlinkEnter = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkEnter')
|
|
RunScript('StaticPopupDialogs["DELETE_ITEM"].OnHyperlinkLeave = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkLeave')
|
|
RunScript('StaticPopupDialogs["DELETE_QUEST_ITEM"].OnHyperlinkEnter = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkEnter')
|
|
RunScript('StaticPopupDialogs["DELETE_QUEST_ITEM"].OnHyperlinkLeave = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkLeave')
|
|
RunScript('StaticPopupDialogs["DELETE_GOOD_QUEST_ITEM"].OnHyperlinkEnter = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkEnter')
|
|
RunScript('StaticPopupDialogs["DELETE_GOOD_QUEST_ITEM"].OnHyperlinkLeave = StaticPopupDialogs["DELETE_GOOD_ITEM"].OnHyperlinkLeave')
|
|
|
|
-- Hide editbox and set item link
|
|
local easyDelFrame = CreateFrame("FRAME")
|
|
easyDelFrame:RegisterEvent("DELETE_ITEM_CONFIRM")
|
|
easyDelFrame:SetScript("OnEvent", function()
|
|
if StaticPopup1EditBox:IsShown() then
|
|
-- Item requires player to type delete so hide editbox and show link
|
|
StaticPopup1EditBox:Hide()
|
|
StaticPopup1Button1:Enable()
|
|
local link = select(3, GetCursorInfo())
|
|
-- Custom link for battle pets
|
|
local linkType, linkOptions, name = LinkUtil.ExtractLink(link)
|
|
if linkType == "battlepet" then
|
|
local speciesID, level, breedQuality = strsplit(":", linkOptions)
|
|
local qualityColor = BAG_ITEM_QUALITY_COLORS[tonumber(breedQuality)]
|
|
link = qualityColor:WrapTextInColorCode(name .. " |n" .. L["Level"] .. " " .. level .. L["Battle Pet"])
|
|
end
|
|
StaticPopup1Text:SetText(gsub(StaticPopup1Text:GetText(), gsub(TypeDeleteLine, "@", ""), "") .. "|n" .. link)
|
|
else
|
|
-- Item does not require player to type delete so just show item link
|
|
StaticPopup1:SetHeight(StaticPopup1:GetHeight() + 40)
|
|
StaticPopup1EditBox:Hide()
|
|
StaticPopup1Button1:Enable()
|
|
local link = select(3, GetCursorInfo())
|
|
-- Custom link for battle pets
|
|
local linkType, linkOptions, name = LinkUtil.ExtractLink(link)
|
|
if linkType == "battlepet" then
|
|
local speciesID, level, breedQuality = strsplit(":", linkOptions)
|
|
local qualityColor = BAG_ITEM_QUALITY_COLORS[tonumber(breedQuality)]
|
|
link = qualityColor:WrapTextInColorCode(name .. " |n" .. L["Level"] .. " " .. level .. L["Battle Pet"])
|
|
end
|
|
StaticPopup1Text:SetText(gsub(StaticPopup1Text:GetText(), gsub(TypeDeleteLine, "@", ""), "") .. "|n|n" .. link)
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Mute game sounds (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Create soundtable
|
|
local muteTable = {
|
|
|
|
["MuteFizzle"] = { "sound/spells/fizzle/fizzlefirea.ogg#569773", "sound/spells/fizzle/FizzleFrostA.ogg#569775", "sound/spells/fizzle/FizzleHolyA.ogg#569772", "sound/spells/fizzle/FizzleNatureA.ogg#569774", "sound/spells/fizzle/FizzleShadowA.ogg#569776",},
|
|
["MuteInterface"] = { "sound/interface/iUiInterfaceButtonA.ogg#567481", "sound/interface/uChatScrollButton.ogg#567407", "sound/interface/uEscapeScreenClose.ogg#567464", "sound/interface/uEscapeScreenOpen.ogg#567490",},
|
|
["MuteSniffing"] = { "sound/creature/worgenfemale/worgenfemale_emotesniff_01.ogg#564422", "sound/creature/worgenfemale/worgenfemale_emotesniff_02.ogg#564378", "sound/creature/worgenfemale/worgenfemale_emotesniff_03.ogg#564383", "sound/creature/worgenfemale/worgenmale_emotesniff_01.ogg#564560", "sound/creature/worgenfemale/worgenmale_emotesniff_02.ogg#564544", "sound/creature/worgenfemale/worgenmale_emotesniff_03.ogg#564536",},
|
|
["MuteTravelers"] = {
|
|
|
|
-- Mighty Caravan Brutosaur (sound/creature/tortollan_male)
|
|
"vo_801_tortollan_male_04_m.ogg#1998112", "vo_801_tortollan_male_05_m.ogg#1998113", "vo_801_tortollan_male_06_m.ogg#1998114", "vo_801_tortollan_male_07_m.ogg#1998115", "vo_801_tortollan_male_08_m.ogg#1998116", "vo_801_tortollan_male_09_m.ogg#1998117", "vo_801_tortollan_male_10_m.ogg#1998118", "vo_801_tortollan_male_11_m.ogg#1998119",
|
|
|
|
-- Traveler's Tundra Mammoth (sound/creature/npcdraeneimalestandard, sound/creature/goblinmalezanynpc, sound/creature/trollfemalelaidbacknpc, sound/creature/trollfemalelaidbacknpc)
|
|
"npcdraeneimalestandardvendor01.ogg#557341", "npcdraeneimalestandardvendor02.ogg#557335", "npcdraeneimalestandardvendor03.ogg#557328", "npcdraeneimalestandardvendor04.ogg#557331", "npcdraeneimalestandardvendor05.ogg#557325", "npcdraeneimalestandardvendor06.ogg#557324",
|
|
"npcdraeneimalestandardfarewell01.ogg#557342", "npcdraeneimalestandardfarewell02.ogg#557326", "npcdraeneimalestandardfarewell03.ogg#557322", "npcdraeneimalestandardfarewell05.ogg#557332", "npcdraeneimalestandardfarewell06.ogg#557338", "npcdraeneimalestandardfarewell08.ogg#557334",
|
|
"goblinmalezanynpcvendor01.ogg#550818", "goblinmalezanynpcvendor02.ogg#550817", "goblinmalezanynpcgreeting01.ogg#550805", "goblinmalezanynpcgreeting02.ogg#550813", "goblinmalezanynpcgreeting03.ogg#550819", "goblinmalezanynpcgreeting04.ogg#550806", "goblinmalezanynpcgreeting05.ogg#550820", "goblinmalezanynpcgreeting06.ogg#550809",
|
|
"goblinmalezanynpcfarewell01.ogg#550807", "goblinmalezanynpcfarewell03.ogg#550808", "goblinmalezanynpcfarewell04.ogg#550812",
|
|
"trollfemalelaidbacknpcvendor01.ogg#562812","trollfemalelaidbacknpcvendor02.ogg#562802", "trollfemalelaidbacknpcgreeting01.ogg#562815","trollfemalelaidbacknpcgreeting02.ogg#562814", "trollfemalelaidbacknpcgreeting03.ogg#562816", "trollfemalelaidbacknpcgreeting04.ogg#562807", "trollfemalelaidbacknpcgreeting05.ogg#562804", "trollfemalelaidbacknpcgreeting06.ogg#562803",
|
|
"trollfemalelaidbacknpcfarewell01.ogg#562809", "trollfemalelaidbacknpcfarewell02.ogg#562808", "trollfemalelaidbacknpcfarewell03.ogg#562813", "trollfemalelaidbacknpcfarewell04.ogg#562817", "trollfemalelaidbacknpcfarewell05.ogg#562806",
|
|
|
|
-- Grand Expedition Yak (sound/creature/grummlekooky, sound/creature/grummlestandard)
|
|
"vo_grummle_kooky_vendor_01.ogg#640180", "vo_grummle_kooky_vendor_02.ogg#640182", "vo_grummle_kooky_vendor_03.ogg#640184",
|
|
"vo_grummle_kooky_farewell_01.ogg#640158", "vo_grummle_kooky_farewell_02.ogg#640160", "vo_grummle_kooky_farewell_03.ogg#640162", "vo_grummle_kooky_farewell_04.ogg#640164",
|
|
"vo_grummle_standard_vendor_01.ogg#640336", "vo_grummle_standard_vendor_02.ogg#640338", "vo_grummle_standard_vendor_03.ogg#640340",
|
|
"vo_grummle_standard_farewell_01.ogg#640314", "vo_grummle_standard_farewell_02.ogg#640316", "vo_grummle_standard_farewell_03.ogg#640318", "vo_grummle_standard_farewell_04.ogg#640320",
|
|
|
|
},
|
|
|
|
-- Shouts
|
|
["MuteBattleShouts"] = {
|
|
|
|
-- Dark Iron Dwarf (sound/character/pc_dark_iron_dwarf_female, sound/character/pc_dark_iron_dwarf_male)
|
|
"vo_801_pc_-_darkiron_dwarf_female_battleshout_01.ogg#1906526", "vo_801_pc_-_darkiron_dwarf_female_battleshout_02.ogg#1906527", "vo_801_pc_-_darkiron_dwarf_female_battleshout_03.ogg#1906528", "vo_801_pc_-_darkiron_dwarf_female_battleshout_04.ogg#1906529", "vo_801_pc_-_darkiron_dwarf_female_battleshout_05.ogg#1906530",
|
|
"vo_801_pc_-_darkiron_dwarf_male_battleshout_01.ogg#1906599", "vo_801_pc_-_darkiron_dwarf_male_battleshout_02.ogg#1906600", "vo_801_pc_-_darkiron_dwarf_male_battleshout_03.ogg#1906601", "vo_801_pc_-_darkiron_dwarf_male_battleshout_04.ogg#1906602",
|
|
|
|
-- Draenei (sound/character/draeneifemalepc, sound/character/draeneimalepc)
|
|
"vo_draeneifemale_main_battleshoutlarge_01.ogg#1385370", "vo_draeneifemale_main_battleshoutlarge_02.ogg#1385371", "vo_draeneifemale_main_battleshoutlarge_03.ogg#1385372", "vo_draeneifemale_main_battleshoutlarge_04.ogg#1385373", "vo_draeneifemale_main_battleshoutlarge_05.ogg#1385374", "vo_draeneifemale_main_battleshoutlarge_06.ogg#1385375",
|
|
"vo_draeneimale_main_battleshoutlarge_01.ogg#1385420", "vo_draeneimale_main_battleshoutlarge_02.ogg#1385421", "vo_draeneimale_main_battleshoutlarge_03.ogg#1385422", "vo_draeneimale_main_battleshoutlarge_04.ogg#1385423", "vo_draeneimale_main_battleshoutlarge_05.ogg#1385424", "vo_draeneimale_main_battleshoutlarge_06.ogg#1385425",
|
|
|
|
-- Dwarf (sound/character/playerexertions/dwarffemalefinal, sound/character/playerexertions/dwarfmalefinal)
|
|
"vo_dwarffemale_main_battleshoutlarge_01.ogg#1512949", "vo_dwarffemale_main_battleshoutlarge_02.ogg#1512950", "vo_dwarffemale_main_battleshoutlarge_03.ogg#1512951", "vo_dwarffemale_main_battleshoutlarge_04.ogg#1512952", "vo_dwarffemale_main_battleshoutlarge_05.ogg#1512953",
|
|
"vo_dwarfmale_main_battleshoutlarge_01.ogg#1512848", "vo_dwarfmale_main_battleshoutlarge_02.ogg#1512849", "vo_dwarfmale_main_battleshoutlarge_03.ogg#1512850", "vo_dwarfmale_main_battleshoutlarge_04.ogg#1512851", "vo_dwarfmale_main_battleshoutlarge_05.ogg#1512852",
|
|
|
|
-- Gnome (sound/character/gnome/gnomevocalfemale, sound/character/playerexertions/gnomemalefinal)
|
|
"vo_gnomefemale_main_battleshoutlarge_01.ogg#1385458", "vo_gnomefemale_main_battleshoutlarge_02.ogg#1385459", "vo_gnomefemale_main_battleshoutlarge_03.ogg#1385460", "vo_gnomefemale_main_battleshoutlarge_04.ogg#1385461", "vo_gnomefemale_main_battleshoutlarge_05.ogg#1385462", "vo_gnomefemale_main_battleshoutlarge_06.ogg#1385463", "vo_gnomefemale_main_battleshoutlarge_07.ogg#1385464",
|
|
"vo_gnomemale_main_battleshoutlarge_01.ogg#1512976", "vo_gnomemale_main_battleshoutlarge_02.ogg#1512977", "vo_gnomemale_main_battleshoutlarge_03.ogg#1512978", "vo_gnomemale_main_battleshoutlarge_04.ogg#1512979", "vo_gnomemale_main_battleshoutlarge_05.ogg#1512980",
|
|
|
|
-- Human (sound/character/playerexertions/humanfemalefinal, sound/character/playerexertions/humanmalefinal)
|
|
"vo_humanfemale_main_battleshout_01.ogg#1343353", "vo_humanfemale_main_battleshout_02.ogg#1343354", "vo_humanfemale_main_battleshout_03.ogg#1343355", "vo_humanfemale_main_battleshout_04.ogg#1343356", "vo_humanfemale_main_battleshout_05.ogg#1343357", "vo_humanfemale_main_battleshout_06.ogg#1343358", "vo_humanfemale_main_battleshout_07.ogg#1343359", "vo_humanfemale_main_battleshout_08.ogg#1343360", "vo_humanfemale_main_battleshout_09.ogg#1343361",
|
|
"vo_humanmale_battleshout_01.ogg#1343322", "vo_humanmale_battleshout_02.ogg#1343323", "vo_humanmale_battleshout_03.ogg#1343324", "vo_humanmale_battleshout_04.ogg#1343325", "vo_humanmale_battleshout_05.ogg#1343326", "vo_humanmale_battleshout_06.ogg#1343327", "vo_humanmale_battleshout_07.ogg#1343328", "vo_humanmale_battleshout_08.ogg#1343329",
|
|
|
|
-- Kul Tiran (sound/character/pc_kul_tiran_human_female, sound/character/pc_kul_tiran_human_male)
|
|
"vo_815_pc_kul_tiran_human_female_intimidatingshout_01.ogg#2735388", "vo_815_pc_kul_tiran_human_female_intimidatingshout_02.ogg#2735389", "vo_815_pc_kul_tiran_human_female_intimidatingshout_03.ogg#2735390", "vo_815_pc_kul_tiran_human_female_intimidatingshout_04.ogg#2735391",
|
|
"vo_815_pc_kul_tiran_human_male_battlecry_01.ogg#2735439", "vo_815_pc_kul_tiran_human_male_battlecry_02.ogg#2735440", "vo_815_pc_kul_tiran_human_male_battlecry_03.ogg#2735441", "vo_815_pc_kul_tiran_human_male_battlecry_04.ogg#2735442", "vo_815_pc_kul_tiran_human_male_breathing_01.ogg#2735443",
|
|
|
|
-- Lightforged Draenei (sound/character/pc_-_lightforged_draenei_female, sound/character/pc_-_lightforged_draenei_male)
|
|
"vo_735_pc_-_lightforged_draenei_female_battleshout_01.ogg#1835517", "vo_735_pc_-_lightforged_draenei_female_battleshout_02.ogg#1835518", "vo_735_pc_-_lightforged_draenei_female_battleshout_03.ogg#1835519", "vo_735_pc_-_lightforged_draenei_female_battleshout_04.ogg#1835520", "vo_735_pc_-_lightforged_draenei_female_battleshout_05.ogg#1835521",
|
|
"vo_735_pc_-_lightforged_draenei_male_battleshout_01.ogg#1835609", "vo_735_pc_-_lightforged_draenei_male_battleshout_02.ogg#1835610", "vo_735_pc_-_lightforged_draenei_male_battleshout_03.ogg#1835611", "vo_735_pc_-_lightforged_draenei_male_battleshout_04.ogg#1835612", "vo_735_pc_-_lightforged_draenei_male_battleshout_05.ogg#1835613",
|
|
|
|
-- Mechagnome (sound/character/pc_mechagnome_female, sound/character/pc_mechagnome_male)
|
|
"vo_83_pc_mechagnome_female_battleshout_01.ogg#3189373", "vo_83_pc_mechagnome_female_battleshout_02.ogg#3189374", "vo_83_pc_mechagnome_female_battleshout_03.ogg#3189375", "vo_83_pc_mechagnome_female_battleshout_03.ogg#3189375",
|
|
"vo_83_pc_mechagnome_male_battleshout_02.ogg#3187600", "vo_83_pc_mechagnome_male_battleshout_03.ogg#3187601", "vo_83_pc_mechagnome_male_battleshout_04.ogg#3187602", "vo_83_pc_mechagnome_male_battleshout_05.ogg#3187603",
|
|
|
|
-- Night Elf (sound/character/nightelf/nightelffemale, sound/character/pcdhnightelfmale/)
|
|
"nightelffemale/vo_nightelffemale_main_battleshoutlarge_01.ogg#1383638", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_02.ogg#1383639", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_03.ogg#1383640", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_04.ogg#1383641", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_05.ogg#1383642", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_06.ogg#1383643", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_07.ogg#1383644", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_08.ogg#1383645", "nightelffemale/vo_nightelffemale_main_battleshoutlarge_09.ogg#1383646",
|
|
"vo_dhnightelfmale_charge_01.ogg#1389714", "vo_dhnightelfmale_charge_02.ogg#1389715", "vo_dhnightelfmale_charge_03.ogg#1389716", "vo_dhnightelfmale_charge_04.ogg#1389717", "vo_dhnightelfmale_charge_05.ogg#1389718", "vo_dhnightelfmale_charge_06.ogg#1389719", "vo_dhnightelfmale_charge_07.ogg#1389720", "vo_dhnightelfmale_charge_08.ogg#1389721",
|
|
|
|
-- Night Elf Demon Hunter (sound/character/pcdhnightelffemale, sound/character/pcdhnightelfmale)
|
|
"vo_dhnightelffemale_battleshoutlarge_01.ogg#1502181", "vo_dhnightelffemale_battleshoutlarge_02.ogg#1502182", "vo_dhnightelffemale_battleshoutlarge_03.ogg#1502183", "vo_dhnightelffemale_battleshoutlarge_04.ogg#1502184", "vo_dhnightelffemale_battleshoutlarge_05.ogg#1502185", "vo_dhnightelffemale_battleshoutlarge_06.ogg#1502186", "vo_dhnightelffemale_battleshoutlarge_07.ogg#1502187",
|
|
"vo_nightelfmale_main_battleshoutlarge_01.ogg#1512783", "vo_nightelfmale_main_battleshoutlarge_02.ogg#1512784", "vo_nightelfmale_main_battleshoutlarge_03.ogg#1512785", "vo_nightelfmale_main_battleshoutlarge_04.ogg#1512786",
|
|
|
|
-- Void Elf (sound/character/pc_-_void_elf_female, sound/character/pc_-_void_elf_male)
|
|
"vo_735_pc_-_void_elf_female_battleshout_01.ogg#1835914", "vo_735_pc_-_void_elf_female_battleshout_02.ogg#1835915", "vo_735_pc_-_void_elf_female_battleshout_03.ogg#1835916", "vo_735_pc_-_void_elf_female_battleshout_04.ogg#1835918", "vo_735_pc_-_void_elf_female_battleshout_05.ogg#1835919",
|
|
"vo_735_pc_-_void_elf_male_battleshout_01.ogg#1836016", "vo_735_pc_-_void_elf_male_battleshout_02.ogg#1836017", "vo_735_pc_-_void_elf_male_battleshout_03.ogg#1836019", "vo_735_pc_-_void_elf_male_battleshout_04.ogg#1836020", "vo_735_pc_-_void_elf_male_battleshout_05.ogg#1836021",
|
|
|
|
-- Worgen (sound/character/pcworgenfemale, sound/character/pcworgenmale)
|
|
"vo_worgenfemale_battleshoutlarge_01.ogg#1502111", "vo_worgenfemale_battleshoutlarge_02.ogg#1502112", "vo_worgenfemale_battleshoutlarge_03.ogg#1502113", "vo_worgenfemale_battleshoutlarge_04.ogg#1502114", "vo_worgenfemale_battleshoutlarge_05.ogg#1502115",
|
|
"vo_worgenmale_main_battleshoutlarge_01.ogg#1502135", "vo_worgenmale_main_battleshoutlarge_02.ogg#1502136", "vo_worgenmale_main_battleshoutlarge_03.ogg#1502137", "vo_worgenmale_main_battleshoutlarge_04.ogg#1502138", "vo_worgenmale_main_battleshoutlarge_05.ogg#1502139", "vo_worgenmale_main_battleshoutlarge_06.ogg#1502140",
|
|
|
|
-- Blood elf (sound/character/bloodelffemalepc, sound/character/bloodelfmalepc)
|
|
"vo_bloodelffemale_main_battleshoutlarge_01.ogg#1385124", "vo_bloodelffemale_main_battleshoutlarge_02.ogg#1385125", "vo_bloodelffemale_main_battleshoutlarge_03.ogg#1385126", "vo_bloodelffemale_main_battleshoutlarge_04.ogg#1385127", "vo_bloodelffemale_main_battleshoutlarge_05.ogg#1385128", "vo_bloodelffemale_main_battleshoutlarge_06.ogg#1385129",
|
|
"vo_bloodelfmale_main_battleshoutlarge_01.ogg#1385087", "vo_bloodelfmale_main_battleshoutlarge_02.ogg#1385088", "vo_bloodelfmale_main_battleshoutlarge_03.ogg#1385089", "vo_bloodelfmale_main_battleshoutlarge_04.ogg#1385090", "vo_bloodelfmale_main_battleshoutlarge_05.ogg#1385091", "vo_bloodelfmale_main_battleshoutlarge_06.ogg#1385092",
|
|
|
|
-- Blood Elf Demon Hunter (sound/character/pcdhbloodelffemale, sound/character/pcdhbloodelfmale)
|
|
"vo_dhbloodelffemale_metamorph_main_battleshoutlarge_01.ogg#1389747", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_02.ogg#1389748", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_03.ogg#1389749", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_04.ogg#1389750", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_05.ogg#1389751", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_06.ogg#1389752", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_07.ogg#1389753", "vo_dhbloodelffemale_metamorph_main_battleshoutlarge_08.ogg#1389754",
|
|
"vo_dhbloodelffemale_battleshoutlarge_01.ogg#1389813", "vo_dhbloodelffemale_battleshoutlarge_02.ogg#1389814", "vo_dhbloodelffemale_battleshoutlarge_03.ogg#1389815", "vo_dhbloodelffemale_battleshoutlarge_04.ogg#1389816", "vo_dhbloodelffemale_battleshoutlarge_05.ogg#1389817", "vo_dhbloodelffemale_battleshoutlarge_06.ogg#1389818",
|
|
"vo_dhbloodelfmale_main_battleshoutlarge_01.ogg#1502201", "vo_dhbloodelfmale_main_battleshoutlarge_02.ogg#1502202", "vo_dhbloodelfmale_main_battleshoutlarge_03.ogg#1502203", "vo_dhbloodelfmale_main_battleshoutlarge_04.ogg#1502204", "vo_dhbloodelfmale_main_battleshoutlarge_05.ogg#1502205", "vo_dhbloodelfmale_main_battleshoutlarge_06.ogg#1502206", "vo_dhbloodelfmale_main_battleshoutlarge_07.ogg#1502207", "vo_dhbloodelfmale_main_battleshoutlarge_08.ogg#1502208", "vo_dhbloodelfmale_main_battleshoutlarge_09.ogg#1502209", "vo_dhbloodelfmale_main_battleshoutlarge_010.ogg#1502210", "vo_dhbloodelfmale_main_battleshoutlarge_011.ogg#1502211",
|
|
|
|
-- Goblin (sound/character/goblinfemale, sound/character/pcgoblinmale)
|
|
"goblinfemale/vo_goblinfemale_main_battleshoutlarge_01.ogg#1385054", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_02.ogg#1385055", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_03.ogg#1385056", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_04.ogg#1385057", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_05.ogg#1385058", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_06.ogg#1385059", "goblinfemale/vo_goblinfemale_main_battleshoutlarge_07.ogg#1385060",
|
|
"pcgoblinmale/vo_goblinmale_main_battleshoutlarge_01.ogg#1385350", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_02.ogg#1385351", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_03.ogg#1385352", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_04.ogg#1385353", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_05.ogg#1385354", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_06.ogg#1385355", "pcgoblinmale/vo_goblinmale_main_battleshoutlarge_07.ogg#1385356",
|
|
|
|
-- Highmountain Tauren (sound/character/pc_-_highmountain_tauren_female, sound/character/pc_-_highmountain_tauren_male)
|
|
"vo_735_pc_-_highmountain_tauren_female_battleshout_01.ogg#1835373", "vo_735_pc_-_highmountain_tauren_female_battleshout_02.ogg#1835374", "vo_735_pc_-_highmountain_tauren_female_battleshout_03.ogg#1835375", "vo_735_pc_-_highmountain_tauren_female_battleshout_04.ogg#1835376", "vo_735_pc_-_highmountain_tauren_female_battleshout_05.ogg#1835377",
|
|
"vo_735_pc_-_highmountain_tauren_male_battleshout_01.ogg#1835438", "vo_735_pc_-_highmountain_tauren_male_battleshout_02.ogg#1835439", "vo_735_pc_-_highmountain_tauren_male_battleshout_03.ogg#1835440", "vo_735_pc_-_highmountain_tauren_male_battleshout_04.ogg#1835441", "vo_735_pc_-_highmountain_tauren_male_battleshout_05.ogg#1835442",
|
|
|
|
-- Mag'har Orc (sound/character/pc_maghar_orc_female, sound/character/pc_maghar_orc_male)
|
|
"vo_801_pc_maghar_orc_female_battleshout_01.ogg#2026032", "vo_801_pc_maghar_orc_female_battleshout_02.ogg#2026033", "vo_801_pc_maghar_orc_female_battleshout_03.ogg#2026034", "vo_801_pc_maghar_orc_female_battleshout_04.ogg#2026035", "vo_801_pc_maghar_orc_female_battleshout_05.ogg#2026036",
|
|
"vo_801_pc_maghar_orc_male_battleshout_01.ogg#2025879", "vo_801_pc_maghar_orc_male_battleshout_02.ogg#2025880", "vo_801_pc_maghar_orc_male_battleshout_03.ogg#2025881", "vo_801_pc_maghar_orc_male_battleshout_04.ogg#2025882", "vo_801_pc_maghar_orc_male_battleshout_05.ogg#2025883",
|
|
|
|
-- Nightborne (sound/character/pc_-_nightborne_elf_female, sound/character/pc_-_nightborne_elf_male)
|
|
"vo_735_pc_-_nightborne_elf_female_battleshout_01.ogg#1835708", "vo_735_pc_-_nightborne_elf_female_battleshout_02.ogg#1835709", "vo_735_pc_-_nightborne_elf_female_battleshout_03.ogg#1835711", "vo_735_pc_-_nightborne_elf_female_battleshout_04.ogg#1835712", "vo_735_pc_-_nightborne_elf_female_battleshout_05.ogg#1835713",
|
|
"vo_735_pc_-_nightborne_elf_male_battleshout_01.ogg#1835806", "vo_735_pc_-_nightborne_elf_male_battleshout_02.ogg#1835807", "vo_735_pc_-_nightborne_elf_male_battleshout_03.ogg#1835808", "vo_735_pc_-_nightborne_elf_male_battleshout_04.ogg#1835810", "vo_735_pc_-_nightborne_elf_male_battleshout_05.ogg#1835811",
|
|
|
|
-- Orc (sound/character/orc/female, sound/character/orc/orcmale)
|
|
"vo_orcfemale_main_battleshoutlarge_01.ogg#1385014", "vo_orcfemale_main_battleshoutlarge_02.ogg#1385015", "vo_orcfemale_main_battleshoutlarge_03.ogg#1385016", "vo_orcfemale_main_battleshoutlarge_04.ogg#1385017", "vo_orcfemale_main_battleshoutlarge_05.ogg#1385018", "vo_orcfemale_main_battleshoutlarge_06.ogg#1385019", "vo_orcfemale_main_battleshoutlarge_07.ogg#1385020",
|
|
"vo_orcmale_main_battleshoutlarge_01.ogg#1384088", "vo_orcmale_main_battleshoutlarge_02.ogg#1384089", "vo_orcmale_main_battleshoutlarge_03.ogg#1384090", "vo_orcmale_main_battleshoutlarge_04.ogg#1384091", "vo_orcmale_main_battleshoutlarge_05.ogg#1384092", "vo_orcmale_main_battleshoutlarge_06.ogg#1384093",
|
|
|
|
-- Tauren (sound/character/tauren/female, sound/character/playerexertions/taurenmalefinal)
|
|
"vo_taurenfemale_main_battleshoutlarge_01.ogg#1384942", "vo_taurenfemale_main_battleshoutlarge_02.ogg#1384943", "vo_taurenfemale_main_battleshoutlarge_03.ogg#1384944", "vo_taurenfemale_main_battleshoutlarge_04.ogg#1384945", "vo_taurenfemale_main_battleshoutlarge_05.ogg#1384946", "vo_taurenfemale_main_battleshoutlarge_06.ogg#1384947", "vo_taurenfemale_main_battleshoutlarge_07.ogg#1384948",
|
|
"vo_taurenmale_battleshoutlarge_01.ogg#1502087", "vo_taurenmale_battleshoutlarge_02.ogg#1502088", "vo_taurenmale_battleshoutlarge_03.ogg#1502089", "vo_taurenmale_battleshoutlarge_04.ogg#1502090", "vo_taurenmale_battleshoutlarge_05.ogg#1502091",
|
|
|
|
-- Troll (sound/character/playerexertions/trollfemalefinal, sound/character/playerexertions/trollmalefinal)
|
|
"trollfemalefinal/vo_trollfemale_battleshoutlarge_01.ogg#1502160", "trollfemalefinal/vo_trollfemale_battleshoutlarge_02.ogg#1502161", "trollfemalefinal/vo_trollfemale_battleshoutlarge_03.ogg#1502162", "trollfemalefinal/vo_trollfemale_battleshoutlarge_04.ogg#1502163", "trollfemalefinal/vo_trollfemale_battleshoutlarge_05.ogg#1502164",
|
|
"vo_trollmale_main_battleshoutlarge_01.ogg#1512813", "vo_trollmale_main_battleshoutlarge_02.ogg#1512814", "vo_trollmale_main_battleshoutlarge_03.ogg#1512815", "vo_trollmale_main_battleshoutlarge_04.ogg#1512816",
|
|
|
|
-- Undead (sound/character/scourge/scourgefemale, sound/character/playerexertions/undeadmalefinal)
|
|
"vo_undeadfemale_main_battleshoutlarge_01.ogg#1385487", "vo_undeadfemale_main_battleshoutlarge_02.ogg#1385488", "vo_undeadfemale_main_battleshoutlarge_03.ogg#1385489", "vo_undeadfemale_main_battleshoutlarge_04.ogg#1385490", "vo_undeadfemale_main_battleshoutlarge_05.ogg#1385491", "vo_undeadfemale_main_battleshoutlarge_06.ogg#1385492", "vo_undeadfemale_main_battleshoutlarge_07.ogg#1385493",
|
|
"vo_undeadmale_main_battleshoutlarge_01.ogg#1383691", "vo_undeadmale_main_battleshoutlarge_02.ogg#1383692", "vo_undeadmale_main_battleshoutlarge_03.ogg#1383693", "vo_undeadmale_main_battleshoutlarge_04.ogg#1383694", "vo_undeadmale_main_battleshoutlarge_05.ogg#1383695", "vo_undeadmale_main_battleshoutlarge_06.ogg#1383696", "vo_undeadmale_main_battleshoutlarge_07.ogg#1383697", "vo_undeadmale_main_battleshoutlarge_08.ogg#1383698", "vo_undeadmale_main_battleshoutlarge_09.ogg#1383699",
|
|
|
|
-- Vulpera (sound/character/pc_vulpera_female, sound/character/pc_vulpera_male)
|
|
"vo_83_pc_vulpera_female_battleshout_01.ogg#3188440", "vo_83_pc_vulpera_female_battleshout_02.ogg#3188441", "vo_83_pc_vulpera_female_battleshout_03.ogg#3188442", "vo_83_pc_vulpera_female_battleshout_04.ogg#3188443",
|
|
"vo_83_pc_vulpera_male_battleshout_01.ogg#3188670", "vo_83_pc_vulpera_male_battleshout_02.ogg#3188671", "vo_83_pc_vulpera_male_battleshout_03.ogg#3188672", "vo_83_pc_vulpera_male_battleshout_04.ogg#3188673", "vo_83_pc_vulpera_male_battleshout_05.ogg#3188674",
|
|
|
|
-- Zandalari Troll (sound/character/pc_zandalari_troll_female, sound/character/pc_zandalari_troll_male)
|
|
"vo_801_pc_-_zandalari_troll_female_battleshout_01.ogg#2735187", "vo_801_pc_-_zandalari_troll_female_battleshout_02.ogg#2735188", "vo_801_pc_-_zandalari_troll_female_battleshout_03.ogg#2735189", "vo_801_pc_-_zandalari_troll_female_battleshout_04.ogg#2735190", "vo_801_pc_-_zandalari_troll_female_battleshout_05.ogg#2735191",
|
|
"vo_801_pc_-_zandalari_troll_male_battleshout_01.ogg#2699280", "vo_801_pc_-_zandalari_troll_male_battleshout_02.ogg#2699281", "vo_801_pc_-_zandalari_troll_male_battleshout_03.ogg#2699282", "vo_801_pc_-_zandalari_troll_male_battleshout_04.ogg#2699283", "vo_801_pc_-_zandalari_troll_male_battleshout_05.ogg#2699284",
|
|
|
|
-- Pandaren (sound/character/pcpandarenfemale, sound/character/pcpandarenmale)
|
|
"vo_pandarenfemale_main_battleshoutlarge_01.ogg#1384044", "vo_pandarenfemale_main_battleshoutlarge_02.ogg#1384045", "vo_pandarenfemale_main_battleshoutlarge_03.ogg#1384046", "vo_pandarenfemale_main_battleshoutlarge_04.ogg#1384047", "vo_pandarenfemale_main_battleshoutlarge_05.ogg#1384048", "vo_pandarenfemale_main_battleshoutlarge_06.ogg#1384049", "vo_pandarenfemale_main_battleshoutlarge_07.ogg#1384050",
|
|
"vo_pandarenmale_main_battleshoutlarge_01.ogg#1384979", "vo_pandarenmale_main_battleshoutlarge_02.ogg#1384980", "vo_pandarenmale_main_battleshoutlarge_03.ogg#1384981", "vo_pandarenmale_main_battleshoutlarge_04.ogg#1384982", "vo_pandarenmale_main_battleshoutlarge_05.ogg#1384983", "vo_pandarenmale_main_battleshoutlarge_06.ogg#1384984", "vo_pandarenmale_main_battleshoutlarge_07.ogg#1384985",
|
|
|
|
},
|
|
|
|
-- Ban-LU
|
|
["MuteBanLu"] = {
|
|
|
|
-- Ban-Lu (sound/creature/ban-lu)
|
|
"vo_72_ban-lu_01_m.ogg#1593212", "vo_72_ban-lu_02_m.ogg#1593213", "vo_72_ban-lu_03_m.ogg#1593214", "vo_72_ban-lu_04_m.ogg#1593215", "vo_72_ban-lu_05_m.ogg#1593216", "vo_72_ban-lu_06_m.ogg#1593217", "vo_72_ban-lu_07_m.ogg#1593218", "vo_72_ban-lu_08_m.ogg#1593219", "vo_72_ban-lu_09_m.ogg#1593220", "vo_72_ban-lu_10_m.ogg#1593221", "vo_72_ban-lu_11_m.ogg#1593222", "vo_72_ban-lu_12_m.ogg#1593223", "vo_72_ban-lu_13_m.ogg#1593224", "vo_72_ban-lu_14_m.ogg#1593225", "vo_72_ban-lu_15_m.ogg#1593226", "vo_72_ban-lu_16_m.ogg#1593227", "vo_72_ban-lu_17_m.ogg#1593228", "vo_72_ban-lu_18_m.ogg#1593229", "vo_72_ban-lu_19_m.ogg#1593230", "vo_72_ban-lu_20_m.ogg#1593231", "vo_72_ban-lu_21_m.ogg#1593232", "vo_72_ban-lu_22_m.ogg#1593233", "vo_72_ban-lu_23_m.ogg#1593234", "vo_72_ban-lu_24_m.ogg#1593235", "vo_72_ban-lu_25_m.ogg#1593236",
|
|
|
|
},
|
|
|
|
|
|
-- Bikes
|
|
["MuteBikes"] = {
|
|
|
|
-- Mekgineer's Chopper/Mechano Hog/Chauffeured (sound/vehicles/motorcyclevehicle, sound/vehicles)
|
|
"motorcyclevehicleattackthrown.ogg#569858", "motorcyclevehiclejumpend1.ogg#569863", "motorcyclevehiclejumpend2.ogg#569857", "motorcyclevehiclejumpend3.ogg#569855", "motorcyclevehiclejumpstart1.ogg#569856", "motorcyclevehiclejumpstart2.ogg#569862", "motorcyclevehiclejumpstart3.ogg#569860", "motorcyclevehicleloadthrown.ogg#569861", "motorcyclevehiclestand.ogg#569859", "motorcyclevehiclewalkrun.ogg#569854", "vehicle_ground_gearshift_1.ogg#598748", "vehicle_ground_gearshift_2.ogg#598736", "vehicle_ground_gearshift_3.ogg#569852", "vehicle_ground_gearshift_4.ogg#598745", "vehicle_ground_gearshift_5.ogg#569845",
|
|
|
|
-- Alliance Chopper (sound/vehicles/veh_alliancechopper)
|
|
"veh_alliancechopper_revs01.ogg#1046321", "veh_alliancechopper_revs02.ogg#1046322", "veh_alliancechopper_revs03.ogg#1046323", "veh_alliancechopper_revs04.ogg#1046324", "veh_alliancechopper_revs05.ogg#1046325", "veh_alliancechopper_idle.ogg#1046320", "veh_alliancechopper_summon.ogg#1046327", "veh_alliancechopper_run_constant.ogg#1046326",
|
|
|
|
-- Horde Chopper (sound/vehicles)
|
|
"veh_hordechopper_rev01.ogg#1045061", "veh_hordechopper_rev02.ogg#1045062", "veh_hordechopper_rev03.ogg#1045063", "veh_hordechopper_rev04.ogg#1045064", "veh_hordechopper_rev05.ogg#1045065", "veh_hordechopper_idle.ogg#1046318", "veh_hordechopper_dismount.ogg#1045060", "veh_hordechopper_summon.ogg#1045070", "veh_hordechopper_jumpstart.ogg#1046319", "veh_hordechopper_run_constant.ogg#1045066", "veh_hordechopper_run_gearchange01.ogg#1045067", "veh_hordechopper_run_gearchange02.ogg#1045068", "veh_hordechopper_run_gearchange03.ogg#1045069",
|
|
|
|
-- Summon and dismount (sound/doodad)
|
|
"go_6ih_ironhorde_troopboat_open01.ogg#975574", "go_6ih_ironhorde_troopboat_open02.ogg#975576", "go_6ih_ironhorde_troopboat_open03.ogg#975578",
|
|
|
|
},
|
|
|
|
-- Balls
|
|
["MuteBalls"] = {
|
|
|
|
-- Foot Ball (sound/item/weapons/mace2h)
|
|
"2hmacehitstone1b.ogg#567794", "2hmacehitstone1c.ogg#567797", "2hmacehitstone1a.ogg#567804",
|
|
|
|
-- Net sound (sound/spells)
|
|
"sound/spells/thrownet.ogg#569368",
|
|
|
|
-- The Pigskin (sound/item/weapons/weaponswings) (not used currently as the sound is more common and probably not annoying)
|
|
-- "fx_whoosh_small_revamp_01.ogg#1302923", "fx_whoosh_small_revamp_02.ogg#1302924", "fx_whoosh_small_revamp_03.ogg#1302925", "fx_whoosh_small_revamp_04.ogg#1302926", "fx_whoosh_small_revamp_05.ogg#1302927", "fx_whoosh_small_revamp_06.ogg#1302928", "fx_whoosh_small_revamp_07.ogg#1302929", "fx_whoosh_small_revamp_08.ogg#1302930", "fx_whoosh_small_revamp_09.ogg#1302931", "fx_whoosh_small_revamp_10.ogg#1302932",
|
|
|
|
},
|
|
|
|
-- Vaults
|
|
["MuteVaults"] = {
|
|
|
|
-- Mechanical guild vault idle sound (such as those found in Booty Bay and Winterspring)
|
|
"sound/doodad/guildvault_goblin_01stand.ogg#566289",
|
|
|
|
},
|
|
|
|
-- Trains
|
|
["MuteTrains"] = {
|
|
|
|
--[[Blood Elf]] "sound#539219", "sound#539203", "sound#1313588", "sound#1306531",
|
|
--[[Draenei]] "sound#539516", "sound#539730",
|
|
--[[Dwarf]] "sound#539802", "sound#539881",
|
|
--[[Gnome]] "sound#540271", "sound#540275",
|
|
--[[Goblin]] "sound#541769", "sound#542017",
|
|
--[[Human]] "sound#540535", "sound#540734",
|
|
--[[Night Elf]] "sound#540870", "sound#540947", "sound#1316209", "sound#1304872",
|
|
--[[Orc]] "sound#541157", "sound#541239",
|
|
--[[Pandaren]] "sound#636621", "sound#630296", "sound#630298",
|
|
--[[Tauren]] "sound#542818", "sound#542896",
|
|
--[[Troll]] "sound#543085", "sound#543093",
|
|
--[[Undead]] "sound#542526", "sound#542600",
|
|
--[[Worgen]] "sound#542035", "sound#542206", "sound#541463", "sound#541601",
|
|
|
|
--[[Dark Iron]] "sound#1902030", "sound#1902543",
|
|
--[[Highmount]] "sound#1730534", "sound#1730908",
|
|
--[[Kul Tiran]] "sound#2531204", "sound#2491898",
|
|
--[[Lightforg]] "sound#1731282", "sound#1731656",
|
|
--[[MagharOrc]] "sound#1951457", "sound#1951458",
|
|
--[[Mechagnom]] "sound#3107651", "sound#3107182",
|
|
--[[Nightborn]] "sound#1732030", "sound#1732405",
|
|
--[[Void Elf]] "sound#1732785", "sound#1733163",
|
|
--[[Vulpera]] "sound#3106252", "sound#3106717",
|
|
--[[Zandalari]] "sound#1903049", "sound#1903522",
|
|
|
|
},
|
|
|
|
-- Hovercraft
|
|
["MuteHovercraft"] = {
|
|
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_drive01.ogg#1859976",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_enginesputter_pop_01.ogg#1859968",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_enginesputter_pop_02.ogg#1859967",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_enginesputter_pop_03.ogg#1859966",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_enginesputter_pop_04.ogg#1859965",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_fly.ogg#1859977",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_idle01.ogg#1859978",
|
|
"sound/creature/goblinhovercraft/mon_goblinhovercraft_mountspecial.ogg#2059826",
|
|
|
|
},
|
|
|
|
-- Mechsuits
|
|
["MuteMechsuits"] = {
|
|
|
|
-- Footsteps (sound/creature/goblinshredder/footstep_goblinshreddermount_general_)
|
|
"01.ogg#893935", "02.ogg#893937", "03.ogg#893939", "04.ogg#893941", "05.ogg#893943", "06.ogg#893945", "07.ogg#893947", "08.ogg#893949",
|
|
|
|
-- Flight start (sound/creature/goblinshredder/mon_goblinshredder_mount_flightstart_)
|
|
"01.ogg#898428", "02.ogg#898430", "03.ogg#898432", "04.ogg#898434", "05.ogg#898436",
|
|
|
|
-- Gears (sound/creature/goblinshredder/mon_goblinshredder_mount_gears_)
|
|
"01.ogg#899109", "02.ogg#899113", "03.ogg#899115", "04.ogg#899117", "05.ogg#899119", "06.ogg#899121", "07.ogg#899123", "08.ogg#899125", "09.ogg#899127", "010.ogg#899111",
|
|
|
|
-- Land (sound/creature/goblinshredder/mon_goblinshredder_mount_land_)
|
|
"01.ogg#899129", "02.ogg#899131", "03.ogg#899133", "04.ogg#899135", "05.ogg#899137",
|
|
|
|
-- Special (sound/creature/goblinshredder/mon_goblinshredder_mount_special_)
|
|
"01.ogg#898438", "02.ogg#898440", "03.ogg#898442", "04.ogg#898444", "05.ogg#898446",
|
|
|
|
-- Take flight gear shift (sound/creature/goblinshredder/mon_goblinshredder_mount_takeflightgearshift_)
|
|
"01.ogg#899139", "02.ogg#899141", "03.ogg#899143", "04.ogg#899145", "05.ogg#899147", "06.ogg#899149",
|
|
|
|
-- Take flight gear shift no boom (sound/creature/goblinshredder/mon_goblinshredder_mount_takeflightgearshiftnoboom_)
|
|
"01.ogg#903314", "02.ogg#903316", "03.ogg#903318", "04.ogg#903320", "05.ogg#903322", "06.ogg#903324",
|
|
|
|
-- General (sound/creature/goblinshredder/mon_goblinshredder_mount_)
|
|
"flightbackward_lp.ogg#898320", "flightend.ogg#899247", "flightidle_lp.ogg#898322", "flightleftright_lp.ogg#898324", "flightrun_lp.ogg#898326", "idlestand_lp.ogg#898328", "swim_lp.ogg#898330", "swimwaterlayer_lp.ogg#901303",
|
|
|
|
-- Engine loop (sound/creature/goblinshredder/)
|
|
"goblinshredderloop.ogg#550824",
|
|
|
|
-- Felsteel Annihilator (sound/doodad/)
|
|
"steamtankdrive.ogg#566270",
|
|
|
|
},
|
|
|
|
-- Ready check
|
|
["MuteReady"] = {
|
|
"sound/interface/levelup2.ogg#567478",
|
|
},
|
|
|
|
|
|
-- Jet Aerial Units (sound/creature/hunterkiller/)
|
|
["MuteAerials"] = {
|
|
"mon_hunterkiller_creature_exertion_01.ogg#2906076",
|
|
"mon_hunterkiller_creature_exertion_02.ogg#2906075",
|
|
"mon_hunterkiller_creature_exertion_03.ogg#2906074",
|
|
"mon_hunterkiller_creatureloop.ogg#2909111",
|
|
},
|
|
|
|
-- Events
|
|
["MuteEvents"] = {
|
|
|
|
-- Headless Horseman (sound/creature/headlesshorseman/)
|
|
"horseman_beckon_01.ogg#551670",
|
|
"horseman_bodydefeat_01.ogg#551706",
|
|
"horseman_bomb_01.ogg#551705",
|
|
"horseman_conflag_01.ogg#551686",
|
|
"horseman_death_01.ogg#551695",
|
|
"horseman_failing_01.ogg#551684",
|
|
"horseman_failing_02.ogg#551700",
|
|
"horseman_fire_01.ogg#551673",
|
|
"horseman_laugh_01.ogg#551703",
|
|
"horseman_laugh_02.ogg#551682",
|
|
"horseman_out_01.ogg#551680",
|
|
"horseman_request_01.ogg#551687",
|
|
"horseman_return_01.ogg#551698",
|
|
"horseman_slay_01.ogg#551676",
|
|
"horseman_special_01.ogg#551696",
|
|
|
|
},
|
|
|
|
-- Gyrocopters
|
|
["MuteGyrocopters"] = {
|
|
|
|
-- Mimiron's Head (sound/creature/mimironheadmount/)
|
|
"mimironheadmount_jumpend.ogg#595097",
|
|
"mimironheadmount_jumpstart.ogg#595103",
|
|
"mimironheadmount_run.ogg#555364",
|
|
"mimironheadmount_walk.ogg#595100",
|
|
|
|
-- Gyrocopter (such as Mecha-Mogul MK2) (sound/creature/gyrocopter/)
|
|
"gyrocopterfly.ogg#551390",
|
|
"gyrocopterflyidle.ogg#551398",
|
|
"gyrocopterflyup.ogg#551389",
|
|
"gyrocoptergearshift1.ogg#551384",
|
|
"gyrocoptergearshift2.ogg#551391",
|
|
"gyrocoptergearshift3.ogg#551387",
|
|
"gyrocopterjumpend.ogg#551396",
|
|
"gyrocopterjumpstart.ogg#551399",
|
|
"gyrocopterrun.ogg#551386",
|
|
"gyrocoptershuffleleftorright1.ogg#551385",
|
|
"gyrocoptershuffleleftorright2.ogg#551382",
|
|
"gyrocoptershuffleleftorright3.ogg#551392",
|
|
"gyrocopterstallinair.ogg#551395",
|
|
"gyrocopterstallinairlong.ogg#551394",
|
|
"gyrocopterstallongroundlong.ogg#551393",
|
|
"gyrocopterstand.ogg#551383",
|
|
"gyrocopterstandvar1_a.ogg#551388",
|
|
"gyrocopterstandvar1_b.ogg#551397",
|
|
"gyrocopterstandvar1_bnew.ogg#551400",
|
|
"gyrocopterstandvar1_bnew.ogg#551400",
|
|
|
|
-- Gear shift sounds (sound/vehicles/)
|
|
"vehicle_airplane_gearshift_1.ogg#569846",
|
|
"vehicle_airplane_gearshift_2.ogg#598739",
|
|
"vehicle_airplane_gearshift_3.ogg#569851",
|
|
"vehicle_airplane_gearshift_4.ogg#598742",
|
|
"vehicle_airplane_gearshift_5.ogg#598733",
|
|
"vehicle_airplane_gearshift_6.ogg#569850",
|
|
|
|
-- Gyrocopter summon (also used with bikes)
|
|
-- "sound/spells/summongyrocopter.ogg#568252",
|
|
|
|
},
|
|
|
|
-- Unicorns (sound/creature/hornedhorse/)
|
|
["MuteUnicorns"] = {
|
|
"mon_hornedhorse_chuff_01.ogg#1489497",
|
|
"mon_hornedhorse_chuff_02.ogg#1489498",
|
|
"mon_hornedhorse_chuff_03.ogg#1489499",
|
|
"mon_hornedhorse_mountspecial_01.ogg#1489503",
|
|
"mon_hornedhorse_mountspecial_02.ogg#1489504",
|
|
"mon_hornedhorse_mountspecial_03.ogg#1489505",
|
|
"mon_hornedhorse_preaggro_01.ogg#1489506",
|
|
"mon_hornedhorse_preaggro_02.ogg#1489507",
|
|
"mon_hornedhorse_preaggro_03.ogg#1489508",
|
|
"mon_hornedhorse_preaggro_04.ogg#1489509",
|
|
"mon_hornedhorse_aggro_01.ogg#1489484",
|
|
"mon_hornedhorse_aggro_02.ogg#1489485",
|
|
"mon_hornedhorse_aggro_03.ogg#1489486",
|
|
"mon_hornedhorse_wound_01.ogg#1489510",
|
|
"mon_hornedhorse_wound_02.ogg#1489511",
|
|
"mon_hornedhorse_wound_03.ogg#1489512",
|
|
"mon_hornedhorse_wound_04.ogg#1489513",
|
|
"mon_hornedhorse_wound_05.ogg#1489514",
|
|
"mon_hornedhorse_wound_06.ogg#1489515",
|
|
"mon_hornedhorse_wound_07.ogg#1489516",
|
|
"mon_hornedhorse_woundcrit_01.ogg#1489517",
|
|
"mon_hornedhorse_woundcrit_02.ogg#1489518",
|
|
"mon_hornedhorse_woundcrit_03.ogg#1489519",
|
|
"mon_hornedhorse_woundcrit_04.ogg#1489520",
|
|
|
|
},
|
|
|
|
-- Singing Sunflower (sound/event/)
|
|
["MuteSunflower"] = {
|
|
"event_pvz_babbling.ogg#567354",
|
|
"event_pvz_dadadoo.ogg#567327",
|
|
"event_pvz_doobeedoo.ogg#567317",
|
|
"event_pvz_lalala.ogg#567338",
|
|
"event_pvz_sunflower.ogg#567374",
|
|
"event_pvz_zombieonyourlawn.ogg#567295",
|
|
},
|
|
|
|
-- Rockets (sound/creature/rocketmount/)
|
|
["MuteRockets"] = {
|
|
"rocketmountfly.ogg#595154",
|
|
"rocketmountjumpland1.ogg#559355",
|
|
"rocketmountjumpland2.ogg#559352",
|
|
"rocketmountjumpland3.ogg#559353",
|
|
"rocketmountshuffleleft_right1.ogg#595151",
|
|
"rocketmountshuffleleft_right2.ogg#595163",
|
|
"rocketmountshuffleleft_right3.ogg#595160",
|
|
"rocketmountshuffleleft_right4.ogg#595157",
|
|
"rocketmountstand_idle.ogg#559354",
|
|
"rocketmountwalk.ogg#595148",
|
|
"rocketmountwalkup.ogg#559351",
|
|
},
|
|
|
|
-- Soulseekers (Corridor Creeper, etc)
|
|
["MuteSoulseekers"] = {
|
|
|
|
-- sound/creature/mawsworn
|
|
"mon_mawsworn_loop_01_171773.ogg#3747229",
|
|
"mon_mawsworn_loop_02_171773.ogg#3747231",
|
|
"mon_mawsworn_loop_03_171773.ogg#3747239",
|
|
|
|
-- sound/creature/jailerhound
|
|
"mon_jailerhound_aggro_00_158899.ogg#3603946",
|
|
"mon_jailerhound_aggro_01_158899.ogg#3603947",
|
|
"mon_jailerhound_aggro_02_158899.ogg#3603948",
|
|
"mon_jailerhound_alert_00_158898.ogg#3603962",
|
|
"mon_jailerhound_alert_01_158898.ogg#3603963",
|
|
"mon_jailerhound_alert_02_158898.ogg#3603964",
|
|
|
|
-- sound/creature/talethi's_target
|
|
"mon_talethi's_target_fidget01_01_168902.ogg#3745490",
|
|
"mon_talethi's_target_fidget01_02_168902.ogg#3745492",
|
|
"mon_talethi's_target_fidget01_03_168902.ogg#3745494",
|
|
"mon_talethi's_target_fidget01_04_168902.ogg#3745496",
|
|
"mon_talethi's_target_fidget01_05_168902.ogg#3745498",
|
|
"mon_talethi's_target_fidget01_06_168902.ogg#3745500",
|
|
"mon_talethi's_target_fidget01_07_168902.ogg#3745502",
|
|
"mon_talethi's_target_fidget01_08_168902.ogg#3745504",
|
|
"mon_talethi's_target_fidget01_09_168902.ogg#3745506",
|
|
"mon_talethi's_target_fidget01_10_168902.ogg#3745508",
|
|
"mon_talethi's_target_fidget01_11_168902.ogg#3745510",
|
|
"mon_talethi's_target_fidget01_12_168902.ogg#3745512",
|
|
"mon_talethi's_target_fidget01_13_168902.ogg#3745514",
|
|
"mon_talethi's_target_fidget01_14_168902.ogg#3745516",
|
|
"mon_talethi's_target_fidget01_15_168902.ogg#3745518",
|
|
"mon_talethi's_target_fidget01_16_168902.ogg#3745520",
|
|
},
|
|
|
|
}
|
|
|
|
-- Give table file level scope (its used during logout and for wipe and admin commands)
|
|
LeaPlusLC["muteTable"] = muteTable
|
|
|
|
-- Load saved settings or set default values
|
|
for k, v in pairs(muteTable) do
|
|
if LeaPlusDB[k] and type(LeaPlusDB[k]) == "string" and LeaPlusDB[k] == "On" or LeaPlusDB[k] == "Off" then
|
|
LeaPlusLC[k] = LeaPlusDB[k]
|
|
else
|
|
LeaPlusLC[k] = "Off"
|
|
LeaPlusDB[k] = "Off"
|
|
end
|
|
end
|
|
|
|
-- Create configuration panel
|
|
local SoundPanel = LeaPlusLC:CreatePanel("Mute game sounds", "SoundPanel")
|
|
|
|
-- Add checkboxes
|
|
LeaPlusLC:MakeTx(SoundPanel, "General", 16, -72)
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteFizzle", "Fizzle", 16, -92, false, "If checked, the spell fizzle sounds will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteInterface", "Interface", 16, -112, false, "If checked, the interface button sound, the chat frame tab click sound and the game menu toggle sound will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteSniffing", "Sniffing", 16, -132, false, "If checked, the worgen sniffing sounds will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteTrains", "Trains", 16, -152, false, "If checked, train sounds will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteBalls", "Balls", 16, -172, false, "If checked, the Foot Ball sounds will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteEvents", "Events", 16, -192, false, "If checked, holiday event sounds will be muted.|n|nThis applies to Headless Horseman.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteVaults", "Vaults", 16, -212, false, "If checked, the mechanical guild vault idle sound will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteReady", "Ready", 16, -232, false, "If checked, the ready check sound will be muted.")
|
|
|
|
LeaPlusLC:MakeTx(SoundPanel, "Mounts", 140, -72)
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteBikes", "Bikes", 140, -92, false, "If checked, most of the bike mount sounds will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteTravelers", "Travelers", 140, -112, false, "If checked, traveling merchant greetings and farewells will be muted.|n|nThis applies to Traveler's Tundra Mammoth, Grand Expedition Yak and Mighty Caravan Brutosaur.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteUnicorns", "Unicorns", 140, -132, false, "If checked, unicorns will be quieter.|n|nThis applies to Lucid Nightmare, Wild Dreamrunner, Pureheart Courser and other unicorn mounts.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteGyrocopters", "Gyrocopters", 140, -152, false, "If checked, gyrocopters will be muted.|n|nThis applies to Mimiron's Head, Mecha-Mogul MK2 and other gyrocopter mounts.|n|nEnabling this option will also mute airplane gear shift sounds.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteRockets", "Rockets", 140, -172, false, "If checked, rockets will be muted.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteMechsuits", "Mechsuits", 140, -192, false, "If checked, mechsuits will be quieter.|n|nThis applies to Felsteel Annihilator, Lightforged Warframe, Sky Golem and other mechsuits.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteAerials", "Aerials", 140, -212, false, "If checked, jet aerial units will be quieter.|n|nThis applies to Aerial Unit R-21X and Rustbolt Resistor.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteHovercraft", "Hovercraft", 140, -232, false, "If checked, hovercraft will be quieter.|n|nThis applies to Xiwyllag ATV.")
|
|
|
|
LeaPlusLC:MakeTx(SoundPanel, "Mounts", 264, -72)
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteSoulseekers", "Soulseekers", 264, -92, false, "If checked, soulseekers will be quieter.|n|nThis applies to Corridor Creeper, Mawsworn Soulhunter and Bound Shadehound.")
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteBanLu", "Ban-Lu", 264, -112, false, "If checked, Ban-Lu will no longer talk to you.")
|
|
|
|
LeaPlusLC:MakeTx(SoundPanel, "Pets", 388, -72)
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteSunflower", "Sunflower", 388, -92, false, "If checked, the Singing Sunflower pet will be muted.")
|
|
|
|
LeaPlusLC:MakeTx(SoundPanel, "Combat", 388, -132)
|
|
LeaPlusLC:MakeCB(SoundPanel, "MuteBattleShouts", "Shouts", 388, -152, false, "If checked, battle shouts heard when casting specific spells will be muted.")
|
|
|
|
-- Set click width for sounds checkboxes
|
|
for k, v in pairs(muteTable) do
|
|
LeaPlusCB[k].f:SetWidth(80)
|
|
if LeaPlusCB[k].f:GetStringWidth() > 80 then
|
|
LeaPlusCB[k]:SetHitRectInsets(0, -70, 0, 0)
|
|
else
|
|
LeaPlusCB[k]:SetHitRectInsets(0, -LeaPlusCB[k].f:GetStringWidth() + 4, 0, 0)
|
|
end
|
|
end
|
|
|
|
-- Function to mute and unmute sounds
|
|
local function SetupMute()
|
|
for k, v in pairs(muteTable) do
|
|
if LeaPlusLC["MuteGameSounds"] == "On" and LeaPlusLC[k] == "On" then
|
|
for i, e in pairs(v) do
|
|
local file, soundID = e:match("([^,]+)%#([^,]+)")
|
|
MuteSoundFile(soundID)
|
|
end
|
|
else
|
|
for i, e in pairs(v) do
|
|
local file, soundID = e:match("([^,]+)%#([^,]+)")
|
|
UnmuteSoundFile(soundID)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Setup mute on startup if option is enabled
|
|
if LeaPlusLC["MuteGameSounds"] == "On" then SetupMute() end
|
|
|
|
-- Setup mute when options are clicked
|
|
for k, v in pairs(muteTable) do
|
|
LeaPlusCB[k]:HookScript("OnClick", SetupMute)
|
|
end
|
|
LeaPlusCB["MuteGameSounds"]:HookScript("OnClick", SetupMute)
|
|
|
|
-- Help button hidden
|
|
SoundPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
SoundPanel.b:SetScript("OnClick", function()
|
|
SoundPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page7"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
SoundPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset checkboxes
|
|
for k, v in pairs(muteTable) do
|
|
LeaPlusLC[k] = "Off"
|
|
end
|
|
SetupMute()
|
|
|
|
-- Refresh panel
|
|
SoundPanel:Hide(); SoundPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show panal when options panel button is clicked
|
|
LeaPlusCB["MuteGameSoundsBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
for k, v in pairs(muteTable) do
|
|
LeaPlusLC[k] = "On"
|
|
end
|
|
LeaPlusLC["MuteReady"] = "Off"
|
|
SetupMute()
|
|
else
|
|
SoundPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Save profession filters
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["SaveProfFilters"] == "On" then
|
|
|
|
-- Main function
|
|
local function SetProfFilterFunc()
|
|
|
|
local ts = {}
|
|
|
|
local tradeEvent = CreateFrame("FRAME")
|
|
tradeEvent:RegisterEvent("TRADE_SKILL_DATA_SOURCE_CHANGED")
|
|
tradeEvent:SetScript("OnEvent", function()
|
|
|
|
-- Do nothing if trade skill UI is not open and loaded
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
|
|
-- Get current trade skill
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if not tradeSkillID then return end
|
|
|
|
-- Set has materials checkbox
|
|
if ts["TradeSkillShowOnlyHasMaterials" .. tradeSkillID] then
|
|
C_TradeSkillUI.SetOnlyShowMakeableRecipes(ts["TradeSkillShowOnlyHasMaterials" .. tradeSkillID])
|
|
else
|
|
C_TradeSkillUI.SetOnlyShowMakeableRecipes(false)
|
|
end
|
|
|
|
-- Set has skill up checkbox
|
|
if ts["TradeSkillShowOnlySkillUps" .. tradeSkillID] then
|
|
C_TradeSkillUI.SetOnlyShowSkillUpRecipes(ts["TradeSkillShowOnlySkillUps" .. tradeSkillID])
|
|
else
|
|
C_TradeSkillUI.SetOnlyShowSkillUpRecipes(false)
|
|
end
|
|
|
|
-- Set slots filter
|
|
if ts["TradeSkillInventorySlot" .. tradeSkillID] then
|
|
C_TradeSkillUI.SetInventorySlotFilter(ts["TradeSkillInventorySlot" .. tradeSkillID], true, true)
|
|
end
|
|
|
|
-- Set category filter
|
|
if ts["TradeSkillRecipeCategory" .. tradeSkillID] then
|
|
C_TradeSkillUI.SetRecipeCategoryFilter(ts["TradeSkillRecipeCategory" .. tradeSkillID], ts["TradeSkillRecipeSubCategory" .. tradeSkillID])
|
|
end
|
|
|
|
-- Set source filter
|
|
local numSources = C_PetJournal.GetNumPetSources()
|
|
if numSources then
|
|
for i = 1, numSources do
|
|
if ts["TradeSkillSource" .. tradeSkillID .. i] then
|
|
C_TradeSkillUI.SetRecipeSourceTypeFilter(i, ts["TradeSkillSource" .. tradeSkillID .. i])
|
|
else
|
|
C_TradeSkillUI.SetRecipeSourceTypeFilter(i, false)
|
|
end
|
|
end
|
|
end
|
|
|
|
end)
|
|
|
|
-- Save has materials checkbox
|
|
hooksecurefunc(C_TradeSkillUI, "SetOnlyShowMakeableRecipes", function(state)
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillShowOnlyHasMaterials" .. tradeSkillID] = state
|
|
end
|
|
end)
|
|
|
|
-- Save has skill up checkbox
|
|
hooksecurefunc(C_TradeSkillUI, "SetOnlyShowSkillUpRecipes", function(state)
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillShowOnlySkillUps" .. tradeSkillID] = state
|
|
end
|
|
end)
|
|
|
|
-- Save slots filter
|
|
hooksecurefunc(C_TradeSkillUI, "SetInventorySlotFilter", function(state)
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillInventorySlot" .. tradeSkillID] = state
|
|
end
|
|
end)
|
|
|
|
-- Save category filter
|
|
hooksecurefunc(C_TradeSkillUI, "SetRecipeCategoryFilter", function(categoryID, subCategoryID)
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
if categoryID then
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillRecipeCategory" .. tradeSkillID] = categoryID
|
|
ts["TradeSkillRecipeSubCategory" .. tradeSkillID] = subCategoryID
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Save source filter
|
|
hooksecurefunc(C_TradeSkillUI, "SetRecipeSourceTypeFilter", function(sourceType, filtered)
|
|
if not C_TradeSkillUI.IsTradeSkillReady() then return end
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillSource" .. tradeSkillID .. sourceType] = filtered
|
|
end
|
|
end)
|
|
|
|
-- Clear some settings when filter bar is closed
|
|
TradeSkillFrame.RecipeList.FilterBar.ExitButton:HookScript("OnClick", function()
|
|
local tradeSkillID = C_TradeSkillUI.GetTradeSkillLine()
|
|
if tradeSkillID then
|
|
ts["TradeSkillRecipeCategory" .. tradeSkillID] = nil -- Category
|
|
ts["TradeSkillRecipeSubCategory" .. tradeSkillID] = nil -- Subcategory
|
|
ts["TradeSkillInventorySlot" .. tradeSkillID] = nil -- Slots
|
|
-- Clear sources
|
|
local numSources = C_PetJournal.GetNumPetSources()
|
|
if numSources then
|
|
for i = 1, numSources do
|
|
ts["TradeSkillSource" .. tradeSkillID .. i] = nil
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Clear some settings on startup
|
|
C_TradeSkillUI.SetOnlyShowMakeableRecipes(false) -- Has materials
|
|
C_TradeSkillUI.SetOnlyShowSkillUpRecipes(false) -- Has skill up
|
|
C_TradeSkillUI.ClearRecipeSourceTypeFilter() -- Sources
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_TradeSkillUI") then
|
|
SetProfFilterFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_TradeSkillUI" then
|
|
SetProfFilterFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Faster movie skip
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["FasterMovieSkip"] == "On" then
|
|
|
|
-- Allow space bar, escape key and enter key to cancel cinematic without confirmation
|
|
CinematicFrame:HookScript("OnKeyDown", function(self, key)
|
|
if key == "ESCAPE" then
|
|
if CinematicFrame:IsShown() and CinematicFrame.closeDialog and CinematicFrameCloseDialogConfirmButton then
|
|
CinematicFrameCloseDialog:Hide()
|
|
end
|
|
end
|
|
end)
|
|
CinematicFrame:HookScript("OnKeyUp", function(self, key)
|
|
if key == "SPACE" or key == "ESCAPE" or key == "ENTER" then
|
|
if CinematicFrame:IsShown() and CinematicFrame.closeDialog and CinematicFrameCloseDialogConfirmButton then
|
|
CinematicFrameCloseDialogConfirmButton:Click()
|
|
end
|
|
end
|
|
end)
|
|
MovieFrame:HookScript("OnKeyUp", function(self, key)
|
|
if key == "SPACE" or key == "ESCAPE" or key == "ENTER" then
|
|
if MovieFrame:IsShown() and MovieFrame.CloseDialog and MovieFrame.CloseDialog.ConfirmButton then
|
|
MovieFrame.CloseDialog.ConfirmButton:Click()
|
|
end
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Unclamp chat frame
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["UnclampChat"] == "On" then
|
|
|
|
-- Process normal and existing chat frames on startup
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
_G["ChatFrame" .. i]:SetClampRectInsets(0, 0, 0, 0);
|
|
end
|
|
end
|
|
|
|
-- Process new chat frames and combat log
|
|
hooksecurefunc("FloatingChatFrame_UpdateBackgroundAnchors", function(self)
|
|
self:SetClampRectInsets(0, 0, 0, 0);
|
|
end)
|
|
|
|
-- Process temporary chat frames
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
_G[cf]:SetClampRectInsets(0, 0, 0, 0);
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Wowhead Links
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowWowheadLinks"] == "On" then
|
|
|
|
-- Get localised Wowhead URL
|
|
local wowheadLoc
|
|
if GameLocale == "deDE" then wowheadLoc = "de.wowhead.com"
|
|
elseif GameLocale == "esMX" then wowheadLoc = "es.wowhead.com"
|
|
elseif GameLocale == "esES" then wowheadLoc = "es.wowhead.com"
|
|
elseif GameLocale == "frFR" then wowheadLoc = "fr.wowhead.com"
|
|
elseif GameLocale == "itIT" then wowheadLoc = "it.wowhead.com"
|
|
elseif GameLocale == "ptBR" then wowheadLoc = "pt.wowhead.com"
|
|
elseif GameLocale == "ruRU" then wowheadLoc = "ru.wowhead.com"
|
|
elseif GameLocale == "koKR" then wowheadLoc = "ko.wowhead.com"
|
|
elseif GameLocale == "zhCN" then wowheadLoc = "cn.wowhead.com"
|
|
elseif GameLocale == "zhTW" then wowheadLoc = "cn.wowhead.com"
|
|
else wowheadLoc = "wowhead.com"
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Achievements frame
|
|
----------------------------------------------------------------------
|
|
|
|
-- Achievement link function
|
|
local function DoWowheadAchievementFunc()
|
|
|
|
-- Create editbox
|
|
local aEB = CreateFrame("EditBox", nil, AchievementFrame)
|
|
aEB:ClearAllPoints()
|
|
aEB:SetPoint("BOTTOMRIGHT", -50, 1)
|
|
aEB:SetHeight(16)
|
|
aEB:SetFontObject("GameFontNormalSmall")
|
|
aEB:SetBlinkSpeed(0)
|
|
aEB:SetJustifyH("RIGHT")
|
|
aEB:SetAutoFocus(false)
|
|
aEB:EnableKeyboard(false)
|
|
aEB:SetHitRectInsets(90, 0, 0, 0)
|
|
aEB:SetScript("OnKeyDown", function() end)
|
|
aEB:SetScript("OnMouseUp", function()
|
|
if aEB:IsMouseOver() then
|
|
aEB:HighlightText()
|
|
else
|
|
aEB:HighlightText(0, 0)
|
|
end
|
|
end)
|
|
|
|
-- Create hidden font string (used for setting width of editbox)
|
|
aEB.z = aEB:CreateFontString(nil, 'ARTWORK', 'GameFontNormalSmall')
|
|
aEB.z:Hide()
|
|
|
|
-- Store last link in case editbox is cleared
|
|
local lastAchievementLink
|
|
|
|
-- Function to set editbox value
|
|
hooksecurefunc("AchievementFrameAchievements_SelectButton", function(self)
|
|
local achievementID = self.id or nil
|
|
if achievementID then
|
|
-- Set editbox text
|
|
aEB:SetText("https://" .. wowheadLoc .. "/achievement=" .. achievementID)
|
|
lastAchievementLink = aEB:GetText()
|
|
-- Set hidden fontstring then resize editbox to match
|
|
aEB.z:SetText(aEB:GetText())
|
|
aEB:SetWidth(aEB.z:GetStringWidth() + 90)
|
|
-- Get achievement title for tooltip
|
|
local achievementLink = GetAchievementLink(self.id)
|
|
if achievementLink then
|
|
aEB.tiptext = achievementLink:match("%[(.-)%]") .. "|n" .. L["Press CTRL/C to copy."]
|
|
end
|
|
-- Show the editbox
|
|
aEB:Show()
|
|
end
|
|
end)
|
|
|
|
-- Create tooltip
|
|
aEB:HookScript("OnEnter", function()
|
|
aEB:HighlightText()
|
|
aEB:SetFocus()
|
|
GameTooltip:SetOwner(aEB, "ANCHOR_TOP", 0, 10)
|
|
GameTooltip:SetText(aEB.tiptext, nil, nil, nil, nil, true)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
aEB:HookScript("OnLeave", function()
|
|
-- Set link text again if it's changed since it was set
|
|
if aEB:GetText() ~= lastAchievementLink then aEB:SetText(lastAchievementLink) end
|
|
aEB:HighlightText(0, 0)
|
|
aEB:ClearFocus()
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
-- Hide editbox when achievement is deselected
|
|
hooksecurefunc("AchievementFrameAchievements_ClearSelection", function(self) aEB:Hide() end)
|
|
hooksecurefunc("AchievementCategoryButton_OnClick", function(self) aEB:Hide() end)
|
|
|
|
end
|
|
|
|
-- Run function when achievement UI is loaded
|
|
if IsAddOnLoaded("Blizzard_AchievementUI") then
|
|
DoWowheadAchievementFunc()
|
|
else
|
|
local waitAchievementsFrame = CreateFrame("FRAME")
|
|
waitAchievementsFrame:RegisterEvent("ADDON_LOADED")
|
|
waitAchievementsFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_AchievementUI" then
|
|
DoWowheadAchievementFunc()
|
|
waitAchievementsFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- World map frame
|
|
----------------------------------------------------------------------
|
|
|
|
-- Hide the title text
|
|
WorldMapFrameTitleText:Hide()
|
|
|
|
-- Create editbox
|
|
local mEB = CreateFrame("EditBox", nil, WorldMapFrame.BorderFrame)
|
|
mEB:ClearAllPoints()
|
|
mEB:SetPoint("TOPLEFT", 100, -4)
|
|
mEB:SetHeight(16)
|
|
mEB:SetFontObject("GameFontNormal")
|
|
mEB:SetBlinkSpeed(0)
|
|
mEB:SetAutoFocus(false)
|
|
mEB:EnableKeyboard(false)
|
|
mEB:SetHitRectInsets(0, 90, 0, 0)
|
|
mEB:SetScript("OnKeyDown", function() end)
|
|
mEB:SetScript("OnMouseUp", function()
|
|
if mEB:IsMouseOver() then
|
|
mEB:HighlightText()
|
|
else
|
|
mEB:HighlightText(0, 0)
|
|
end
|
|
end)
|
|
|
|
-- Create hidden font string (used for setting width of editbox)
|
|
mEB.z = mEB:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
mEB.z:Hide()
|
|
|
|
-- Function to set editbox value
|
|
local function SetQuestInBox()
|
|
local questID
|
|
if QuestMapFrame.DetailsFrame:IsShown() then
|
|
-- Get quest ID from currently showing quest in details panel
|
|
questID = QuestMapFrame_GetDetailQuestID()
|
|
else
|
|
-- Get quest ID from currently selected quest on world map
|
|
questID = C_SuperTrack.GetSuperTrackedQuestID()
|
|
end
|
|
if questID then
|
|
-- Hide editbox if quest ID is invalid
|
|
if questID == 0 then mEB:Hide() else mEB:Show() end
|
|
-- Set editbox text
|
|
mEB:SetText("https://" .. wowheadLoc .. "/quest=" .. questID)
|
|
-- Set hidden fontstring then resize editbox to match
|
|
mEB.z:SetText(mEB:GetText())
|
|
mEB:SetWidth(mEB.z:GetStringWidth() + 90)
|
|
-- Get quest title for tooltip
|
|
local questLink = GetQuestLink(questID) or nil
|
|
if questLink then
|
|
mEB.tiptext = questLink:match("%[(.-)%]") .. "|n" .. L["Press CTRL/C to copy."]
|
|
else
|
|
mEB.tiptext = ""
|
|
if mEB:IsMouseOver() and GameTooltip:IsShown() then GameTooltip:Hide() end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Set URL when super tracked quest changes and on startup
|
|
mEB:RegisterEvent("SUPER_TRACKING_CHANGED")
|
|
mEB:SetScript("OnEvent", SetQuestInBox)
|
|
SetQuestInBox()
|
|
|
|
-- Set URL when quest details frame is shown or hidden
|
|
hooksecurefunc("QuestMapFrame_ShowQuestDetails", SetQuestInBox)
|
|
hooksecurefunc("QuestMapFrame_CloseQuestDetails", SetQuestInBox)
|
|
|
|
-- Create tooltip
|
|
mEB:HookScript("OnEnter", function()
|
|
mEB:HighlightText()
|
|
mEB:SetFocus()
|
|
GameTooltip:SetOwner(mEB, "ANCHOR_BOTTOM", 0, -10)
|
|
GameTooltip:SetText(mEB.tiptext, nil, nil, nil, nil, true)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
mEB:HookScript("OnLeave", function()
|
|
mEB:HighlightText(0, 0)
|
|
mEB:ClearFocus()
|
|
GameTooltip:Hide()
|
|
SetQuestInBox()
|
|
end)
|
|
|
|
-- Function to move Wowhead link frame if Leatrix Maps is installed with Remove map border enabled
|
|
local function MoveWowheadLinks()
|
|
if LeaMapsDB and LeaMapsDB["NoMapBorder"] and LeaMapsDB["NoMapBorder"] == "On" then
|
|
mEB:SetParent(WorldMapFrame)
|
|
mEB:ClearAllPoints()
|
|
mEB:SetPoint("TOPLEFT", WorldMapFrame, "TOPLEFT", 4, -64)
|
|
mEB:SetFontObject("GameFontNormalSmall")
|
|
mEB:SetFrameStrata("HIGH")
|
|
mEB:SetAlpha(0.5)
|
|
end
|
|
end
|
|
|
|
-- Run function when Leatrix Maps is loaded
|
|
if IsAddOnLoaded("Leatrix_Maps") then
|
|
MoveWowheadLinks()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Leatrix_Maps" then
|
|
MoveWowheadLinks()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Enhance dressup
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["EnhanceDressup"] == "On" then
|
|
|
|
----------------------------------------------------------------------
|
|
-- Nude and tabard buttons
|
|
----------------------------------------------------------------------
|
|
|
|
-- Add buttons to main dressup frames
|
|
LeaPlusLC:CreateButton("DressUpNudeBtn", DressUpFrame, "Nude", "BOTTOMLEFT", 106, 79, 80, 22, false, "")
|
|
LeaPlusCB["DressUpNudeBtn"]:ClearAllPoints()
|
|
LeaPlusCB["DressUpNudeBtn"]:SetPoint("RIGHT", DressUpFrameResetButton, "LEFT", 0, 0)
|
|
LeaPlusCB["DressUpNudeBtn"]:SetScript("OnClick", function()
|
|
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
|
|
playerActor:Undress()
|
|
end)
|
|
|
|
LeaPlusLC:CreateButton("DressUpTabBtn", DressUpFrame, "Tabard", "BOTTOMLEFT", 26, 79, 80, 22, false, "")
|
|
LeaPlusCB["DressUpTabBtn"]:ClearAllPoints()
|
|
LeaPlusCB["DressUpTabBtn"]:SetPoint("RIGHT", LeaPlusCB["DressUpNudeBtn"], "LEFT", 0, 0)
|
|
LeaPlusCB["DressUpTabBtn"]:SetScript("OnClick", function()
|
|
local playerActor = DressUpFrame.ModelScene:GetPlayerActor()
|
|
playerActor:UndressSlot(19)
|
|
end)
|
|
|
|
-- Only show dressup buttons if its a player (reset button will show too)
|
|
hooksecurefunc(DressUpFrameResetButton, "Show", function()
|
|
LeaPlusCB["DressUpNudeBtn"]:Show()
|
|
LeaPlusCB["DressUpTabBtn"]:Show()
|
|
end)
|
|
|
|
hooksecurefunc(DressUpFrameResetButton, "Hide", function()
|
|
LeaPlusCB["DressUpNudeBtn"]:Hide()
|
|
LeaPlusCB["DressUpTabBtn"]:Hide()
|
|
end)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Controls
|
|
----------------------------------------------------------------------
|
|
|
|
-- Hide controls for character sheet
|
|
CharacterModelFrameControlFrame:HookScript("OnShow", function()
|
|
CharacterModelFrameControlFrame:Hide()
|
|
end)
|
|
|
|
-- Hide controls for dressing room
|
|
DressUpFrame.ModelScene.ControlFrame:HookScript("OnShow", DressUpFrame.ModelScene.ControlFrame.Hide)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Wardrobe and inspect system
|
|
----------------------------------------------------------------------
|
|
|
|
-- Wardrobe (used by transmogrifier NPC)
|
|
local function DoBlizzardCollectionsFunc()
|
|
-- Hide positioning controls
|
|
WardrobeTransmogFrame.ModelScene.ControlFrame:HookScript("OnShow", WardrobeTransmogFrame.ModelScene.ControlFrame.Hide)
|
|
end
|
|
|
|
if IsAddOnLoaded("Blizzard_Collections") then
|
|
DoBlizzardCollectionsFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_Collections" then
|
|
DoBlizzardCollectionsFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- Inspect System
|
|
local function DoInspectSystemFunc()
|
|
-- Hide positioning controls
|
|
InspectModelFrameControlFrame:HookScript("OnShow", InspectModelFrameControlFrame.Hide)
|
|
end
|
|
|
|
if IsAddOnLoaded("Blizzard_InspectUI") then
|
|
DoInspectSystemFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_InspectUI" then
|
|
DoInspectSystemFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automate gossip (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to skip gossip
|
|
local function SkipGossip()
|
|
if not IsAltKeyDown() then return end
|
|
local gossipInfoTable = C_GossipInfo.GetOptions()
|
|
if gossipInfoTable[1].type == "gossip" then
|
|
C_GossipInfo.SelectOption(1)
|
|
end
|
|
end
|
|
|
|
-- Create gossip event frame
|
|
local gossipFrame = CreateFrame("FRAME")
|
|
|
|
-- Function to setup events
|
|
local function SetupEvents()
|
|
if LeaPlusLC["AutomateGossip"] == "On" then
|
|
gossipFrame:RegisterEvent("GOSSIP_SHOW")
|
|
else
|
|
gossipFrame:UnregisterEvent("GOSSIP_SHOW")
|
|
end
|
|
end
|
|
|
|
-- Setup events when option is clicked and on startup (if option is enabled)
|
|
LeaPlusCB["AutomateGossip"]:HookScript("OnClick", SetupEvents)
|
|
if LeaPlusLC["AutomateGossip"] == "On" then SetupEvents() end
|
|
|
|
-- Event handler
|
|
gossipFrame:SetScript("OnEvent", function()
|
|
-- Special treatment for specific NPCs
|
|
local npcGuid = UnitGUID("target") or nil
|
|
if npcGuid then
|
|
local void, void, void, void, void, npcID = strsplit("-", npcGuid)
|
|
if npcID then
|
|
-- Open rogue doors in Dalaran (Broken Isles) automatically
|
|
if npcID == "96782" -- Lucian Trias
|
|
or npcID == "93188" -- Mongar
|
|
or npcID == "97004" -- "Red" Jack Findle
|
|
then
|
|
SkipGossip()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
-- Process gossip
|
|
if C_GossipInfo.GetNumOptions() == 1 and C_GossipInfo.GetNumAvailableQuests() == 0 and C_GossipInfo.GetNumActiveQuests() == 0 then
|
|
SkipGossip()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide order hall bar
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoCommandBar"] == "On" then
|
|
|
|
-- Function to hide the order hall bar
|
|
local function HideCommandBar()
|
|
OrderHallCommandBar:HookScript("OnShow", function()
|
|
OrderHallCommandBar:Hide()
|
|
end)
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_OrderHallUI") then
|
|
HideCommandBar()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_OrderHallUI" then
|
|
HideCommandBar()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable pet automation
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoPetAutomation"] == "On" then
|
|
|
|
-- Create frame to watch for combat
|
|
local petCombat = CreateFrame("FRAME")
|
|
local petTicker
|
|
|
|
-- Function to dismiss pet
|
|
local function DismissPetTimerFunc()
|
|
if UnitAffectingCombat("player") then
|
|
-- Player is in combat so cancel ticker and schedule it for when combat ends
|
|
if petTicker then petTicker:Cancel() end
|
|
petCombat:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
else
|
|
-- Player is not in combat so attempt to dismiss pet
|
|
local summonedPet = C_PetJournal.GetSummonedPetGUID()
|
|
if summonedPet then
|
|
C_PetJournal.SummonPetByGUID(summonedPet)
|
|
end
|
|
end
|
|
end
|
|
|
|
hooksecurefunc(C_PetJournal, "SetPetLoadOutInfo", function()
|
|
-- Cancel existing ticker if one already exists
|
|
if petTicker then petTicker:Cancel() end
|
|
-- Check for combat
|
|
if UnitAffectingCombat("player") then
|
|
-- Player is in combat so schedule ticker for when combat ends
|
|
petCombat:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
else
|
|
-- Player is not in combat so run ticker now
|
|
petTicker = C_Timer.NewTicker(0.5, DismissPetTimerFunc, 15)
|
|
end
|
|
end)
|
|
|
|
-- Script for when combat ends
|
|
petCombat:SetScript("OnEvent", function()
|
|
-- Combat has ended so run ticker now
|
|
petTicker = C_Timer.NewTicker(0.5, DismissPetTimerFunc, 15)
|
|
petCombat:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show pet save button
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowPetSaveBtn"] == "On" then
|
|
|
|
local function MakePetSystem()
|
|
|
|
-- Create panel
|
|
local pFrame = CreateFrame("Frame", nil, PetJournal)
|
|
pFrame:ClearAllPoints()
|
|
pFrame:SetPoint("TOPLEFT", PetJournalLoadoutBorder, "TOPLEFT", 4, 40)
|
|
pFrame:SetSize(PetJournalLoadoutBorder:GetWidth() -10, 16)
|
|
pFrame:Hide()
|
|
pFrame:SetFrameLevel(5000)
|
|
|
|
-- Add background color
|
|
pFrame.t = pFrame:CreateTexture(nil, "BACKGROUND")
|
|
pFrame.t:SetAllPoints()
|
|
pFrame.t:SetColorTexture(0.05, 0.05, 0.05, 0.7)
|
|
|
|
-- Create editbox
|
|
local petEB = CreateFrame("EditBox", nil, pFrame)
|
|
petEB:SetAllPoints()
|
|
petEB:SetTextInsets(2, 2, 2, 2)
|
|
petEB:SetFontObject("GameFontNormal")
|
|
petEB:SetTextColor(1.0, 1.0, 1.0, 1)
|
|
petEB:SetBlinkSpeed(0)
|
|
petEB:SetAltArrowKeyMode(true)
|
|
|
|
-- Prevent changes
|
|
petEB:SetScript("OnEscapePressed", function() pFrame:Hide() end)
|
|
petEB:SetScript("OnEnterPressed", petEB.HighlightText)
|
|
petEB:SetScript("OnMouseDown", petEB.ClearFocus)
|
|
petEB:SetScript("OnMouseUp", petEB.HighlightText)
|
|
|
|
-- Create tooltip
|
|
petEB.tiptext = L["This command will assign your current pet team and selected abilities.|n|nPress CTRL/C to copy the command then paste it into a macro or chat window with CTRL/V."]
|
|
petEB:HookScript("OnEnter", function()
|
|
GameTooltip:SetOwner(petEB, "ANCHOR_TOP")
|
|
GameTooltip:SetText(petEB.tiptext, nil, nil, nil, nil, true)
|
|
end)
|
|
petEB:HookScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Function to get pet data and build macro
|
|
local function RefreshPets()
|
|
-- Get pet data
|
|
local p1, p1a, p1b, p1c = C_PetJournal.GetPetLoadOutInfo(1)
|
|
local p2, p2a, p2b, p2c = C_PetJournal.GetPetLoadOutInfo(2)
|
|
local p3, p3a, p3b, p3c = C_PetJournal.GetPetLoadOutInfo(3)
|
|
if p1 and p1a and p1b and p1c and p2 and p2a and p2b and p2c and p3 and p3a and p3b and p3c then
|
|
-- Build macro string and show it in editbox
|
|
local comTeam = "/ltp team "
|
|
comTeam = comTeam .. p1 .. ',' .. p1a .. ',' .. p1b .. ',' .. p1c .. ","
|
|
comTeam = comTeam .. p2 .. ',' .. p2a .. ',' .. p2b .. ',' .. p2c .. ","
|
|
comTeam = comTeam .. p3 .. ',' .. p3a .. ',' .. p3b .. ',' .. p3c
|
|
petEB:SetText(comTeam)
|
|
petEB:HighlightText()
|
|
petEB:SetFocus()
|
|
end
|
|
end
|
|
|
|
-- Prevent changes to editbox value
|
|
petEB:SetScript("OnChar", RefreshPets)
|
|
petEB:SetScript("OnKeyUp", RefreshPets)
|
|
|
|
-- Refresh pet data when slots are changed
|
|
hooksecurefunc(C_PetJournal, "SetPetLoadOutInfo", RefreshPets)
|
|
|
|
-- Add macro button
|
|
local macroBtn = LeaPlusLC:CreateButton("PetMacroBtn", _G["PetJournalLoadoutPet1"], "", "TOPRIGHT", 0, 0, 32, 32, false, "")
|
|
macroBtn:SetFrameLevel(5000)
|
|
macroBtn:SetNormalTexture("Interface\\BUTTONS\\AdventureGuideMicrobuttonAlert")
|
|
macroBtn:SetScript("OnClick", function()
|
|
if C_PetJournal.GetPetLoadOutInfo(1) and C_PetJournal.GetPetLoadOutInfo(2) and C_PetJournal.GetPetLoadOutInfo(3) then
|
|
if pFrame:IsShown() then
|
|
-- Frame is already showing so hide it
|
|
pFrame:Hide()
|
|
else
|
|
-- Show macro panel
|
|
pFrame:Show()
|
|
RefreshPets()
|
|
end
|
|
else
|
|
LeaPlusLC:Print("You need a battle pet team.")
|
|
end
|
|
end)
|
|
macroBtn:HookScript("OnHide", function() pFrame:Hide() end)
|
|
|
|
end
|
|
|
|
-- Run system function when pet journal loads
|
|
if IsAddOnLoaded("Blizzard_Collections") then
|
|
MakePetSystem()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_Collections" then
|
|
MakePetSystem()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Enable hotkey
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["EnableHotkey"] == "On" then
|
|
|
|
-- Create global binding function
|
|
local BindBtn = CreateFrame("Button", "LeaPlusGlobalBinding", LeaPlusGlobalPanel)
|
|
BindBtn:SetScript("OnClick", function() LeaPlusLC:SlashFunc() end)
|
|
|
|
-- Clear all bindings bound to panel and set hotkey
|
|
ClearOverrideBindings(LeaPlusGlobalPanel)
|
|
SetOverrideBindingClick(LeaPlusGlobalPanel, true, "CTRL-Z", "LeaPlusGlobalBinding")
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Faster looting
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["FasterLooting"] == "On" then
|
|
|
|
-- Time delay
|
|
local tDelay = 0
|
|
|
|
-- Fast loot function
|
|
local function FastLoot()
|
|
if GetTime() - tDelay >= 0.3 then
|
|
tDelay = GetTime()
|
|
if GetCVarBool("autoLootDefault") ~= IsModifiedClick("AUTOLOOTTOGGLE") then
|
|
for i = GetNumLootItems(), 1, -1 do
|
|
LootSlot(i)
|
|
end
|
|
tDelay = GetTime()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Event frame
|
|
local faster = CreateFrame("Frame")
|
|
faster:RegisterEvent("LOOT_READY")
|
|
faster:SetScript("OnEvent", FastLoot)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable bag automation
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoBagAutomation"] == "On" then
|
|
RunScript("hooksecurefunc('OpenAllBags', CloseAllBags)")
|
|
RunScript("hooksecurefunc('OpenAllBagsMatchingContext', CloseAllBags)")
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide level-up display
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideLevelUpDisplay"] == "On" then
|
|
|
|
if LevelUpDisplay then
|
|
|
|
-- Patch 9.0.5
|
|
|
|
-- Create holder
|
|
local LevelUpDisplayHolder = CreateFrame("Frame", nil, UIParent)
|
|
|
|
-- Move LevelUpDisplay
|
|
LevelUpDisplay:ClearAllPoints()
|
|
if not IsAddOnLoaded("ElvUI") then
|
|
LevelUpDisplay:SetPoint("TOP", LevelUpDisplayHolder)
|
|
end
|
|
|
|
-- Maintain position of LevelUpDisplay
|
|
hooksecurefunc(LevelUpDisplay, "SetPoint", function(frame, void, anchor)
|
|
if anchor ~= LevelUpDisplayHolder then
|
|
frame:ClearAllPoints()
|
|
if not IsAddOnLoaded("ElvUI") then
|
|
frame:SetPoint("TOP", LevelUpDisplayHolder)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Force zone text to show while LevelUpDisplay is showing
|
|
ZoneTextFrame:HookScript("OnEvent", function(self, event)
|
|
if LevelUpDisplay:IsShown() then
|
|
if event == "ZONE_CHANGED_NEW_AREA" and not ZoneTextFrame:IsShown() then
|
|
FadingFrame_Show(ZoneTextFrame)
|
|
elseif event == "ZONE_CHANGED_INDOORS" and not SubZoneTextFrame:IsShown() then
|
|
FadingFrame_Show(SubZoneTextFrame)
|
|
end
|
|
end
|
|
end)
|
|
|
|
else
|
|
|
|
-- Patch 9.1
|
|
hooksecurefunc(EventToastManagerFrame, "Show", EventToastManagerFrame.Hide)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide boss banner
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideBossBanner"] == "On" then
|
|
BossBanner:UnregisterEvent("ENCOUNTER_LOOT_RECEIVED")
|
|
BossBanner:UnregisterEvent("BOSS_KILL")
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide clean-up buttons
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideCleanupBtns"] == "On" then
|
|
-- Hide backpack clean-up button and make item search box longer
|
|
BagItemAutoSortButton:HookScript("OnShow", BagItemAutoSortButton.Hide)
|
|
BagItemSearchBox:SetWidth(120)
|
|
|
|
-- Hide bank frame clean-up button and make item search box longer
|
|
BankItemAutoSortButton:HookScript("OnShow", BankItemAutoSortButton.Hide)
|
|
BankItemSearchBox:ClearAllPoints()
|
|
BankItemSearchBox:SetPoint("TOPRIGHT", BankFrame, "TOPRIGHT", -27, -33)
|
|
BankItemSearchBox:SetWidth(120)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide talking frame
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideTalkingFrame"] == "On" then
|
|
|
|
-- Function to hide the talking frame
|
|
local function NoTalkingHeads()
|
|
hooksecurefunc(TalkingHeadFrame, "Show", function(self)
|
|
self:Hide()
|
|
end)
|
|
end
|
|
|
|
-- Run function when Blizzard addon is loaded
|
|
if IsAddOnLoaded("Blizzard_TalkingHeadUI") then
|
|
NoTalkingHeads()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_TalkingHeadUI" then
|
|
NoTalkingHeads()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automate quests (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Create configuration panel
|
|
local QuestPanel = LeaPlusLC:CreatePanel("Automate quests", "QuestPanel")
|
|
|
|
LeaPlusLC:MakeTx(QuestPanel, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(QuestPanel, "AutoQuestShift", "Require shift key for quest automation", 16, -92, false, "If checked, you will need to hold the shift key down for quests to be automated.|n|nIf unchecked, holding shift will prevent quests from being automated.")
|
|
LeaPlusLC:MakeCB(QuestPanel, "AutoQuestAvailable", "Accept available quests automatically", 16, -112, false, "If checked, available quests will be accepted automatically.")
|
|
LeaPlusLC:MakeCB(QuestPanel, "AutoQuestCompleted", "Turn-in completed quests automatically", 16, -132, false, "If checked, completed quests will be turned-in automatically.")
|
|
LeaPlusLC:MakeCB(QuestPanel, "AutoQuestNoDaily", "Don't accept daily quests automatically", 16, -152, false, "If checked, daily quests will not be accepted automatically.")
|
|
LeaPlusLC:MakeCB(QuestPanel, "AutoQuestNoWeekly", "Don't accept weekly quests automatically", 16, -172, false, "If checked, weekly quests will not be accepted automatically.")
|
|
|
|
-- Help button hidden
|
|
QuestPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
QuestPanel.b:SetScript("OnClick", function()
|
|
QuestPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page1"]:Show();
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
QuestPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset checkboxes
|
|
LeaPlusLC["AutoQuestShift"] = "Off"
|
|
LeaPlusLC["AutoQuestAvailable"] = "On"
|
|
LeaPlusLC["AutoQuestCompleted"] = "On"
|
|
LeaPlusLC["AutoQuestNoDaily"] = "Off"
|
|
LeaPlusLC["AutoQuestNoWeekly"] = "Off"
|
|
|
|
-- Refresh panel
|
|
QuestPanel:Hide(); QuestPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show panal when options panel button is clicked
|
|
LeaPlusCB["AutomateQuestsBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["AutoQuestShift"] = "Off"
|
|
LeaPlusLC["AutoQuestAvailable"] = "On"
|
|
LeaPlusLC["AutoQuestCompleted"] = "On"
|
|
LeaPlusLC["AutoQuestNoDaily"] = "Off"
|
|
LeaPlusLC["AutoQuestNoWeekly"] = "Off"
|
|
else
|
|
QuestPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
-- Funcion to ignore specific NPCs
|
|
local function isNpcBlocked(actionType)
|
|
local npcGuid = UnitGUID("target") or nil
|
|
if npcGuid then
|
|
local void, void, void, void, void, npcID = strsplit("-", npcGuid)
|
|
if npcID then
|
|
-- Ignore specific NPCs for selecting, accepting and turning-in quests (required if automation has consequences)
|
|
if npcID == "15192" -- Anachronos (Caverns of Time)
|
|
or npcID == "119388" -- Chieftain Hatuun (Krokul Hovel, Krokuun)
|
|
or npcID == "6566" -- Estelle Gendry (Heirloom Curator, Undercity)
|
|
or npcID == "45400" -- Fiona's Caravan (Eastern Plaguelands)
|
|
or npcID == "18166" -- Khadgar (Allegiance to Aldor/Scryer, Shattrath)
|
|
or npcID == "55402" -- Korgol Crushskull (Darkmoon Faire, Pit Master)
|
|
or npcID == "6294" -- Krom Stoutarm (Heirloom Curator, Ironforge)
|
|
or npcID == "109227" -- Meliah Grayfeather (Tradewind Roost, Highmountain)
|
|
or npcID == "99183" -- Renegade Ironworker (Tanaan Jungle, repeatable quest)
|
|
or npcID == "114719" -- Trader Caelen (Obliterum Forge, Dalaran, Broken Isles)
|
|
-- Seals of Fate
|
|
or npcID == "111243" -- Archmage Lan'dalock (Seal quest, Dalaran)
|
|
or npcID == "87391" -- Fate-Twister Seress (Seal quest, Stormshield)
|
|
or npcID == "88570" -- Fate-Twister Tiklal (Seal quest, Horde)
|
|
or npcID == "142063" -- Tezran (Seal quest, Boralus Harbor, Alliance)
|
|
or npcID == "141584" -- Zurvan (Seal quest, Dazar'alor, Horde)
|
|
-- Wartime Donations (Alliance)
|
|
or npcID == "142994" -- Brandal Darkbeard (Boralus)
|
|
or npcID == "142995" -- Charlane (Boralus)
|
|
or npcID == "142993" -- Chelsea Strand (Boralus)
|
|
or npcID == "142998" -- Faella (Boralus)
|
|
or npcID == "143004" -- Larold Kyne (Boralus)
|
|
or npcID == "143005" -- Liao (Boralus)
|
|
or npcID == "143007" -- Mae Wagglewand (Boralus)
|
|
or npcID == "143008" -- Norber Togglesprocket (Boralus)
|
|
or npcID == "142685" -- Paymaster Vauldren (Boralus)
|
|
or npcID == "142700" -- Quartermaster Peregrin (Boralus)
|
|
or npcID == "142997" -- Senedras (Boralus)
|
|
-- Wartime Donations (Horde)
|
|
or npcID == "142970" -- Kuma Longhoof (Dazar'alor)
|
|
or npcID == "142969" -- Logarr (Dazar'alor)
|
|
or npcID == "142973" -- Mai-Lu (Dazar'alor)
|
|
or npcID == "142977" -- Meredith Swane (Dazar'alor)
|
|
or npcID == "142981" -- Merill Redgrave (Dazar'alor)
|
|
or npcID == "142157" -- Paymaster Grintooth (Dazar'alor)
|
|
or npcID == "142158" -- Quartermaster Rauka (Dazar'alor)
|
|
or npcID == "142975" -- Seamstress Vessa (Dazar'alor)
|
|
or npcID == "142983" -- Swizzle Fizzcrank (Dazar'alor)
|
|
or npcID == "142992" -- Uma'wi (Dazar'alor)
|
|
or npcID == "142159" -- Zen'kin (Dazar'alor)
|
|
then
|
|
return true
|
|
end
|
|
-- Ignore specific NPCs for selecting quests only (only used for items that have no other purpose)
|
|
if actionType == "Select" then
|
|
if npcID == "87706" -- Gazmolf Futzwangler (Reputation quests, Nagrand, Draenor)
|
|
or npcID == "70022" -- Ku'ma (Isle of Giants, Pandaria)
|
|
or npcID == "12944" -- Lokhtos Darkbargainer (Thorium Brotherhood, Blackrock Depths)
|
|
or npcID == "87393" -- Sallee Silverclamp (Reputation quests, Nagrand, Draenor)
|
|
or npcID == "10307" -- Witch Doctor Mau'ari (E'Ko quests, Winterspring)
|
|
then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Function to check if quest ID is blocked
|
|
local function IsQuestIDBlocked(questID)
|
|
if questID then
|
|
if questID == 43923 -- Starlight Rose
|
|
or questID == 43924 -- Leyblood
|
|
or questID == 43925 -- Runescale Koi
|
|
|
|
then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Function to check if quest requires currency or a crafting reagent
|
|
local function QuestRequiresCurrency()
|
|
for i = 1, 6 do
|
|
local progItem = _G["QuestProgressItem" ..i] or nil
|
|
if progItem and progItem:IsShown() and progItem.type == "required" then
|
|
if progItem.objectType == "currency" then
|
|
-- Quest requires currency so do nothing
|
|
return true
|
|
elseif progItem.objectType == "item" then
|
|
-- Quest requires an item
|
|
local name, texture, numItems = GetQuestItemInfo("required", i)
|
|
if name then
|
|
local itemID = GetItemInfoInstant(name)
|
|
if itemID then
|
|
local void, void, void, void, void, void, void, void, void, void, void, void, void, void, void, void, isCraftingReagent = GetItemInfo(itemID)
|
|
if isCraftingReagent then
|
|
-- Item is a crafting reagent so do nothing
|
|
return true
|
|
end
|
|
if itemID == 104286 then -- Quivering Firestorm Egg
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Function to check if quest requires gold
|
|
local function QuestRequiresGold()
|
|
local goldRequiredAmount = GetQuestMoneyToGet()
|
|
if goldRequiredAmount and goldRequiredAmount > 0 then
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- Function to check if quest ID has requirements met
|
|
local function DoesQuestHaveRequirementsMet(qID)
|
|
if qID and qID ~= "" then
|
|
|
|
if not qID then
|
|
|
|
-- Scourgestones
|
|
elseif qID == 62293 then
|
|
-- Quest Darkened Scourgestones requires 25 Darkened Scourgestones
|
|
if GetItemCount(180720) >= 25 then return true end
|
|
|
|
elseif qID == 62292 then
|
|
-- Quest Pitch Black Scourgestones requires 25 Pitch Black Scourgestones
|
|
if GetItemCount(183200) >= 25 then return true end
|
|
|
|
else return true
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Create event frame
|
|
local qFrame = CreateFrame("FRAME")
|
|
|
|
-- Function to setup events
|
|
local function SetupEvents()
|
|
if LeaPlusLC["AutomateQuests"] == "On" then
|
|
qFrame:RegisterEvent("QUEST_DETAIL")
|
|
qFrame:RegisterEvent("QUEST_ACCEPT_CONFIRM")
|
|
qFrame:RegisterEvent("QUEST_PROGRESS")
|
|
qFrame:RegisterEvent("QUEST_COMPLETE")
|
|
qFrame:RegisterEvent("QUEST_GREETING")
|
|
qFrame:RegisterEvent("QUEST_AUTOCOMPLETE")
|
|
qFrame:RegisterEvent("GOSSIP_SHOW")
|
|
qFrame:RegisterEvent("QUEST_FINISHED")
|
|
else
|
|
qFrame:UnregisterAllEvents()
|
|
end
|
|
end
|
|
|
|
-- Setup events when option is clicked and on startup (if option is enabled)
|
|
LeaPlusCB["AutomateQuests"]:HookScript("OnClick", SetupEvents)
|
|
if LeaPlusLC["AutomateQuests"] == "On" then SetupEvents() end
|
|
|
|
-- Event handler
|
|
qFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
|
|
-- Clear progress items when quest interaction has ceased
|
|
if event == "QUEST_FINISHED" then
|
|
for i = 1, 6 do
|
|
local progItem = _G["QuestProgressItem" ..i] or nil
|
|
if progItem and progItem:IsShown() then
|
|
progItem:Hide()
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Check for SHIFT key modifier
|
|
if LeaPlusLC["AutoQuestShift"] == "On" and not IsShiftKeyDown() then return
|
|
elseif LeaPlusLC["AutoQuestShift"] == "Off" and IsShiftKeyDown() then return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Accept quests automatically
|
|
----------------------------------------------------------------------
|
|
|
|
-- Accept quests with a quest detail window
|
|
if event == "QUEST_DETAIL" then
|
|
if LeaPlusLC["AutoQuestAvailable"] == "On" then
|
|
-- Don't accept daily quests if option to exclude them is enabled
|
|
if LeaPlusLC["AutoQuestNoDaily"] == "On" and QuestIsDaily() then return end
|
|
-- Don't accept weekly quests if option to exclude them is enabled
|
|
if LeaPlusLC["AutoQuestNoWeekly"] == "On" and QuestIsWeekly() then return end
|
|
-- Don't accept blocked quests
|
|
if isNpcBlocked("Accept") then return end
|
|
-- Accept quest
|
|
if QuestGetAutoAccept() then
|
|
-- Quest has already been accepted by Wow so close the quest detail window
|
|
CloseQuest()
|
|
else
|
|
-- Quest has not been accepted by Wow so accept it
|
|
AcceptQuest()
|
|
HideUIPanel(QuestFrame)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Accept quests which require confirmation (such as sharing escort quests)
|
|
if event == "QUEST_ACCEPT_CONFIRM" then
|
|
if LeaPlusLC["AutoQuestAvailable"] == "On" then
|
|
ConfirmAcceptQuest()
|
|
StaticPopup_Hide("QUEST_ACCEPT")
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Turn-in quests automatically
|
|
----------------------------------------------------------------------
|
|
|
|
-- Turn-in progression quests
|
|
if event == "QUEST_PROGRESS" and IsQuestCompletable() then
|
|
if LeaPlusLC["AutoQuestCompleted"] == "On" then
|
|
-- Don't continue quests for blocked NPCs
|
|
if isNpcBlocked("Complete") then return end
|
|
-- Don't continue if quest requires currency
|
|
if QuestRequiresCurrency() then return end
|
|
-- Don't continue if quest requires gold
|
|
if QuestRequiresGold() then return end
|
|
-- Continue quest
|
|
CompleteQuest()
|
|
end
|
|
end
|
|
|
|
-- Turn in completed quests if only one reward item is being offered
|
|
if event == "QUEST_COMPLETE" then
|
|
if LeaPlusLC["AutoQuestCompleted"] == "On" then
|
|
-- Don't complete quests for blocked NPCs
|
|
if isNpcBlocked("Complete") then return end
|
|
-- Don't complete if quest requires currency
|
|
if QuestRequiresCurrency() then return end
|
|
-- Don't complete if quest requires gold
|
|
if QuestRequiresGold() then return end
|
|
-- Complete quest
|
|
if GetNumQuestChoices() <= 1 then
|
|
GetQuestReward(GetNumQuestChoices())
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Show quest dialog for quests that use the objective tracker (it will be completed automatically)
|
|
if event == "QUEST_AUTOCOMPLETE" then
|
|
if LeaPlusLC["AutoQuestCompleted"] == "On" then
|
|
local index = C_QuestLog.GetLogIndexForQuestID(arg1)
|
|
local info = C_QuestLog.GetInfo(index)
|
|
if info and info.isAutoComplete then
|
|
local questID = C_QuestLog.GetQuestIDForLogIndex(index)
|
|
C_QuestLog.SetSelectedQuest(questID)
|
|
ShowQuestComplete(C_QuestLog.GetSelectedQuest())
|
|
end
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Select quests automatically
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "GOSSIP_SHOW" or event == "QUEST_GREETING" then
|
|
|
|
-- Select quests
|
|
if UnitExists("npc") or QuestFrameGreetingPanel:IsShown() or GossipFrameGreetingPanel:IsShown() then
|
|
|
|
-- Don't select quests for blocked NPCs
|
|
if isNpcBlocked("Select") then return end
|
|
|
|
-- Select quests
|
|
if event == "QUEST_GREETING" then
|
|
-- Select quest greeting completed quests
|
|
if LeaPlusLC["AutoQuestCompleted"] == "On" then
|
|
for i = 1, GetNumActiveQuests() do
|
|
local title, isComplete = GetActiveTitle(i)
|
|
if title and isComplete then
|
|
return SelectActiveQuest(i)
|
|
end
|
|
end
|
|
end
|
|
-- Select quest greeting available quests
|
|
if LeaPlusLC["AutoQuestAvailable"] == "On" then
|
|
for i = 1, GetNumAvailableQuests() do
|
|
local title, isComplete = GetAvailableTitle(i)
|
|
if title and not isComplete then
|
|
local isTrivial, frequency, isRepeatable, isLegendary = GetAvailableQuestInfo(i)
|
|
if frequency ~= 2 or LeaPlusLC["AutoQuestNoDaily"] == "Off" then
|
|
if frequency ~= 3 or LeaPlusLC["AutoQuestNoWeekly"] == "Off" then
|
|
return SelectAvailableQuest(i)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
-- Select gossip completed quests
|
|
if LeaPlusLC["AutoQuestCompleted"] == "On" then
|
|
local gossipQuests = C_GossipInfo.GetActiveQuests()
|
|
for titleIndex, questInfo in ipairs(gossipQuests) do
|
|
if questInfo.title and questInfo.isComplete then
|
|
return C_GossipInfo.SelectActiveQuest(titleIndex)
|
|
end
|
|
end
|
|
end
|
|
-- Select gossip available quests
|
|
if LeaPlusLC["AutoQuestAvailable"] == "On" then
|
|
local GossipQuests = C_GossipInfo.GetAvailableQuests()
|
|
for titleIndex, questInfo in ipairs(GossipQuests) do
|
|
if questInfo.frequency ~= 2 or LeaPlusLC["AutoQuestNoDaily"] == "Off" then
|
|
if questInfo.frequency ~= 3 or LeaPlusLC["AutoQuestNoWeekly"] == "Off" then
|
|
if not questInfo.questID or not IsQuestIDBlocked(questInfo.questID) and DoesQuestHaveRequirementsMet(questInfo.questID) then
|
|
return C_GossipInfo.SelectAvailableQuest(titleIndex)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide bogyguard gossip
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideBodyguard"] == "On" then
|
|
local gFrame = CreateFrame("FRAME")
|
|
gFrame:RegisterEvent("GOSSIP_SHOW")
|
|
gFrame:SetScript("OnEvent", function()
|
|
-- Do nothing if shift is being held
|
|
if IsShiftKeyDown() then return end
|
|
-- Traverse faction IDs for known bodyguards (http://www.wowhead.com/factions/warlords-of-draenor/barracks-bodyguards)
|
|
local id = GetFriendshipReputation();
|
|
if id then
|
|
if id == 1733 -- Delvar Ironfist
|
|
or id == 1736 -- Tormmok
|
|
or id == 1737 -- Talonpriest Ishaal
|
|
or id == 1738 -- Defender Illona
|
|
or id == 1739 -- Vivianne
|
|
or id == 1740 -- Aeda Brightdawn
|
|
or id == 1741 -- Leorajh
|
|
then
|
|
-- Close gossip window if it's for a cooperating (active) bodyguard
|
|
if UnitCanCooperate("target", "player") then
|
|
C_GossipInfo.CloseGossip()
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Sort game options addon list
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["CharAddonList"] == "On" then
|
|
-- Set the addon list to character by default
|
|
if AddonCharacterDropDown and AddonCharacterDropDown.selectedValue then
|
|
AddonCharacterDropDown.selectedValue = UnitName("player");
|
|
AddonCharacterDropDownText:SetText(UnitName("player"))
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Sell junk automatically (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Create sell junk banner
|
|
local StartMsg = CreateFrame("FRAME", nil, MerchantFrame)
|
|
StartMsg:ClearAllPoints()
|
|
StartMsg:SetPoint("BOTTOMLEFT", 4, 4)
|
|
StartMsg:SetSize(160, 22)
|
|
StartMsg:SetToplevel(true)
|
|
StartMsg:Hide()
|
|
|
|
StartMsg.s = StartMsg:CreateTexture(nil, "BACKGROUND")
|
|
StartMsg.s:SetAllPoints()
|
|
StartMsg.s:SetColorTexture(0.1, 0.1, 0.1, 1.0)
|
|
|
|
StartMsg.f = StartMsg:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
|
StartMsg.f:SetAllPoints();
|
|
StartMsg.f:SetText(L["SELLING JUNK"])
|
|
|
|
-- Declarations
|
|
local IterationCount, totalPrice = 500, 0
|
|
local SellJunkFrame = CreateFrame("FRAME")
|
|
local SellJunkTicker, mBagID, mBagSlot
|
|
|
|
-- Function to stop selling
|
|
local function StopSelling()
|
|
if SellJunkTicker then SellJunkTicker:Cancel() end
|
|
StartMsg:Hide()
|
|
SellJunkFrame:UnregisterEvent("ITEM_LOCKED")
|
|
SellJunkFrame:UnregisterEvent("ITEM_UNLOCKED")
|
|
end
|
|
|
|
-- Vendor function
|
|
local function SellJunkFunc()
|
|
|
|
-- Variables
|
|
local SoldCount, Rarity, ItemPrice = 0, 0, 0
|
|
local CurrentItemLink, void
|
|
|
|
-- Traverse bags and sell grey items
|
|
for BagID = 0, 4 do
|
|
for BagSlot = 1, GetContainerNumSlots(BagID) do
|
|
CurrentItemLink = GetContainerItemLink(BagID, BagSlot)
|
|
if CurrentItemLink then
|
|
void, void, Rarity, void, void, void, void, void, void, void, ItemPrice = GetItemInfo(CurrentItemLink)
|
|
local void, itemCount = GetContainerItemInfo(BagID, BagSlot)
|
|
if Rarity == 0 and ItemPrice ~= 0 then
|
|
SoldCount = SoldCount + 1
|
|
if MerchantFrame:IsShown() then
|
|
-- If merchant frame is open, vendor the item
|
|
UseContainerItem(BagID, BagSlot)
|
|
-- Perform actions on first iteration
|
|
if SellJunkTicker._remainingIterations == IterationCount then
|
|
-- Calculate total price
|
|
totalPrice = totalPrice + (ItemPrice * itemCount)
|
|
-- Store first sold bag slot for analysis
|
|
if SoldCount == 1 then
|
|
mBagID, mBagSlot = BagID, BagSlot
|
|
end
|
|
end
|
|
else
|
|
-- If merchant frame is not open, stop selling
|
|
StopSelling()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Stop selling if no items were sold for this iteration or iteration limit was reached
|
|
if SoldCount == 0 or SellJunkTicker and SellJunkTicker._remainingIterations == 1 then
|
|
StopSelling()
|
|
if totalPrice > 0 then
|
|
LeaPlusLC:Print(L["Sold junk for"] .. " " .. GetCoinText(totalPrice) .. ".")
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- Function to setup events
|
|
local function SetupEvents()
|
|
if LeaPlusLC["AutoSellJunk"] == "On" then
|
|
SellJunkFrame:RegisterEvent("MERCHANT_SHOW");
|
|
SellJunkFrame:RegisterEvent("MERCHANT_CLOSED");
|
|
else
|
|
SellJunkFrame:UnregisterEvent("MERCHANT_SHOW")
|
|
SellJunkFrame:UnregisterEvent("MERCHANT_CLOSED")
|
|
end
|
|
end
|
|
|
|
-- Setup events when option is clicked and on startup (if option is enabled)
|
|
LeaPlusCB["AutoSellJunk"]:HookScript("OnClick", SetupEvents)
|
|
if LeaPlusLC["AutoSellJunk"] == "On" then SetupEvents() end
|
|
|
|
-- Event handler
|
|
SellJunkFrame:SetScript("OnEvent", function(self, event)
|
|
if event == "MERCHANT_SHOW" then
|
|
-- Reset variables
|
|
totalPrice, mBagID, mBagSlot = 0, -1, -1
|
|
-- Do nothing if shift key is held down
|
|
if IsShiftKeyDown() then return end
|
|
-- Cancel existing ticker if present
|
|
if SellJunkTicker then SellJunkTicker:Cancel() end
|
|
-- Sell grey items using ticker (ends when all grey items are sold or iteration count reached)
|
|
SellJunkTicker = C_Timer.NewTicker(0.2, SellJunkFunc, IterationCount)
|
|
SellJunkFrame:RegisterEvent("ITEM_LOCKED")
|
|
SellJunkFrame:RegisterEvent("ITEM_UNLOCKED")
|
|
elseif event == "ITEM_LOCKED" then
|
|
StartMsg:Show()
|
|
SellJunkFrame:UnregisterEvent("ITEM_LOCKED")
|
|
elseif event == "ITEM_UNLOCKED" then
|
|
SellJunkFrame:UnregisterEvent("ITEM_UNLOCKED")
|
|
-- Check whether vendor refuses to buy items
|
|
if mBagID and mBagSlot and mBagID ~= -1 and mBagSlot ~= -1 then
|
|
local texture, count, locked = GetContainerItemInfo(mBagID, mBagSlot)
|
|
if count and not locked then
|
|
-- Item has been unlocked but still not sold so stop selling
|
|
StopSelling()
|
|
end
|
|
end
|
|
elseif event == "MERCHANT_CLOSED" then
|
|
-- If merchant frame is closed, stop selling
|
|
StopSelling()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Repair automatically (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Repair when suitable merchant frame is shown
|
|
local function RepairFunc()
|
|
if IsShiftKeyDown() then return end
|
|
if CanMerchantRepair() then -- If merchant is capable of repair
|
|
-- Process repair
|
|
local RepairCost, CanRepair = GetRepairAllCost()
|
|
if CanRepair then -- If merchant is offering repair
|
|
if LeaPlusLC["AutoRepairGuildFunds"] == "On" and IsInGuild() then
|
|
-- Guilded character and guild repair option is enabled
|
|
if CanGuildBankRepair() then
|
|
-- Character has permission to repair so try guild funds but fallback on character funds (if daily gold limit is reached)
|
|
RepairAllItems(1)
|
|
RepairAllItems()
|
|
else
|
|
-- Character does not have permission to repair so use character funds
|
|
RepairAllItems()
|
|
end
|
|
else
|
|
-- Unguilded character or guild repair option is disabled
|
|
RepairAllItems()
|
|
end
|
|
-- Show cost summary
|
|
LeaPlusLC:Print(L["Repaired for"] .. " " .. GetCoinText(RepairCost) .. ".")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Create event frame
|
|
local RepairFrame = CreateFrame("FRAME")
|
|
|
|
-- Function to setup event
|
|
local function SetupEvent()
|
|
if LeaPlusLC["AutoRepairGear"] == "On" then
|
|
RepairFrame:RegisterEvent("MERCHANT_SHOW")
|
|
else
|
|
RepairFrame:UnregisterEvent("MERCHANT_SHOW")
|
|
end
|
|
end
|
|
|
|
-- Setup event when option is clicked and on startup (if option is enabled)
|
|
LeaPlusCB["AutoRepairGear"]:HookScript("OnClick", SetupEvent)
|
|
if LeaPlusLC["AutoRepairGear"] == "On" then SetupEvent() end
|
|
|
|
-- Event handler
|
|
RepairFrame:SetScript("OnEvent", RepairFunc)
|
|
|
|
-- Create configuration panel
|
|
local RepairPanel = LeaPlusLC:CreatePanel("Repair automatically", "RepairPanel")
|
|
|
|
LeaPlusLC:MakeTx(RepairPanel, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(RepairPanel, "AutoRepairGuildFunds", "Repair using guild funds if available", 16, -92, false, "If checked, repair costs will be taken from guild funds for characters that are guilded and have permission to repair.")
|
|
|
|
-- Help button hidden
|
|
RepairPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
RepairPanel.b:SetScript("OnClick", function()
|
|
RepairPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page1"]:Show();
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
RepairPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset checkboxes
|
|
LeaPlusLC["AutoRepairGuildFunds"] = "On"
|
|
|
|
-- Refresh panel
|
|
RepairPanel:Hide(); RepairPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show panal when options panel button is clicked
|
|
LeaPlusCB["AutoRepairBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["AutoRepairGuildFunds"] = "On"
|
|
else
|
|
RepairPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide the combat log
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoCombatLogTab"] == "On" then
|
|
|
|
-- Ensure combat log is docked
|
|
if ChatFrame2.isDocked then
|
|
-- Set combat log attributes when chat windows are updated
|
|
LpEvt:RegisterEvent("UPDATE_CHAT_WINDOWS")
|
|
-- Set combat log tab placement when tabs are assigned by the client
|
|
hooksecurefunc("FCF_SetTabPosition", function()
|
|
ChatFrame2Tab:SetPoint("BOTTOMLEFT", ChatFrame1Tab, "BOTTOMRIGHT", 0, 0)
|
|
end)
|
|
else
|
|
-- If combat log is undocked, do nothing but show warning
|
|
C_Timer.After(1, function()
|
|
LeaPlusLC:Print("Combat log cannot be hidden while undocked.")
|
|
end)
|
|
end
|
|
|
|
-- ElvUI Fix
|
|
local eFixFuncApplied, eFixHookApplied
|
|
local function ElvUIFix()
|
|
if eFixFuncApplied then return end
|
|
local E = unpack(ElvUI)
|
|
if E.private.chat.enable then
|
|
C_Timer.After(2, function()
|
|
LeaPlusLC:Print("To hide the combat log, you need to disable the chat module in ElvUI.")
|
|
return
|
|
end)
|
|
end
|
|
hooksecurefunc(E, "PLAYER_ENTERING_WORLD", function()
|
|
if eFixHookApplied then return end
|
|
ChatFrame2Tab:EnableMouse(false)
|
|
ChatFrame2Tab:SetText(" ")
|
|
ChatFrame2Tab:SetScale(0.01)
|
|
ChatFrame2Tab:SetWidth(0.01)
|
|
ChatFrame2Tab:SetHeight(0.01)
|
|
eFixHookApplied = true
|
|
end)
|
|
eFixFuncApplied = true
|
|
end
|
|
|
|
-- Run ElvUI fix when ElvUI has loaded
|
|
if IsAddOnLoaded("ElvUI") then
|
|
ElvUIFix()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "ElvUI" then
|
|
ElvUIFix()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show player chain
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowPlayerChain"] == "On" then
|
|
|
|
-- Ensure chain doesnt clip through pet portrait and rune frame
|
|
PetPortrait:GetParent():SetFrameLevel(4)
|
|
RuneFrame:SetFrameLevel(4)
|
|
|
|
-- Create configuration panel
|
|
local ChainPanel = LeaPlusLC:CreatePanel("Show player chain", "ChainPanel")
|
|
|
|
-- Add dropdown menu
|
|
LeaPlusLC:CreateDropDown("PlayerChainMenu", "Chain style", ChainPanel, 146, "TOPLEFT", 16, -112, {L["RARE"], L["ELITE"], L["RARE ELITE"]}, "")
|
|
|
|
-- Set chain style
|
|
local function SetChainStyle()
|
|
-- Get dropdown menu value
|
|
local chain = LeaPlusLC["PlayerChainMenu"] -- Numeric value
|
|
-- Set chain style according to value
|
|
if chain == 1 then -- Rare
|
|
PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare.blp");
|
|
elseif chain == 2 then -- Elite
|
|
PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite.blp");
|
|
elseif chain == 3 then -- Rare Elite
|
|
PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare-Elite.blp");
|
|
end
|
|
end
|
|
|
|
-- Set style on startup
|
|
SetChainStyle()
|
|
|
|
-- Set style when a drop menu is selected (procs when the list is hidden)
|
|
LeaPlusCB["ListFramePlayerChainMenu"]:HookScript("OnHide", SetChainStyle)
|
|
|
|
-- Help button hidden
|
|
ChainPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
ChainPanel.b:SetScript("OnClick", function()
|
|
LeaPlusCB["ListFramePlayerChainMenu"]:Hide(); -- Hide the dropdown list
|
|
ChainPanel:Hide();
|
|
LeaPlusLC["PageF"]:Show();
|
|
LeaPlusLC["Page5"]:Show();
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
ChainPanel.r:SetScript("OnClick", function()
|
|
LeaPlusCB["ListFramePlayerChainMenu"]:Hide(); -- Hide the dropdown list
|
|
LeaPlusLC["PlayerChainMenu"] = 2
|
|
ChainPanel:Hide(); ChainPanel:Show();
|
|
SetChainStyle()
|
|
end)
|
|
|
|
-- Show the panel when the configuration button is clicked
|
|
LeaPlusCB["ModPlayerChain"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
LeaPlusLC["PlayerChainMenu"] = 3;
|
|
SetChainStyle();
|
|
else
|
|
LeaPlusLC:HideFrames();
|
|
ChainPanel:Show();
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show raid frame toggle button
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowRaidToggle"] == "On" then
|
|
|
|
-- Check to make sure raid toggle button exists
|
|
if CompactRaidFrameManagerDisplayFrameHiddenModeToggle then
|
|
|
|
-- Create a border for the button
|
|
local cBackdrop = CreateFrame("Frame", nil, CompactRaidFrameManagerDisplayFrameHiddenModeToggle, "BackdropTemplate")
|
|
cBackdrop:SetAllPoints()
|
|
cBackdrop.backdropInfo = {edgeFile = "Interface/Tooltips/UI-Tooltip-Border", tile = false, tileSize = 0, edgeSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}}
|
|
cBackdrop:ApplyBackdrop()
|
|
|
|
-- Move the button (function runs after PLAYER_ENTERING_WORLD and PARTY_LEADER_CHANGED)
|
|
hooksecurefunc("CompactRaidFrameManager_UpdateOptionsFlowContainer", function()
|
|
if CompactRaidFrameManager and CompactRaidFrameManagerDisplayFrameHiddenModeToggle then
|
|
local void, void, void, void, y = CompactRaidFrameManager:GetPoint()
|
|
CompactRaidFrameManagerDisplayFrameHiddenModeToggle:SetWidth(40)
|
|
CompactRaidFrameManagerDisplayFrameHiddenModeToggle:ClearAllPoints()
|
|
CompactRaidFrameManagerDisplayFrameHiddenModeToggle:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, y + 22)
|
|
CompactRaidFrameManagerDisplayFrameHiddenModeToggle:SetParent(UIParent)
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide hit indicators (portrait text)
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoHitIndicators"] == "On" then
|
|
hooksecurefunc(PlayerHitIndicator, "Show", PlayerHitIndicator.Hide)
|
|
hooksecurefunc(PetHitIndicator, "Show", PetHitIndicator.Hide)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Class colored frames
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ClassColFrames"] == "On" then
|
|
|
|
-- Create background frame for player frame
|
|
local PlayFN = CreateFrame("FRAME", nil, PlayerFrame)
|
|
PlayFN:Hide()
|
|
|
|
PlayFN:SetWidth(TargetFrameNameBackground:GetWidth())
|
|
PlayFN:SetHeight(TargetFrameNameBackground:GetHeight())
|
|
|
|
local void, void, void, x, y = TargetFrameNameBackground:GetPoint()
|
|
PlayFN:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", -x, y)
|
|
|
|
PlayFN.t = PlayFN:CreateTexture(nil, "BORDER")
|
|
PlayFN.t:SetAllPoints()
|
|
PlayFN.t:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-LevelBackground")
|
|
|
|
local c = LeaPlusLC["RaidColors"][select(2, UnitClass("player"))]
|
|
if c then PlayFN.t:SetVertexColor(c.r, c.g, c.b) end
|
|
|
|
-- Create color function for target and focus frames
|
|
local function TargetFrameCol()
|
|
if UnitIsPlayer("target") then
|
|
local c = LeaPlusLC["RaidColors"][select(2, UnitClass("target"))]
|
|
if c then TargetFrameNameBackground:SetVertexColor(c.r, c.g, c.b) end
|
|
end
|
|
if UnitIsPlayer("focus") then
|
|
local c = LeaPlusLC["RaidColors"][select(2, UnitClass("focus"))]
|
|
if c then FocusFrameNameBackground:SetVertexColor(c.r, c.g, c.b) end
|
|
end
|
|
end
|
|
|
|
local ColTar = CreateFrame("FRAME")
|
|
ColTar:SetScript("OnEvent", TargetFrameCol) -- Events are registered if target option is enabled
|
|
|
|
-- Refresh color if focus frame size changes
|
|
hooksecurefunc("FocusFrame_SetSmallSize", function()
|
|
if LeaPlusLC["ClassColTarget"] == "On" then
|
|
TargetFrameCol()
|
|
end
|
|
end)
|
|
|
|
-- Create configuration panel
|
|
local ClassFrame = LeaPlusLC:CreatePanel("Class colored frames", "ClassFrame")
|
|
|
|
LeaPlusLC:MakeTx(ClassFrame, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(ClassFrame, "ClassColPlayer", "Show player frame in class color", 16, -92, false, "If checked, the player frame background will be shown in class color.")
|
|
LeaPlusLC:MakeCB(ClassFrame, "ClassColTarget", "Show target frame and focus frame in class color", 16, -112, false, "If checked, the target frame background and focus frame background will be shown in class color.")
|
|
|
|
-- Help button hidden
|
|
ClassFrame.h:Hide()
|
|
|
|
-- Back button handler
|
|
ClassFrame.b:SetScript("OnClick", function()
|
|
ClassFrame:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page6"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Function to set class colored frames
|
|
local function SetClassColFrames()
|
|
-- Player frame
|
|
if LeaPlusLC["ClassColPlayer"] == "On" then
|
|
PlayFN:Show()
|
|
else
|
|
PlayFN:Hide()
|
|
end
|
|
-- Target and focus frames
|
|
if LeaPlusLC["ClassColTarget"] == "On" then
|
|
ColTar:RegisterEvent("GROUP_ROSTER_UPDATE")
|
|
ColTar:RegisterEvent("PLAYER_TARGET_CHANGED")
|
|
ColTar:RegisterEvent("PLAYER_FOCUS_CHANGED")
|
|
ColTar:RegisterEvent("UNIT_FACTION")
|
|
TargetFrameCol()
|
|
else
|
|
ColTar:UnregisterAllEvents()
|
|
TargetFrame_CheckFaction(TargetFrame) -- Reset target frame colors
|
|
TargetFrame_CheckFaction(FocusFrame) -- Reset focus frame colors
|
|
end
|
|
end
|
|
|
|
-- Run function when options are clicked and on startup
|
|
LeaPlusCB["ClassColPlayer"]:HookScript("OnClick", SetClassColFrames)
|
|
LeaPlusCB["ClassColTarget"]:HookScript("OnClick", SetClassColFrames)
|
|
SetClassColFrames()
|
|
|
|
-- Reset button handler
|
|
ClassFrame.r:SetScript("OnClick", function()
|
|
|
|
-- Reset checkboxes
|
|
LeaPlusLC["ClassColPlayer"] = "On"
|
|
LeaPlusLC["ClassColTarget"] = "On"
|
|
|
|
-- Update colors and refresh configuration panel
|
|
SetClassColFrames()
|
|
ClassFrame:Hide(); ClassFrame:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panal when options panel button is clicked
|
|
LeaPlusCB["ClassColFramesBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["ClassColPlayer"] = "On"
|
|
LeaPlusLC["ClassColTarget"] = "On"
|
|
SetClassColFrames()
|
|
else
|
|
ClassFrame:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Minimap customisation
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["MinimapMod"] == "On" then
|
|
|
|
----------------------------------------------------------------------
|
|
-- Configuration panel
|
|
----------------------------------------------------------------------
|
|
|
|
-- Create configuration panel
|
|
local SideMinimap = LeaPlusLC:CreatePanel("Enhance minimap", "SideMinimap")
|
|
|
|
-- Hide panel during combat
|
|
SideMinimap:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
SideMinimap:SetScript("OnEvent", SideMinimap.Hide)
|
|
|
|
-- Add checkboxes
|
|
LeaPlusLC:MakeTx(SideMinimap, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(SideMinimap, "HideZoneTextBar", "Hide the zone text bar", 16, -92, false, "If checked, the zone text bar will be hidden. The tracking button tooltip will show zone information.")
|
|
LeaPlusLC:MakeCB(SideMinimap, "HideMiniZoomBtns", "Hide the zoom buttons", 16, -112, false, "If checked, the zoom buttons will be hidden. You can use the mousewheel to zoom regardless of this setting.")
|
|
LeaPlusLC:MakeCB(SideMinimap, "HideMiniClock", "Hide the clock", 16, -132, false, "If checked, the clock will be hidden.")
|
|
|
|
-- Add slider control
|
|
LeaPlusLC:MakeTx(SideMinimap, "Scale", 356, -72)
|
|
LeaPlusLC:MakeSL(SideMinimap, "MinimapScale", "Drag to set the minimap scale.|n|nNote that if you are using the default action bars, rescaling the minimap will also rescale the right action bars at startup so you may want to leave this at 100%.", 1, 2, 0.1, 356, -92, "%.2f")
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide the zone text bar
|
|
----------------------------------------------------------------------
|
|
|
|
-- Store Blizzard handlers
|
|
local origMiniMapTrackingButtonOnEnter = MiniMapTrackingButton:GetScript("OnEnter")
|
|
local zonta, zontp, zontr, zontx, zonty = MinimapZoneTextButton:GetPoint()
|
|
|
|
-- Function to show zone tooltip
|
|
local function ShowZoneTip(doNotShow)
|
|
if LeaPlusLC["HideZoneTextBar"] == "On" then
|
|
-- Show zone information in tooltip
|
|
local zoneName = GetZoneText()
|
|
local subzoneName = GetSubZoneText()
|
|
if subzoneName == zoneName then subzoneName = "" end
|
|
-- Change the owner and position (needed for Minimap_SetTooltip)
|
|
GameTooltip:SetOwner(MinimapZoneTextButton, "ANCHOR_LEFT")
|
|
MinimapZoneTextButton:SetAllPoints(MiniMapTrackingButton)
|
|
-- Show the tooltip
|
|
local pvpType, isSubZonePvP, factionName = GetZonePVPInfo()
|
|
Minimap_SetTooltip(pvpType, factionName)
|
|
GameTooltip:Show()
|
|
if doNotShow == true then GameTooltip:Hide() end
|
|
else
|
|
MinimapZoneTextButton:ClearAllPoints()
|
|
MinimapZoneTextButton:SetPoint(zonta, zontp, zontr, zontx, zonty)
|
|
end
|
|
end
|
|
|
|
-- Function to set the zone text bar position
|
|
local function SetTitleBarPos()
|
|
if OrderHallCommandBar then
|
|
if OrderHallCommandBar:IsShown() then
|
|
-- Order hall command bar is showing so move minimap cluster to top
|
|
MinimapCluster:ClearAllPoints()
|
|
MinimapCluster:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0)
|
|
if LeaPlusLC["HideZoneTextBar"] == "Off" then
|
|
-- Zone text bar is showing so hide it as it will be behind the order hall command bar
|
|
MinimapBorderTop:SetTexture("")
|
|
MinimapZoneTextButton:Hide()
|
|
MiniMapWorldMapButton:Hide()
|
|
end
|
|
else
|
|
-- Order hall command bar is not showing
|
|
if LeaPlusLC["HideZoneTextBar"] == "On" then
|
|
-- Zone text bar is being hidden so move minimap cluster down below the order hall command bar
|
|
MinimapCluster:ClearAllPoints()
|
|
MinimapCluster:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 20)
|
|
else
|
|
-- Zone text bar is not being hidden so move order hall command bar to top
|
|
MinimapCluster:ClearAllPoints()
|
|
MinimapCluster:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0)
|
|
-- Show zone text bar
|
|
MinimapZoneTextButton:Show()
|
|
MiniMapWorldMapButton:Show()
|
|
MinimapBorderTop:SetTexture("Interface\\Minimap\\UI-Minimap-Border")
|
|
end
|
|
end
|
|
else
|
|
-- Order hall command bar has not been loaded by the game yet
|
|
if LeaPlusLC["HideZoneTextBar"] == "On" then
|
|
MinimapCluster:ClearAllPoints()
|
|
MinimapCluster:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 20)
|
|
else
|
|
MinimapCluster:ClearAllPoints()
|
|
MinimapCluster:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Function to toggle the zone text bar
|
|
local function SetMiniZoneText()
|
|
if LeaPlusLC["HideZoneTextBar"] == "On" then
|
|
-- Hide the zone text bar
|
|
MinimapZoneTextButton:Hide()
|
|
MiniMapWorldMapButton:Hide()
|
|
MinimapBorderTop:SetTexture("")
|
|
-- Move the minimap up to the top
|
|
SetTitleBarPos()
|
|
-- Set the tooltip of the tracking button as the zone name
|
|
MiniMapTrackingButton:SetScript("OnEnter", ShowZoneTip)
|
|
else
|
|
-- Show the zone text bar
|
|
MinimapZoneTextButton:Show()
|
|
MiniMapWorldMapButton:Show()
|
|
MinimapBorderTop:SetTexture("Interface\\Minimap\\UI-Minimap-Border")
|
|
-- Move the minimap to its original position
|
|
SetTitleBarPos()
|
|
-- Set the tooltip of the tracking button as the original one
|
|
MiniMapTrackingButton:SetScript("OnEnter", origMiniMapTrackingButtonOnEnter)
|
|
end
|
|
end
|
|
|
|
-- Set the zone text bar layout and tooltip position when option is clicked
|
|
LeaPlusCB["HideZoneTextBar"]:HookScript("OnClick", function()
|
|
SetMiniZoneText()
|
|
ShowZoneTip(true)
|
|
end)
|
|
|
|
-- Set the zone text bar layout on startup
|
|
SetMiniZoneText()
|
|
|
|
-- Function to move the minimap down when order hall bar is shown or option is clicked
|
|
local function ManageCommandBar()
|
|
|
|
-- Set zone text bar when order hall bar is shown
|
|
OrderHallCommandBar:HookScript("OnShow", function()
|
|
C_Timer.After(0.1, function()
|
|
if OrderHallCommandBar:IsShown() then
|
|
SetTitleBarPos()
|
|
end
|
|
end)
|
|
end)
|
|
|
|
-- Set zone text bar when order hall bar is hidden
|
|
OrderHallCommandBar:HookScript("OnHide", SetTitleBarPos)
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_OrderHallUI") then
|
|
ManageCommandBar()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_OrderHallUI" then
|
|
ManageCommandBar()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide the zoom buttons
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to toggle the zoom buttons
|
|
local function ToggleZoomButtons()
|
|
if LeaPlusLC["HideMiniZoomBtns"] == "On" then
|
|
MinimapZoomIn:Hide()
|
|
MinimapZoomOut:Hide()
|
|
else
|
|
MinimapZoomIn:Show()
|
|
MinimapZoomOut:Show()
|
|
end
|
|
end
|
|
|
|
-- Set the zoom buttons when the option is clicked and on startup
|
|
LeaPlusCB["HideMiniZoomBtns"]:HookScript("OnClick", ToggleZoomButtons)
|
|
ToggleZoomButtons()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide the clock
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to show or hide the clock
|
|
local function SetMiniClock()
|
|
if IsAddOnLoaded("Blizzard_TimeManager") then
|
|
if LeaPlusLC["HideMiniClock"] == "On" then
|
|
TimeManagerClockButton:Hide()
|
|
else
|
|
TimeManagerClockButton:Show()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Run function when Blizzard addon is loaded
|
|
if IsAddOnLoaded("Blizzard_TimeManager") then
|
|
SetMiniClock()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_TimeManager" then
|
|
SetMiniClock()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- Update the clock when the checkbox is clicked
|
|
LeaPlusCB["HideMiniClock"]:HookScript("OnClick", SetMiniClock)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Enable mousewheel zoom
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to control mousewheel zoom
|
|
local function MiniZoom(self, arg1)
|
|
if arg1 > 0 and self:GetZoom() < 5 then
|
|
-- Zoom in
|
|
MinimapZoomOut:Enable()
|
|
self:SetZoom(self:GetZoom() + 1)
|
|
if(Minimap:GetZoom() == (Minimap:GetZoomLevels() - 1)) then
|
|
MinimapZoomIn:Disable()
|
|
end
|
|
elseif arg1 < 0 and self:GetZoom() > 0 then
|
|
-- Zoom out
|
|
MinimapZoomIn:Enable()
|
|
self:SetZoom(self:GetZoom() - 1)
|
|
if(Minimap:GetZoom() == 0) then
|
|
MinimapZoomOut:Disable()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Enable mousewheel zoom
|
|
Minimap:EnableMouseWheel(true)
|
|
Minimap:SetScript("OnMouseWheel", MiniZoom)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Minimap scale
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to set the minimap scale
|
|
local function SetMiniScale()
|
|
MinimapCluster:SetScale(LeaPlusLC["MinimapScale"])
|
|
-- Set slider formatted text
|
|
LeaPlusCB["MinimapScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["MinimapScale"] * 100)
|
|
end
|
|
|
|
-- Set minimap scale when slider is changed and on startup
|
|
LeaPlusCB["MinimapScale"]:HookScript("OnValueChanged", SetMiniScale)
|
|
SetMiniScale()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Buttons
|
|
----------------------------------------------------------------------
|
|
|
|
-- Help button tooltip
|
|
SideMinimap.h.tiptext = L["This panel will close automatically if you enter combat."]
|
|
|
|
-- Back button handler
|
|
SideMinimap.b:SetScript("OnClick", function()
|
|
SideMinimap:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page5"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
SideMinimap.r:SetScript("OnClick", function()
|
|
LeaPlusLC["HideZoneTextBar"] = "Off"; SetMiniZoneText(); ShowZoneTip(true)
|
|
LeaPlusLC["HideMiniZoomBtns"] = "Off"; ToggleZoomButtons()
|
|
LeaPlusLC["HideMiniClock"] = "Off"; SetMiniClock()
|
|
LeaPlusLC["MinimapScale"] = 1; SetMiniScale()
|
|
SideMinimap:Hide(); SideMinimap:Show()
|
|
end)
|
|
|
|
-- Configuration button handler
|
|
LeaPlusCB["ModMinimapBtn"]:SetScript("OnClick", function()
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["HideZoneTextBar"] = "On"; SetMiniZoneText(); ShowZoneTip(true)
|
|
LeaPlusLC["HideMiniZoomBtns"] = "Off"; ToggleZoomButtons()
|
|
LeaPlusLC["HideMiniClock"] = "Off"; SetMiniClock()
|
|
LeaPlusLC["MinimapScale"] = 1.30; SetMiniScale()
|
|
else
|
|
-- Show configuration panel
|
|
SideMinimap:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Quest text size
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["QuestFontChange"] == "On" then
|
|
|
|
-- Create configuration panel
|
|
local QuestTextPanel = LeaPlusLC:CreatePanel("Resize quest text", "QuestTextPanel")
|
|
|
|
LeaPlusLC:MakeTx(QuestTextPanel, "Text size", 16, -72)
|
|
LeaPlusLC:MakeSL(QuestTextPanel, "LeaPlusQuestFontSize", "Drag to set the font size of quest text.", 10, 36, 1, 16, -92, "%.0f")
|
|
|
|
-- Function to update the font size
|
|
local function QuestSizeUpdate()
|
|
QuestTitleFont:SetFont(QuestFont:GetFont(), LeaPlusLC["LeaPlusQuestFontSize"] + 3, nil)
|
|
QuestFont:SetFont(QuestFont:GetFont(), LeaPlusLC["LeaPlusQuestFontSize"] + 1, nil)
|
|
QuestFontNormalSmall:SetFont(QuestFontNormalSmall:GetFont(), LeaPlusLC["LeaPlusQuestFontSize"], nil)
|
|
end
|
|
|
|
-- Set text size when slider changes and on startup
|
|
LeaPlusCB["LeaPlusQuestFontSize"]:HookScript("OnValueChanged", QuestSizeUpdate)
|
|
QuestSizeUpdate()
|
|
|
|
-- Help button hidden
|
|
QuestTextPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
QuestTextPanel.b:SetScript("OnClick", function()
|
|
QuestTextPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page4"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
QuestTextPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset slider
|
|
LeaPlusLC["LeaPlusQuestFontSize"] = 12
|
|
QuestSizeUpdate()
|
|
|
|
-- Refresh side panel
|
|
QuestTextPanel:Hide(); QuestTextPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panal when options panel button is clicked
|
|
LeaPlusCB["QuestTextBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["LeaPlusQuestFontSize"] = 18
|
|
QuestSizeUpdate()
|
|
else
|
|
QuestTextPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Resize mail text
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["MailFontChange"] == "On" then
|
|
|
|
-- Create configuration panel
|
|
local MailTextPanel = LeaPlusLC:CreatePanel("Resize mail text", "MailTextPanel")
|
|
|
|
LeaPlusLC:MakeTx(MailTextPanel, "Text size", 16, -72)
|
|
LeaPlusLC:MakeSL(MailTextPanel, "LeaPlusMailFontSize", "Drag to set the font size of mail text.", 10, 36, 1, 16, -92, "%.0f")
|
|
|
|
-- Function to set the text size
|
|
local function MailSizeUpdate()
|
|
local MailFont = QuestFont:GetFont();
|
|
OpenMailBodyText:SetFont(MailFont, LeaPlusLC["LeaPlusMailFontSize"])
|
|
SendMailBodyEditBox:SetFont(MailFont, LeaPlusLC["LeaPlusMailFontSize"])
|
|
end
|
|
|
|
-- Set text size after changing slider and on startup
|
|
LeaPlusCB["LeaPlusMailFontSize"]:HookScript("OnValueChanged", MailSizeUpdate)
|
|
MailSizeUpdate()
|
|
|
|
-- Help button hidden
|
|
MailTextPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
MailTextPanel.b:SetScript("OnClick", function()
|
|
MailTextPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page4"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
MailTextPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset slider
|
|
LeaPlusLC["LeaPlusMailFontSize"] = 15
|
|
|
|
-- Refresh side panel
|
|
MailTextPanel:Hide(); MailTextPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panal when options panel button is clicked
|
|
LeaPlusCB["MailTextBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["LeaPlusMailFontSize"] = 22
|
|
MailSizeUpdate()
|
|
else
|
|
MailTextPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show durability status
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["DurabilityStatus"] == "On" then
|
|
|
|
-- Create durability button
|
|
local cButton = CreateFrame("BUTTON", nil, PaperDollFrame)
|
|
cButton:ClearAllPoints()
|
|
cButton:SetPoint("BOTTOMRIGHT", CharacterFrameInset, "BOTTOMRIGHT", -2, -1)
|
|
cButton:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up")
|
|
cButton:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight")
|
|
cButton:SetSize(32, 32)
|
|
|
|
-- Create durability tables
|
|
local Slots = {"HeadSlot", "ShoulderSlot", "ChestSlot", "WristSlot", "HandsSlot", "WaistSlot", "LegsSlot", "FeetSlot", "MainHandSlot", "SecondaryHandSlot"}
|
|
local SlotsFriendly = {INVTYPE_HEAD, INVTYPE_SHOULDER, INVTYPE_CHEST, INVTYPE_WRIST, INVTYPE_HAND, INVTYPE_WAIST, INVTYPE_LEGS, INVTYPE_FEET, INVTYPE_WEAPONMAINHAND, INVTYPE_WEAPONOFFHAND}
|
|
|
|
-- Show durability status in tooltip or status line (tip or status)
|
|
local function ShowDuraStats(where)
|
|
|
|
local duravaltotal, duramaxtotal, durapercent = 0, 0, 0
|
|
local valcol, id, duraval, duramax
|
|
|
|
if where == "tip" then
|
|
-- Creare layout
|
|
GameTooltip:AddLine("|cffffffff")
|
|
GameTooltip:AddLine("|cffffffff")
|
|
GameTooltip:AddLine("|cffffffff")
|
|
_G["GameTooltipTextLeft1"]:SetText("|cffffffff"); _G["GameTooltipTextRight1"]:SetText("|cffffffff")
|
|
_G["GameTooltipTextLeft2"]:SetText("|cffffffff"); _G["GameTooltipTextRight2"]:SetText("|cffffffff")
|
|
_G["GameTooltipTextLeft3"]:SetText("|cffffffff"); _G["GameTooltipTextRight3"]:SetText("|cffffffff")
|
|
end
|
|
|
|
local validItems = false
|
|
|
|
-- Traverse equipment slots
|
|
for k, slotName in ipairs(Slots) do
|
|
if GetInventorySlotInfo(slotName) then
|
|
id = GetInventorySlotInfo(slotName)
|
|
duraval, duramax = GetInventoryItemDurability(id)
|
|
if duraval ~= nil then
|
|
|
|
-- At least one item has durability stat
|
|
validItems = true
|
|
|
|
-- Add to tooltip
|
|
if where == "tip" then
|
|
durapercent = tonumber(format("%.0f", duraval / duramax * 100))
|
|
valcol = (durapercent >= 80 and "|cff00FF00") or (durapercent >= 60 and "|cff99FF00") or (durapercent >= 40 and "|cffFFFF00") or (durapercent >= 20 and "|cffFF9900") or (durapercent >= 0 and "|cffFF2000") or ("|cffFFFFFF")
|
|
_G["GameTooltipTextLeft1"]:SetText(L["Durability"])
|
|
_G["GameTooltipTextLeft2"]:SetText(_G["GameTooltipTextLeft2"]:GetText() .. SlotsFriendly[k] .. "|n")
|
|
_G["GameTooltipTextRight2"]:SetText(_G["GameTooltipTextRight2"]:GetText() .. valcol .. durapercent .. "%" .. "|n")
|
|
end
|
|
|
|
duravaltotal = duravaltotal + duraval
|
|
duramaxtotal = duramaxtotal + duramax
|
|
end
|
|
end
|
|
end
|
|
if duravaltotal > 0 and duramaxtotal > 0 then
|
|
durapercent = duravaltotal / duramaxtotal * 100
|
|
else
|
|
durapercent = 0
|
|
end
|
|
|
|
if where == "tip" then
|
|
|
|
if validItems == true then
|
|
-- Show overall durability in the tooltip
|
|
if durapercent >= 80 then valcol = "|cff00FF00" elseif durapercent >= 60 then valcol = "|cff99FF00" elseif durapercent >= 40 then valcol = "|cffFFFF00" elseif durapercent >= 20 then valcol = "|cffFF9900" elseif durapercent >= 0 then valcol = "|cffFF2000" else return end
|
|
_G["GameTooltipTextLeft3"]:SetText(L["Overall"] .. " " .. valcol)
|
|
_G["GameTooltipTextRight3"]:SetText(valcol .. string.format("%.0f", durapercent) .. "%")
|
|
|
|
-- Show lines of the tooltip
|
|
GameTooltipTextLeft1:Show(); GameTooltipTextRight1:Show()
|
|
GameTooltipTextLeft2:Show(); GameTooltipTextRight2:Show()
|
|
GameTooltipTextLeft3:Show(); GameTooltipTextRight3:Show()
|
|
GameTooltipTextRight2:SetJustifyH"RIGHT";
|
|
GameTooltipTextRight3:SetJustifyH"RIGHT";
|
|
GameTooltip:Show()
|
|
else
|
|
-- No items have durability stat
|
|
GameTooltip:ClearLines()
|
|
GameTooltip:AddLine("" .. L["Durability"],1.0, 0.85, 0.0)
|
|
GameTooltip:AddLine("" .. L["No items with durability equipped."], 1, 1, 1)
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
elseif where == "status" then
|
|
if validItems == true then
|
|
-- Show simple status line instead
|
|
if tonumber(durapercent) >= 0 then -- Ensure character has some durability items equipped
|
|
LeaPlusLC:Print(L["You have"] .. " " .. string.format("%.0f", durapercent) .. "%" .. " " .. L["durability"] .. ".")
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
-- Hover over the durability button to show the durability tooltip
|
|
cButton:SetScript("OnEnter", function()
|
|
GameTooltip:SetOwner(cButton, "ANCHOR_RIGHT");
|
|
ShowDuraStats("tip");
|
|
end)
|
|
cButton:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Create frame to watch events
|
|
local DeathDura = CreateFrame("FRAME")
|
|
DeathDura:RegisterEvent("PLAYER_DEAD")
|
|
DeathDura:SetScript("OnEvent", function(self, event)
|
|
ShowDuraStats("status")
|
|
DeathDura:UnregisterEvent("PLAYER_DEAD")
|
|
C_Timer.After(2, function()
|
|
DeathDura:RegisterEvent("PLAYER_DEAD")
|
|
end)
|
|
end)
|
|
|
|
hooksecurefunc("AcceptResurrect", function()
|
|
-- Player has ressed without releasing
|
|
ShowDuraStats("status")
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide zone text
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideZoneText"] == "On" then
|
|
ZoneTextFrame:SetScript("OnShow", ZoneTextFrame.Hide);
|
|
SubZoneTextFrame:SetScript("OnShow", SubZoneTextFrame.Hide);
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable sticky chat
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoStickyChat"] == "On" then
|
|
-- These taint if set to anything other than nil
|
|
ChatTypeInfo.WHISPER.sticky = nil
|
|
ChatTypeInfo.BN_WHISPER.sticky = nil
|
|
ChatTypeInfo.CHANNEL.sticky = nil
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide stance bar
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoClassBar"] == "On" then
|
|
local stancebar = CreateFrame("FRAME", nil, UIParent)
|
|
stancebar:Hide()
|
|
StanceBarFrame:UnregisterAllEvents()
|
|
StanceBarFrame:SetParent(stancebar)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide gryphons
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoGryphons"] == "On" then
|
|
MainMenuBarArtFrame.LeftEndCap:Hide();
|
|
MainMenuBarArtFrame.RightEndCap:Hide();
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable chat fade
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoChatFade"] == "On" then
|
|
-- Process normal and existing chat frames
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
_G["ChatFrame" .. i]:SetFading(false)
|
|
end
|
|
end
|
|
-- Process temporary frames
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
_G[cf]:SetFading(false)
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Use easy chat frame resizing
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["UseEasyChatResizing"] == "On" then
|
|
ChatFrame1Tab:HookScript("OnMouseDown", function(self,arg1)
|
|
if arg1 == "LeftButton" then
|
|
if select(8, GetChatWindowInfo(1)) then
|
|
ChatFrame1:StartSizing("TOP")
|
|
end
|
|
end
|
|
end)
|
|
ChatFrame1Tab:SetScript("OnMouseUp", function(self,arg1)
|
|
if arg1 == "LeftButton" then
|
|
ChatFrame1:StopMovingOrSizing()
|
|
FCF_SavePositionAndDimensions(ChatFrame1)
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Increase chat history
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["MaxChatHstory"] == "On" then
|
|
-- Process normal and existing chat frames
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] and _G["ChatFrame" .. i]:GetMaxLines() ~= 4096 then
|
|
_G["ChatFrame" .. i]:SetMaxLines(4096);
|
|
end
|
|
end
|
|
-- Process temporary chat frames
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
if (_G[cf]:GetMaxLines() ~= 4096) then
|
|
_G[cf]:SetMaxLines(4096);
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide error messages
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["HideErrorMessages"] == "On" then
|
|
|
|
-- Error message events
|
|
local OrigErrHandler = UIErrorsFrame:GetScript('OnEvent')
|
|
UIErrorsFrame:SetScript('OnEvent', function (self, event, id, err, ...)
|
|
if event == "UI_ERROR_MESSAGE" then
|
|
-- Hide error messages
|
|
if LeaPlusLC["ShowErrorsFlag"] == 1 then
|
|
if err == ERR_INV_FULL or
|
|
err == ERR_QUEST_LOG_FULL or
|
|
err == ERR_RAID_GROUP_ONLY or
|
|
err == ERR_PARTY_LFG_BOOT_LIMIT or
|
|
err == ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE or
|
|
err == ERR_PARTY_LFG_BOOT_IN_COMBAT or
|
|
err == ERR_PARTY_LFG_BOOT_IN_PROGRESS or
|
|
err == ERR_PARTY_LFG_BOOT_LOOT_ROLLS or
|
|
err == ERR_PARTY_LFG_TELEPORT_IN_COMBAT or
|
|
err == ERR_PET_SPELL_DEAD or
|
|
err == ERR_PLAYER_DEAD or
|
|
err == SPELL_FAILED_TARGET_NO_POCKETS or
|
|
err == ERR_ALREADY_PICKPOCKETED or
|
|
err:find(format(ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S, ".+")) then
|
|
return OrigErrHandler(self, event, id, err, ...)
|
|
end
|
|
else
|
|
return OrigErrHandler(self, event, id, err, ...)
|
|
end
|
|
elseif event == 'UI_INFO_MESSAGE' then
|
|
-- Show information messages
|
|
return OrigErrHandler(self, event, id, err, ...)
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
-- Release memory
|
|
LeaPlusLC.Isolated = nil
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L40: Player
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:Player()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable sticky editbox
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoStickyEditbox"] == "On" then
|
|
hooksecurefunc("ChatEdit_OnEditFocusLost", function(self)
|
|
ChatEdit_DeactivateChat(self)
|
|
ChatEdit_ClearChat(self)
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Sync from friends (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
hooksecurefunc(QuestSessionManager.StartDialog, "Show", function(self)
|
|
if LeaPlusLC["SyncFromFriends"] == "On" then
|
|
local details = C_QuestSession.GetSessionBeginDetails()
|
|
if details then
|
|
for index, unit in ipairs({"player", "party1", "party2", "party3", "party4",}) do
|
|
if UnitGUID(unit) == details.guid then
|
|
local requesterName = UnitName(unit)
|
|
if requesterName and LeaPlusLC:FriendCheck(requesterName) then
|
|
self.ButtonContainer.Confirm:Click()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Set weather density (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Create configuration panel
|
|
local weatherPanel = LeaPlusLC:CreatePanel("Set weather density", "weatherPanel")
|
|
LeaPlusLC:MakeTx(weatherPanel, "Settings", 16, -72)
|
|
LeaPlusLC:MakeSL(weatherPanel, "WeatherLevel", "Drag to set the density of weather effects.", 0, 3, 1, 16, -92, "%.0f")
|
|
|
|
local weatherSliderTable = {L["Off"], L["Low"], L["Medium"], L["High"]}
|
|
|
|
-- Function to set the weather density
|
|
local function SetWeatherFunc()
|
|
LeaPlusCB["WeatherLevel"].f:SetText(LeaPlusLC["WeatherLevel"] .. " (" .. weatherSliderTable[LeaPlusLC["WeatherLevel"] + 1] .. ")")
|
|
if LeaPlusLC["SetWeatherDensity"] == "On" then
|
|
SetCVar("WeatherDensity", LeaPlusLC["WeatherLevel"])
|
|
SetCVar("RAIDweatherDensity", LeaPlusLC["WeatherLevel"])
|
|
else
|
|
SetCVar("WeatherDensity", "3")
|
|
SetCVar("RAIDweatherDensity", "3")
|
|
end
|
|
end
|
|
|
|
-- Set weather density when options are clicked and on startup if option is enabled
|
|
LeaPlusCB["SetWeatherDensity"]:HookScript("OnClick", SetWeatherFunc)
|
|
LeaPlusCB["WeatherLevel"]:HookScript("OnValueChanged", SetWeatherFunc)
|
|
if LeaPlusLC["SetWeatherDensity"] == "On" then SetWeatherFunc() end
|
|
|
|
-- Prevent weather density from being changed when particle density is changed
|
|
hooksecurefunc("SetCVar", function(setting, value)
|
|
if setting and LeaPlusLC["SetWeatherDensity"] == "On" then
|
|
if setting == "graphicsParticleDensity" then
|
|
if GetCVar("WeatherDensity") ~= LeaPlusLC["WeatherLevel"] then
|
|
C_Timer.After(0.1, function()
|
|
SetCVar("WeatherDensity", LeaPlusLC["WeatherLevel"])
|
|
end)
|
|
end
|
|
elseif setting == "raidGraphicsParticleDensity" then
|
|
if GetCVar("RAIDweatherDensity") ~= LeaPlusLC["WeatherLevel"] then
|
|
C_Timer.After(0.1, function()
|
|
SetCVar("RAIDweatherDensity", LeaPlusLC["WeatherLevel"])
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Help button hidden
|
|
weatherPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
weatherPanel.b:SetScript("OnClick", function()
|
|
weatherPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page7"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
weatherPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset slider
|
|
LeaPlusLC["WeatherLevel"] = 3
|
|
|
|
-- Refresh side panel
|
|
weatherPanel:Hide(); weatherPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panal when options panel button is clicked
|
|
LeaPlusCB["SetWeatherDensityBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["WeatherLevel"] = 0
|
|
SetWeatherFunc()
|
|
else
|
|
weatherPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Remove raid restrictions (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to set raid restrictions
|
|
local function SetRaidFunc()
|
|
if LeaPlusLC["NoRaidRestrictions"] == "On" then
|
|
SetAllowLowLevelRaid(true)
|
|
else
|
|
SetAllowLowLevelRaid(false)
|
|
end
|
|
end
|
|
|
|
-- Run function when option is clicked and on startup (if enabled)
|
|
LeaPlusCB["NoRaidRestrictions"]:HookScript("OnClick", SetRaidFunc)
|
|
if LeaPlusLC["NoRaidRestrictions"] == "On" then SetRaidFunc() end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable screen glow (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to set screen glow
|
|
local function SetGlow()
|
|
if LeaPlusLC["NoScreenGlow"] == "On" then
|
|
SetCVar("ffxGlow", "0")
|
|
else
|
|
SetCVar("ffxGlow", "1")
|
|
end
|
|
end
|
|
|
|
-- Set screen glow on startup and when option is clicked (if enabled)
|
|
LeaPlusCB["NoScreenGlow"]:HookScript("OnClick", SetGlow)
|
|
if LeaPlusLC["NoScreenGlow"] == "On" then SetGlow() end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable screen effects (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to set screen effects
|
|
local function SetEffects()
|
|
if LeaPlusLC["NoScreenEffects"] == "On" then
|
|
SetCVar("ffxDeath", "0")
|
|
SetCVar("ffxNether", "0")
|
|
else
|
|
SetCVar("ffxDeath", "1")
|
|
SetCVar("ffxNether", "1")
|
|
end
|
|
end
|
|
|
|
-- Set screen effects when option is clicked and on startup (if enabled)
|
|
LeaPlusCB["NoScreenEffects"]:HookScript("OnClick", SetEffects)
|
|
if LeaPlusLC["NoScreenEffects"] == "On" then SetEffects() end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Max camera zoom (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to set camera zoom
|
|
local function SetZoom()
|
|
if LeaPlusLC["MaxCameraZoom"] == "On" then
|
|
SetCVar("cameraDistanceMaxZoomFactor", 2.6)
|
|
else
|
|
SetCVar("cameraDistanceMaxZoomFactor", 1.9)
|
|
end
|
|
end
|
|
|
|
-- Set camera zoom when option is clicked and on startup (if enabled)
|
|
LeaPlusCB["MaxCameraZoom"]:HookScript("OnClick", SetZoom)
|
|
if LeaPlusLC["MaxCameraZoom"] == "On" then SetZoom() end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Universal group chat color (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Function to set chat colors
|
|
local function SetCol()
|
|
if LeaPlusLC["UnivGroupColor"] == "On" then
|
|
ChangeChatColor("RAID", 0.67, 0.67, 1)
|
|
ChangeChatColor("RAID_LEADER", 0.46, 0.78, 1)
|
|
ChangeChatColor("INSTANCE_CHAT", 0.67, 0.67, 1)
|
|
ChangeChatColor("INSTANCE_CHAT_LEADER", 0.46, 0.78, 1)
|
|
else
|
|
ChangeChatColor("RAID", 1, 0.50, 0)
|
|
ChangeChatColor("RAID_LEADER", 1, 0.28, 0.04)
|
|
ChangeChatColor("INSTANCE_CHAT", 1, 0.50, 0)
|
|
ChangeChatColor("INSTANCE_CHAT_LEADER", 1, 0.28, 0.04)
|
|
end
|
|
end
|
|
|
|
-- Set chat colors when option is clicked and on startup (if enabled)
|
|
LeaPlusCB["UnivGroupColor"]:HookScript("OnClick", SetCol)
|
|
if LeaPlusLC["UnivGroupColor"] == "On" then SetCol() end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Minimap button (no reload required)
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
-- Minimap button click function
|
|
local function MiniBtnClickFunc(arg1)
|
|
|
|
-- Prevent options panel from showing if Blizzard options panel is showing
|
|
if InterfaceOptionsFrame:IsShown() or VideoOptionsFrame:IsShown() or ChatConfigFrame:IsShown() then return end
|
|
-- Prevent options panel from showing if Blizzard Store is showing
|
|
if StoreFrame and StoreFrame:GetAttribute("isshown") then return end
|
|
-- Left button down
|
|
if arg1 == "LeftButton" then
|
|
|
|
-- Control key toggles target tracking
|
|
if IsControlKeyDown() and not IsShiftKeyDown() then
|
|
for i = 1, GetNumTrackingTypes() do
|
|
local name, texture, active, category = GetTrackingInfo(i)
|
|
if name == MINIMAP_TRACKING_TARGET then
|
|
if active then
|
|
SetTracking(i, false)
|
|
LeaPlusLC:DisplayMessage(L["Target Tracking Disabled"], true);
|
|
else
|
|
SetTracking(i, true)
|
|
LeaPlusLC:DisplayMessage(L["Target Tracking Enabled"], true);
|
|
end
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Shift key toggles music
|
|
if IsShiftKeyDown() and not IsControlKeyDown() then
|
|
Sound_ToggleMusic();
|
|
return
|
|
end
|
|
|
|
-- Shift key and control key toggles Zygor addon
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
LeaPlusLC:ZygorToggle();
|
|
return
|
|
end
|
|
|
|
-- No modifier key toggles the options panel
|
|
if LeaPlusLC:IsPlusShowing() then
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC:HideConfigPanels()
|
|
else
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC["PageF"]:Show()
|
|
end
|
|
LeaPlusLC["Page"..LeaPlusLC["LeaStartPage"]]:Show()
|
|
end
|
|
|
|
-- Right button down
|
|
if arg1 == "RightButton" then
|
|
|
|
-- Control key toggles error messages
|
|
if IsControlKeyDown() and not IsShiftKeyDown() then
|
|
if LeaPlusDB["HideErrorMessages"] == "On" then -- Checks global
|
|
if LeaPlusLC["ShowErrorsFlag"] == 1 then
|
|
LeaPlusLC["ShowErrorsFlag"] = 0
|
|
LeaPlusLC:DisplayMessage(L["Error messages will be shown"], true);
|
|
else
|
|
LeaPlusLC["ShowErrorsFlag"] = 1
|
|
LeaPlusLC:DisplayMessage(L["Error messages will be hidden"], true);
|
|
end
|
|
return
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Shift key toggles stopwatch
|
|
if IsShiftKeyDown() and not IsControlKeyDown() then
|
|
Stopwatch_Toggle()
|
|
return
|
|
end
|
|
|
|
-- Shift key and control key toggles maximised window mode
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
SetCVar("gxMaximize", tostring(1 - GetCVar("gxMaximize")))
|
|
UpdateWindow()
|
|
end
|
|
return
|
|
end
|
|
|
|
-- No modifier key toggles the options panel
|
|
if LeaPlusLC:IsPlusShowing() then
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC:HideConfigPanels()
|
|
else
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC["PageF"]:Show()
|
|
end
|
|
LeaPlusLC["Page" .. LeaPlusLC["LeaStartPage"]]:Show()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- Create minimap button using LibDBIcon
|
|
local miniButton = LibStub("LibDataBroker-1.1"):NewDataObject("Leatrix_Plus", {
|
|
type = "data source",
|
|
text = "Leatrix Plus",
|
|
icon = "Interface\\HELPFRAME\\ReportLagIcon-Movement",
|
|
OnClick = function(self, btn)
|
|
MiniBtnClickFunc(btn)
|
|
end,
|
|
OnTooltipShow = function(tooltip)
|
|
if not tooltip or not tooltip.AddLine then return end
|
|
tooltip:AddLine("Leatrix Plus")
|
|
end,
|
|
})
|
|
|
|
local icon = LibStub("LibDBIcon-1.0", true)
|
|
icon:Register("Leatrix_Plus", miniButton, LeaPlusDB)
|
|
|
|
-- Function to toggle LibDBIcon
|
|
local function SetLibDBIconFunc()
|
|
if LeaPlusLC["ShowMinimapIcon"] == "On" then
|
|
LeaPlusDB["hide"] = false
|
|
icon:Show("Leatrix_Plus")
|
|
else
|
|
LeaPlusDB["hide"] = true
|
|
icon:Hide("Leatrix_Plus")
|
|
end
|
|
end
|
|
|
|
-- Set LibDBIcon when option is clicked and on startup
|
|
LeaPlusCB["ShowMinimapIcon"]:HookScript("OnClick", SetLibDBIconFunc)
|
|
SetLibDBIconFunc()
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show volume control on character sheet
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowVolume"] == "On" then
|
|
|
|
-- Function to update master volume
|
|
local function MasterVolUpdate()
|
|
if LeaPlusLC["ShowVolume"] == "On" then
|
|
-- Set the volume
|
|
SetCVar("Sound_MasterVolume", LeaPlusLC["LeaPlusMaxVol"]);
|
|
-- Format the slider text
|
|
LeaPlusCB["LeaPlusMaxVol"].f:SetFormattedText("%.0f", LeaPlusLC["LeaPlusMaxVol"] * 20)
|
|
end
|
|
end
|
|
|
|
-- Create slider control
|
|
LeaPlusLC["LeaPlusMaxVol"] = tonumber(GetCVar("Sound_MasterVolume"));
|
|
LeaPlusLC:MakeSL(CharacterModelFrame, "LeaPlusMaxVol", "", 0, 1, 0.05, -34, -328, "%.2f")
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetWidth(64)
|
|
|
|
-- Set slider control value when shown
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetScript("OnShow", function()
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetValue(GetCVar("Sound_MasterVolume"))
|
|
end)
|
|
|
|
-- Update volume when slider control is changed
|
|
LeaPlusCB["LeaPlusMaxVol"]:HookScript("OnValueChanged", function()
|
|
if IsMouseButtonDown("RightButton") and IsShiftKeyDown() then
|
|
-- Dual layout is active so don't adjust slider
|
|
LeaPlusCB["LeaPlusMaxVol"].f:SetFormattedText("%.0f", LeaPlusLC["LeaPlusMaxVol"] * 20)
|
|
LeaPlusCB["LeaPlusMaxVol"]:Hide()
|
|
LeaPlusCB["LeaPlusMaxVol"]:Show()
|
|
return
|
|
else
|
|
-- Set sound level and refresh slider
|
|
MasterVolUpdate()
|
|
end
|
|
end)
|
|
|
|
-- Dual layout
|
|
local function SetVolumePlacement()
|
|
if LeaPlusLC["ShowVolumeInFrame"] == "On" then
|
|
LeaPlusCB["LeaPlusMaxVol"]:ClearAllPoints();
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetPoint("TOPLEFT", 72, -276)
|
|
else
|
|
LeaPlusCB["LeaPlusMaxVol"]:ClearAllPoints();
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetPoint("TOPLEFT", -34, -328)
|
|
end
|
|
end
|
|
|
|
LeaPlusCB["LeaPlusMaxVol"]:SetScript('OnMouseDown', function(self, btn)
|
|
if btn == "RightButton" and IsShiftKeyDown() then
|
|
if LeaPlusLC["ShowVolumeInFrame"] == "On" then LeaPlusLC["ShowVolumeInFrame"] = "Off" else LeaPlusLC["ShowVolumeInFrame"] = "On" end
|
|
SetVolumePlacement();
|
|
end
|
|
end)
|
|
|
|
CharacterModelFrame:HookScript("OnShow",function()
|
|
SetVolumePlacement();
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Use arrow keys in chat
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["UseArrowKeysInChat"] == "On" then
|
|
-- Enable arrow keys for normal and existing chat frames
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
_G["ChatFrame" .. i .. "EditBox"]:SetAltArrowKeyMode(false)
|
|
end
|
|
end
|
|
-- Enable arrow keys for temporary chat frames
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
_G[cf .. "EditBox"]:SetAltArrowKeyMode(false)
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide social button
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoSocialButton"] == "On" then
|
|
-- Create hidden frame to store social button
|
|
local tframe = CreateFrame("FRAME")
|
|
tframe:Hide()
|
|
QuickJoinToastButton:SetParent(tframe)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L41: Manage buffs
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ManageBuffs"] == "On" then
|
|
|
|
-- Allow buff frame to be moved
|
|
BuffFrame:SetMovable(true)
|
|
BuffFrame:SetUserPlaced(true)
|
|
BuffFrame:SetDontSavePosition(true)
|
|
BuffFrame:SetClampedToScreen(true)
|
|
|
|
-- Set buff frame position at startup
|
|
BuffFrame:ClearAllPoints()
|
|
BuffFrame:SetPoint(LeaPlusLC["BuffFrameA"], UIParent, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"])
|
|
BuffFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
TemporaryEnchantFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
|
|
-- Set buff frame position when the game resets it
|
|
hooksecurefunc("UIParent_UpdateTopFramePositions", function()
|
|
BuffFrame:SetMovable(true)
|
|
BuffFrame:ClearAllPoints()
|
|
BuffFrame:SetPoint(LeaPlusLC["BuffFrameA"], UIParent, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"])
|
|
end)
|
|
|
|
-- Create drag frame
|
|
local dragframe = CreateFrame("FRAME", nil, nil, "BackdropTemplate")
|
|
dragframe:SetPoint("TOPRIGHT", BuffFrame, "TOPRIGHT", 0, 2.5)
|
|
dragframe:SetBackdropColor(0.0, 0.5, 1.0)
|
|
dragframe:SetBackdrop({edgeFile = "Interface/Tooltips/UI-Tooltip-Border", tile = false, tileSize = 0, edgeSize = 16, insets = { left = 0, right = 0, top = 0, bottom = 0 }})
|
|
dragframe:SetToplevel(true)
|
|
dragframe:Hide()
|
|
dragframe:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
|
|
dragframe.t = dragframe:CreateTexture()
|
|
dragframe.t:SetAllPoints()
|
|
dragframe.t:SetColorTexture(0.0, 1.0, 0.0, 0.5)
|
|
dragframe.t:SetAlpha(0.5)
|
|
|
|
dragframe.f = dragframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
dragframe.f:SetPoint('CENTER', 0, 0)
|
|
dragframe.f:SetText(L["Buffs"])
|
|
|
|
-- Click handler
|
|
dragframe:SetScript("OnMouseDown", function(self, btn)
|
|
-- Start dragging if left clicked
|
|
if btn == "LeftButton" then
|
|
BuffFrame:StartMoving()
|
|
end
|
|
end)
|
|
|
|
dragframe:SetScript("OnMouseUp", function()
|
|
-- Save frame positions
|
|
BuffFrame:StopMovingOrSizing()
|
|
LeaPlusLC["BuffFrameA"], void, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"] = BuffFrame:GetPoint()
|
|
BuffFrame:SetMovable(true)
|
|
BuffFrame:ClearAllPoints()
|
|
BuffFrame:SetPoint(LeaPlusLC["BuffFrameA"], UIParent, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"])
|
|
end)
|
|
|
|
-- Create configuration panel
|
|
local BuffPanel = LeaPlusLC:CreatePanel("Manage buffs", "BuffPanel")
|
|
|
|
LeaPlusLC:MakeTx(BuffPanel, "Scale", 16, -72)
|
|
LeaPlusLC:MakeSL(BuffPanel, "BuffFrameScale", "Drag to set the buffs frame scale.", 0.5, 2, 0.05, 16, -92, "%.2f")
|
|
|
|
-- Set scale when slider is changed
|
|
LeaPlusCB["BuffFrameScale"]:HookScript("OnValueChanged", function()
|
|
BuffFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
TemporaryEnchantFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
dragframe:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
-- Show formatted slider value
|
|
LeaPlusCB["BuffFrameScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["BuffFrameScale"] * 100)
|
|
end)
|
|
|
|
-- Help button tooltip
|
|
BuffPanel.h.tiptext = L["Drag the frame overlay to position the frame."]
|
|
|
|
-- Back button handler
|
|
BuffPanel.b:SetScript("OnClick", function()
|
|
BuffPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page6"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
BuffPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset position and scale
|
|
LeaPlusLC["BuffFrameA"] = "TOPRIGHT"
|
|
LeaPlusLC["BuffFrameR"] = "TOPRIGHT"
|
|
LeaPlusLC["BuffFrameX"] = -205
|
|
LeaPlusLC["BuffFrameY"] = -13
|
|
LeaPlusLC["BuffFrameScale"] = 1
|
|
BuffFrame:ClearAllPoints()
|
|
BuffFrame:SetPoint(LeaPlusLC["BuffFrameA"], UIParent, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"])
|
|
|
|
-- Refresh configuration panel
|
|
BuffPanel:Hide(); BuffPanel:Show()
|
|
dragframe:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panel when options panel button is clicked
|
|
LeaPlusCB["ManageBuffsButton"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["BuffFrameA"] = "TOPRIGHT"
|
|
LeaPlusLC["BuffFrameR"] = "TOPRIGHT"
|
|
LeaPlusLC["BuffFrameX"] = -271
|
|
LeaPlusLC["BuffFrameY"] = 0
|
|
LeaPlusLC["BuffFrameScale"] = 0.80
|
|
BuffFrame:ClearAllPoints()
|
|
BuffFrame:SetPoint(LeaPlusLC["BuffFrameA"], UIParent, LeaPlusLC["BuffFrameR"], LeaPlusLC["BuffFrameX"], LeaPlusLC["BuffFrameY"])
|
|
BuffFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
TemporaryEnchantFrame:SetScale(LeaPlusLC["BuffFrameScale"])
|
|
else
|
|
-- Find out if the UI has a non-standard scale
|
|
if GetCVar("useuiscale") == "1" then
|
|
LeaPlusLC["gscale"] = GetCVar("uiscale")
|
|
else
|
|
LeaPlusLC["gscale"] = 1
|
|
end
|
|
|
|
-- Set drag frame size according to UI scale
|
|
dragframe:SetWidth(280 * LeaPlusLC["gscale"])
|
|
dragframe:SetHeight(225 * LeaPlusLC["gscale"])
|
|
|
|
-- Show configuration panel
|
|
BuffPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
dragframe:Show()
|
|
end
|
|
end)
|
|
|
|
-- Hide drag frame when configuration panel is closed
|
|
BuffPanel:HookScript("OnHide", function() dragframe:Hide() end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L42: Manage frames
|
|
----------------------------------------------------------------------
|
|
|
|
-- Frame Movement
|
|
if LeaPlusLC["FrmEnabled"] == "On" then
|
|
|
|
-- Lock the player and target frames
|
|
PlayerFrame:RegisterForDrag()
|
|
TargetFrame:RegisterForDrag()
|
|
|
|
-- Remove integrated movement functions to avoid conflicts
|
|
_G.PlayerFrame_ResetUserPlacedPosition = function() end
|
|
_G.TargetFrame_ResetUserPlacedPosition = function() end
|
|
_G.PlayerFrame_SetLocked = function() end
|
|
_G.TargetFrame_SetLocked = function() end
|
|
|
|
-- Create frame table (used for local traversal)
|
|
local FrameTable = {DragPlayerFrame = PlayerFrame, DragTargetFrame = TargetFrame, DragGhostFrame = GhostFrame, DragMirrorTimer1 = MirrorTimer1}
|
|
|
|
-- Create main table structure in saved variables if it doesn't exist
|
|
if (LeaPlusDB["Frames"]) == nil then
|
|
LeaPlusDB["Frames"] = {}
|
|
end
|
|
|
|
-- Create frame based table structure in saved variables if it doesn't exist and set initial scales
|
|
for k,v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
-- Create frame table structure if it doesn't exist
|
|
if not LeaPlusDB["Frames"][vf] then
|
|
LeaPlusDB["Frames"][vf] = {}
|
|
end
|
|
-- Set saved scale value to default if it doesn't exist
|
|
if not LeaPlusDB["Frames"][vf]["Scale"] then
|
|
LeaPlusDB["Frames"][vf]["Scale"] = 1.00
|
|
end
|
|
-- Set frame scale to saved value
|
|
_G[vf]:SetScale(LeaPlusDB["Frames"][vf]["Scale"])
|
|
-- Don't save frame position
|
|
_G[vf]:SetMovable(true)
|
|
_G[vf]:SetUserPlaced(true)
|
|
_G[vf]:SetDontSavePosition(true)
|
|
end
|
|
|
|
-- Set frames to manual values
|
|
local function LeaFramesSetPos(frame, point, parent, relative, xoff, yoff)
|
|
frame:SetMovable(true)
|
|
frame:ClearAllPoints()
|
|
frame:SetPoint(point, parent, relative, xoff, yoff)
|
|
end
|
|
|
|
-- Set frames to default values
|
|
local function LeaPlusFramesDefaults()
|
|
LeaFramesSetPos(PlayerFrame , "TOPLEFT" , UIParent, "TOPLEFT" , -19, -4)
|
|
LeaFramesSetPos(TargetFrame , "TOPLEFT" , UIParent, "TOPLEFT" , 250, -4)
|
|
LeaFramesSetPos(GhostFrame , "TOP" , UIParent, "TOP" , -5, -29)
|
|
LeaFramesSetPos(MirrorTimer1 , "TOP" , UIParent, "TOP" , -5, -96)
|
|
end
|
|
|
|
-- Create configuration panel
|
|
local SideFrames = LeaPlusLC:CreatePanel("Manage frames", "SideFrames")
|
|
|
|
-- Variable used to store currently selected frame
|
|
local currentframe
|
|
|
|
-- Create scale title
|
|
LeaPlusLC:MakeTx(SideFrames, "Scale", 16, -72)
|
|
|
|
-- Set initial slider value (will be changed when drag frames are selected)
|
|
LeaPlusLC["FrameScale"] = 1.00
|
|
|
|
-- Create scale slider
|
|
LeaPlusLC:MakeSL(SideFrames, "FrameScale", "Drag to set the scale of the selected frame.", 0.5, 3.0, 0.05, 16, -92, "%.2f")
|
|
LeaPlusCB["FrameScale"]:HookScript("OnValueChanged", function(self, value)
|
|
if currentframe then -- If a frame is selected
|
|
-- Set real and drag frame scale
|
|
LeaPlusDB["Frames"][currentframe]["Scale"] = value
|
|
_G[currentframe]:SetScale(LeaPlusDB["Frames"][currentframe]["Scale"])
|
|
LeaPlusLC["Drag" .. currentframe]:SetScale(LeaPlusDB["Frames"][currentframe]["Scale"])
|
|
-- If target frame scale is changed, also change combo point frame
|
|
if currentframe == "TargetFrame" then
|
|
ComboFrame:SetScale(LeaPlusDB["Frames"]["TargetFrame"]["Scale"])
|
|
end
|
|
-- Set slider formatted text
|
|
LeaPlusCB["FrameScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["FrameScale"] * 100)
|
|
end
|
|
end)
|
|
|
|
-- Set initial scale slider state and value
|
|
LeaPlusCB["FrameScale"]:HookScript("OnShow", function()
|
|
if not currentframe then
|
|
-- No frame selected so select the player frame
|
|
currentframe = PlayerFrame:GetName()
|
|
LeaPlusLC["DragPlayerFrame"].t:SetColorTexture(0.0, 1.0, 0.0,0.5)
|
|
end
|
|
-- Set the scale slider value to the selected frame
|
|
LeaPlusCB["FrameScale"]:SetValue(LeaPlusDB["Frames"][currentframe]["Scale"])
|
|
-- Set slider formatted text
|
|
LeaPlusCB["FrameScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["FrameScale"] * 100)
|
|
end)
|
|
|
|
-- Help button tooltip
|
|
SideFrames.h.tiptext = L["Drag the frame overlays to position the frames.|n|nTo change the scale of a frame, click it to select it then adjust the scale slider.|n|nThis panel will close automatically if you enter combat."]
|
|
|
|
-- Back button handler
|
|
SideFrames.b:SetScript("OnClick", function()
|
|
-- Hide outer control frame
|
|
SideFrames:Hide()
|
|
-- Hide drag frames
|
|
for k, void in pairs(FrameTable) do
|
|
LeaPlusLC[k]:Hide()
|
|
end
|
|
-- Show options panel at frame section
|
|
LeaPlusLC["PageF"]:Show()
|
|
LeaPlusLC["Page6"]:Show()
|
|
end)
|
|
|
|
-- Reset button handler
|
|
SideFrames.r:SetScript("OnClick", function()
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
-- If player is in combat, print error and stop
|
|
return
|
|
else
|
|
-- Set frames to default positions (presets)
|
|
LeaPlusFramesDefaults()
|
|
for k,v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
-- Store frame locations
|
|
LeaPlusDB["Frames"][vf]["Point"], void, LeaPlusDB["Frames"][vf]["Relative"], LeaPlusDB["Frames"][vf]["XOffset"], LeaPlusDB["Frames"][vf]["YOffset"] = _G[vf]:GetPoint()
|
|
-- Reset real frame scales and save them
|
|
LeaPlusDB["Frames"][vf]["Scale"] = 1.00
|
|
_G[vf]:SetScale(LeaPlusDB["Frames"][vf]["Scale"])
|
|
-- Reset drag frame scales
|
|
LeaPlusLC[k]:SetScale(LeaPlusDB["Frames"][vf]["Scale"])
|
|
end
|
|
-- Set combo frame scale to match target frame scale
|
|
ComboFrame:SetScale(LeaPlusDB["Frames"]["TargetFrame"]["Scale"])
|
|
-- Set the scale slider value to the selected frame scale
|
|
LeaPlusCB["FrameScale"]:SetValue(LeaPlusDB["Frames"][currentframe]["Scale"])
|
|
-- Refresh the panel
|
|
SideFrames:Hide(); SideFrames:Show()
|
|
end
|
|
end)
|
|
|
|
-- Show drag frames with configuration panel
|
|
SideFrames:HookScript("OnShow", function()
|
|
for k, void in pairs(FrameTable) do
|
|
LeaPlusLC[k]:Show()
|
|
end
|
|
end)
|
|
SideFrames:HookScript("OnHide", function()
|
|
for k, void in pairs(FrameTable) do
|
|
LeaPlusLC[k]:Hide()
|
|
end
|
|
end)
|
|
|
|
-- Save frame positions
|
|
local function SaveAllFrames()
|
|
for k, v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
-- Stop real frames from moving
|
|
v:StopMovingOrSizing()
|
|
-- Save frame positions
|
|
LeaPlusDB["Frames"][vf]["Point"], void, LeaPlusDB["Frames"][vf]["Relative"], LeaPlusDB["Frames"][vf]["XOffset"], LeaPlusDB["Frames"][vf]["YOffset"] = v:GetPoint()
|
|
v:SetMovable(true)
|
|
v:ClearAllPoints()
|
|
v:SetPoint(LeaPlusDB["Frames"][vf]["Point"], UIParent, LeaPlusDB["Frames"][vf]["Relative"], LeaPlusDB["Frames"][vf]["XOffset"], LeaPlusDB["Frames"][vf]["YOffset"])
|
|
end
|
|
end
|
|
|
|
-- Prevent changes during combat
|
|
SideFrames:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
SideFrames:SetScript("OnEvent", function()
|
|
-- Hide controls frame
|
|
SideFrames:Hide()
|
|
-- Hide drag frames
|
|
for k,void in pairs(FrameTable) do
|
|
LeaPlusLC[k]:Hide()
|
|
end
|
|
-- Save frame positions
|
|
SaveAllFrames()
|
|
end)
|
|
|
|
-- Create drag frames
|
|
local function LeaPlusMakeDrag(dragframe,realframe)
|
|
|
|
local dragframe = CreateFrame("Frame", nil, nil, "BackdropTemplate")
|
|
LeaPlusLC[dragframe] = dragframe
|
|
dragframe:SetSize(realframe:GetSize())
|
|
dragframe:SetPoint("TOP", realframe, "TOP", 0, 2.5)
|
|
dragframe:SetBackdropColor(0.0, 0.5, 1.0)
|
|
dragframe:SetBackdrop({
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = false, tileSize = 0, edgeSize = 16,
|
|
insets = { left = 0, right = 0, top = 0, bottom = 0 }})
|
|
dragframe:SetToplevel(true)
|
|
dragframe:SetFrameStrata("HIGH")
|
|
|
|
-- Set frame clamps
|
|
realframe:SetClampedToScreen(false)
|
|
|
|
-- Hide the drag frame and make real frame movable
|
|
dragframe:Hide()
|
|
realframe:SetMovable(true)
|
|
|
|
-- Click handler
|
|
dragframe:SetScript("OnMouseDown", function(self, btn)
|
|
|
|
-- Start dragging if left clicked
|
|
if btn == "LeftButton" then
|
|
realframe:SetMovable(true)
|
|
realframe:StartMoving()
|
|
end
|
|
|
|
-- Set all drag frames to blue then tint the selected frame to green
|
|
for k,v in pairs(FrameTable) do
|
|
LeaPlusLC[k].t:SetColorTexture(0.0, 0.5, 1.0, 0.5)
|
|
end
|
|
dragframe.t:SetColorTexture(0.0, 1.0, 0.0, 0.5)
|
|
|
|
-- Set currentframe variable to selected frame and set the scale slider value
|
|
currentframe = realframe:GetName();
|
|
LeaPlusCB["FrameScale"]:SetValue(LeaPlusDB["Frames"][currentframe]["Scale"])
|
|
|
|
end)
|
|
|
|
dragframe:SetScript("OnMouseUp", function()
|
|
-- Save frame positions
|
|
SaveAllFrames();
|
|
end)
|
|
|
|
dragframe.t = dragframe:CreateTexture()
|
|
dragframe.t:SetAllPoints()
|
|
dragframe.t:SetColorTexture(0.0, 0.5, 1.0, 0.5)
|
|
dragframe.t:SetAlpha(0.5)
|
|
|
|
dragframe.f = dragframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
dragframe.f:SetPoint('CENTER', 0, 0)
|
|
|
|
-- Add titles
|
|
if realframe:GetName() == "PlayerFrame" then dragframe.f:SetText(L["Player"]) end
|
|
if realframe:GetName() == "TargetFrame" then dragframe.f:SetText(L["Target"]) end
|
|
if realframe:GetName() == "MirrorTimer1" then dragframe.f:SetText(L["Timer"]) end
|
|
if realframe:GetName() == "GhostFrame" then dragframe.f:SetText(L["Ghost"]) end
|
|
return LeaPlusLC[dragframe]
|
|
|
|
end
|
|
|
|
for k,v in pairs(FrameTable) do
|
|
LeaPlusLC[k] = LeaPlusMakeDrag(k,v)
|
|
end
|
|
|
|
-- Set frame scales
|
|
for k,v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
_G[vf]:SetScale(LeaPlusDB["Frames"][vf]["Scale"])
|
|
LeaPlusLC[k]:SetScale(LeaPlusDB["Frames"][vf]["Scale"])
|
|
end
|
|
ComboFrame:SetScale(LeaPlusDB["Frames"]["TargetFrame"]["Scale"]);
|
|
|
|
-- Load defaults first then overwrite with saved values if they exist
|
|
LeaPlusFramesDefaults()
|
|
if LeaPlusDB["Frames"] then
|
|
for k,v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
if LeaPlusDB["Frames"][vf] then
|
|
if LeaPlusDB["Frames"][vf]["Point"] and LeaPlusDB["Frames"][vf]["Relative"] and LeaPlusDB["Frames"][vf]["XOffset"] and LeaPlusDB["Frames"][vf]["YOffset"] then
|
|
_G[vf]:SetMovable(true)
|
|
_G[vf]:ClearAllPoints()
|
|
_G[vf]:SetPoint(LeaPlusDB["Frames"][vf]["Point"], UIParent, LeaPlusDB["Frames"][vf]["Relative"], LeaPlusDB["Frames"][vf]["XOffset"], LeaPlusDB["Frames"][vf]["YOffset"])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Add move button
|
|
LeaPlusCB["MoveFramesButton"]:SetScript("OnClick", function()
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaFramesSetPos(PlayerFrame , "TOPLEFT" , UIParent, "TOPLEFT" , "-35" , "-14")
|
|
LeaFramesSetPos(TargetFrame , "TOPLEFT" , UIParent, "TOPLEFT" , "190" , "-14")
|
|
LeaFramesSetPos(GhostFrame , "CENTER" , UIParent, "CENTER" , "3" , "-142")
|
|
LeaFramesSetPos(MirrorTimer1 , "TOP" , UIParent, "TOP" , "0" , "-120")
|
|
-- Player
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["Scale"] = 1.20;
|
|
PlayerFrame:SetScale(LeaPlusDB["Frames"]["PlayerFrame"]["Scale"])
|
|
LeaPlusLC["DragPlayerFrame"]:SetScale(LeaPlusDB["Frames"]["PlayerFrame"]["Scale"])
|
|
-- Target
|
|
LeaPlusDB["Frames"]["TargetFrame"]["Scale"] = 1.20;
|
|
TargetFrame:SetScale(LeaPlusDB["Frames"]["TargetFrame"]["Scale"])
|
|
LeaPlusLC["DragTargetFrame"]:SetScale(LeaPlusDB["Frames"]["TargetFrame"]["Scale"])
|
|
-- Set the slider to the selected frame (if there is one)
|
|
if currentframe then LeaPlusCB["FrameScale"]:SetValue(LeaPlusDB["Frames"][currentframe]["Scale"]); end
|
|
-- Save locations
|
|
for k,v in pairs(FrameTable) do
|
|
local vf = v:GetName()
|
|
LeaPlusDB["Frames"][vf]["Point"], void, LeaPlusDB["Frames"][vf]["Relative"], LeaPlusDB["Frames"][vf]["XOffset"], LeaPlusDB["Frames"][vf]["YOffset"] = _G[vf]:GetPoint()
|
|
end
|
|
else
|
|
-- Show mover frame
|
|
SideFrames:Show()
|
|
LeaPlusLC:HideFrames()
|
|
|
|
-- Find out if the UI has a non-standard scale
|
|
if GetCVar("useuiscale") == "1" then
|
|
LeaPlusLC["gscale"] = GetCVar("uiscale")
|
|
else
|
|
LeaPlusLC["gscale"] = 1
|
|
end
|
|
|
|
-- Set all scaled sizes
|
|
for k,v in pairs(FrameTable) do
|
|
LeaPlusLC[k]:SetWidth(v:GetWidth() * LeaPlusLC["gscale"])
|
|
LeaPlusLC[k]:SetHeight(v:GetHeight() * LeaPlusLC["gscale"])
|
|
end
|
|
|
|
-- Set specific scaled sizes for stubborn frames
|
|
LeaPlusLC["DragMirrorTimer1"]:SetSize(206 * LeaPlusLC["gscale"], 50 * LeaPlusLC["gscale"])
|
|
LeaPlusLC["DragGhostFrame"]:SetSize(130 * LeaPlusLC["gscale"], 46 * LeaPlusLC["gscale"])
|
|
end
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L43: Manage widget
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ManageWidget"] == "On" then
|
|
|
|
-- Create and manage container for UIWidgetTopCenterContainerFrame
|
|
local topCenterHolder = CreateFrame("Frame", nil, UIParent)
|
|
topCenterHolder:SetPoint("TOP", UIParent, "TOP", 0, -15)
|
|
topCenterHolder:SetSize(10, 58)
|
|
|
|
local topCenterContainer = _G.UIWidgetTopCenterContainerFrame
|
|
topCenterContainer:ClearAllPoints()
|
|
topCenterContainer:SetPoint('CENTER', topCenterHolder)
|
|
|
|
hooksecurefunc(topCenterContainer, 'SetPoint', function(self, void, b)
|
|
if b and (b ~= topCenterHolder) then
|
|
-- Reset parent if it changes from topCenterHolder
|
|
self:ClearAllPoints()
|
|
self:SetPoint('CENTER', topCenterHolder)
|
|
self:SetParent(topCenterHolder)
|
|
end
|
|
end)
|
|
|
|
-- Allow widget frame to be moved
|
|
topCenterHolder:SetMovable(true)
|
|
topCenterHolder:SetUserPlaced(true)
|
|
topCenterHolder:SetDontSavePosition(true)
|
|
topCenterHolder:SetClampedToScreen(false)
|
|
|
|
-- Set widget frame position at startup
|
|
topCenterHolder:ClearAllPoints()
|
|
topCenterHolder:SetPoint(LeaPlusLC["WidgetA"], UIParent, LeaPlusLC["WidgetR"], LeaPlusLC["WidgetX"], LeaPlusLC["WidgetY"])
|
|
topCenterHolder:SetScale(LeaPlusLC["WidgetScale"])
|
|
UIWidgetTopCenterContainerFrame:SetScale(LeaPlusLC["WidgetScale"])
|
|
|
|
-- Create drag frame
|
|
local dragframe = CreateFrame("FRAME", nil, nil, "BackdropTemplate")
|
|
dragframe:SetPoint("CENTER", topCenterHolder, "CENTER", 0, 1)
|
|
dragframe:SetBackdropColor(0.0, 0.5, 1.0)
|
|
dragframe:SetBackdrop({edgeFile = "Interface/Tooltips/UI-Tooltip-Border", tile = false, tileSize = 0, edgeSize = 16, insets = { left = 0, right = 0, top = 0, bottom = 0}})
|
|
dragframe:SetToplevel(true)
|
|
dragframe:Hide()
|
|
dragframe:SetScale(LeaPlusLC["WidgetScale"])
|
|
|
|
dragframe.t = dragframe:CreateTexture()
|
|
dragframe.t:SetAllPoints()
|
|
dragframe.t:SetColorTexture(0.0, 1.0, 0.0, 0.5)
|
|
dragframe.t:SetAlpha(0.5)
|
|
|
|
dragframe.f = dragframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
dragframe.f:SetPoint('CENTER', 0, 0)
|
|
dragframe.f:SetText(L["Widget"])
|
|
|
|
-- Click handler
|
|
dragframe:SetScript("OnMouseDown", function(self, btn)
|
|
-- Start dragging if left clicked
|
|
if btn == "LeftButton" then
|
|
topCenterHolder:StartMoving()
|
|
end
|
|
end)
|
|
|
|
dragframe:SetScript("OnMouseUp", function()
|
|
-- Save frame position
|
|
topCenterHolder:StopMovingOrSizing()
|
|
LeaPlusLC["WidgetA"], void, LeaPlusLC["WidgetR"], LeaPlusLC["WidgetX"], LeaPlusLC["WidgetY"] = topCenterHolder:GetPoint()
|
|
topCenterHolder:SetMovable(true)
|
|
topCenterHolder:ClearAllPoints()
|
|
topCenterHolder:SetPoint(LeaPlusLC["WidgetA"], UIParent, LeaPlusLC["WidgetR"], LeaPlusLC["WidgetX"], LeaPlusLC["WidgetY"])
|
|
end)
|
|
|
|
-- Create configuration panel
|
|
local WidgetPanel = LeaPlusLC:CreatePanel("Manage widget", "WidgetPanel")
|
|
|
|
-- Create Titan Panel screen adjust warning
|
|
local titanFrame = CreateFrame("FRAME", nil, WidgetPanel)
|
|
titanFrame:SetAllPoints()
|
|
titanFrame:Hide()
|
|
LeaPlusLC:MakeTx(titanFrame, "Warning", 16, -172)
|
|
titanFrame.txt = LeaPlusLC:MakeWD(titanFrame, "Titan Panel screen adjust needs to be disabled for the frame to be saved correctly.", 16, -192, 500)
|
|
titanFrame.txt:SetWordWrap(false)
|
|
titanFrame.txt:SetWidth(520)
|
|
titanFrame.btn = LeaPlusLC:CreateButton("fixTitanBtn", titanFrame, "Okay, disable screen adjust for me", "TOPLEFT", 16, -212, 0, 25, true, "Click to disable Titan Panel screen adjust. Your UI will be reloaded.")
|
|
titanFrame.btn:SetScript("OnClick", function()
|
|
TitanPanelSetVar("ScreenAdjust", 1)
|
|
ReloadUI()
|
|
end)
|
|
|
|
LeaPlusLC:MakeTx(WidgetPanel, "Scale", 16, -72)
|
|
LeaPlusLC:MakeSL(WidgetPanel, "WidgetScale", "Drag to set the widget scale.", 0.5, 2, 0.05, 16, -92, "%.2f")
|
|
|
|
-- Set scale when slider is changed
|
|
LeaPlusCB["WidgetScale"]:HookScript("OnValueChanged", function()
|
|
topCenterHolder:SetScale(LeaPlusLC["WidgetScale"])
|
|
UIWidgetTopCenterContainerFrame:SetScale(LeaPlusLC["WidgetScale"])
|
|
dragframe:SetScale(LeaPlusLC["WidgetScale"])
|
|
-- Show formatted slider value
|
|
LeaPlusCB["WidgetScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["WidgetScale"] * 100)
|
|
end)
|
|
|
|
-- Help button tooltip
|
|
WidgetPanel.h.tiptext = L["Drag the frame overlay to position the frame."]
|
|
|
|
-- Back button handler
|
|
WidgetPanel.b:SetScript("OnClick", function()
|
|
WidgetPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page6"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
WidgetPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset position and scale
|
|
LeaPlusLC["WidgetA"] = "TOP"
|
|
LeaPlusLC["WidgetR"] = "TOP"
|
|
LeaPlusLC["WidgetX"] = 0
|
|
LeaPlusLC["WidgetY"] = -15
|
|
LeaPlusLC["WidgetScale"] = 1
|
|
topCenterHolder:ClearAllPoints()
|
|
topCenterHolder:SetPoint(LeaPlusLC["WidgetA"], UIParent, LeaPlusLC["WidgetR"], LeaPlusLC["WidgetX"], LeaPlusLC["WidgetY"])
|
|
|
|
-- Refresh configuration panel
|
|
WidgetPanel:Hide(); WidgetPanel:Show()
|
|
dragframe:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panel when options panel button is clicked
|
|
LeaPlusCB["ManageWidgetButton"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["WidgetA"] = "CENTER"
|
|
LeaPlusLC["WidgetR"] = "CENTER"
|
|
LeaPlusLC["WidgetX"] = 0
|
|
LeaPlusLC["WidgetY"] = -160
|
|
LeaPlusLC["WidgetScale"] = 1.25
|
|
topCenterHolder:ClearAllPoints()
|
|
topCenterHolder:SetPoint(LeaPlusLC["WidgetA"], UIParent, LeaPlusLC["WidgetR"], LeaPlusLC["WidgetX"], LeaPlusLC["WidgetY"])
|
|
topCenterHolder:SetScale(LeaPlusLC["WidgetScale"])
|
|
UIWidgetTopCenterContainerFrame:SetScale(LeaPlusLC["WidgetScale"])
|
|
else
|
|
-- Show Titan Panel screen adjust warning if Titan Panel is installed with screen adjust enabled
|
|
if select(2, GetAddOnInfo("Titan")) then
|
|
if IsAddOnLoaded("Titan") then
|
|
if TitanPanelSetVar and TitanPanelGetVar then
|
|
if not TitanPanelGetVar("ScreenAdjust") then
|
|
titanFrame:Show()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Find out if the UI has a non-standard scale
|
|
if GetCVar("useuiscale") == "1" then
|
|
LeaPlusLC["gscale"] = GetCVar("uiscale")
|
|
else
|
|
LeaPlusLC["gscale"] = 1
|
|
end
|
|
|
|
-- Set drag frame size according to UI scale
|
|
dragframe:SetWidth(160 * LeaPlusLC["gscale"])
|
|
dragframe:SetHeight(79 * LeaPlusLC["gscale"])
|
|
|
|
-- Show configuration panel
|
|
WidgetPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
dragframe:Show()
|
|
end
|
|
end)
|
|
|
|
-- Hide drag frame when configuration panel is closed
|
|
WidgetPanel:HookScript("OnHide", function() dragframe:Hide() end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L44: Manage focus
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ManageFocus"] == "On" then
|
|
|
|
-- Remove integrated movement function to avoid conflicts
|
|
_G.FocusFrame_SetLock = function() end
|
|
_G.FocusFrame_SetSmallSize = function() end
|
|
|
|
-- Allow focus frame to be moved
|
|
FocusFrame:SetMovable(true)
|
|
FocusFrame:SetUserPlaced(true)
|
|
FocusFrame:SetDontSavePosition(true)
|
|
FocusFrame:SetClampedToScreen(true)
|
|
|
|
-- Set focus frame position at startup
|
|
FocusFrame:ClearAllPoints()
|
|
FocusFrame:SetPoint(LeaPlusLC["FocusA"], UIParent, LeaPlusLC["FocusR"], LeaPlusLC["FocusX"], LeaPlusLC["FocusY"])
|
|
FocusFrame:SetScale(LeaPlusLC["FocusScale"])
|
|
|
|
-- Create drag frame
|
|
local dragframe = CreateFrame("FRAME", nil, nil, "BackdropTemplate")
|
|
dragframe:SetBackdropColor(0.0, 0.5, 1.0)
|
|
dragframe:SetBackdrop({edgeFile = "Interface/Tooltips/UI-Tooltip-Border", tile = false, tileSize = 0, edgeSize = 16, insets = { left = 0, right = 0, top = 0, bottom = 0}})
|
|
dragframe:SetToplevel(true)
|
|
dragframe:Hide()
|
|
dragframe:SetScale(LeaPlusLC["FocusScale"])
|
|
|
|
dragframe.t = dragframe:CreateTexture()
|
|
dragframe.t:SetAllPoints()
|
|
dragframe.t:SetColorTexture(0.0, 1.0, 0.0, 0.5)
|
|
dragframe.t:SetAlpha(0.5)
|
|
|
|
dragframe.f = dragframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
dragframe.f:SetPoint('CENTER', 0, 0)
|
|
dragframe.f:SetText(L["Focus"])
|
|
|
|
-- Click handler
|
|
dragframe:SetScript("OnMouseDown", function(self, btn)
|
|
-- Start dragging if left clicked
|
|
if btn == "LeftButton" then
|
|
FocusFrame:StartMoving()
|
|
end
|
|
end)
|
|
|
|
dragframe:SetScript("OnMouseUp", function()
|
|
-- Save frame positions
|
|
FocusFrame:StopMovingOrSizing()
|
|
LeaPlusLC["FocusA"], void, LeaPlusLC["FocusR"], LeaPlusLC["FocusX"], LeaPlusLC["FocusY"] = FocusFrame:GetPoint()
|
|
FocusFrame:SetMovable(true)
|
|
FocusFrame:ClearAllPoints()
|
|
FocusFrame:SetPoint(LeaPlusLC["FocusA"], UIParent, LeaPlusLC["FocusR"], LeaPlusLC["FocusX"], LeaPlusLC["FocusY"])
|
|
end)
|
|
|
|
-- Create configuration panel
|
|
local FocusPanel = LeaPlusLC:CreatePanel("Manage focus", "FocusPanel")
|
|
LeaPlusLC:MakeTx(FocusPanel, "Scale", 16, -72)
|
|
LeaPlusLC:MakeSL(FocusPanel, "FocusScale", "Drag to set the focus frame scale.", 0.5, 2, 0.05, 16, -92, "%.2f")
|
|
|
|
-- Hide panel during combat
|
|
FocusPanel:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
FocusPanel:SetScript("OnEvent", FocusPanel.Hide)
|
|
|
|
-- Set scale when slider is changed
|
|
LeaPlusCB["FocusScale"]:HookScript("OnValueChanged", function()
|
|
FocusFrame:SetScale(LeaPlusLC["FocusScale"])
|
|
dragframe:SetScale(LeaPlusLC["FocusScale"])
|
|
-- Show formatted slider value
|
|
LeaPlusCB["FocusScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["FocusScale"] * 100)
|
|
end)
|
|
|
|
-- Help button tooltip
|
|
FocusPanel.h.tiptext = L["Drag the frame overlay to position the frame.|n|nThis panel will close automatically if you enter combat."]
|
|
|
|
-- Back button handler
|
|
FocusPanel.b:SetScript("OnClick", function()
|
|
FocusPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page6"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
FocusPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset position and scale
|
|
LeaPlusLC["FocusA"] = "CENTER"
|
|
LeaPlusLC["FocusR"] = "CENTER"
|
|
LeaPlusLC["FocusX"] = 0
|
|
LeaPlusLC["FocusY"] = 0
|
|
LeaPlusLC["FocusScale"] = 1
|
|
FocusFrame:ClearAllPoints()
|
|
FocusFrame:SetPoint(LeaPlusLC["FocusA"], UIParent, LeaPlusLC["FocusR"], LeaPlusLC["FocusX"], LeaPlusLC["FocusY"])
|
|
|
|
-- Refresh configuration panel
|
|
FocusPanel:Hide(); FocusPanel:Show()
|
|
dragframe:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panel when options panel button is clicked
|
|
LeaPlusCB["ManageFocusButton"]:SetScript("OnClick", function()
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["FocusA"] = "TOPLEFT"
|
|
LeaPlusLC["FocusR"] = "TOPLEFT"
|
|
LeaPlusLC["FocusX"] = 250
|
|
LeaPlusLC["FocusY"] = -240
|
|
LeaPlusLC["FocusScale"] = 1.00
|
|
FocusFrame:ClearAllPoints()
|
|
FocusFrame:SetPoint(LeaPlusLC["FocusA"], UIParent, LeaPlusLC["FocusR"], LeaPlusLC["FocusX"], LeaPlusLC["FocusY"])
|
|
FocusFrame:SetScale(LeaPlusLC["FocusScale"])
|
|
else
|
|
-- Find out if the UI has a non-standard scale
|
|
if GetCVar("useuiscale") == "1" then
|
|
LeaPlusLC["gscale"] = GetCVar("uiscale")
|
|
else
|
|
LeaPlusLC["gscale"] = 1
|
|
end
|
|
|
|
-- Set drag frame size and position according to UI scale
|
|
dragframe:SetWidth(196 * LeaPlusLC["gscale"])
|
|
dragframe:SetHeight(76 * LeaPlusLC["gscale"])
|
|
dragframe:ClearAllPoints()
|
|
dragframe:SetPoint("CENTER", FocusFrame, "CENTER", -18 * LeaPlusLC["gscale"], 6 * LeaPlusLC["gscale"])
|
|
|
|
-- Show configuration panel
|
|
FocusPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
dragframe:Show()
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Hide drag frame when configuration panel is closed
|
|
FocusPanel:HookScript("OnHide", function() dragframe:Hide() end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L45: Manage power bar
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ManagePowerBar"] == "On" then
|
|
|
|
-- Allow power bar to be moved
|
|
PlayerPowerBarAlt:SetMovable(true)
|
|
PlayerPowerBarAlt:SetUserPlaced(true)
|
|
PlayerPowerBarAlt:SetDontSavePosition(true)
|
|
PlayerPowerBarAlt:SetClampedToScreen(true)
|
|
|
|
-- Set power bar position at startup
|
|
PlayerPowerBarAlt:ClearAllPoints()
|
|
PlayerPowerBarAlt:SetPoint(LeaPlusLC["PowerBarA"], UIParent, LeaPlusLC["PowerBarR"], LeaPlusLC["PowerBarX"], LeaPlusLC["PowerBarY"])
|
|
PlayerPowerBarAlt:SetScale(LeaPlusLC["PowerBarScale"])
|
|
|
|
-- Create drag frame
|
|
local dragframe = CreateFrame("FRAME", nil, nil, "BackdropTemplate")
|
|
dragframe:SetPoint("CENTER", PlayerPowerBarAlt, "CENTER", 0, 1)
|
|
dragframe:SetBackdropColor(0.0, 0.5, 1.0)
|
|
dragframe:SetBackdrop({edgeFile = "Interface/Tooltips/UI-Tooltip-Border", tile = false, tileSize = 0, edgeSize = 16, insets = { left = 0, right = 0, top = 0, bottom = 0}})
|
|
dragframe:SetToplevel(true)
|
|
dragframe:Hide()
|
|
dragframe:SetScale(LeaPlusLC["PowerBarScale"])
|
|
|
|
dragframe.t = dragframe:CreateTexture()
|
|
dragframe.t:SetAllPoints()
|
|
dragframe.t:SetColorTexture(0.0, 1.0, 0.0, 0.5)
|
|
dragframe.t:SetAlpha(0.5)
|
|
|
|
dragframe.f = dragframe:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
dragframe.f:SetPoint('CENTER', 0, 0)
|
|
dragframe.f:SetText(L["Power"])
|
|
|
|
-- Click handler
|
|
dragframe:SetScript("OnMouseDown", function(self, btn)
|
|
-- Start dragging if left clicked
|
|
if btn == "LeftButton" then
|
|
PlayerPowerBarAlt:StartMoving()
|
|
end
|
|
end)
|
|
|
|
dragframe:SetScript("OnMouseUp", function()
|
|
-- Save frame positions
|
|
PlayerPowerBarAlt:StopMovingOrSizing()
|
|
LeaPlusLC["PowerBarA"], void, LeaPlusLC["PowerBarR"], LeaPlusLC["PowerBarX"], LeaPlusLC["PowerBarY"] = PlayerPowerBarAlt:GetPoint()
|
|
PlayerPowerBarAlt:SetMovable(true)
|
|
PlayerPowerBarAlt:ClearAllPoints()
|
|
PlayerPowerBarAlt:SetPoint(LeaPlusLC["PowerBarA"], UIParent, LeaPlusLC["PowerBarR"], LeaPlusLC["PowerBarX"], LeaPlusLC["PowerBarY"])
|
|
end)
|
|
|
|
-- Create configuration panel
|
|
local PowerPanel = LeaPlusLC:CreatePanel("Manage power bar", "PowerPanel")
|
|
|
|
-- Create Dominos Encounter warning
|
|
local dominosFrame = CreateFrame("FRAME", nil, PowerPanel)
|
|
dominosFrame:SetAllPoints()
|
|
dominosFrame:Hide()
|
|
LeaPlusLC:MakeTx(dominosFrame, "Warning", 16, -172)
|
|
LeaPlusLC:MakeWD(dominosFrame, "Dominos Encounter needs to be disabled.", 16, -192, 500)
|
|
dominosFrame.btn = LeaPlusLC:CreateButton("fixDominosBtn", dominosFrame, "Okay, disable Dominos Encounter for me", "TOPLEFT", 16, -212, 0, 25, true, "Click to disable Dominos Encounter for all characters on this realm. This is required for the power bar position to be saved correctly. Your UI will be reloaded.")
|
|
dominosFrame.btn:SetScript("OnClick", function()
|
|
DisableAddOn("Dominos_Encounter", true)
|
|
ReloadUI()
|
|
end)
|
|
|
|
LeaPlusLC:MakeTx(PowerPanel, "Scale", 16, -72)
|
|
LeaPlusLC:MakeSL(PowerPanel, "PowerBarScale", "Drag to set the power bar scale.", 0.5, 2, 0.05, 16, -92, "%.2f")
|
|
|
|
-- Set scale when slider is changed
|
|
LeaPlusCB["PowerBarScale"]:HookScript("OnValueChanged", function()
|
|
PlayerPowerBarAlt:SetScale(LeaPlusLC["PowerBarScale"])
|
|
dragframe:SetScale(LeaPlusLC["PowerBarScale"])
|
|
-- Show formatted slider value
|
|
LeaPlusCB["PowerBarScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["PowerBarScale"] * 100)
|
|
end)
|
|
|
|
-- Help button tooltip
|
|
PowerPanel.h.tiptext = L["Drag the frame overlay to position the frame."]
|
|
|
|
-- Back button handler
|
|
PowerPanel.b:SetScript("OnClick", function()
|
|
PowerPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page6"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
PowerPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset position and scale
|
|
LeaPlusLC["PowerBarA"] = "BOTTOM"
|
|
LeaPlusLC["PowerBarR"] = "BOTTOM"
|
|
LeaPlusLC["PowerBarX"] = 0
|
|
LeaPlusLC["PowerBarY"] = 115
|
|
LeaPlusLC["PowerBarScale"] = 1
|
|
PlayerPowerBarAlt:ClearAllPoints()
|
|
PlayerPowerBarAlt:SetPoint(LeaPlusLC["PowerBarA"], UIParent, LeaPlusLC["PowerBarR"], LeaPlusLC["PowerBarX"], LeaPlusLC["PowerBarY"])
|
|
|
|
-- Refresh configuration panel
|
|
PowerPanel:Hide(); PowerPanel:Show()
|
|
dragframe:Show()
|
|
|
|
end)
|
|
|
|
-- Show configuration panel when options panel button is clicked
|
|
LeaPlusCB["ManagePowerBarButton"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["PowerBarA"] = "CENTER"
|
|
LeaPlusLC["PowerBarR"] = "CENTER"
|
|
LeaPlusLC["PowerBarX"] = 0
|
|
LeaPlusLC["PowerBarY"] = -160
|
|
LeaPlusLC["PowerBarScale"] = 1.25
|
|
PlayerPowerBarAlt:ClearAllPoints()
|
|
PlayerPowerBarAlt:SetPoint(LeaPlusLC["PowerBarA"], UIParent, LeaPlusLC["PowerBarR"], LeaPlusLC["PowerBarX"], LeaPlusLC["PowerBarY"])
|
|
PlayerPowerBarAlt:SetScale(LeaPlusLC["PowerBarScale"])
|
|
else
|
|
-- Show Dominos Encounter warning if Dominos Encounter is installed
|
|
if select(2, GetAddOnInfo("Dominos_Encounter")) then
|
|
if IsAddOnLoaded("Dominos_Encounter") then
|
|
dominosFrame:Show()
|
|
end
|
|
end
|
|
|
|
-- Find out if the UI has a non-standard scale
|
|
if GetCVar("useuiscale") == "1" then
|
|
LeaPlusLC["gscale"] = GetCVar("uiscale")
|
|
else
|
|
LeaPlusLC["gscale"] = 1
|
|
end
|
|
|
|
-- Set drag frame size according to UI scale
|
|
dragframe:SetWidth(210 * LeaPlusLC["gscale"])
|
|
dragframe:SetHeight(46 * LeaPlusLC["gscale"])
|
|
|
|
-- Show configuration panel
|
|
PowerPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
dragframe:Show()
|
|
end
|
|
end)
|
|
|
|
-- Hide drag frame when configuration panel is closed
|
|
PowerPanel:HookScript("OnHide", function() dragframe:Hide() end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide chat buttons
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoChatButtons"] == "On" then
|
|
|
|
-- Create hidden frame to store unwanted frames (more efficient than creating functions)
|
|
local tframe = CreateFrame("FRAME")
|
|
tframe:Hide()
|
|
|
|
-- Function to enable mouse scrolling with CTRL and SHIFT key modifiers
|
|
local function AddMouseScroll(chtfrm)
|
|
if _G[chtfrm] then
|
|
_G[chtfrm]:SetScript("OnMouseWheel", function(self, direction)
|
|
if direction == 1 then
|
|
if IsControlKeyDown() then
|
|
self:ScrollToTop()
|
|
elseif IsShiftKeyDown() then
|
|
self:PageUp()
|
|
else
|
|
self:ScrollUp()
|
|
end
|
|
else
|
|
if IsControlKeyDown() then
|
|
self:ScrollToBottom()
|
|
elseif IsShiftKeyDown() then
|
|
self:PageDown()
|
|
else
|
|
self:ScrollDown()
|
|
end
|
|
end
|
|
end)
|
|
_G[chtfrm]:EnableMouseWheel(true)
|
|
end
|
|
end
|
|
|
|
-- Function to hide chat buttons
|
|
local function HideButtons(chtfrm)
|
|
_G[chtfrm .. "ButtonFrameMinimizeButton"]:SetParent(tframe)
|
|
_G[chtfrm .. "ButtonFrameMinimizeButton"]:Hide();
|
|
_G[chtfrm .. "ButtonFrame"]:SetSize(0.1,0.1)
|
|
_G[chtfrm].ScrollBar:SetParent(tframe)
|
|
_G[chtfrm].ScrollBar:Hide()
|
|
end
|
|
|
|
-- Function to highlight chat tabs and click to scroll to bottom
|
|
local function HighlightTabs(chtfrm)
|
|
-- Set position of bottom button
|
|
_G[chtfrm].ScrollToBottomButton.Flash:SetTexture("Interface/BUTTONS/GRADBLUE.png")
|
|
_G[chtfrm].ScrollToBottomButton:ClearAllPoints()
|
|
_G[chtfrm].ScrollToBottomButton:SetPoint("BOTTOM",_G[chtfrm .. "Tab"],0,-4)
|
|
_G[chtfrm].ScrollToBottomButton:Show()
|
|
_G[chtfrm].ScrollToBottomButton:SetWidth(_G[chtfrm .. "Tab"]:GetWidth() - 12)
|
|
_G[chtfrm].ScrollToBottomButton:SetHeight(24)
|
|
|
|
-- Resize bottom button according to tab size
|
|
_G[chtfrm .. "Tab"]:SetScript("OnSizeChanged", function()
|
|
for j = 1, 50 do
|
|
-- Resize bottom button to tab width
|
|
if _G["ChatFrame" .. j] and _G["ChatFrame" .. j].ScrollToBottomButton then
|
|
_G["ChatFrame" .. j].ScrollToBottomButton:SetWidth(_G["ChatFrame" .. j .. "Tab"]:GetWidth() - 12)
|
|
end
|
|
end
|
|
-- If combat log is hidden, resize it's bottom button
|
|
if LeaPlusLC["NoCombatLogTab"] == "On" then
|
|
if _G["ChatFrame2"].ScrollToBottomButton then
|
|
-- Resize combat log bottom button
|
|
_G["ChatFrame2"].ScrollToBottomButton:SetWidth(0.1);
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Remove click from the bottom button
|
|
_G[chtfrm].ScrollToBottomButton:SetScript("OnClick", nil)
|
|
|
|
-- Remove textures
|
|
_G[chtfrm].ScrollToBottomButton:SetNormalTexture("")
|
|
_G[chtfrm].ScrollToBottomButton:SetHighlightTexture("")
|
|
_G[chtfrm].ScrollToBottomButton:SetPushedTexture("")
|
|
|
|
-- Always scroll to bottom when clicking a tab
|
|
_G[chtfrm .. "Tab"]:HookScript("OnClick", function(self,arg1)
|
|
if arg1 == "LeftButton" then
|
|
_G[chtfrm]:ScrollToBottom();
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
-- Set options for normal and existing chat frames
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
AddMouseScroll("ChatFrame" .. i);
|
|
HideButtons("ChatFrame" .. i);
|
|
HighlightTabs("ChatFrame" .. i)
|
|
end
|
|
end
|
|
|
|
-- Do the functions above for temporary chat frames
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function(chatType)
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
-- Set options for temporary frame
|
|
AddMouseScroll(cf)
|
|
HideButtons(cf)
|
|
HighlightTabs(cf)
|
|
-- Resize flashing alert to match tab width
|
|
_G[cf .. "Tab"]:SetScript("OnSizeChanged", function()
|
|
_G[cf].ScrollToBottomButton:SetWidth(_G[cf .. "Tab"]:GetWidth()-10)
|
|
end)
|
|
end
|
|
end)
|
|
|
|
-- Move voice chat and chat menu buttons inside the chat frame
|
|
ChatFrameChannelButton:ClearAllPoints()
|
|
ChatFrameChannelButton:SetPoint("TOPRIGHT", ChatFrame1Background, "TOPRIGHT", 1, -3)
|
|
ChatFrameChannelButton:SetSize(26,25)
|
|
|
|
ChatFrameToggleVoiceDeafenButton:ClearAllPoints()
|
|
ChatFrameToggleVoiceDeafenButton:SetPoint("TOP", ChatFrameChannelButton, "BOTTOM", 0, -2)
|
|
ChatFrameToggleVoiceDeafenButton:SetSize(26,25)
|
|
|
|
ChatFrameToggleVoiceMuteButton:ClearAllPoints()
|
|
ChatFrameToggleVoiceMuteButton:SetPoint("TOP", ChatFrameToggleVoiceDeafenButton, "BOTTOM", 0, -2)
|
|
ChatFrameToggleVoiceMuteButton:SetSize(26,25)
|
|
|
|
ChatFrameMenuButton:ClearAllPoints()
|
|
ChatFrameMenuButton:SetPoint("BOTTOMRIGHT", ChatFrame1Background, "BOTTOMRIGHT", 3, 18)
|
|
ChatFrameMenuButton:SetSize(29,29)
|
|
|
|
-- Function to set voice chat and chat menu buttons
|
|
local function SetChatButtonFrameButtons()
|
|
if LeaPlusLC["ShowVoiceButtons"] == "On" then
|
|
-- Show voice chat buttons
|
|
ChatFrameChannelButton:SetParent(UIParent)
|
|
ChatFrameToggleVoiceDeafenButton:SetParent(UIParent)
|
|
ChatFrameToggleVoiceMuteButton:SetParent(UIParent)
|
|
else
|
|
-- Hide voice chat buttons
|
|
ChatFrameChannelButton:SetParent(tframe)
|
|
ChatFrameToggleVoiceDeafenButton:SetParent(tframe)
|
|
ChatFrameToggleVoiceMuteButton:SetParent(tframe)
|
|
end
|
|
if LeaPlusLC["ShowChatMenuButton"] == "On" then
|
|
-- Show chat menu button
|
|
ChatFrameMenuButton:SetParent(UIParent)
|
|
else
|
|
-- Hide chat menu button
|
|
ChatFrameMenuButton:SetParent(tframe)
|
|
end
|
|
end
|
|
|
|
-- Create configuration panel
|
|
local HideChatButtonsPanel = LeaPlusLC:CreatePanel("Hide chat buttons", "HideChatButtonsPanel")
|
|
|
|
-- Add checkboxes
|
|
LeaPlusLC:MakeTx(HideChatButtonsPanel, "General", 16, -72)
|
|
LeaPlusLC:MakeCB(HideChatButtonsPanel, "ShowVoiceButtons", "Show voice chat buttons", 16, -92, false, "If checked, voice chat buttons will be shown.")
|
|
LeaPlusLC:MakeCB(HideChatButtonsPanel, "ShowChatMenuButton", "Show chat menu button", 16, -112, false, "If checked, the chat menu button will be shown.")
|
|
|
|
-- Help button hidden
|
|
HideChatButtonsPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
HideChatButtonsPanel.b:SetScript("OnClick", function()
|
|
HideChatButtonsPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page3"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
HideChatButtonsPanel.r:SetScript("OnClick", function()
|
|
|
|
-- Reset checkboxes
|
|
LeaPlusLC["ShowVoiceButtons"] = "Off"
|
|
LeaPlusLC["ShowChatMenuButton"] = "Off"
|
|
|
|
-- Refresh panel
|
|
SetChatButtonFrameButtons()
|
|
HideChatButtonsPanel:Hide(); HideChatButtonsPanel:Show()
|
|
|
|
end)
|
|
|
|
-- Show panal when options panel button is clicked
|
|
LeaPlusCB["NoChatButtonsBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["ShowVoiceButtons"] = "On"
|
|
LeaPlusLC["ShowChatMenuButton"] = "Off"
|
|
SetChatButtonFrameButtons()
|
|
else
|
|
HideChatButtonsPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
-- Run function when options are clicked and on startup
|
|
LeaPlusCB["ShowVoiceButtons"]:HookScript("OnClick", SetChatButtonFrameButtons)
|
|
LeaPlusCB["ShowChatMenuButton"]:HookScript("OnClick", SetChatButtonFrameButtons)
|
|
SetChatButtonFrameButtons()
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Recent chat window
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["RecentChatWindow"] == "On" then
|
|
|
|
-- Create recent chat frame
|
|
local editFrame = CreateFrame("ScrollFrame", nil, UIParent, "InputScrollFrameTemplate")
|
|
|
|
-- Set frame parameters
|
|
editFrame:ClearAllPoints()
|
|
editFrame:SetPoint("BOTTOM", 0, 130)
|
|
editFrame:SetSize(600, LeaPlusLC["RecentChatSize"])
|
|
editFrame:SetFrameStrata("MEDIUM")
|
|
editFrame:SetToplevel(true)
|
|
editFrame:Hide()
|
|
editFrame.CharCount:Hide()
|
|
|
|
-- Add background color
|
|
editFrame.t = editFrame:CreateTexture(nil, "BACKGROUND")
|
|
editFrame.t:SetAllPoints()
|
|
editFrame.t:SetColorTexture(0.00, 0.00, 0.0, 0.6)
|
|
|
|
-- Set textures
|
|
editFrame.LeftTex:SetTexture(editFrame.RightTex:GetTexture()); editFrame.LeftTex:SetTexCoord(1, 0, 0, 1)
|
|
editFrame.BottomTex:SetTexture(editFrame.TopTex:GetTexture()); editFrame.BottomTex:SetTexCoord(0, 1, 1, 0)
|
|
editFrame.BottomRightTex:SetTexture(editFrame.TopRightTex:GetTexture()); editFrame.BottomRightTex:SetTexCoord(0, 1, 1, 0)
|
|
editFrame.BottomLeftTex:SetTexture(editFrame.TopRightTex:GetTexture()); editFrame.BottomLeftTex:SetTexCoord(1, 0, 1, 0)
|
|
editFrame.TopLeftTex:SetTexture(editFrame.TopRightTex:GetTexture()); editFrame.TopLeftTex:SetTexCoord(1, 0, 0, 1)
|
|
|
|
-- Create title bar
|
|
local titleFrame = CreateFrame("ScrollFrame", nil, editFrame, "InputScrollFrameTemplate")
|
|
titleFrame:ClearAllPoints()
|
|
titleFrame:SetPoint("TOP", 0, 32)
|
|
titleFrame:SetSize(600, 24)
|
|
titleFrame:SetFrameStrata("MEDIUM")
|
|
titleFrame:SetToplevel(true)
|
|
titleFrame:SetHitRectInsets(-6, -6, -6, -6)
|
|
titleFrame.CharCount:Hide()
|
|
titleFrame.t = titleFrame:CreateTexture(nil, "BACKGROUND")
|
|
titleFrame.t:SetAllPoints()
|
|
titleFrame.t:SetColorTexture(0.00, 0.00, 0.0, 0.6)
|
|
titleFrame.LeftTex:SetTexture(titleFrame.RightTex:GetTexture()); titleFrame.LeftTex:SetTexCoord(1, 0, 0, 1)
|
|
titleFrame.BottomTex:SetTexture(titleFrame.TopTex:GetTexture()); titleFrame.BottomTex:SetTexCoord(0, 1, 1, 0)
|
|
titleFrame.BottomRightTex:SetTexture(titleFrame.TopRightTex:GetTexture()); titleFrame.BottomRightTex:SetTexCoord(0, 1, 1, 0)
|
|
titleFrame.BottomLeftTex:SetTexture(titleFrame.TopRightTex:GetTexture()); titleFrame.BottomLeftTex:SetTexCoord(1, 0, 1, 0)
|
|
titleFrame.TopLeftTex:SetTexture(titleFrame.TopRightTex:GetTexture()); titleFrame.TopLeftTex:SetTexCoord(1, 0, 0, 1)
|
|
|
|
-- Add message count
|
|
titleFrame.m = titleFrame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
|
titleFrame.m:SetPoint("LEFT", 4, 0)
|
|
titleFrame.m:SetText(L["Messages"] .. ": 0")
|
|
titleFrame.m:SetFont(titleFrame.m:GetFont(), 16, nil)
|
|
|
|
-- Add right-click to close message
|
|
titleFrame.x = titleFrame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
|
titleFrame.x:SetPoint("RIGHT", -4, 0)
|
|
titleFrame.x:SetText(L["Drag to size"] .. " | " .. L["Right-click to close"])
|
|
titleFrame.x:SetFont(titleFrame.x:GetFont(), 16, nil)
|
|
|
|
local titleBox = titleFrame.EditBox
|
|
titleBox:Hide()
|
|
titleBox:SetEnabled(false)
|
|
|
|
-- Drag to resize
|
|
editFrame:SetResizable(true)
|
|
editFrame:SetMinResize(600, 170)
|
|
editFrame:SetMaxResize(600, 560)
|
|
|
|
titleFrame:HookScript("OnMouseDown", function(self, btn)
|
|
if btn == "LeftButton" then
|
|
editFrame:StartSizing("TOP")
|
|
end
|
|
end)
|
|
titleFrame:HookScript("OnMouseUp", function(self, btn)
|
|
if btn == "LeftButton" then
|
|
editFrame:StopMovingOrSizing()
|
|
LeaPlusLC["RecentChatSize"] = editFrame:GetHeight()
|
|
elseif btn == "MiddleButton" then
|
|
-- Reset frame size
|
|
LeaPlusLC["RecentChatSize"] = 170
|
|
editFrame:SetSize(600, LeaPlusLC["RecentChatSize"])
|
|
editFrame:ClearAllPoints()
|
|
editFrame:SetPoint("BOTTOM", 0, 130)
|
|
end
|
|
end)
|
|
|
|
-- Create editbox
|
|
local editBox = editFrame.EditBox
|
|
editBox:SetAltArrowKeyMode(false)
|
|
editBox:SetTextInsets(4, 4, 4, 4)
|
|
editBox:SetWidth(editFrame:GetWidth() - 30)
|
|
editBox:SetFont(editBox:GetFont(), 16)
|
|
|
|
-- Manage focus
|
|
editBox:HookScript("OnEditFocusLost", function()
|
|
if MouseIsOver(titleFrame) and IsMouseButtonDown("LeftButton") then
|
|
editBox:SetFocus()
|
|
end
|
|
end)
|
|
|
|
-- Close frame with right-click of editframe or editbox
|
|
local function CloseRecentChatWindow()
|
|
editBox:SetText("")
|
|
editBox:ClearFocus()
|
|
editFrame:Hide()
|
|
end
|
|
|
|
editFrame:SetScript("OnMouseDown", function(self, btn)
|
|
if btn == "RightButton" then CloseRecentChatWindow() end
|
|
end)
|
|
|
|
editBox:SetScript("OnMouseDown", function(self, btn)
|
|
if btn == "RightButton" then CloseRecentChatWindow() end
|
|
end)
|
|
|
|
titleFrame:HookScript("OnMouseDown", function(self, btn)
|
|
if btn == "RightButton" then CloseRecentChatWindow() end
|
|
end)
|
|
|
|
-- Disable text changes while still allowing editing controls to work
|
|
editBox:EnableKeyboard(false)
|
|
editBox:SetScript("OnKeyDown", function() end)
|
|
|
|
--- Clear highlighted text if escape key is pressed
|
|
editBox:HookScript("OnEscapePressed", function()
|
|
editBox:HighlightText(0, 0)
|
|
editBox:ClearFocus()
|
|
end)
|
|
|
|
-- Clear highlighted text and clear focus if enter key is pressed
|
|
editBox:SetScript("OnEnterPressed", function()
|
|
editBox:HighlightText(0, 0)
|
|
editBox:ClearFocus()
|
|
end)
|
|
|
|
-- Populate recent chat frame with chat messages
|
|
local function ShowChatbox(chtfrm)
|
|
editBox:SetText("")
|
|
local NumMsg = chtfrm:GetNumMessages()
|
|
local StartMsg = 1
|
|
if NumMsg > 128 then StartMsg = NumMsg - 127 end
|
|
local totalMsgCount = 0
|
|
for iMsg = StartMsg, NumMsg do
|
|
local chatMessage, r, g, b, chatTypeID = chtfrm:GetMessageInfo(iMsg)
|
|
if chatMessage then
|
|
|
|
-- Handle Battle.net messages
|
|
if string.match(chatMessage, "k:(%d+):(%d+):BN_WHISPER:")
|
|
or string.match(chatMessage, "k:(%d+):(%d+):BN_INLINE_TOAST_ALERT:")
|
|
or string.match(chatMessage, "k:(%d+):(%d+):BN_INLINE_TOAST_BROADCAST:")
|
|
then
|
|
local ctype
|
|
if string.match(chatMessage, "k:(%d+):(%d+):BN_WHISPER:") then
|
|
ctype = "BN_WHISPER"
|
|
elseif string.match(chatMessage, "k:(%d+):(%d+):BN_INLINE_TOAST_ALERT:") then
|
|
ctype = "BN_INLINE_TOAST_ALERT"
|
|
elseif string.match(chatMessage, "k:(%d+):(%d+):BN_INLINE_TOAST_BROADCAST:") then
|
|
ctype = "BN_INLINE_TOAST_BROADCAST"
|
|
end
|
|
local id = tonumber(string.match(chatMessage, "k:(%d+):%d+:" .. ctype .. ":"))
|
|
local totalBNFriends = BNGetNumFriends()
|
|
for friendIndex = 1, totalBNFriends do
|
|
local accountInfo = C_BattleNet.GetFriendAccountInfo(friendIndex)
|
|
local bnetAccountID = accountInfo.bnetAccountID
|
|
local battleTag = accountInfo.battleTag
|
|
if id == bnetAccountID then
|
|
battleTag = strsplit("#", battleTag)
|
|
chatMessage = chatMessage:gsub("(|HBNplayer%S-|k)(%d-)(:%S-" .. ctype .. "%S-|h)%[(%S-)%](|?h?)(:?)", "[" .. battleTag .. "]:")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Handle colors
|
|
if r and g and b then
|
|
local colorCode = RGBToColorCode(r, g, b)
|
|
chatMessage = colorCode .. chatMessage
|
|
end
|
|
|
|
chatMessage = gsub(chatMessage, "|T.-|t", "") -- Remove textures
|
|
editBox:Insert(chatMessage .. "|r|n")
|
|
|
|
end
|
|
totalMsgCount = totalMsgCount + 1
|
|
end
|
|
titleFrame.m:SetText(L["Messages"] .. ": " .. totalMsgCount)
|
|
editFrame:SetVerticalScroll(0)
|
|
C_Timer.After(0.1, function() editFrame.ScrollBar.ScrollDownButton:Click() end)
|
|
editFrame:Show()
|
|
editBox:ClearFocus()
|
|
end
|
|
|
|
-- Hook normal chat frame tab clicks
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
_G["ChatFrame" .. i .. "Tab"]:HookScript("OnClick", function()
|
|
if IsControlKeyDown() then
|
|
ShowChatbox(_G["ChatFrame" .. i])
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Hook temporary chat frame tab clicks
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
_G[cf .. "Tab"]:HookScript("OnClick", function()
|
|
if IsControlKeyDown() then
|
|
ShowChatbox(_G[cf])
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide alerts
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["NoAlerts"] == "On" then
|
|
hooksecurefunc(AlertFrame, "RegisterEvent", function(self, event)
|
|
AlertFrame:UnregisterEvent(event)
|
|
end)
|
|
AlertFrame:UnregisterAllEvents()
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show cooldowns
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowCooldowns"] == "On" then
|
|
|
|
-- Create main table structure in saved variables if it doesn't exist
|
|
if LeaPlusDB["Cooldowns"] == nil then
|
|
LeaPlusDB["Cooldowns"] = {}
|
|
end
|
|
|
|
-- Create class tables if they don't exist
|
|
for index = 1, GetNumClasses() do
|
|
local classDisplayName, classTag, classID = GetClassInfo(index)
|
|
if LeaPlusDB["Cooldowns"][classTag] == nil then
|
|
LeaPlusDB["Cooldowns"][classTag] = {}
|
|
end
|
|
end
|
|
|
|
-- Get current class and spec
|
|
local PlayerClass = select(2, UnitClass("player"))
|
|
local activeSpec = GetSpecialization() or 1
|
|
|
|
-- Create local tables to store cooldown frames and editboxes
|
|
local icon = {} -- Used to store cooldown frames
|
|
local SpellEB = {} -- Used to store editbox values
|
|
local iCount = 5 -- Number of cooldowns
|
|
|
|
-- Create cooldown frames
|
|
for i = 1, iCount do
|
|
|
|
-- Create cooldown frame
|
|
icon[i] = CreateFrame("Frame", nil, UIParent)
|
|
icon[i]:SetFrameStrata("BACKGROUND")
|
|
icon[i]:SetWidth(20)
|
|
icon[i]:SetHeight(20)
|
|
|
|
-- Create cooldown icon
|
|
icon[i].c = CreateFrame("Cooldown", nil, icon[i], "CooldownFrameTemplate")
|
|
icon[i].c:SetAllPoints()
|
|
icon[i].c:SetReverse(true)
|
|
|
|
-- Create blank texture (will be assigned a cooldown texture later)
|
|
icon[i].t = icon[i]:CreateTexture(nil,"BACKGROUND")
|
|
icon[i].t:SetAllPoints()
|
|
|
|
-- Show icon above target frame and set initial scale
|
|
icon[i]:ClearAllPoints()
|
|
icon[i]:SetPoint("TOPLEFT", TargetFrame, "TOPLEFT", 6 + (22 * (i - 1)), 5)
|
|
icon[i]:SetScale(TargetFrame:GetScale())
|
|
|
|
-- Show tooltip
|
|
icon[i]:SetScript("OnEnter", function(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT", 15, -25)
|
|
GameTooltip:SetText(GetSpellInfo(LeaPlusCB["Spell" .. i]:GetText()))
|
|
end)
|
|
|
|
-- Hide tooltip
|
|
icon[i]:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
end
|
|
|
|
-- Change cooldown icon scale when player frame scale changes
|
|
PlayerFrame:HookScript("OnSizeChanged", function()
|
|
if LeaPlusLC["CooldownsOnPlayer"] == "On" then
|
|
for i = 1, iCount do
|
|
icon[i]:SetScale(PlayerFrame:GetScale())
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Change cooldown icon scale when target frame scale changes
|
|
TargetFrame:HookScript("OnSizeChanged", function()
|
|
if LeaPlusLC["CooldownsOnPlayer"] == "Off" then
|
|
for i = 1, iCount do
|
|
icon[i]:SetScale(TargetFrame:GetScale())
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Function to show cooldown textures in the cooldown frames (run when icons are loaded or changed)
|
|
local function ShowIcon(i, id, owner)
|
|
|
|
local void
|
|
|
|
-- Get spell information
|
|
local spell, void, path = GetSpellInfo(id)
|
|
if spell and path then
|
|
|
|
-- Set icon texture to the spell texture
|
|
icon[i].t:SetTexture(path)
|
|
|
|
-- Set top level and raise frame strata (ensures tooltips show properly)
|
|
icon[i]:SetToplevel(true)
|
|
icon[i]:SetFrameStrata("LOW")
|
|
|
|
-- Handle events
|
|
icon[i]:RegisterUnitEvent("UNIT_AURA", owner)
|
|
icon[i]:RegisterUnitEvent("UNIT_PET", "player")
|
|
icon[i]:SetScript("OnEvent", function(self, event, arg1)
|
|
|
|
-- If pet was dismissed (or otherwise disappears such as when flying), hide pet cooldowns
|
|
if event == "UNIT_PET" then
|
|
if not UnitExists("pet") then
|
|
if LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"] then
|
|
icon[i]:Hide()
|
|
end
|
|
end
|
|
|
|
-- Ensure cooldown belongs to the owner we are watching (player or pet)
|
|
elseif arg1 == owner then
|
|
|
|
-- Hide the cooldown frame (required for cooldowns to disappear after the duration)
|
|
icon[i]:Hide()
|
|
|
|
-- If buff matches cooldown we want, start the cooldown
|
|
for q = 1, 40 do
|
|
local void, void, void, void, length, expire, void, void, void, spellID = UnitBuff(owner, q)
|
|
if spellID and id == spellID then
|
|
icon[i]:Show()
|
|
local start = expire - length
|
|
CooldownFrame_Set(icon[i].c, start, length, 1)
|
|
end
|
|
end
|
|
|
|
end
|
|
end)
|
|
|
|
else
|
|
|
|
-- Spell does not exist so stop watching it
|
|
icon[i]:SetScript("OnEvent", nil)
|
|
icon[i]:Hide()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- Create configuration panel
|
|
local CooldownPanel = LeaPlusLC:CreatePanel("Show cooldowns", "CooldownPanel")
|
|
|
|
-- Function to refresh the editbox tooltip with the spell name
|
|
local function RefSpellTip(self,elapsed)
|
|
local spellinfo, void, icon = GetSpellInfo(self:GetText())
|
|
if spellinfo and spellinfo ~= "" and icon ~= "" then
|
|
GameTooltip:SetOwner(self, "ANCHOR_NONE")
|
|
GameTooltip:ClearAllPoints()
|
|
GameTooltip:SetPoint("RIGHT", self, "LEFT", -10, 0)
|
|
GameTooltip:SetText("|T" .. icon .. ":0|t " .. spellinfo, nil, nil, nil, nil, true)
|
|
else
|
|
GameTooltip:Hide()
|
|
end
|
|
end
|
|
|
|
-- Function to create spell ID editboxes and pet checkboxes
|
|
local function MakeSpellEB(num, x, y, tab, shifttab)
|
|
|
|
-- Create editbox for spell ID
|
|
SpellEB[num] = LeaPlusLC:CreateEditBox("Spell" .. num, CooldownPanel, 70, 6, "TOPLEFT", x, y - 20, "Spell" .. tab, "Spell" .. shifttab)
|
|
SpellEB[num]:SetNumeric(true)
|
|
|
|
-- Set initial value (for current spec)
|
|
SpellEB[num]:SetText(LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. num .. "Idn"] or "")
|
|
|
|
-- Refresh tooltip when mouse is hovering over the editbox
|
|
SpellEB[num]:SetScript("OnEnter", function()
|
|
SpellEB[num]:SetScript("OnUpdate", RefSpellTip)
|
|
end)
|
|
SpellEB[num]:SetScript("OnLeave", function()
|
|
SpellEB[num]:SetScript("OnUpdate", nil)
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
-- Create checkbox for pet cooldown
|
|
LeaPlusLC:MakeCB(CooldownPanel, "Spell" .. num .."Pet", "", 462, y - 20, false, "")
|
|
LeaPlusCB["Spell" .. num .."Pet"]:SetHitRectInsets(0, 0, 0, 0)
|
|
|
|
end
|
|
|
|
-- Add titles
|
|
LeaPlusLC:MakeTx(CooldownPanel, "Spell ID", 384, -92)
|
|
LeaPlusLC:MakeTx(CooldownPanel, "Pet", 462, -92)
|
|
|
|
-- Add editboxes and checkboxes
|
|
MakeSpellEB(1, 386, -92, "2", "5")
|
|
MakeSpellEB(2, 386, -122, "3", "1")
|
|
MakeSpellEB(3, 386, -152, "4", "2")
|
|
MakeSpellEB(4, 386, -182, "5", "3")
|
|
MakeSpellEB(5, 386, -212, "1", "4")
|
|
|
|
-- Add checkboxes
|
|
LeaPlusLC:MakeTx(CooldownPanel, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(CooldownPanel, "ShowCooldownID", "Show the spell ID in buff icon tooltips", 16, -92, false, "If checked, spell IDs will be shown in buff icon tooltips located in the buff frame and under the target frame.");
|
|
LeaPlusLC:MakeCB(CooldownPanel, "NoCooldownDuration", "Hide cooldown duration numbers (if enabled)", 16, -112, false, "If checked, cooldown duration numbers will not be shown over the cooldowns.|n|nIf unchecked, cooldown duration numbers will be shown over the cooldowns if they are enabled in the game options panel ('ActionBars' menu).")
|
|
LeaPlusLC:MakeCB(CooldownPanel, "CooldownsOnPlayer", "Show cooldowns above the player frame", 16, -132, false, "If checked, cooldown icons will be shown above the player frame.|n|nIf unchecked, cooldown icons will be shown above the target frame.")
|
|
|
|
-- Function to save the panel control settings and refresh the cooldown icons
|
|
local function SavePanelControls()
|
|
for i = 1, iCount do
|
|
|
|
-- Refresh the cooldown texture
|
|
icon[i].c:SetCooldown(0,0)
|
|
|
|
-- Show icons above target or player frame
|
|
icon[i]:ClearAllPoints()
|
|
if LeaPlusLC["CooldownsOnPlayer"] == "On" then
|
|
icon[i]:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 116 + (22 * (i - 1)), 5)
|
|
icon[i]:SetScale(PlayerFrame:GetScale())
|
|
else
|
|
icon[i]:SetPoint("TOPLEFT", TargetFrame, "TOPLEFT", 6 + (22 * (i - 1)), 5)
|
|
icon[i]:SetScale(TargetFrame:GetScale())
|
|
end
|
|
|
|
-- Save control states to globals
|
|
LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Idn"] = SpellEB[i]:GetText()
|
|
LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"] = LeaPlusCB["Spell" .. i .."Pet"]:GetChecked()
|
|
|
|
-- Set cooldowns
|
|
if LeaPlusCB["Spell" .. i .."Pet"]:GetChecked() then
|
|
ShowIcon(i, tonumber(SpellEB[i]:GetText()), "pet")
|
|
else
|
|
ShowIcon(i, tonumber(SpellEB[i]:GetText()), "player")
|
|
end
|
|
|
|
-- Show or hide cooldown duration
|
|
if LeaPlusLC["NoCooldownDuration"] == "On" then
|
|
icon[i].c:SetHideCountdownNumbers(true)
|
|
else
|
|
icon[i].c:SetHideCountdownNumbers(false)
|
|
end
|
|
|
|
-- Show or hide cooldown icons depending on current buffs
|
|
local newowner
|
|
local newspell = tonumber(SpellEB[i]:GetText())
|
|
|
|
if newspell then
|
|
if LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"] then
|
|
newowner = "pet"
|
|
else
|
|
newowner = "player"
|
|
end
|
|
-- Hide cooldown icon
|
|
icon[i]:Hide()
|
|
|
|
-- If buff matches spell we want, show cooldown icon
|
|
for q = 1, 40 do
|
|
local void, void, void, void, length, expire, void, void, void, spellID = UnitBuff(newowner, q)
|
|
if spellID and newspell == spellID then
|
|
icon[i]:Show()
|
|
-- Set the cooldown to the buff cooldown
|
|
CooldownFrame_Set(icon[i].c, expire - length, length, 1)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- Update cooldown icons when checkboxes are clicked
|
|
LeaPlusCB["NoCooldownDuration"]:HookScript("OnClick", SavePanelControls)
|
|
LeaPlusCB["CooldownsOnPlayer"]:HookScript("OnClick", SavePanelControls)
|
|
|
|
-- Help button tooltip
|
|
CooldownPanel.h.tiptext = L["Enter the spell IDs for the cooldown icons that you want to see.|n|nIf a cooldown icon normally appears under the pet frame, check the pet checkbox.|n|nCooldown icons are saved to your class and specialisation."]
|
|
|
|
-- Back button handler
|
|
CooldownPanel.b:SetScript("OnClick", function()
|
|
CooldownPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page5"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
CooldownPanel.r:SetScript("OnClick", function()
|
|
-- Reset the checkboxes
|
|
LeaPlusLC["ShowCooldownID"] = "On"
|
|
LeaPlusLC["NoCooldownDuration"] = "On"
|
|
LeaPlusLC["CooldownsOnPlayer"] = "Off"
|
|
for i = 1, iCount do
|
|
-- Reset the panel controls
|
|
SpellEB[i]:SetText("");
|
|
LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"] = false
|
|
-- Hide cooldowns and clear scripts
|
|
icon[i]:Hide()
|
|
icon[i]:SetScript("OnEvent", nil)
|
|
end
|
|
CooldownPanel:Hide(); CooldownPanel:Show()
|
|
end)
|
|
|
|
-- Save settings when changed
|
|
for i = 1, iCount do
|
|
-- Set initial checkbox states
|
|
LeaPlusCB["Spell" .. i .."Pet"]:SetChecked(LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"])
|
|
-- Set checkbox states when shown
|
|
LeaPlusCB["Spell" .. i .."Pet"]:SetScript("OnShow", function()
|
|
LeaPlusCB["Spell" .. i .."Pet"]:SetChecked(LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"])
|
|
end)
|
|
-- Set states when changed
|
|
SpellEB[i]:SetScript("OnTextChanged", SavePanelControls)
|
|
LeaPlusCB["Spell" .. i .."Pet"]:SetScript("OnClick", SavePanelControls)
|
|
end
|
|
|
|
-- Show cooldowns on startup
|
|
SavePanelControls()
|
|
|
|
-- Show panel when configuration button is clicked
|
|
LeaPlusCB["CooldownsButton"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- No preset profile
|
|
else
|
|
-- Show panel
|
|
CooldownPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
-- Create spec tag banner fontstring
|
|
local specTagSpecID = GetSpecialization()
|
|
local specTagSpecInfoID, specTagName = GetSpecializationInfo(specTagSpecID)
|
|
local specTagBanner = CooldownPanel:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
specTagBanner:SetPoint("TOPLEFT", 384, -72)
|
|
specTagBanner:SetText(specTagName)
|
|
|
|
-- Set controls when spec changes
|
|
local swapFrame = CreateFrame("FRAME")
|
|
swapFrame:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED")
|
|
swapFrame:SetScript("OnEvent", function()
|
|
-- Store new spec
|
|
activeSpec = GetSpecialization()
|
|
-- Update controls for new spec
|
|
for i = 1, iCount do
|
|
SpellEB[i]:SetText(LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Idn"] or "")
|
|
LeaPlusCB["Spell" .. i .. "Pet"]:SetChecked(LeaPlusDB["Cooldowns"][PlayerClass]["S" .. activeSpec .. "R" .. i .. "Pet"] or false)
|
|
end
|
|
-- Update spec tag banner with new spec
|
|
local specTagSpecInfoID, specTagName = GetSpecializationInfo(activeSpec)
|
|
specTagBanner:SetText(specTagName)
|
|
-- Refresh configuration panel
|
|
if CooldownPanel:IsShown() then
|
|
CooldownPanel:Hide(); CooldownPanel:Show()
|
|
end
|
|
-- Save settings
|
|
SavePanelControls()
|
|
end)
|
|
|
|
-- Function to show spell ID in tooltips
|
|
local function CooldownIDFunc(unit, target, index)
|
|
if LeaPlusLC["ShowCooldownID"] == "On" then
|
|
local spellid = select(10, UnitAura(target, index))
|
|
if spellid then
|
|
GameTooltip:AddLine(L["Spell ID"] .. ": " .. spellid)
|
|
GameTooltip:Show()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Add spell ID to tooltip when buff frame buffs are hovered
|
|
hooksecurefunc(GameTooltip, 'SetUnitAura', CooldownIDFunc)
|
|
|
|
-- Add spell ID to tooltip when target frame buffs are hovered
|
|
hooksecurefunc(GameTooltip, 'SetUnitBuff', CooldownIDFunc)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Lockout sharing
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["LockoutSharing"] == "On" then
|
|
-- Check the display menu option, update the game options panel and lockout changes
|
|
ShowAccountAchievements(true)
|
|
InterfaceOptionsSocialPanelShowAccountAchievments:SetChecked(true)
|
|
InterfaceOptionsPanel_CheckButton_Update(InterfaceOptionsSocialPanelShowAccountAchievments)
|
|
InterfaceOptionsSocialPanelShowAccountAchievments:Disable()
|
|
InterfaceOptionsSocialPanelShowAccountAchievments:SetAlpha(0.5)
|
|
InterfaceOptionsSocialPanelShowAccountAchievmentsText:SetText(InterfaceOptionsSocialPanelShowAccountAchievmentsText:GetText() .. "|n" .. L["Managed by Leatrix Plus"])
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Combat plates
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["CombatPlates"] == "On" then
|
|
|
|
-- Toggle nameplates with combat
|
|
local f = CreateFrame("Frame")
|
|
f:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
f:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
f:SetScript("OnEvent", function(self, event)
|
|
SetCVar("nameplateShowEnemies", event == "PLAYER_REGEN_DISABLED" and 1 or 0)
|
|
end)
|
|
|
|
-- Run combat check on startup
|
|
SetCVar("nameplateShowEnemies", UnitAffectingCombat("player") and 1 or 0)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Enhance tooltip
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["TipModEnable"] == "On" then
|
|
|
|
----------------------------------------------------------------------
|
|
-- Position the tooltip
|
|
----------------------------------------------------------------------
|
|
|
|
-- Position general tooltip
|
|
hooksecurefunc("GameTooltip_SetDefaultAnchor", function(tooltip, parent)
|
|
if LeaPlusLC["TooltipAnchorMenu"] ~= 1 then
|
|
if (not tooltip or not parent) then
|
|
return
|
|
end
|
|
if LeaPlusLC["TooltipAnchorMenu"] == 2 or GetMouseFocus() ~= WorldFrame then
|
|
local a,b,c,d,e = tooltip:GetPoint()
|
|
if a ~= "BOTTOMRIGHT" or c ~= "BOTTOMRIGHT" then
|
|
tooltip:ClearAllPoints()
|
|
end
|
|
tooltip:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"]);
|
|
return
|
|
else
|
|
if LeaPlusLC["TooltipAnchorMenu"] == 3 then
|
|
tooltip:SetOwner(parent, "ANCHOR_CURSOR")
|
|
return
|
|
elseif LeaPlusLC["TooltipAnchorMenu"] == 4 then
|
|
tooltip:SetOwner(parent, "ANCHOR_CURSOR_LEFT", LeaPlusLC["TipCursorX"], LeaPlusLC["TipCursorY"])
|
|
return
|
|
elseif LeaPlusLC["TooltipAnchorMenu"] == 5 then
|
|
tooltip:SetOwner(parent, "ANCHOR_CURSOR_RIGHT", LeaPlusLC["TipCursorX"], LeaPlusLC["TipCursorY"])
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Position pet battle ability tooltips
|
|
hooksecurefunc("PetBattleAbilityTooltip_Show", function(void, parent)
|
|
if LeaPlusLC["TooltipAnchorMenu"] ~= 1 then
|
|
if parent == UIParent then
|
|
local a,b,c,d,e = PetBattlePrimaryAbilityTooltip:GetPoint()
|
|
if a ~= "BOTTOMRIGHT" or c ~= "BOTTOMRIGHT" then
|
|
PetBattlePrimaryAbilityTooltip:ClearAllPoints()
|
|
end
|
|
PetBattlePrimaryAbilityTooltip:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"]);
|
|
end
|
|
end
|
|
end)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Tooltip Configuration
|
|
----------------------------------------------------------------------
|
|
|
|
local LT = {}
|
|
|
|
-- Create locale specific level string
|
|
LT["LevelLocale"] = strtrim(strtrim(string.gsub(TOOLTIP_UNIT_LEVEL, "%%s", "")))
|
|
if GameLocale == "ruRU" then
|
|
LT["LevelLocale"] = string.gsub(LT["LevelLocale"], "-й ", "")
|
|
end
|
|
|
|
-- Tooltip
|
|
LT["ColorBlind"] = GetCVar("colorblindMode")
|
|
|
|
-- Create drag frame
|
|
local TipDrag = CreateFrame("Frame", nil, UIParent, "BackdropTemplate")
|
|
TipDrag:SetToplevel(true);
|
|
TipDrag:SetClampedToScreen(false);
|
|
TipDrag:SetSize(130, 64);
|
|
TipDrag:Hide();
|
|
TipDrag:SetFrameStrata("TOOLTIP")
|
|
TipDrag:SetMovable(true)
|
|
TipDrag:SetBackdropColor(0.0, 0.5, 1.0);
|
|
TipDrag:SetBackdrop({
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = false, tileSize = 0, edgeSize = 16,
|
|
insets = { left = 0, right = 0, top = 0, bottom = 0 }});
|
|
|
|
-- Show text in drag frame
|
|
TipDrag.f = TipDrag:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
TipDrag.f:SetPoint("CENTER", 0, 0)
|
|
TipDrag.f:SetText(L["Tooltip"])
|
|
|
|
-- Create texture
|
|
TipDrag.t = TipDrag:CreateTexture();
|
|
TipDrag.t:SetAllPoints();
|
|
TipDrag.t:SetColorTexture(0.0, 0.5, 1.0, 0.5);
|
|
TipDrag.t:SetAlpha(0.5);
|
|
|
|
---------------------------------------------------------------------------------------------------------
|
|
-- Tooltip movement settings
|
|
---------------------------------------------------------------------------------------------------------
|
|
|
|
-- Create tooltip customisation side panel
|
|
local SideTip = LeaPlusLC:CreatePanel("Enhance tooltip", "SideTip")
|
|
|
|
-- Add controls
|
|
LeaPlusLC:MakeTx(SideTip, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(SideTip, "TipShowRank", "Show guild ranks for your guild", 16, -92, false, "If checked, guild ranks will be shown for players in your guild.")
|
|
LeaPlusLC:MakeCB(SideTip, "TipShowOtherRank", "Show guild ranks for other guilds", 16, -112, false, "If checked, guild ranks will be shown for players who are not in your guild.")
|
|
LeaPlusLC:MakeCB(SideTip, "TipShowTarget", "Show the unit's target", 16, -132, false, "If checked, unit targets will be shown.")
|
|
LeaPlusLC:MakeCB(SideTip, "TipBackSimple", "Color the backdrops based on faction", 16, -152, false, "If checked, backdrops will be tinted blue (friendly) or red (hostile).")
|
|
LeaPlusLC:MakeCB(SideTip, "TipHideInCombat", "Hide tooltips for world units during combat", 16, -172, false, "If checked, tooltips for world units will be hidden during combat.|n|nYou can hold the shift key down to override this setting.")
|
|
|
|
LeaPlusLC:CreateDropDown("TooltipAnchorMenu", "Anchor", SideTip, 146, "TOPLEFT", 356, -115, {L["None"], L["Overlay"], L["Cursor"], L["Cursor Left"], L["Cursor Right"]}, "")
|
|
|
|
local XOffsetHeading = LeaPlusLC:MakeTx(SideTip, "X Offset", 356, -132)
|
|
LeaPlusLC:MakeSL(SideTip, "TipCursorX", "Drag to set the cursor X offset.", -128, 128, 1, 356, -152, "%.0f")
|
|
|
|
local YOffsetHeading = LeaPlusLC:MakeTx(SideTip, "Y Offset", 356, -182)
|
|
LeaPlusLC:MakeSL(SideTip, "TipCursorY", "Drag to set the cursor Y offset.", -128, 128, 1, 356, -202, "%.0f")
|
|
|
|
LeaPlusLC:MakeTx(SideTip, "Scale", 356, -232)
|
|
LeaPlusLC:MakeSL(SideTip, "LeaPlusTipSize", "Drag to set the tooltip scale.", 0.50, 2.00, 0.05, 356, -252, "%.2f")
|
|
|
|
-- Function to enable or disable anchor controls
|
|
local function SetAnchorControls()
|
|
-- Hide overlay if anchor is set to none
|
|
if LeaPlusLC["TooltipAnchorMenu"] == 1 then
|
|
TipDrag:Hide()
|
|
else
|
|
TipDrag:Show()
|
|
end
|
|
-- Set the X and Y sliders
|
|
if LeaPlusLC["TooltipAnchorMenu"] == 1 or LeaPlusLC["TooltipAnchorMenu"] == 2 or LeaPlusLC["TooltipAnchorMenu"] == 3 then
|
|
-- Dropdown is set to screen or cursor so disable X and Y offset sliders
|
|
LeaPlusLC:LockItem(LeaPlusCB["TipCursorX"], true)
|
|
LeaPlusLC:LockItem(LeaPlusCB["TipCursorY"], true)
|
|
XOffsetHeading:SetAlpha(0.3)
|
|
YOffsetHeading:SetAlpha(0.3)
|
|
LeaPlusCB["TipCursorX"]:SetScript("OnEnter", nil)
|
|
LeaPlusCB["TipCursorY"]:SetScript("OnEnter", nil)
|
|
else
|
|
-- Dropdown is set to cursor left or cursor right so enable X and Y offset sliders
|
|
LeaPlusLC:LockItem(LeaPlusCB["TipCursorX"], false)
|
|
LeaPlusLC:LockItem(LeaPlusCB["TipCursorY"], false)
|
|
XOffsetHeading:SetAlpha(1.0)
|
|
YOffsetHeading:SetAlpha(1.0)
|
|
LeaPlusCB["TipCursorX"]:SetScript("OnEnter", LeaPlusLC.TipSee)
|
|
LeaPlusCB["TipCursorY"]:SetScript("OnEnter", LeaPlusLC.TipSee)
|
|
end
|
|
end
|
|
|
|
-- Set controls when anchor dropdown menu is changed and on startup
|
|
LeaPlusCB["ListFrameTooltipAnchorMenu"]:HookScript("OnHide", SetAnchorControls)
|
|
SetAnchorControls()
|
|
|
|
-- Help button hidden
|
|
SideTip.h:Hide()
|
|
|
|
-- Back button handler
|
|
SideTip.b:SetScript("OnClick", function()
|
|
SideTip:Hide();
|
|
if TipDrag:IsShown() then
|
|
TipDrag:Hide();
|
|
end
|
|
LeaPlusLC["PageF"]:Show();
|
|
LeaPlusLC["Page5"]:Show();
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
SideTip.r:SetScript("OnClick", function()
|
|
LeaPlusLC["TipShowRank"] = "On"
|
|
LeaPlusLC["TipShowOtherRank"] = "Off"
|
|
LeaPlusLC["TipShowTarget"] = "On"
|
|
LeaPlusLC["TipBackSimple"] = "Off"
|
|
LeaPlusLC["TipHideInCombat"] = "Off"
|
|
LeaPlusLC["LeaPlusTipSize"] = 1.00
|
|
LeaPlusLC["TipOffsetX"] = -13
|
|
LeaPlusLC["TipOffsetY"] = 94
|
|
LeaPlusLC["TooltipAnchorMenu"] = 1
|
|
LeaPlusLC["TipCursorX"] = 0
|
|
LeaPlusLC["TipCursorY"] = 0
|
|
TipDrag:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"]);
|
|
SetAnchorControls()
|
|
LeaPlusLC:SetTipScale()
|
|
SideTip:Hide(); SideTip:Show();
|
|
end)
|
|
|
|
-- Show drag frame with configuration panel if anchor is not set to none
|
|
SideTip:HookScript("OnShow", function()
|
|
if LeaPlusLC["TooltipAnchorMenu"] == 1 then
|
|
TipDrag:Hide()
|
|
else
|
|
TipDrag:Show()
|
|
end
|
|
end)
|
|
SideTip:HookScript("OnHide", function() TipDrag:Hide() end)
|
|
|
|
-- Control movement functions
|
|
local void, LTax, LTay, LTbx, LTby, LTcx, LTcy
|
|
TipDrag:SetScript("OnMouseDown", function(self, btn)
|
|
if btn == "LeftButton" then
|
|
void, void, void, LTax, LTay = TipDrag:GetPoint()
|
|
TipDrag:StartMoving()
|
|
void, void, void, LTbx, LTby = TipDrag:GetPoint()
|
|
end
|
|
end)
|
|
TipDrag:SetScript("OnMouseUp", function(self, btn)
|
|
if btn == "LeftButton" then
|
|
void, void, void, LTcx, LTcy = TipDrag:GetPoint()
|
|
TipDrag:StopMovingOrSizing();
|
|
LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"] = LTcx - LTbx + LTax, LTcy - LTby + LTay
|
|
TipDrag:ClearAllPoints()
|
|
TipDrag:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"])
|
|
end
|
|
end)
|
|
|
|
-- Move the tooltip
|
|
LeaPlusCB["MoveTooltipButton"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["TipShowRank"] = "On"
|
|
LeaPlusLC["TipShowOtherRank"] = "Off"
|
|
LeaPlusLC["TipShowTarget"] = "On"
|
|
LeaPlusLC["TipBackSimple"] = "On"
|
|
LeaPlusLC["TipHideInCombat"] = "Off"
|
|
LeaPlusLC["LeaPlusTipSize"] = 1.25
|
|
LeaPlusLC["TipOffsetX"] = -13
|
|
LeaPlusLC["TipOffsetY"] = 94
|
|
LeaPlusLC["TooltipAnchorMenu"] = 2
|
|
LeaPlusLC["TipCursorX"] = 0
|
|
LeaPlusLC["TipCursorY"] = 0
|
|
TipDrag:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"]);
|
|
SetAnchorControls()
|
|
LeaPlusLC:SetTipScale()
|
|
LeaPlusLC:SetDim()
|
|
LeaPlusLC:ReloadCheck()
|
|
SideTip:Show(); SideTip:Hide() -- Needed to update tooltip scale
|
|
LeaPlusLC["PageF"]:Hide(); LeaPlusLC["PageF"]:Show()
|
|
else
|
|
-- Show tooltip configuration panel
|
|
LeaPlusLC:HideFrames()
|
|
SideTip:Show()
|
|
|
|
-- Set scale
|
|
TipDrag:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
|
|
-- Set position of the drag frame
|
|
TipDrag:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", LeaPlusLC["TipOffsetX"], LeaPlusLC["TipOffsetY"])
|
|
end
|
|
|
|
end)
|
|
|
|
---------------------------------------------------------------------------------------------------------
|
|
-- Tooltip scale settings
|
|
---------------------------------------------------------------------------------------------------------
|
|
|
|
-- Function to set the tooltip scale
|
|
local function SetTipScale()
|
|
if LeaPlusLC["TipModEnable"] == "On" then
|
|
|
|
-- General tooltip
|
|
if GameTooltip then GameTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Friends
|
|
if FriendsTooltip then FriendsTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- AutoCompleteBox
|
|
if AutoCompleteBox then AutoCompleteBox:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Reputation
|
|
if ReputationParagonTooltip then ReputationParagonTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Pet battles and battle pets
|
|
if PetBattlePrimaryAbilityTooltip then PetBattlePrimaryAbilityTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if PetBattlePrimaryUnitTooltip then PetBattlePrimaryUnitTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if BattlePetTooltip then BattlePetTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if FloatingBattlePetTooltip then FloatingBattlePetTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Garrison
|
|
if FloatingGarrisonFollowerTooltip then FloatingGarrisonFollowerTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if FloatingGarrisonFollowerAbilityTooltip then FloatingGarrisonFollowerAbilityTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if FloatingGarrisonMissionTooltip then FloatingGarrisonMissionTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if FloatingGarrisonShipyardFollowerTooltip then FloatingGarrisonShipyardFollowerTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Order Hall
|
|
if GarrisonFollowerMissionAbilityWithoutCountersTooltip then GarrisonFollowerMissionAbilityWithoutCountersTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if GarrisonFollowerAbilityWithoutCountersTooltip then GarrisonFollowerAbilityWithoutCountersTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Items (links, comparisons)
|
|
if ItemRefTooltip then ItemRefTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if ItemRefShoppingTooltip1 then ItemRefShoppingTooltip1:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if ItemRefShoppingTooltip2 then ItemRefShoppingTooltip2:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if ShoppingTooltip1 then ShoppingTooltip1:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if ShoppingTooltip2 then ShoppingTooltip2:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- World map (story)
|
|
if QuestScrollFrame.WarCampaignTooltip then QuestScrollFrame.WarCampaignTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
if QuestScrollFrame.StoryTooltip then
|
|
QuestScrollFrame.StoryTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
QuestScrollFrame.StoryTooltip:SetFrameStrata("TOOLTIP")
|
|
end
|
|
|
|
-- Minimap (PVP queue status)
|
|
if QueueStatusFrame then QueueStatusFrame:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Embedded item tooltip (as used in PVP UI)
|
|
if EmbeddedItemTooltip then EmbeddedItemTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Nameplate tooltip
|
|
if NamePlateTooltip then NamePlateTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"]) end
|
|
|
|
-- Leatrix Plus
|
|
TipDrag:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
|
|
-- Set slider formatted text
|
|
LeaPlusCB["LeaPlusTipSize"].f:SetFormattedText("%.0f%%", LeaPlusLC["LeaPlusTipSize"] * 100)
|
|
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Give function a file level scope
|
|
LeaPlusLC.SetTipScale = SetTipScale
|
|
|
|
-- Set tooltip scale when slider or checkbox changes and on startup
|
|
LeaPlusCB["LeaPlusTipSize"]:HookScript("OnValueChanged", SetTipScale)
|
|
SetTipScale()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Contribution frame
|
|
----------------------------------------------------------------------
|
|
|
|
local function ContributionTipFunc()
|
|
|
|
-- Function to set tooltip scale
|
|
local function SetContributionTipScale()
|
|
ContributionBuffTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
end
|
|
|
|
-- Set tooltip scale when slider changes and on startup
|
|
LeaPlusCB["LeaPlusTipSize"]:HookScript("OnValueChanged", SetContributionTipScale)
|
|
SetContributionTipScale()
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_Contribution") then
|
|
ContributionTipFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_Contribution" then
|
|
ContributionTipFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Pet Journal tooltips
|
|
----------------------------------------------------------------------
|
|
|
|
local function PetJournalTipFunc()
|
|
|
|
-- Function to set tooltip scale
|
|
local function SetPetJournalTipScale()
|
|
PetJournalPrimaryAbilityTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
end
|
|
|
|
-- Set tooltip scale when slider changes and on startup
|
|
LeaPlusCB["LeaPlusTipSize"]:HookScript("OnValueChanged", SetPetJournalTipScale)
|
|
SetPetJournalTipScale()
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_Collections") then
|
|
PetJournalTipFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_Collections" then
|
|
PetJournalTipFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Encounter Journal tooltips
|
|
----------------------------------------------------------------------
|
|
|
|
local function EncounterJournalTipFunc()
|
|
|
|
-- Function to set tooltip scale
|
|
local function SetEncounterJournalTipScale()
|
|
EncounterJournalTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
end
|
|
|
|
-- Set tooltip scale when slider changes and on startup
|
|
LeaPlusCB["LeaPlusTipSize"]:HookScript("OnValueChanged", SetEncounterJournalTipScale)
|
|
SetEncounterJournalTipScale()
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_EncounterJournal") then
|
|
EncounterJournalTipFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_EncounterJournal" then
|
|
EncounterJournalTipFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Death Recap frame tooltips
|
|
----------------------------------------------------------------------
|
|
|
|
local function DeathRecapFrameFunc()
|
|
|
|
-- Simple fix to prevent mousing over units behind the frame
|
|
DeathRecapFrame:EnableMouse(true)
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_DeathRecap") then
|
|
DeathRecapFrameFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_DeathRecap" then
|
|
DeathRecapFrameFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Garrison tooltips
|
|
----------------------------------------------------------------------
|
|
|
|
local function GarrisonFunc()
|
|
|
|
-- Function to set tooltip scale
|
|
local function SetGarrisonTipScale()
|
|
GarrisonFollowerTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonFollowerAbilityTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonMissionMechanicTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonMissionMechanicFollowerCounterTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonBuildingFrame.BuildingLevelTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonBonusAreaTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonShipyardMapMissionTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
GarrisonShipyardFollowerTooltip:SetScale(LeaPlusLC["LeaPlusTipSize"])
|
|
end
|
|
|
|
-- Set tooltip scale when slider changes and on startup
|
|
LeaPlusCB["LeaPlusTipSize"]:HookScript("OnValueChanged", SetGarrisonTipScale)
|
|
SetGarrisonTipScale()
|
|
|
|
end
|
|
|
|
-- Run function when Blizzard addon has loaded
|
|
if IsAddOnLoaded("Blizzard_GarrisonUI") then
|
|
GarrisonFunc()
|
|
else
|
|
local waitFrame = CreateFrame("FRAME")
|
|
waitFrame:RegisterEvent("ADDON_LOADED")
|
|
waitFrame:SetScript("OnEvent", function(self, event, arg1)
|
|
if arg1 == "Blizzard_GarrisonUI" then
|
|
GarrisonFunc()
|
|
waitFrame:UnregisterAllEvents()
|
|
end
|
|
end)
|
|
end
|
|
|
|
---------------------------------------------------------------------------------------------------------
|
|
-- Other tooltip code
|
|
---------------------------------------------------------------------------------------------------------
|
|
|
|
-- Colorblind setting change
|
|
TipDrag:RegisterEvent("CVAR_UPDATE");
|
|
TipDrag:SetScript("OnEvent", function(self, event, arg1, arg2)
|
|
if (arg1 == "USE_COLORBLIND_MODE") then
|
|
LT["ColorBlind"] = arg2;
|
|
end
|
|
end)
|
|
|
|
-- Store locals
|
|
local TipMClass = LOCALIZED_CLASS_NAMES_MALE
|
|
local TipFClass = LOCALIZED_CLASS_NAMES_FEMALE
|
|
|
|
-- Level string
|
|
local LevelString, LevelString2
|
|
if GameLocale == "ruRU" then
|
|
-- Level string for ruRU
|
|
LevelString = "уровня"
|
|
LevelString2 = "уровень"
|
|
else
|
|
-- Level string for all other locales
|
|
LevelString = string.lower(TOOLTIP_UNIT_LEVEL:gsub("%%s",".+"))
|
|
LevelString2 = ""
|
|
end
|
|
|
|
-- Tag locale (code construction from tiplang)
|
|
local ttYou, ttLevel, ttBoss, ttElite, ttRare, ttRareElite, ttRareBoss, ttTarget
|
|
if GameLocale == "zhCN" then ttYou = "您" ; ttLevel = "等级" ; ttBoss = "首领" ; ttElite = "精英" ; ttRare = "精良" ; ttRareElite = "精良 精英" ; ttRareBoss = "精良 首领" ; ttTarget = "目标"
|
|
elseif GameLocale == "zhTW" then ttYou = "您" ; ttLevel = "等級" ; ttBoss = "首領" ; ttElite = "精英" ; ttRare = "精良" ; ttRareElite = "精良 精英" ; ttRareBoss = "精良 首領" ; ttTarget = "目標"
|
|
elseif GameLocale == "ruRU" then ttYou = "ВЫ" ; ttLevel = "Уровень" ; ttBoss = "босс" ; ttElite = "элита" ; ttRare = "Редкое" ; ttRareElite = "Редкое элита" ; ttRareBoss = "Редкое босс" ; ttTarget = "Цель"
|
|
elseif GameLocale == "koKR" then ttYou = "당신" ; ttLevel = "레벨" ; ttBoss = "우두머리" ; ttElite = "정예" ; ttRare = "희귀" ; ttRareElite = "희귀 정예" ; ttRareBoss = "희귀 우두머리" ; ttTarget = "대상"
|
|
elseif GameLocale == "esMX" then ttYou = "TÚ" ; ttLevel = "Nivel" ; ttBoss = "Jefe" ; ttElite = "Élite" ; ttRare = "Raro" ; ttRareElite = "Raro Élite" ; ttRareBoss = "Raro Jefe" ; ttTarget = "Objetivo"
|
|
elseif GameLocale == "ptBR" then ttYou = "VOCÊ" ; ttLevel = "Nível" ; ttBoss = "Chefe" ; ttElite = "Elite" ; ttRare = "Raro" ; ttRareElite = "Raro Elite" ; ttRareBoss = "Raro Chefe" ; ttTarget = "Alvo"
|
|
elseif GameLocale == "deDE" then ttYou = "SIE" ; ttLevel = "Stufe" ; ttBoss = "Boss" ; ttElite = "Elite" ; ttRare = "Selten" ; ttRareElite = "Selten Elite" ; ttRareBoss = "Selten Boss" ; ttTarget = "Ziel"
|
|
elseif GameLocale == "esES" then ttYou = "TÚ" ; ttLevel = "Nivel" ; ttBoss = "Jefe" ; ttElite = "Élite" ; ttRare = "Raro" ; ttRareElite = "Raro Élite" ; ttRareBoss = "Raro Jefe" ; ttTarget = "Objetivo"
|
|
elseif GameLocale == "frFR" then ttYou = "TOI" ; ttLevel = "Niveau" ; ttBoss = "Boss" ; ttElite = "Élite" ; ttRare = "Rare" ; ttRareElite = "Rare Élite" ; ttRareBoss = "Rare Boss" ; ttTarget = "Cible"
|
|
elseif GameLocale == "itIT" then ttYou = "TU" ; ttLevel = "Livello" ; ttBoss = "Boss" ; ttElite = "Élite" ; ttRare = "Raro" ; ttRareElite = "Raro Élite" ; ttRareBoss = "Raro Boss" ; ttTarget = "Bersaglio"
|
|
else ttYou = "YOU" ; ttLevel = "Level" ; ttBoss = "Boss" ; ttElite = "Elite" ; ttRare = "Rare" ; ttRareElite = "Rare Elite" ; ttRareBoss = "Rare Boss" ; ttTarget = "Target"
|
|
end
|
|
|
|
-- Show tooltip
|
|
local function ShowTip()
|
|
|
|
-- Do nothing if CTRL, SHIFT and ALT are being held
|
|
if IsControlKeyDown() and IsAltKeyDown() and IsShiftKeyDown() then
|
|
return
|
|
end
|
|
|
|
-- Get unit information
|
|
if GetMouseFocus() == WorldFrame then
|
|
LT["Unit"] = "mouseover"
|
|
-- Hide and quit if tips should be hidden during combat
|
|
if LeaPlusLC["TipHideInCombat"] == "On" and UnitAffectingCombat("player") and not IsShiftKeyDown() then
|
|
GameTooltip:Hide()
|
|
return
|
|
end
|
|
else
|
|
LT["Unit"] = select(2, GameTooltip:GetUnit())
|
|
if not (LT["Unit"]) then return end
|
|
end
|
|
|
|
-- Quit if unit has no reaction to player
|
|
LT["Reaction"] = UnitReaction(LT["Unit"], "player") or nil
|
|
if not LT["Reaction"] then
|
|
return
|
|
end
|
|
|
|
-- Quit if unit is a wild pet
|
|
if UnitIsWildBattlePet(LT["Unit"]) then return end
|
|
|
|
-- Setup variables
|
|
LT["TipUnitName"], LT["TipUnitRealm"] = UnitName(LT["Unit"])
|
|
LT["TipIsPlayer"] = UnitIsPlayer(LT["Unit"])
|
|
LT["UnitLevel"] = UnitEffectiveLevel(LT["Unit"])
|
|
LT["RealLevel"] = UnitLevel(LT["Unit"])
|
|
LT["UnitClass"] = UnitClassBase(LT["Unit"])
|
|
LT["PlayerControl"] = UnitPlayerControlled(LT["Unit"])
|
|
LT["PlayerRace"] = UnitRace(LT["Unit"])
|
|
|
|
-- Get guild information
|
|
if LT["TipIsPlayer"] then
|
|
local unitGuild, unitRank = GetGuildInfo(LT["Unit"])
|
|
if unitGuild and unitRank then
|
|
-- Unit is guilded
|
|
if LT["ColorBlind"] == "1" then
|
|
LT["GuildLine"], LT["InfoLine"] = 2, 4
|
|
else
|
|
LT["GuildLine"], LT["InfoLine"] = 2, 3
|
|
end
|
|
LT["GuildName"], LT["GuildRank"] = unitGuild, unitRank
|
|
else
|
|
-- Unit is not guilded
|
|
LT["GuildName"] = nil
|
|
if LT["ColorBlind"] == "1" then
|
|
LT["GuildLine"], LT["InfoLine"] = 0, 3
|
|
else
|
|
LT["GuildLine"], LT["InfoLine"] = 0, 2
|
|
end
|
|
end
|
|
-- Lower information line if unit is charmed
|
|
if UnitIsCharmed(LT["Unit"]) then
|
|
LT["InfoLine"] = LT["InfoLine"] + 1
|
|
end
|
|
end
|
|
|
|
-- Determine class color
|
|
if LT["UnitClass"] then
|
|
-- Define male or female (for certain locales)
|
|
LT["Sex"] = UnitSex(LT["Unit"])
|
|
if LT["Sex"] == 2 then
|
|
LT["Class"] = TipMClass[LT["UnitClass"]]
|
|
else
|
|
LT["Class"] = TipFClass[LT["UnitClass"]]
|
|
end
|
|
-- Define class color
|
|
LT["ClassCol"] = LeaPlusLC["RaidColors"][LT["UnitClass"]]
|
|
LT["LpTipClassColor"] = "|cff" .. string.format("%02x%02x%02x", LT["ClassCol"].r * 255, LT["ClassCol"].g * 255, LT["ClassCol"].b * 255)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Name line
|
|
----------------------------------------------------------------------
|
|
|
|
if ((LT["TipIsPlayer"]) or (LT["PlayerControl"])) or LT["Reaction"] > 4 then
|
|
|
|
-- If it's a player show name in class color
|
|
if LT["TipIsPlayer"] then
|
|
LT["NameColor"] = LT["LpTipClassColor"]
|
|
else
|
|
-- If not, set to green or blue depending on PvP status
|
|
if UnitIsPVP(LT["Unit"]) then
|
|
LT["NameColor"] = "|cff00ff00"
|
|
else
|
|
LT["NameColor"] = "|cff00aaff"
|
|
end
|
|
end
|
|
|
|
-- Show name
|
|
LT["NameText"] = UnitPVPName(LT["Unit"]) or LT["TipUnitName"]
|
|
|
|
-- Show realm
|
|
if LT["TipUnitRealm"] then
|
|
LT["NameText"] = LT["NameText"] .. " - " .. LT["TipUnitRealm"]
|
|
end
|
|
|
|
-- Show dead units in grey
|
|
if UnitIsDeadOrGhost(LT["Unit"]) then
|
|
LT["NameColor"] = "|c88888888"
|
|
end
|
|
|
|
-- Show name line
|
|
_G["GameTooltipTextLeft1"]:SetText(LT["NameColor"] .. LT["NameText"] .. "|cffffffff|r")
|
|
|
|
elseif UnitIsDeadOrGhost(LT["Unit"]) then
|
|
|
|
-- Show grey name for other dead units
|
|
_G["GameTooltipTextLeft1"]:SetText("|c88888888" .. (_G["GameTooltipTextLeft1"]:GetText() or "") .. "|cffffffff|r")
|
|
return
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Guild line
|
|
----------------------------------------------------------------------
|
|
|
|
if LT["TipIsPlayer"] and LT["GuildName"] then
|
|
|
|
-- Show guild line
|
|
if UnitIsInMyGuild(LT["Unit"]) then
|
|
if LeaPlusLC["TipShowRank"] == "On" then
|
|
_G["GameTooltipTextLeft" .. LT["GuildLine"]]:SetText("|c00aaaaff" .. LT["GuildName"] .. " - " .. LT["GuildRank"] .. "|r")
|
|
else
|
|
_G["GameTooltipTextLeft" .. LT["GuildLine"]]:SetText("|c00aaaaff" .. LT["GuildName"] .. "|cffffffff|r")
|
|
end
|
|
else
|
|
if LeaPlusLC["TipShowOtherRank"] == "On" then
|
|
_G["GameTooltipTextLeft" .. LT["GuildLine"]]:SetText("|c00aaaaff" .. LT["GuildName"] .. " - " .. LT["GuildRank"] .. "|r")
|
|
else
|
|
_G["GameTooltipTextLeft" .. LT["GuildLine"]]:SetText("|c00aaaaff" .. LT["GuildName"] .. "|cffffffff|r")
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Information line (level, class, race)
|
|
----------------------------------------------------------------------
|
|
|
|
if LT["TipIsPlayer"] then
|
|
|
|
-- Show level
|
|
if LT["Reaction"] < 5 then
|
|
if LT["UnitLevel"] == -1 then
|
|
LT["InfoText"] = ("|cffff3333" .. ttLevel .. " ??|cffffffff")
|
|
else
|
|
LT["LevelDifficulty"] = C_PlayerInfo.GetContentDifficultyCreatureForPlayer(LT["Unit"])
|
|
LT["LevelColor"] = GetDifficultyColor(LT["LevelDifficulty"])
|
|
LT["LevelColor"] = string.format('%02x%02x%02x', LT["LevelColor"].r * 255, LT["LevelColor"].g * 255, LT["LevelColor"].b * 255)
|
|
LT["InfoText"] = ("|cff" .. LT["LevelColor"] .. LT["LevelLocale"] .. " " .. LT["UnitLevel"] .. "|cffffffff")
|
|
end
|
|
else
|
|
if LT["UnitLevel"] ~= LT["RealLevel"] then
|
|
LT["InfoText"] = LT["LevelLocale"] .. " " .. LT["UnitLevel"] .. " (" .. LT["RealLevel"] .. ")"
|
|
else
|
|
LT["InfoText"] = LT["LevelLocale"] .. " " .. LT["UnitLevel"]
|
|
end
|
|
end
|
|
|
|
-- Show race
|
|
if LT["PlayerRace"] then
|
|
LT["InfoText"] = LT["InfoText"] .. " " .. LT["PlayerRace"]
|
|
end
|
|
|
|
-- Show class
|
|
LT["InfoText"] = LT["InfoText"] .. " " .. LT["LpTipClassColor"] .. LT["Class"] or LT["InfoText"]
|
|
|
|
-- Show information line
|
|
_G["GameTooltipTextLeft" .. LT["InfoLine"]]:SetText(LT["InfoText"] .. "|cffffffff|r")
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Mob name in brighter red (alive) and steel blue (tap denied)
|
|
----------------------------------------------------------------------
|
|
|
|
if not (LT["TipIsPlayer"]) and LT["Reaction"] < 4 and not (LT["PlayerControl"]) then
|
|
if UnitIsTapDenied(LT["Unit"]) then
|
|
LT["NameText"] = "|c8888bbbb" .. LT["TipUnitName"] .. "|r"
|
|
else
|
|
LT["NameText"] = "|cffff3333" .. LT["TipUnitName"] .. "|r"
|
|
end
|
|
_G["GameTooltipTextLeft1"]:SetText(LT["NameText"])
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Mob level in color (neutral or lower)
|
|
----------------------------------------------------------------------
|
|
|
|
if UnitCanAttack(LT["Unit"], "player") and not (LT["TipIsPlayer"]) and LT["Reaction"] < 5 and not (LT["PlayerControl"]) then
|
|
|
|
-- Find the level line
|
|
LT["MobInfoLine"] = 0
|
|
local line2, line3, line4
|
|
if _G["GameTooltipTextLeft2"] then line2 = _G["GameTooltipTextLeft2"]:GetText() end
|
|
if _G["GameTooltipTextLeft3"] then line3 = _G["GameTooltipTextLeft3"]:GetText() end
|
|
if _G["GameTooltipTextLeft4"] then line4 = _G["GameTooltipTextLeft4"]:GetText() end
|
|
if GameLocale == "ruRU" then -- Additional check for ruRU
|
|
if line2 and string.lower(line2):find(LevelString2) then LT["MobInfoLine"] = 2 end
|
|
if line3 and string.lower(line3):find(LevelString2) then LT["MobInfoLine"] = 3 end
|
|
if line4 and string.lower(line4):find(LevelString2) then LT["MobInfoLine"] = 4 end
|
|
end
|
|
if line2 and string.lower(line2):find(LevelString) then LT["MobInfoLine"] = 2 end
|
|
if line3 and string.lower(line3):find(LevelString) then LT["MobInfoLine"] = 3 end
|
|
if line4 and string.lower(line4):find(LevelString) then LT["MobInfoLine"] = 4 end
|
|
|
|
-- Show level line
|
|
if LT["MobInfoLine"] > 1 then
|
|
|
|
-- Level ?? mob
|
|
if LT["UnitLevel"] == -1 then
|
|
LT["InfoText"] = "|cffff3333" .. ttLevel .. " ??|cffffffff "
|
|
|
|
-- Mobs within level range
|
|
else
|
|
LT["MobDifficulty"] = C_PlayerInfo.GetContentDifficultyCreatureForPlayer(LT["Unit"])
|
|
LT["MobColor"] = GetDifficultyColor(LT["MobDifficulty"])
|
|
LT["MobColor"] = string.format('%02x%02x%02x', LT["MobColor"].r * 255, LT["MobColor"].g * 255, LT["MobColor"].b * 255)
|
|
LT["InfoText"] = "|cff" .. LT["MobColor"] .. LT["LevelLocale"] .. " " .. LT["UnitLevel"] .. "|cffffffff "
|
|
end
|
|
|
|
-- Show creature type and classification
|
|
LT["CreatureType"] = UnitCreatureType(LT["Unit"])
|
|
if (LT["CreatureType"]) and not (LT["CreatureType"] == "Not specified") then
|
|
LT["InfoText"] = LT["InfoText"] .. "|cffffffff" .. LT["CreatureType"] .. "|cffffffff "
|
|
end
|
|
|
|
-- Rare, elite and boss mobs
|
|
LT["Special"] = UnitClassification(LT["Unit"])
|
|
if LT["Special"] then
|
|
if LT["Special"] == "elite" then
|
|
if strfind(_G["GameTooltipTextLeft" .. LT["MobInfoLine"]]:GetText(), "(" .. ttBoss .. ")") then
|
|
LT["Special"] = "(" .. ttBoss .. ")"
|
|
else
|
|
LT["Special"] = "(" .. ttElite .. ")"
|
|
end
|
|
elseif LT["Special"] == "rare" then
|
|
LT["Special"] = "|c00e066ff(" .. ttRare .. ")"
|
|
elseif LT["Special"] == "rareelite" then
|
|
if strfind(_G["GameTooltipTextLeft" .. LT["MobInfoLine"]]:GetText(), "(" .. ttBoss .. ")") then
|
|
LT["Special"] = "|c00e066ff(" .. ttRareBoss .. ")"
|
|
else
|
|
LT["Special"] = "|c00e066ff(" .. ttRareElite .. ")"
|
|
end
|
|
elseif LT["Special"] == "worldboss" then
|
|
LT["Special"] = "(" .. ttBoss .. ")"
|
|
elseif LT["UnitLevel"] == -1 and LT["Special"] == "normal" and strfind(_G["GameTooltipTextLeft" .. LT["MobInfoLine"]]:GetText(), "(" .. ttBoss .. ")") then
|
|
LT["Special"] = "(" .. ttBoss .. ")"
|
|
else
|
|
LT["Special"] = nil
|
|
end
|
|
|
|
if (LT["Special"]) then
|
|
LT["InfoText"] = LT["InfoText"] .. LT["Special"]
|
|
end
|
|
end
|
|
|
|
-- Show mob info line
|
|
_G["GameTooltipTextLeft" .. LT["MobInfoLine"]]:SetText(LT["InfoText"])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Backdrop color
|
|
----------------------------------------------------------------------
|
|
|
|
LT["TipFaction"] = UnitFactionGroup(LT["Unit"])
|
|
|
|
if UnitCanAttack("player", LT["Unit"]) and not (UnitIsDeadOrGhost(LT["Unit"])) and not (LT["TipFaction"] == nil) and not (LT["TipFaction"] == UnitFactionGroup("player")) then
|
|
-- Hostile faction
|
|
if LeaPlusLC["TipBackSimple"] == "On" then
|
|
GameTooltip:SetBackdropColor(0.5, 0.0, 0.0);
|
|
else
|
|
GameTooltip:SetBackdropColor(0.0, 0.0, 0.0);
|
|
end
|
|
else
|
|
-- Friendly faction
|
|
if LeaPlusLC["TipBackSimple"] == "On" then
|
|
GameTooltip:SetBackdropColor(0.0, 0.0, 0.5);
|
|
else
|
|
GameTooltip:SetBackdropColor(0.0, 0.0, 0.0);
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show target
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["TipShowTarget"] == "On" then
|
|
|
|
-- Get target
|
|
LT["Target"] = UnitName(LT["Unit"] .. "target");
|
|
|
|
-- If target doesn't exist, quit
|
|
if LT["Target"] == nil or LT["Target"] == "" then return end
|
|
|
|
-- If target is you, set target to YOU
|
|
if (UnitIsUnit(LT["Target"], "player")) then
|
|
LT["Target"] = ("|c12ff4400" .. ttYou)
|
|
|
|
-- If it's not you, but it's a player, show target in class color
|
|
elseif UnitIsPlayer(LT["Unit"] .. "target") then
|
|
LT["TargetBase"] = UnitClassBase(LT["Unit"] .. "target")
|
|
LT["TargetCol"] = LeaPlusLC["RaidColors"][LT["TargetBase"]]
|
|
LT["TargetCol"] = "|cff" .. string.format('%02x%02x%02x', LT["TargetCol"].r * 255, LT["TargetCol"].g * 255, LT["TargetCol"].b * 255)
|
|
LT["Target"] = (LT["TargetCol"] .. LT["Target"])
|
|
|
|
end
|
|
|
|
-- Add target line
|
|
GameTooltip:AddLine(ttTarget .. ": " .. LT["Target"])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
GameTooltip:HookScript("OnTooltipSetUnit", ShowTip)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Move chat editbox to top
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["MoveChatEditBoxToTop"] == "On" then
|
|
|
|
-- Set options for normal chat frames
|
|
for i = 1, 50 do
|
|
if _G["ChatFrame" .. i] then
|
|
-- Position the editbox
|
|
_G["ChatFrame" .. i .. "EditBox"]:ClearAllPoints();
|
|
_G["ChatFrame" .. i .. "EditBox"]:SetPoint("TOPLEFT", _G["ChatFrame" .. i], 0, 0);
|
|
_G["ChatFrame" .. i .. "EditBox"]:SetWidth(_G["ChatFrame" .. i]:GetWidth());
|
|
-- Ensure editbox width matches chatframe width
|
|
_G["ChatFrame" .. i]:HookScript("OnSizeChanged", function()
|
|
_G["ChatFrame" .. i .. "EditBox"]:SetWidth(_G["ChatFrame" .. i]:GetWidth())
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Do the functions above for other chat frames (pet battles, whispers, etc)
|
|
hooksecurefunc("FCF_OpenTemporaryWindow", function()
|
|
|
|
local cf = FCF_GetCurrentChatFrame():GetName() or nil
|
|
if cf then
|
|
|
|
-- Position the editbox
|
|
_G[cf .. "EditBox"]:ClearAllPoints();
|
|
_G[cf .. "EditBox"]:SetPoint("TOPLEFT", cf, "TOPLEFT", 0, 0);
|
|
_G[cf .. "EditBox"]:SetWidth(_G[cf]:GetWidth());
|
|
|
|
-- Ensure editbox width matches chatframe width
|
|
_G[cf]:HookScript("OnSizeChanged", function()
|
|
_G[cf .. "EditBox"]:SetWidth(_G[cf]:GetWidth())
|
|
end)
|
|
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Show borders
|
|
----------------------------------------------------------------------
|
|
|
|
if LeaPlusLC["ShowBorders"] == "On" then
|
|
|
|
-- Create border textures
|
|
local BordTop = WorldFrame:CreateTexture(nil, "ARTWORK"); BordTop:SetColorTexture(0, 0, 0, 1); BordTop:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, 0); BordTop:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0)
|
|
local BordBot = WorldFrame:CreateTexture(nil, "ARTWORK"); BordBot:SetColorTexture(0, 0, 0, 1); BordBot:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 0, 0); BordBot:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", 0, 0)
|
|
local BordLeft = WorldFrame:CreateTexture(nil, "ARTWORK"); BordLeft:SetColorTexture(0, 0, 0, 1); BordLeft:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, 0); BordLeft:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 0, 0)
|
|
local BordRight = WorldFrame:CreateTexture(nil, "ARTWORK"); BordRight:SetColorTexture(0, 0, 0, 1); BordRight:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", 0, 0); BordRight:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", 0, 0)
|
|
|
|
-- Create border configuration panel
|
|
local bordersPanel = LeaPlusLC:CreatePanel("Show borders", "bordersPanel")
|
|
|
|
-- Function to set border parameters
|
|
local function RefreshBorders()
|
|
|
|
-- Set border size and transparency
|
|
BordTop:SetHeight(LeaPlusLC["BordersTop"]); BordTop:SetAlpha(1 - LeaPlusLC["BordersAlpha"])
|
|
BordBot:SetHeight(LeaPlusLC["BordersBottom"]); BordBot:SetAlpha(1 - LeaPlusLC["BordersAlpha"])
|
|
BordLeft:SetWidth(LeaPlusLC["BordersLeft"]); BordLeft:SetAlpha(1 - LeaPlusLC["BordersAlpha"])
|
|
BordRight:SetWidth(LeaPlusLC["BordersRight"]); BordRight:SetAlpha(1 - LeaPlusLC["BordersAlpha"])
|
|
|
|
-- Show formatted slider value
|
|
LeaPlusCB["BordersAlpha"].f:SetFormattedText("%.0f%%", LeaPlusLC["BordersAlpha"] * 100)
|
|
|
|
end
|
|
|
|
-- Create slider controls
|
|
LeaPlusLC:MakeTx(bordersPanel, "Top", 16, -72)
|
|
LeaPlusLC:MakeSL(bordersPanel, "BordersTop", "Drag to set the size of the top border.", 0, 300, 5, 16, -92, "%.0f")
|
|
LeaPlusCB["BordersTop"]:HookScript("OnValueChanged", RefreshBorders)
|
|
|
|
LeaPlusLC:MakeTx(bordersPanel, "Bottom", 16, -132)
|
|
LeaPlusLC:MakeSL(bordersPanel, "BordersBottom", "Drag to set the size of the bottom border.", 0, 300, 5, 16, -152, "%.0f")
|
|
LeaPlusCB["BordersBottom"]:HookScript("OnValueChanged", RefreshBorders)
|
|
|
|
LeaPlusLC:MakeTx(bordersPanel, "Left", 186, -72)
|
|
LeaPlusLC:MakeSL(bordersPanel, "BordersLeft", "Drag to set the size of the left border.", 0, 300, 5, 186, -92, "%.0f")
|
|
LeaPlusCB["BordersLeft"]:HookScript("OnValueChanged", RefreshBorders)
|
|
|
|
LeaPlusLC:MakeTx(bordersPanel, "Right", 186, -132)
|
|
LeaPlusLC:MakeSL(bordersPanel, "BordersRight", "Drag to set the size of the right border.", 0, 300, 5, 186, -152, "%.0f")
|
|
LeaPlusCB["BordersRight"]:HookScript("OnValueChanged", RefreshBorders)
|
|
|
|
LeaPlusLC:MakeTx(bordersPanel, "Transparency", 356, -132)
|
|
LeaPlusLC:MakeSL(bordersPanel, "BordersAlpha", "Drag to set the transparency of the borders.", 0, 0.9, 0.1, 356, -152, "%.1f")
|
|
LeaPlusCB["BordersAlpha"]:HookScript("OnValueChanged", RefreshBorders)
|
|
|
|
-- Help button hidden
|
|
bordersPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
bordersPanel.b:SetScript("OnClick", function()
|
|
bordersPanel:Hide()
|
|
LeaPlusLC["PageF"]:Show()
|
|
LeaPlusLC["Page5"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Reset button handler
|
|
bordersPanel.r:SetScript("OnClick", function()
|
|
LeaPlusLC["BordersTop"] = 0
|
|
LeaPlusLC["BordersBottom"] = 0
|
|
LeaPlusLC["BordersLeft"] = 0
|
|
LeaPlusLC["BordersRight"] = 0
|
|
LeaPlusLC["BordersAlpha"] = 0
|
|
bordersPanel:Hide(); bordersPanel:Show()
|
|
RefreshBorders()
|
|
end)
|
|
|
|
-- Configuration button handler
|
|
LeaPlusCB["ModBordersBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["BordersTop"] = 0
|
|
LeaPlusLC["BordersBottom"] = 0
|
|
LeaPlusLC["BordersLeft"] = 0
|
|
LeaPlusLC["BordersRight"] = 0
|
|
LeaPlusLC["BordersAlpha"] = 0.7
|
|
RefreshBorders()
|
|
else
|
|
bordersPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
-- Set borders on startup
|
|
RefreshBorders()
|
|
|
|
-- Hide borders when cinematic is shown
|
|
hooksecurefunc(CinematicFrame, "Hide", function()
|
|
BordTop:Show(); BordBot:Show(); BordLeft:Show(); BordRight:Show()
|
|
end)
|
|
hooksecurefunc(CinematicFrame, "Show", function()
|
|
BordTop:Hide(); BordBot:Hide(); BordLeft:Hide(); BordRight:Hide()
|
|
end)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Silence rested emotes
|
|
----------------------------------------------------------------------
|
|
|
|
-- Manage emotes
|
|
if LeaPlusLC["NoRestedEmotes"] == "On" then
|
|
|
|
-- Zone table English , French , German , Italian , Russian , S Chinese , Spanish , T Chinese ,
|
|
local zonetable = { "The Halfhill Market" , "Marché de Micolline" , "Der Halbhügelmarkt" , "Il Mercato di Mezzocolle" , "Рынок Полугорья" , "半山市集" , "El Mercado del Alcor" , "半丘市集" ,
|
|
"The Grim Guzzler" , "Le Sinistre écluseur" , "Zum Grimmigen Säufer" , "Torvo Beone" , "Трактир Угрюмый обжора" , "黑铁酒吧" , "Tragapenas" , "黑鐵酒吧" ,
|
|
"The Summer Terrace" , "La terrasse Estivale" , "Die Sommerterrasse" , "Terrazza Estiva" , "Летняя терраса" , "夏之台" , "El Bancal del Verano" , "夏日露臺" ,
|
|
}
|
|
|
|
-- Function to set rested state
|
|
local function UpdateEmoteSound()
|
|
|
|
-- Find character's current zone
|
|
local szone = GetSubZoneText() or "None"
|
|
|
|
-- Find out if emote sounds are disabled or enabled
|
|
local emoset = GetCVar("Sound_EnableEmoteSounds")
|
|
|
|
if IsResting() then
|
|
-- Character is resting so silence emotes
|
|
if emoset ~= "0" then
|
|
SetCVar("Sound_EnableEmoteSounds", "0")
|
|
end
|
|
return
|
|
end
|
|
|
|
-- Traverse zone table and silence emotes if character is in a designated zone
|
|
for k, v in next, zonetable do
|
|
if szone == zonetable[k] then
|
|
if emoset ~= "0" then
|
|
SetCVar("Sound_EnableEmoteSounds", "0")
|
|
end
|
|
return
|
|
end
|
|
end
|
|
|
|
-- Silence emotes if character is in a pet battle
|
|
if C_PetBattles.IsInBattle() then
|
|
if emoset ~= "0" then
|
|
SetCVar("Sound_EnableEmoteSounds", "0")
|
|
end
|
|
return
|
|
end
|
|
|
|
-- If the above didn't return, emote sounds should be enabled
|
|
if emoset ~= "1" then
|
|
SetCVar("Sound_EnableEmoteSounds", "1")
|
|
end
|
|
return
|
|
|
|
end
|
|
|
|
-- Set emote sound when pet battles start and end
|
|
hooksecurefunc("PetBattleFrame_Display", UpdateEmoteSound)
|
|
hooksecurefunc("PetBattleFrame_Remove", UpdateEmoteSound)
|
|
|
|
-- Set emote sound when rest state or zone changes
|
|
local RestEvent = CreateFrame("FRAME")
|
|
RestEvent:RegisterEvent("PLAYER_UPDATE_RESTING")
|
|
RestEvent:RegisterEvent("ZONE_CHANGED_NEW_AREA")
|
|
RestEvent:RegisterEvent("ZONE_CHANGED")
|
|
RestEvent:RegisterEvent("ZONE_CHANGED_INDOORS")
|
|
RestEvent:SetScript("OnEvent", UpdateEmoteSound)
|
|
|
|
-- Set sound setting at startup
|
|
UpdateEmoteSound()
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Final code for Player
|
|
----------------------------------------------------------------------
|
|
|
|
-- Show first run message
|
|
if not LeaPlusDB["FirstRunMessageSeen"] then
|
|
C_Timer.After(1, function()
|
|
LeaPlusLC:Print(L["Enter"] .. " |cff00ff00" .. "/ltp" .. "|r " .. L["or click the minimap button to open Leatrix Plus."])
|
|
LeaPlusDB["FirstRunMessageSeen"] = true
|
|
end)
|
|
end
|
|
|
|
-- Register logout event to save settings
|
|
LpEvt:RegisterEvent("PLAYER_LOGOUT")
|
|
|
|
-- Release memory
|
|
LeaPlusLC.Player = nil
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L50: RunOnce
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:RunOnce()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Media player
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:MediaFunc()
|
|
|
|
-- Create tables for list data and zone listing
|
|
local ListData, ZoneList, playlist = {}, {}, {}
|
|
local scrollFrame, willPlay, musicHandle, ZonePage, LastPlayed, LastFolder, TempFolder, HeadingOfClickedTrack, LastMusicHandle
|
|
local numButtons = 15
|
|
local uframe = CreateFrame("FRAME")
|
|
local prefol = "|cffffffaa{" .. L["right-click to go back"] .. "}"
|
|
|
|
-- These categories will not appear in random track selections
|
|
local randomBannedList = {L["Narration"], L["Cinematics"], "MUS_51_DarkmoonFaire_MerryGoRound_01#34440"}
|
|
|
|
-- Create a table for each heading
|
|
ZoneList = {L["Zones"], L["Dungeons"], L["Various"], L["Random"], L["Search"], L["Movies"]}
|
|
for k, v in ipairs(ZoneList) do
|
|
ZoneList[v] = {}
|
|
end
|
|
|
|
-- Function to create a table for each zone
|
|
local function Zn(where, category, zone, tracklist)
|
|
tinsert(ZoneList[where], {category = category, zone = zone, tracks = tracklist})
|
|
end
|
|
|
|
-- Debug
|
|
-- Zn(L["Zones"], L["Eastern Kingdoms"], "Debug1", {"|cffffd800" .. L["Zones"] .. ": Debug1", "1020#1020", "1021#1021", "1022#1022", "1023#1023", "1024#1024",})
|
|
-- Zn(L["Zones"], L["Eastern Kingdoms"], "Debug2", {"|cffffd800" .. L["Zones"] .. ": Debug2", "1020#1020",})
|
|
-- Zn(L["Zones"], L["Eastern Kingdoms"], "Debug3", {"|cffffd800" .. L["Zones"] .. ": Debug2", "1020#1020", "sound/creature/hagara/vo_ds_hagara_crystalhit_01.ogg#574431#1",})
|
|
|
|
-- Zones: Eastern Kingdoms
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], "|cffffd800" .. L["Eastern Kingdoms"], {""})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Arathi Highlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Arathi Highlands"], prefol, "MUS_ArathiHighlands_GD#22292", "MUS_ArathiHighlands_GN#22293", "Zone-Desert Cave#5394", "Zone-Jungle Day#2525", "Zone-Mountain Night#2537", "Zone-Haunted#2990", "Zone-Orgrimmar#2901", "Zone-Volcanic Day#2529" , "Zone - Plaguelands#6066", "Moment - Battle05#6253", "Moment - Gloomy01#6074", "Moment-Stormwind08#5294",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Badlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Badlands"], prefol, "MUS_Badlands_GD#22294", "MUS_BadlandsGoblin#22695", "MUS_BadlandsOgre#22691", "MUS_NewKargath#22692", "MUS_ScarOfTheWorldBreaker#22693", "MUS_TombOfTheWatchers#22694",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Blasted Lands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Blasted Lands"], prefol, "MUS_BlastedLands_GD#22296", "MUS_BlastedLandsGilnean#22688", "MUS_BlastedLandsHuman#22684", "MUS_BlastedLandsOgre#22682", "MUS_BlastedLandsShadowsworn#22679", "MUS_BlastedLandsTainted#22683", "MUS_BloodwashCavern#22680", "MUS_NethergardeMines#22686", "MUS_SunveilExcursion#22689", "MUS_TheDarkPortalIntro#22690",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Burning Steppes"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Burning Steppes"], prefol, "MUS_BurningSteppes#22298", "MUS_BurningSteppesBlackrock#22674", "MUS_BlackwingDescent#23171", "MUS_DreadmaulRock#22675", "MUS_FireplumeRidge#22737", "MUS_MorgansVigil#22677", "Zone-Cursed Land Felwood#5455", "Zone-CursedLandFelwoodFurbolg#5456", "Zone-Orgrimmar#2901", "Zone-Volcanic Day#2529", "Zone - Plaguelands#6066",}) -- "Zone-Mystery#6065", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Cape of Stranglethorn"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Cape of Stranglethorn"], prefol, "MUS_CapeStranglethornA#22656", "MUS_StranglethornGoblin#23781", "MUS_StranglethornTrollB#22653", "MUS_StranglethornTrollA#22654", "Zone-Jungle Day#2525", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Dun Morogh"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Dun Morogh"], prefol, "MUS_DunMorogh_GD#22303", "MUS_DunMoroghTroll#22745", "MUS_ColdMountain_GU#22154", "MUS_DarkIronforge_GU#22160", "MUS_Gnomeregan#22756", "MUS_NewTinkertown#22753", "Zone-Evil Forest Night#2534", "Zone-Mountain Night#2537", "Zone-TavernAlliance#4516", "Zone-TavernDwarf01#11806",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Duskwood"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Duskwood"], prefol, "MUS_DuskwoodHaunted#22757", "MUS_DuskwoodHuman#22759", "MUS_DuskwoodWorgen#22758", "MUS_DuskwoodUndead#22760", "MUS_DustwallowOgre#22765", "MUS_HushedBank#22762", "MUS_TwilightGrove#22764", "Zone-EnchantedForest Night#2540", "Zone-EvilForest Day#2524", "Zone-Cursed Land Felwood#5455", "Zone-Volcanic Day#2529", "Zone - Plaguelands#6066",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Eastern Plaguelands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Eastern Plaguelands"], prefol, "MUS_EasternPlaguelands#22307", "MUS_EPlaguelandsArgent#22767", "MUS_EPlaguelandsCursed#22772", "MUS_EPlaguelandsHaunted#22766", "MUS_EPlaguelandsNerubian#22768", "MUS_LightsHopeChapel#22769", "MUS_QuelLithienLodge#22770", "MUS_Stratholme#22773", "Zone-EbonHArcherusWalk#14960", "Zone-EbonHDeathsBreachWalk#14961", "Zone-Haunted#2990", "Zone-OutlandCorruptRetail#10901", "Zone-Undercity#5074",}) -- "Zone-Mystery#6065", "Zone-Soggy Day#7082", "Zone-Soggy Night#6836", "Moment - Corrupt#9871"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Elwynn Forest"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Elwynn Forest"], prefol, "Zone-Forest Day#2523", "Zone-Stormwind#2532", "Zone-TavernAlliance#4516",}) -- "Zone - Plaguelands#6066", "MUS_HillsbradFoothills_GD#22315", "MUS_HillsbradFoothills_GN#22316"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Eversong Woods"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Eversong Woods"], prefol, "Zone-EversongDay#9789", "Zone-EversongNight#9790", "Zone-EversongRuinsDay#9797", "Zone-EversongRuinsNight#9798", "Zone-EversongBuildingsDay#9795", "Zone-EversongBuildingsNight#9796", "Zone-GhostlandsScenicWalk#9901", "Zone-SilvermoonDay#9793", "Zone-SilvermoonNight#9794",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Ghostlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Ghostlands"], prefol, "Zone-GhostlandsDay#9803", "Zone-GhostlandsNight#9804", "Zone-GhostlandsEversongDarkWalk#10869", "Zone-GhostlandsShalandisWalk#10867", "Zone-DeatholmeDay#9805", "Zone-DeatholmeNight#9806", "Zone-Desert Cave#5394", "Zone-EversongBuildingsDay#9795", "Zone-EversongBuildingsNight#9796", "Zone-Haunted#2990", "Zone-ZulamanWalkingUni#12133", "Zone - Plaguelands#6066",}) -- "Moment - Corrupt#9871"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Hillsbrad Foothills"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Hillsbrad Foothills"], prefol, "MUS_HillsbradFoothills_GD#22315", "MUS_HillsbradCursed#22789", "MUS_DurnholdeKeep#22788", "MUS_SludgeFields#22791", "MUS_TarrenMill#22790",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Hinterlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Hinterlands"], prefol, "MUS_TheHinterlands_GD#22335", "MUS_HinterlandsMystical#22588", "MUS_HinterlandsNightElf#22565", "MUS_HinterlandsTrollA#22562", "MUS_HinterlandsTrollB#22564", "MUS_HinterlandsUndead#22563",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Isle of Quel'Danas"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Isle of Quel'Danas"], prefol, "Zone-GhostlandsDay#9803", "Zone-GhostlandsNight#9804", "Zone-QuelDanasDay#12528", "Zone-QuelDanasNight#12529",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Loch Modan"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Loch Modan"], prefol, "MUS_LochModan_GD#22319", "MUS_LochModanAlt_GD#22793", "MUS_LochModanOgre#22797", "MUS_LochModanTwilight#22799", "MUS_FarstriderLodgeIntro#22798", "MUS_IronbandsExcavationSite#22795", "MUS_IronwingCavernIntro#22796",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Northern Stranglethorn"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Northern Stranglethorn"], prefol, "MUS_NorthStranglethornA#22655", "MUS_StranglethornOgre#23780", "MUS_StranglethornTrollA#22654", "MUS_StranglethornVale_GU#22208", "MUS_ZandalariTroll#24681", "Zone-Jungle Day#2525", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone - Plaguelands#6066", "Moment - Zul Gurub#8452",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Redridge Mountains"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Redridge Mountains"], prefol, "MUS_RedridgeMountains_GD#22701", "MUS_RedridgeBlackrock#22703", "MUS_Redridge_GD#22321",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Ruins of Gilneas"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Ruins of Gilneas"], prefol, "MUS_GilneasForsaken#23086", "MUS_GilneasTown#23085", "MUS_Scarred_UU#22198", "MUS_Shadows_UU#22200",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Searing Gorge"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Searing Gorge"], prefol, "MUS_SearingGorgeA#22668", "MUS_SearingGorgeTwilight#22669", "MUS_TheCauldron#22671", "MUS_TheSlagPit#22673", "Zone-Volcanic Day#2529",}) -- "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-Jungle Day#2525", "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Silverpine Forest"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Silverpine Forest"], prefol, "MUS_SilverpineForsaken#22665", "MUS_SilverpineHaunted#22667", "MUS_SilverpineHuman#22664", "MUS_SilverpineWorgen#22666", "MUS_ShadowfangKeep#23610", "Zone-Cursed Land Felwood#5455", "Zone-DarkForest#5376", "Zone-EvilForest Day#2524", "Zone-Haunted#2990", "Zone-TavernUndead#12137",}) -- "Moment - Battle04#6079"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Swamp of Sorrows"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Swamp of Sorrows"], prefol, "MUS_SwampOfSorrowsDraenei#22541", "MUS_SwampOfSorrowsGoblin#22539", "MUS_SwampOfSorrowsTroll#22542", "Zone-Evil Forest Night#2534", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone - Plaguelands#6066",}) -- "Zone-Mystery#6065", "Moment - Battle05#6253", "Moment - Battle02#6262", "Moment - Battle06#6350"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Tirisfal Glades"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Tirisfal Glades"], prefol, "MUS_TirisfalHaunted#22651", "MUS_UndercityAlt#22650", "MUS_70_Artif_TombofTyr_Walk#77240", "MUS_50_SM_Dungeon_ScarletEntranceWalk#33719", "MUS_50_SM_Dungeon_VestibuleWalk#33721", "Zone-EvilForest Day#2524", "Zone-Haunted#2990", "Zone-Undercity#5074", "Zone - Plaguelands#6066", "Zone-TavernHorde01#5355", "Zone-TavernUndead#12137", "Moment-Haunted02#5174", "MUS_61_GarrisonMusicBox_15#49540",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Tol Barad"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Tol Barad"], prefol, "MUS_TolBarad_BG#23627",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Twilight Highlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Twilight Highlands"], prefol, "MUS_TwilightHighlands_GD (1)#23144", "MUS_TwilightHighlands_GN (1)#23145", "MUS_TwilightHighlandsCrystal#23159", "MUS_TwilightHighlandsHuman#23158", "MUS_TwilightHighlandsTwilightDay#23146", "MUS_TwilightOgre#23150", "MUS_BastionOfTwilight#23167", "MUS_Crushblow#23153", "MUS_DarkshoreCoast#23002", "MUS_GrimBatol#22637", "MUS_GrimBatolDungeonAlt#23169", "MUS_Krazzworks#23160", "MUS_TwilightHive#23796", "Zone-Forest Day#2523", "Zone-Volcanic Day#2529",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Vashj'ir"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Vashj'ir"], prefol, "MUS_AbyssalDepths_GN#22347", "MUS_KelpForest_GN#22349", "MUS_ShimmeringExpanse_GN#22351", "Zone-TavernPirate#11805",})
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Western Plaguelands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Western Plaguelands"], prefol, "MUS_WPlaguelands_GD#22352", "MUS_WPlaguelands_GN#22353", "MUS_WestPlaguelands_Cursed#22560", "MUS_WestPlaguelands_Haunted#22561", "Zone-Cursed Land Felwood#5455", "Zone-Haunted#2990", "Zone-Volcanic Day#2529", "Moment - Gloomy01#6074",}) -- "Zone-Soggy Night#6836", "Zone-Soggy Day#7082"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Westfall"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Westfall"], prefol, "MUS_WestfallA#22645", "MUS_WestfallB#22646", "MUS_Deadmines#23609", "Zone-BarrenDry Night#2536", "Zone-EvilForest Day#2524", "Zone-Forest Day#2523", "Zone-Plains Day#2528",}) -- "Zone-Mystery#6065", "Zone-Orgrimmar#2901"
|
|
Zn(L["Zones"], L["Eastern Kingdoms"], L["Wetlands"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Wetlands"], prefol, "MUS_Wetlands_GD#22356", "MUS_Wetlands_GN#22357", "MUS_WetlandsHuman#22639", "MUS_WetlandsOrcs#22632", "MUS_WetlandsNightElf#22635", "Zone-Forest Day#2523", "Zone-Haunted#2990", "Zone-Jungle Day#2525", "Zone-Night Forest#2533", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone - Plaguelands#6066", "Zone-TavernAlliance#4516", "Zone-TavernPirate#11805",}) -- "Zone-Mystery#6065"
|
|
|
|
-- Zones: Kalimdor
|
|
Zn(L["Zones"], L["Kalimdor"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Kalimdor"], "|cffffd800" .. L["Kalimdor"], {""})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Ashenvale"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Ashenvale"], prefol, "MUS_AshenvaleBarrowDen#22939", "MUS_AshenvaleDemon#22936", "MUS_AshenvaleForsaken#22929", "MUS_AshenvaleFurbolg#22930", "MUS_AshenvaleNaga#22951", "MUS_AshenvaleSatyr#22946", "MUS_AshenvaleTwilight#22942", "MUS_BoughShadow#22932", "MUS_MaestrasPost#22943", "MUS_Thunderpeak#22960", "Zone-Crossroads#7097", "Zone-Cursed Land Felwood#5455", "Zone-CursedLandFelwoodFurbolg#5456", "Zone-Darnassus#3920", "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-EnchantedForest Day#2530", "Zone-EnchantedForest Night#2540", "Zone-Jungle Day#2525", "Zone - Plaguelands#6066", "Zone-OutlandsHordeBase9785", "Zone-TavernHorde#5234", "Zone-TavernOrc#12328",}) -- "Zone-Mystery#6065", "Moment - Battle06#6350"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Azshara"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Azshara"], prefol, "MUS_Azshara_GN (1)#22965", "MUS_AzsharaCoast#22967", "MUS_AzsharaGoblin#22970", "MUS_AzsharaHaunted#22975", "MUS_AzsharaNaga#22981", "MUS_AzsharaTwilight#22983", "MUS_GallywixsVillaIntro#22546", "MUS_SecretLab#22987", "MUS_70_Zone_Highmountain_Azshara_HulnFlashback_Walk#22964", "Zone-Crossroads#7097", "Zone-Darnassus#3920", "Zone-Desert Day#4754", "Zone-Desert Cave#5394", "Zone-Haunted#2990", "Zone-Jungle Day#2525", "Zone-Mountain Night#2537", "Zone - Plaguelands#6066",}) -- "Zone-Mystery#6065", "Moment - Battle05#6253"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Azuremyst Isle"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Azuremyst Isle"], prefol, "Zone-AzureMystWalking#9975", "Zone-AzuremystNagaWalking#9458", "Zone-AzuremystOwlWalking#10605", "Zone-OutlandsAllianceBase#9786",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Bloodmyst Isle"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Bloodmyst Isle"], prefol, "MUS_70_Zone_Highmountain_DrogbarEarth_Walk#76613", "Zone-AzuremystNagaWalking#9458", "Zone-BloodmystSatyrWalkingUni#9460",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Darkshore"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Darkshore"], prefol, "MUS_Darkshore_GD (1)#22992", "MUS_Darkshore_GN (1)#22993", "MUS_DarkshoreCoast#23002", "MUS_DarkshoreForsaken#23009", "MUS_DarkshoreTroll#22996", "MUS_DarkshoreTwilight#23000", "MUS_BlazingStrand#22994", "MUS_EyeOfTheVortex#23007", "MUS_GroveOfTheAncients#22999", "MUS_Nazjvel#23004", "MUS_ShatterSpearPass#22995", "MUS_TheVortex#23008", "Zone - Plaguelands#6066", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Desolace"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Desolace"], prefol, "MUS_Desolace_GD#22241", "MUS_Desolace_GD (1)#23013", "MUS_DesolaceBurningBlade#23023", "MUS_DesolaceCoast#23027", "MUS_DesolaceNightElf#23021", "MUS_GelkisVillageIntro#23016", "MUS_GhostwalkerPost#23017", "MUS_KarnumsGlade#23018", "MUS_MannorocCovenIntro#23020", "MUS_RanazjarIsle#23022", "MUS_ShadowpreyVillage#23024", "MUS_SlitherbladeShoreIntro#23026", "MUS_ThunksAbodeIntro#23029", "MUS_ValleyOfBonesIntro#23030",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Durotar"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Durotar"], prefol, "MUS_Durotar_GD (1)#23032", "MUS_Durotar_GN (1)#23033", "MUS_DurotarCoast#23036", "MUS_DurotarTroll#23034", "MUS_BurningBladeCoven#23039", "MUS_SpitescaleCavern#23044", "Zone-Desert Cave#5394", "Zone-Jungle Day#2525", "Zone-Orgrimmar_Day#36308", "Zone-Orgrimmar_Night#36309", "Zone-Orgrimmar#2901", "Zone-Plains Day#2528", "Zone-TavernOrc#12328",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Dustwallow Marsh"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Dustwallow Marsh"], prefol, "MUS_Dustwallow_GD#22247", "MUS_Dustwallow_GN#22248", "MUS_DustwallowGoblin#22595", "MUS_DustwallowGrimtotem#22589", "MUS_DustwallowHaunted#22591", "MUS_DustwallowHuman#22590", "MUS_DustwallowJungle#22592", "MUS_DustwallowTauren#22594", "MUS_StonemaulRuins#22596", "MUS_50_Scenario_AllianceTheramore#34012", "MUS_50_Scenario_HordeTheramore#34013", "Zone-Evil Forest Night#2534", "Zone-Jungle Day#2525", "Zone-Stormwind#2532", "Zone-Volcanic Day#2529", "Zone - Orgrimmar02#6146", "Moment-Orc Barren#7474", "Moment-StormwindSouthSeas#6837",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Felwood"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Felwood"], prefol, "MUS_Felwood#22250", "MUS_FelwoodNightElf#22629", "MUS_FelwoodDruid#22631", "MUS_FelwoodHorde#22630", "Zone-Cursed Land Felwood#5455", "Zone-CursedLandFelwoodFurbolg#5456", "Zone-EvilForest Day#2524", "Zone-Soggy Day#7082", "Zone-Soggy Night#6836",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Feralas"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Feralas"], prefol, "MUS_Feralas_GD#22252", "MUS_Feralas_GN#22253", "MUS_FeralasBugs#22627", "MUS_FeralasGrimtotem#22604", "MUS_FeralasHaunted#22600", "MUS_FeralasHorde#22626", "MUS_FeralasNightElf#22603", "MUS_FeralasTauren#22599", "MUS_DreamBough#22601", "Zone-EnchantedForest Day#2530", "Zone-EnchantedForest Night#2540", "Zone-Desert Day#4754", "Zone-Desert Cave#5394", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone-TavernTauren#12329", "Zone-Volcanic Day#2529", "Zone - Plaguelands#6066", "Moment - Gloomy01#6074",}) -- "Zone-Mystery#6065", "Moment-Spooky01#5037"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Moonglade"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Moonglade"], prefol, "MUS_Moonglade#22860", "MUS_StormrageBarrowDens#22864", "Zone-CursedLandFelwoodFurbolg#5456", "Zone-EvilForest Day#2524", "Zone-TavernTempleofTheMoon#12136",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Mount Hyjal"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Mount Hyjal"], prefol, "MUS_MountHyjal_GD#22906", "MUS_MountHyjal_GN#22907", "MUS_HyjalDruid#22914", "MUS_HyjalFire#22912", "MUS_HyjalLight#22923", "MUS_HyjalLycan#22920", "MUS_HyjalOgre#22913", "MUS_HyjalTwilightDay#22911", "MUS_HyjalTwilightFire#22908", "MUS_LakeEdunel#22915", "MUS_LeyarasSorrow#22918", "MUS_Nordrassil#22922",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Mulgore"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Mulgore"], prefol, "MUS_Mulgore_GD#22260", "MUS_Mulgore_GN#22262", "MUS_MulgoreGrimtotem#22812", "MUS_MulgoreTauren#22810", "MUS_Bael'dunDigsite#22809", "MUS_VentureCoMine#22808", "Zone-Desert Cave#5394", "Zone-Plains Day#2528", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone-Volcanic Day#2529", "Zone - Plaguelands#6066",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Northern Barrens"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Northern Barrens"], prefol, "MUS_NorthBarrens_GD#22815", "MUS_NorthBarrens_GN#22816", "MUS_NorthBarrensGreen#22818", "MUS_NorthBarrensOrcs#22824", "MUS_NorthBarrensTauren#22825", "MUS_BoulderLodeMine#22819", "MUS_DreadmistPeak#22820", "MUS_SouthBarrensHuman#22839", "MUS_TheSludgeFen#22828", "MUS_TheWailingCaverns#22829", "Zone-BarrenDry Night#2536", "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-Jungle Day#2525", "Zone-Thunderbluff#7077", "Zone-Undead Dance#7083", "Zone-Undercity#5074", "Zone-Volcanic Day#2529", "Zone - Plaguelands#6066", "Zone-TavernAlliance#4516", "Zone-TavernPirate#11805",}) -- "Moment - Battle06#6350"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Silithus"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Silithus"], prefol, "MUS_Silithus_GD#22268", "MUS_Silithus_GN#22269", "MUS_SilithusDark#22559", "MUS_SilithusTwilight#22558", "AhnQirajInteriorCenterRoom#8579", "AhnQirajKingRoom#8578", "AhnQirajTriangleRoomWalking#8577", "Zone - AhnQirajExterior#8531", "Zone Music - AhnQirajInteriorWa#8563", "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone-TavernNightElf02#80449",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Southern Barrens"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Southern Barrens"], prefol, "MUS_SouthBarrens_GD#22270", "MUS_SouthBarrens_GN#22271", "MUS_SouthBarrenDwarf#22833", "MUS_SouthBarrensGreen#22846", "MUS_SouthBarrensHuman#22839", "MUS_SouthBarrensTaurens#22832", "MUS_Battlescar#22835", "MUS_DesolationHold#22837", "MUS_FrazzlecrazMotherlode#22841",}) -- "Moment - Battle04#6079"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Stonetalon Mountains"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Stonetalon Mountains"], prefol, "MUS_StonetalonDruid#22856", "MUS_StonetalonGrimtotem#22848", "MUS_StonetalonNightElf#22855", "MUS_StonetalonOrcs#22854", "MUS_StonetalonTauren#22849", "MUS_StoneTalon_GU#22205", "MUS_KromgarFortress#22853", "MUS_TheSludgeworks#22850", "MUS_TheTalonDen#22857", "MUS_WebwinderHollow#22858", "MUS_WindshearHold#22859", "Zone-BarrenDry Night#2536", "Zone-EvilForest Day#2524", "Zone-Jungle Day#2525", "Zone-Night Forest#2533", "Zone - Plaguelands#6066", "Zone-TavernHorde#5234",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Tanaris"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Tanaris"], prefol, "MUS_Tanaris_GD#22274", "MUS_Tanaris_GN#22275", "MUS_TanarisBugs#22873", "MUS_TanarisOgre#22868", "MUS_TanarisTrollA#22867", "MUS_TanarisTrollB#22871", "MUS_Gadgetzan#22866", "MUS_Uldum_GD#22284", "MUS_Uldum_GN#22285", "MUS_43_WellOfEternity_AzsharaWalk#26581", "MUS_43_HourOfTwilight_GeneralWalk#26604", "Zone-CavernsofTimeWalk#10764", "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-Jungle Day#2525", "Zone-Volcanic Day#2529", "MUS_715_TavernGoblin#80448",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Teldrassil"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Teldrassil"], prefol, "MUS_BanethilBarrowDen#22885", "Zone-Darnassus#3920", "Zone-EnchantedForest Day#2530", "Zone-EnchantedForest Night#2540", "Zone-Evil Forest Night#2534", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Thousand Needles"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Thousand Needles"], prefol, "MUS_ThousandNeedles_GD#22280", "MUS_ThousandNeedlesGoblin#22729", "MUS_ThousandNeedlesGrimtotem#22730", "MUS_ThousandNeedlesTwilight#22733", "Zone-Desert Day#4754", "Zone-Desert Cave#5394", "Zone-Plains Day#2528", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone-Undead Dance#7083", "Zone-Undercity#5074", "Zone-TavernPirate#11805",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Uldum"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Uldum"], prefol, "MUS_Uldum_GD#22284", "MUS_Uldum_GN#22285", "MUS_LostCityOfTheTolvir#23173", "MUS_Skywall#23175", "Zone-UldumAlt#23068",})
|
|
Zn(L["Zones"], L["Kalimdor"], L["Un'Goro Crater"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Un'Goro Crater"], prefol, "MUS_FireplumeRidge#22737", "MUS_GolakkaHotSprings#22738", "MUS_UngoroBugs#22740", "Zone-Desert Day#4754", "Zone-Desert Night#4755", "Zone-Jungle Day#2525", "Zone-Soggy Night#6836", "Zone-UlduarStoneBattleWalk#14939",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Kalimdor"], L["Winterspring"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Winterspring"], prefol, "MUS_Winterspring_GD#22288", "MUS_Winterspring_GN#22289", "MUS_WinterspringGoblin#22569", "MUS_WinterspringHaunted#22567", "MUS_WinterspringNightElf#22568", "MUS_HyjalTwilightDay#22911", "Zone-EvilForest Day#2524", "Zone - Plaguelands#6066", "Moment - Gloomy01#6074", "MUS_715_TavernGoblin#80448",}) -- "Zone-Mystery#6065", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082"
|
|
|
|
-- Zones: Outland
|
|
Zn(L["Zones"], L["Outland"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Outland"], "|cffffd800" .. L["Outland"], {""})
|
|
Zn(L["Zones"], L["Outland"], L["Blade's Edge Mountains"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Blade's Edge Mountains"], prefol, "Zone-BladesEdge#9002", "Zone-BladesedgeDryForest#10609", "Zone-BladesEdgeGruulsLairWalk#10730", "Zone-OutlandsHordeBase#9785", "Zone-Shaman#10163", "Zone-ZangarmarshCoilfangWalk#10726",})
|
|
Zn(L["Zones"], L["Outland"], L["Hellfire Peninsula"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Hellfire Peninsula"], prefol, "Zone-HellfirePeninsula#9773", "Zone-ThrallmarWalk#10864", "Zone-OutlandBloodElfBase#10606", "Zone-OutlandDraeneiBase#10607", "Zone-OutlandsAllianceBase#9786",}) -- "Zone - Plaguelands#6066"
|
|
Zn(L["Zones"], L["Outland"], L["Nagrand"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Nagrand"], prefol, "Zone-NagrandDay#9012", "Zone-NagrandNight#9013", "Zone-OutlandsHordeBase#9785", "Zone-OutlandDraeneiBase#10607",}) -- "Zone-Volcanic Day#2529"
|
|
Zn(L["Zones"], L["Outland"], L["Netherstorm"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Netherstorm"], prefol, "Zone-Netherstorm#9284", "Zone-NetherplantWalking#10847", "Zone-NetherstormEco-Domes#10849", "Zone-OutlandBloodElfHostile#10856", "Zone-OutlandDraeneiBase#10607",})
|
|
Zn(L["Zones"], L["Outland"], L["Shadowmoon Valley"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Shadowmoon Valley"], prefol, "Zone-ZangarmarshCoilfangWalk#10726", "Zone-OutlandCorruptWalk#10848", "Zone-OutlandsHordeBase#9785", "Zone-OutlandsAllianceBase#9786", "Zone-OutlandDraeneiBase#10607", "Zone-BlackTempleWalk#11696", "Zone-BlackTempleKaraborWalk#11697", "Zone-BlackTempleSanctuaryWalk#11699", "Zone-BlackTempleAnguishWalk#11700", "Zone-BlackTempleVigilWalk#11701", "Zone-BlackTempleReliquaryWalk#11702", "Zone-BlackTempleDenWalk#11703",})
|
|
Zn(L["Zones"], L["Outland"], L["Terokkar Forest"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Terokkar Forest"], prefol, "Zone-Terokkar#9150", "Zone-TerokkarAchinounWalk#10729", "Zone-BoneWastesUni#9991", "Zone-OutlandBloodElfHostile#10856", "Zone-OutlandDraeneiBase#10607", "Zone-OutlandsHordeBase#9785", "Zone-OutlandsAllianceBase#9786",})
|
|
Zn(L["Zones"], L["Outland"], L["Zangarmarsh"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Zangarmarsh"], prefol, "Zone-ZangarMarsh#9149", "Zone-ZangarmarshCoilfangWalk#10726", "Zone-ExodarWalking#9972", "Zone-OutlandsHordeBase#9785", "Zone-OutlandDraeneiBase#10607", "Zone-TavernNightElf02#80449",}) -- "Moment - Gloomy01#6074"
|
|
|
|
-- Zones: Northrend
|
|
Zn(L["Zones"], L["Northrend"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Northrend"], "|cffffd800" .. L["Northrend"], {""})
|
|
Zn(L["Zones"], L["Northrend"], L["Borean Tundra"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Borean Tundra"], prefol, "Zone-BoreanTundraDay#12746", "Zone-BoreanTundraNight#12747", "Zone-BoreanTundraTuskarrDay#12562", "Zone-BoreanTundraTuskarrNight#12561", "Zone-BoreanTundraGeyserFields#15101", "Zone-TaunkaDay#12802", "Zone-TaunkaNight#12803", "Zone-ColdarraGeneralWalk#14958", "Zone-ColdarraNexusEXT#14959", "Zone-NorthrenScourge#15049", "Zone-NorthrenOrcGeneralDay#15041", "Zone-NorthrenOrcGeneralNight#15042", "Zone-NorthrenRiplashDay#15044", "Zone-NorthrenRiplashNight#15045", "Zone-NorthrenDarker#15050", "Zone-NexusC#15059", "Zone-NexusD#15060", "Zone - NaxxramsDeathKnight#8687", "Zone-TavernAlliance#4516",})
|
|
Zn(L["Zones"], L["Northrend"], L["Crystalsong Forest"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Crystalsong Forest"], prefol, "Zone-CrystalSongForest#14905", "Zone-DalaranCity#14906", "Zone-DalaranCityCitadelInterior#14995", "Zone-DalaranSewersWalkUni#14908", "Zone-TavernAlliance#4516", "Zone-TavernHorde#5234", "MUS_60_Proudmoore_03#49358",})
|
|
Zn(L["Zones"], L["Northrend"], L["Dragonblight"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Dragonblight"], prefol, "Zone-DragonblightDay#12744", "Zone-DragonblightNight#12745", "Zone-DragonblightTuskarrDay#12563", "Zone-DragonblightTuskarrNight#12564", "Zone-DragonBlightWyrmrestDay#15121", "Zone-DragonBlightWyrmrestNight#15122", "Zone-NaxxramasAbominationBoss#8888", "Zone-NaxxramasAbomination#8883", "Zone-NaxxramasSpider#8884", "Zone-NaxxramasPlagueBoss#8886", "Zone-NaxxramasPlague#8885", "Zone-NaxxramasSpiderBoss#8887", "Zone-NaxxramasKelthuzad#8889", "Zone-NaxxramasFrostWyrm#8890", "Zone - NaxxramsDeathKnight#8687", "Zone-TaunkaDay#12802", "Zone-TaunkaNight#12803", "Zone-SholazarWalkDay#14893", "Zone-SholazarWalkNight#14894", "Zone-NorthrenOrcGeneralDay#15041", "Zone-NorthrenOrcGeneralNight#15042", "Zone-NorthrenRiplashDay#15044", "Zone-NorthrenRiplashNight#15045", "Zone-NorthrenTroll#15048", "Zone-NorthrenScourge#15049", "Zone-NorthrenDarker#15050", "Zone-AzjolNerubA#15096",}) -- "Zone-Haunted#2990", "Moment - Gloomy02#6075", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Zone-EbonHDeathsBreachWalk#14961", "Zone-EbonHNewAvalonWalk#14964"
|
|
Zn(L["Zones"], L["Northrend"], L["Grizzly Hills"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Grizzly Hills"], prefol, "Zone-GrizzlyHillsDay#12816", "Zone-GrizzlyHillsNight#12817", "Zone-GrizzlyHillsDayB#15036", "Zone-GrizzlyHillsNightB#15037", "Zone-GrizzlyHillsDayC#15038", "Zone-GrizzlyHillsNightC#15039", "Zone-GrizzlyHillsNightC-withTotems#77323", "Zone-TaunkaDay#12802", "Zone-TaunkaNight#12803", "Zone-IronDwarfDay#12824", "Zone-IronDwarfNight#12825", "Zone-VrykulWalk#14997", "Zone-NorthrenOrcGeneralDay#15041", "Zone-NorthrenOrcGeneralNight#15042", "Zone-NorthrenRiplashDay#15044", "Zone-NorthrenRiplashNight#15045", "Zone-NorthrenTroll#15048",}) -- "Zone-Mystery#6065", "Zone-EbonHNewAvalonWalk#14964"
|
|
Zn(L["Zones"], L["Northrend"], L["Howling Fjord"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Howling Fjord"], prefol, "Zone-HowlingFjordDay#12800", "Zone-HowlingFjordNight#12801", "Zone-HowlingFjordTuskarrDay#12565", "Zone-HowlingFjordTuskarrNight#12566", "Zone-TaunkaDay#12802", "Zone-TaunkaNight#12803", "Zone-IronDwarfDay#12824", "Zone-IronDwarfNight#12825", "Zone-VrykulWalk#14997", "Zone-TavernUndead#12137", "Zone-TavernAlliance#4516",}) -- "Zone-Cursed Land Felwood#5455", "Zone-Mystery#6065", "Zone-EbonHNewAvalonWalk#14964"
|
|
Zn(L["Zones"], L["Northrend"], L["Icecrown"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Icecrown"], prefol, "Zone-IcecrownGeneralWalkDay#13801", "Zone-IcecrownGeneralWalkNight#13802", "Zone-ColdarraGeneralWalk#14958", "Zone-UtgardeA#15062", "Zone-VrykulWalk#14997", "Zone-NorthrenScourge#15049", "Zone-NorthrenDarker#15050", "Zone-IcecrownDungeonWalk#17278", "AT_TournamentNightWalk#15850", "AT_TournamentDayWalk#15851",}) -- "Zone - Plaguelands#6066", "Zone-EbonHNewAvalonWalk#14964"
|
|
Zn(L["Zones"], L["Northrend"], L["Sholazar Basin"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Sholazar Basin"], prefol, "Zone-SholazarWalkDay#14893", "Zone-SholazarWalkNight#14894", "Zone-MakersTerrace#14896", "Zone-FireWalk#14897", "Zone-Pillartops#14898", "Zone-PathofLife#14902", "Zone-UlduarStoneGeneralWalk#14937",})
|
|
Zn(L["Zones"], L["Northrend"], L["Storm Peaks"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Storm Peaks"], prefol, "Zone-StormpeaksDay#13799", "Zone-StormpeaksNight#13800", "Zone-IronDwarfDay#12824", "Zone-IronDwarfNight#12825", "Zone-UlduarStoneBattleWalk#14939", "Zone-VrykulWalk#14997", "Zone-NorthrenDarker#15050", "UR_FormationGroundsWalk#15862",}) -- "Zone-Mystery#6065", "Zone-Soggy Night#6836", "Zone-Soggy Day#7082", "Moment-Monestery#7519", "Zone-EbonHNewAvalonWalk#14964"
|
|
Zn(L["Zones"], L["Northrend"], L["Wintergrasp"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Wintergrasp"], prefol, "Zone-WintergraspContested#14912", "Zone-UldarLightningGeneralWalk#14942",})
|
|
Zn(L["Zones"], L["Northrend"], L["Zul'Drak"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Zul'Drak"], prefol, "Zone-ZulDrakGeneralWalkDay#13804", "Zone-ZulDrakGeneralWalkNight#13805", "Zone-ZuldrakMamtoth#15114", "Zone-ZuldrakQuetzlun#15115", "Zone-ZuldrakRhunok#15116", "Zone-ZuldrakSsertus#15117", "Zone-EbonHDeathsBreachWalk#14961", "Zone-DraktharonRaptorPens#15087", "Zone-NorthrenScourge#15049", "Zone - NaxxramsDeathKnight#8687",})
|
|
|
|
-- Zones: Maelstrom
|
|
Zn(L["Zones"], L["Maelstrom"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Maelstrom"], "|cffffd800" .. L["Maelstrom"], {""})
|
|
Zn(L["Zones"], L["Maelstrom"], L["Deepholm"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Deepholm"], prefol, "MUS_Deepholme#23056", "MUS_DeepholmeTwilight#23057", "MUS_DeepholmeCrystal#23058", "MUS_Bloodtrail#23063",})
|
|
Zn(L["Zones"], L["Maelstrom"], L["Kezan"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Kezan"], prefol, "MUS_Kezan#22254", "MUS_KajaMine#22550", "MUS_KajaroField#22552", "MUS_Drudgetown#22544", "MUS_FirstBankOfKezan#22545", "MUS_GallywixsVilla#22547", "MUS_GallywixsYacht#22549", "MUS_TheSlick#22555", "MUS_ThePipe#22557",})
|
|
Zn(L["Zones"], L["Maelstrom"], L["Lost Isles"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Lost Isles & Kazan"], prefol, "MUS_LostIsles_GD#23101", "MUS_LostIsles_GN#23102", "MUS_LostIslesMining#23107", "MUS_LostIslesPygmy#23122", "MUS_LostIslesNaga#23137", "MUS_KajamiteCavern#23115", "MUS_KTCOilPlatform#23117", "MUS_WarchiefsLookout#23142", "MUS_HordeBaseCamp#23113",})
|
|
|
|
-- Zones: Pandaria
|
|
Zn(L["Zones"], L["Pandaria"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Pandaria"], "|cffffd800" .. L["Pandaria"], {""})
|
|
Zn(L["Zones"], L["Pandaria"], L["Dread Wastes"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Dread Wastes"], prefol, "MUS_50_DreadWastes_General_Walk#29201", "MUS_50_DW_AmberglowHollow_Walk#33841", "MUS_50_DW_RikkitunVillage_Walk#33822", "MUS_50_DW_TheSunsetBrewgarden_Walk#33829", "MUS_50_DW_TheHorridMarch_TheThunderingRun_Walk#33831", "MUS_50_DW_TerraceofGurthan_Walk#33832", "MUS_50_DW_ForgottenMire_Walk#33834", "MUS_50_DW_TheBrinyMuck_Walk#33843", "MUS_50_DW_LakeOfStars_Walk#33835", "MUS_50_DW_SoggysGamble_Walk#33836", "MUS_50_DW_KypaIk_Walk#33839", "MUS_50_DW_Klaxxivess_Walk#33840", "MUS_50_DW_WhisperingStones_Walk#33844", "MUS_50_MischiefMakers_GeneralWalk#33537", "PVP-Battle Grounds--DeepwindGorge#37659",})
|
|
Zn(L["Zones"], L["Pandaria"], L["Isle of Thunder"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Isle of Thunder"], prefol, "MUS_52_IOTK_IsleOfThunder_General_Walk#36641", "MUS_52_IOTK_Zandalari1_General_Walk#36642", "MUS_52_IOTK_Zandalari2_General_Walk#36644", "MUS_52_IOTK_Zandalari3_General_Walk#36678", "MUS_52_IOTK_Saurok_Walk#36681", "MUS_52_IOTK_MoguGraveyard_Walk#36769", "MUS_52_IOTK_MoguCaves_Walk#36781", "MUS_52_IOTK_Raid_Wing3_AncientMogu_Walk#36782", "MUS_52_IOTK_LootRoom_Intensity1#36909", "MUS_52_IOTK_LootRoom_Intensity2#36910", "MUS_52_IOTK_LootRoom_Intensity3#36911", "MUS_52_IOTK_LootRoom_Intensity0#36916", "MUS_52_IOTK_ShadoPan_Walk#36967", "MUS_52_IOTK_HordeHub_Walk#36770", "MUS_52_IOTK_AllianceHub_Walk#36771", "MUS_52_TKRaid_ThroneOfThunder_Main#36702",})
|
|
Zn(L["Zones"], L["Pandaria"], L["Jade Forest"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Jade Forest"], prefol, "MUS_50_JF_JadeForest_GeneralWalk_Day#29196", "MUS_50_JF_JadeForest_GeneralWalk_Night#31837", "MUS_50_JF_SerpentsHeart_Day#31838", "MUS_50_JF_SerpentsHeart_Night#31839", "MUS_50_JF_TempleoftheJadeSerpent_CourtyardWalk#29202", "MUS_50_JF_Windspire_Walk#30621", "MUS_50_JF_JadeForest_VillageWalk#33641", "MUS_50_JF_LairoftheJadeWitch_Walk#34014", "MUS_50_JF_EmperorsOmen_Walk#34022", "MUS_50_SpiritCave_Walk#29218", "MUS_50_Spirits_B#33112", "MUS_50_Hozen_Walk_Day#30437", "MUS_50_Hozen_Walk_Night#33640", "MUS_50_Mogu_Walk#30527", "MUS_50_Jinyu_Day#31124", "MUS_50_Jinyu_Night#33639", "MUS_50_PandarenTavern_A#33540", "MUS_50_TJS_FountainoftheEverseeing_Walk#30456", "MUS_50_TJS_Dungeon_FountainoftheEverseeing_Walk#31987", "MUS_50_TJS_Dungeon_ShaofDoubt_Battle#31990", "MUS_50_TJS_Dungeon_ScrollkeepersSanctum_Battle#31991", "MUS_50_TJS_Dungeon_TempleoftheJadeSerpent_GeneralWalk#31992",}) -- "Zone-IcecrownGeneralWalkDay#13801", "Zone-IcecrownGeneralWalkNight#13802"
|
|
Zn(L["Zones"], L["Pandaria"], L["Krasarang Wilds"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Krasarang Wilds"], prefol, "MUS_50_KW_TurtleBeach_Day#33376", "MUS_50_KW_TurtleBeach_Night#33379", "MUS_50_KW_KrasarangWilds_Jungle#33894", "MUS_50_KW_KrasarangWilds_Coast#33895", "MUS_50_KW_TempleoftheRedCrane_Walk#33897", "MUS_50_KW_Hozen_Walk#33898", "MUS_51_KW_KrasarangWilds_Goblin_Walk#34884", "MUS_51_KW_KrasarangWilds_MoguCave#34885", "MUS_51_KW_LionsLanding_Day_Walk#34880", "MUS_51_KW_LionsLanding_Night_Walk#34881", "MUS_51_KW_DominationPoint_Walk#34883", "MUS_50_Mogu_Walk#30527", "MUS_50_Jinyu_Day#31124", "MUS_50_Jinyu_Night#33639", "MUS_50_GSS_SerpentSpine_VEB_DW_Walk#34001", "MUS_50_CaveGeneric_A#34021", "MUS_51_Scenario_ALittlePatience#34979",}) -- "MUS_Kezan#22254", "MUS_MulgoreTauren#22810", "MUS_FrazzlecrazMotherlode#22841", "MUS_DesolaceNightElf#23021", "MUS_43_DarkmoonFaire_IslandWalk#26536"
|
|
Zn(L["Zones"], L["Pandaria"], L["Kun-Lai Summit"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Kun-Lai Summit"], prefol, "MUS_50_KLS_ValleyofEmperors_GeneralWalk#33885", "MUS_50_KLS_Mountains_GeneralWalk_Day#33865", "MUS_50_KLS_Mountains_GeneralWalk_Night#33866", "MUS_50_KLS_MountainHozen_Walk#33869", "MUS_50_KLS_YaungolAdvance_Walk#33867", "MUS_50_KLS_GrummleCamp_Walk#33870", "MUS_50_KLS_TempleoftheWhiteTiger_Walk#33872", "MUS_50_KLS_PeakofSerenity_Walk#33874", "MUS_50_KLS_PeakofSerenity_MistweaverWalk#33875", "MUS_50_KLS_PeakofSerenity_BrewmasterWalk#33876", "MUS_50_KLS_PeakofSerenity_WindwalkerWalk#33877", "MUS_50_KLS_PeakofSerenity_CraneWalk#33878", "MUS_50_KLS_ZouchinVillage_Walk#33880", "MUS_50_KLS_IsleofReckoning_Walk#33881", "MUS_50_KLS_ShadopanDefenseForce#33882", "MUS_50_KLS_TheBurlapTrail_Walk#33883", "MUS_50_KLS_YakWash_Walk#33886", "MUS_50_Jinyu_Day#31124", "MUS_50_Jinyu_Night#33639", "MUS_50_Spirits_B#33112", "MUS_50_MischiefMakers_GeneralWalk#33537", "MUS_50_PandarenTavern_A#33540", "MUS_50_SPM_Dungeon_ShadoPan_GeneralWalk#33651", "MUS_50_SPM_ShadoPan_GeneralWalk#33694",}) -- "Zone-Desert Cave#5394", "Zone - Plaguelands#6066"
|
|
Zn(L["Zones"], L["Pandaria"], L["Timeless Isle"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Timeless Isle"], prefol, "MUS_54_TI_TimelessIsle_Intro#39124", "MUS_54_TI_TimelessIsle_GeneralWalk_Day#39129", "MUS_54_TI_TimelessIsle_GeneralWalk_Night#39128", "MUS_54_TI_Timeless_VillageWalk#39126", "MUS_54_TI_Timeless_CelestialCourt#39687", "MUS_54_TI_Timeless_OrdonSantuary#39688", "MUS_54_TI_Timeless_FirewalkersPath#39689",})
|
|
Zn(L["Zones"], L["Pandaria"], L["Townlong Steppes"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Townlong Steppes"], prefol, "MUS_50_TownlongSteppes_GeneralWalk_Day#30435", "MUS_50_TownlongSteppes_GeneralWalk_Night#31836", "MUS_50_TS_SikvessLair_Walk#33855", "MUS_50_TS_FarwatchOverlook_Walk#33856", "MUS_50_TS_GaoRan_Walk#33859", "MUS_50_TS_Sravess_Walk#33961", "MUS_50_TS_Sumprush_Walk#33858", "MUS_50_TS_HatredsVice_Walk#33861", "MUS_50_TS_FireCampGaiCho_Walk#33934", "MUS_50_TS_GaiChoBattlefield_Walk#33935", "MUS_50_SiegeofNiuzaoTemple_Hero#30624", "MUS_50_Spirits_B#33112",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Zones"], L["Pandaria"], L["Vale of Eternal Blossoms"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Vale of Eternal Blossoms"], prefol, "MUS_50_VEB_ValeofEternalBlossom_GeneralDay_Walk#29205", "MUS_50_VEB_ValeofEternalBlossom_GeneralNight_Walk#30638", "MUS_50_VEB_TheGoldenPagoda_Walk#33780", "MUS_50_VEB_AncestralRise_Walk#33781", "MUS_50_VEB_MSP_Exterior_Walk#33785", "MUS_50_VEB_Shrine_TheStarsBazaar_A_Walk#33786", "MUS_50_VEB_Shrine_TheEmperorsStep_A_Walk#33787", "MUS_50_VEB_Shrine_TheGoldenLantern_Walk#33789", "MUS_50_VEB_Shrine_ChamberofReflection_A_Walk#33791", "MUS_50_VEB_Shrine_PathofSerentiy_A_Walk#33796", "MUS_50_VEB_Shrine_EtherealCorridor_A_Walk#33797", "MUS_50_VEB_Shrine_ChamberofEnlightenment_A_Walk#33798", "MUS_50_VEB_Shrine_TheCelestialVault_A_Walk#33799", "MUS_50_VEB_Shrine_TheKeggary_Walk#33808", "MUS_50_VEB_RuinsRise_Walk#33810", "MUS_50_VEB_RuinsofGuoLai_Walk#33811", "MUS_50_VEB_TheFiveSisters_Walk#33812", "MUS_50_VEB_SettingSunGarrison_Walk#33813", "MUS_50_VEB_SettingSunGarrison_Brewery_Walk#33814", "MUS_50_VEB_TheSilentSanctuary_Walk#33815", "MUS_50_VEB_TheGoldenRose#33816", "MUS_50_VEB_WhitepetalLake_Walk#33817", "MUS_50_VEB_TheSummerFields_Walk#33991", "MUS_54_VEB_Corrupted_Worst_Day#39683", "MUS_54_VEB_Corrupted_Worst_Night#39684", "MUS_54_VEB_Corrupted_Moderate_Day#39685", "MUS_54_VEB_Corrupted_Moderate_Night#39686", "MUS_50_VEB_Shrine_ChamberofEnlightenment_H_Walk#39697", "MUS_50_VEB_Shrine_TheEmperorsStep_H_Walk#39698", "MUS_50_VEB_Shrine_PathofSerentiy_H_Walk#39699", "MUS_50_VEB_Shrine_EtherealCorridor_H_Walk#39700", "MUS_50_VEB_Shrine_TheCelestialVault_H_Walk#39701", "MUS_50_VEB_Shrine_TheStarsBazaar_H_Walk#39702",})
|
|
Zn(L["Zones"], L["Pandaria"], L["Valley of the Four Winds"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Valley of the Four Winds"], prefol, "MUS_50_VFW_TheHeartlandWalk_Day#31830", "MUS_50_VFW_TheHeartlandWalk_Night#30533", "MUS_50_VFW_GeneralWalk_Day#33686", "MUS_50_VFW_GeneralWalk_Night#33687", "MUS_50_VFW_PeacefulWalk#33689", "MUS_50_VFW_WindsEdgeWalk#33690", "MUS_50_VFW_BreweryWalk#33691", "MUS_50_VFW_TheHiddenMaster_Walk#33688", "MUS_50_Hozen_Walk_Day#30437", "MUS_50_Spirits_B#33112", "MUS_50_Jinyu_Day#31124", "MUS_50_MischiefMakers_GeneralWalk#33537", "MUS_50_PandarenTavern_A#33540", "MUS_50_GSS_SerpentSpine_VFW_DW_Walk#34002",})
|
|
Zn(L["Zones"], L["Pandaria"], L["Wandering Isle"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Wandering Isle"], prefol, "MUS_50_WanderingIsle_GeneralWalk#25837", "MUS_50_WanderingIsle_GeneralIndoors#25838", "MUS_50_WanderingIsle_PeiWuWalk#25833", "MUS_50_WanderingIsle_HozenWalk#25834", "MUS_50_WanderingIsle_SpiritsWalk#25835", "MUS_50_WanderingIsle_WoodofStavesWalk#25836", "MUS_50_WanderingIsle_TrainingWalk#25851", "MUS_50_WanderingIsle_TempleWalk#25854", "MUS_50_WanderingIsle_Temple_PreFire#33596", "MUS_50_WanderingIsle_Temple_Water/Earth#33597", "MUS_50_WanderingIsle_Temple_Air#33598",})
|
|
|
|
-- Zones: Draenor
|
|
Zn(L["Zones"], L["Draenor"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Draenor"], "|cffffd800" .. L["Draenor"], {""})
|
|
Zn(L["Zones"], L["Draenor"], L["Ashran"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Ashran"], prefol, "MUS_60_PVP_Ashran_GeneralWalk#48481", "MUS_60_PVP_Ashran_AmphitheaterofAnnihilation_Walk#48500", "MUS_60_PVP_Ashran_AshmaulBurialGrounds#48482", "MUS_60_PVP_Ashran_MoltenQuarry_Walk#48485", "MUS_60_PVP_Ashran_OgreMine_Walk#48486", "MUS_60_PVP_Ashran_RingOfConquest_Walk#48641", "MUS_60_PVP_Ashran_RoadofGlory_Walk#48480", "MUS_60_PVP_Ashran_Stormshield_Battle#48537", "MUS_60_PVP_Ashran_Stormshield_Messhall_Harp#47068", "MUS_60_PVP_Ashran_Stormshield_Walk#48487", "MUS_60_PVP_Ashran_Warspear_Battle#48538", "MUS_60_PVP_Ashran_Warspear_Walk#48488", "PVP-AshranEventActive#47160",})
|
|
Zn(L["Zones"], L["Draenor"], L["Frostfire Ridge"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Frostfire Ridge"], prefol, "MUS_60_FFR_General_Walk#49001", "MUS_60_FFR_General_Night_Walk#49355", "MUS_60_FFR_DarkRock#49005", "MUS_60_FFR_Fel_Walk#49194", "MUS_60_FFR_Frostwolf_Walk#49189", "MUS_60_FFR_IronHorde_Walk#49191", "MUS_60_FFR_Mushroom_Sea_Walk#49193", "MUS_60_FFR_Ogre_Battle#49195", "MUS_60_FFR_Ogre_Walk#49192", "MUS_60_FFR_Thunderlord_Walk#49190",})
|
|
Zn(L["Zones"], L["Draenor"], L["Gorgrond"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Gorgrond"], prefol, "MUS_60_Gorgrond_Blackrock_Walk#48914", "MUS_60_Gorgrond_CrimsonFen_Walk#48915", "MUS_60_Gorgrond_Jungle_Walk#48912", "MUS_60_Gorgrond_LaughingSkull_Walk#48909", "MUS_60_Gorgrond_Mushroom_Sea_Walk#48911", "MUS_60_Gorgrond_Wasteland_Walk#48913",})
|
|
Zn(L["Zones"], L["Draenor"], L["Nagrand (Draenor)"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Nagrand"], prefol, "MUS_60_NGD_General_Walk#49065", "MUS_60_NGD_General_Night_Walk#49066", "MUS_60_NGD_BurningBlade_Walk#49076", "MUS_60_NGD_IronHorde_Walk#49072", "MUS_60_NGD_Mushroom_Walk#49070", "MUS_60_NGD_Ogre_Walk#49068", "MUS_60_NGD_OrcAncestors_Walk#49078", "MUS_60_NGD_Oshu'gun_Walk#49069", "MUS_60_NGD_RingofTrials_ArenaFloor_Battle#49077", "MUS_60_NGD_Underpale_Walk#49075", "MUS_60_NGD_Warsong_Walk#49067",})
|
|
Zn(L["Zones"], L["Draenor"], L["Shadowmoon Valley (Draenor)"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Shadowmoon Valley"], prefol, "MUS_60_SMV_General_Walk#48553", "MUS_60_SMV_General_Night_Walk#48554", "MUS_60_SMV_Cultist_Walk#48555", "MUS_60_SMV_DarkDraenei_Walk#49030", "MUS_60_SMV_Draenei_Karabor_Walk#48562", "MUS_60_SMV_Draenei_Walk#48559", "MUS_60_SMV_Fel_Walk#48556", "MUS_60_SMV_IronHorde_Walk#49031", "MUS_60_SMV_MoonMagic_Walk#48560", "MUS_60_SMV_Mushroom_Walk#48561", "MUS_60_SMV_NerzhulFinale_CultistBattle_Phase#49254", "MUS_60_SMV_Podling_Walk#48558", "MUS_60_SMV_Primals_Walk#48557", "MUS_60_SMV_YrelsCoronation_Phase_Playlist#49250", "MUS_60_SMV_Vignette_VindicatorTorvath#43487",})
|
|
Zn(L["Zones"], L["Draenor"], L["Spires of Arak"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Spires of Arak"], prefol, "MUS_60_SOA_General_Walk#48883", "MUS_60_SOA_AdmiralTaylorsGarrison_Inn#49032", "MUS_60_SOA_AdmiralTaylorsGarrison_Walk#48896", "MUS_60_SOA_Arakkoa_BombingRun#49174", "MUS_60_SOA_Arakkoa_Exiles_Walk#48894", "MUS_60_SOA_Arakkoa_Exiles_Night_Walk#49034", "MUS_60_SOA_Arakkoa_High_Walk#48885", "MUS_60_SOA_AvatarofTerokk_Phase#49176", "MUS_60_SOA_Axefall_Garrison_Walk#49037", "MUS_60_SOA_Bladefist_Walk#49035", "MUS_60_SOA_Goblin_Walk#48887", "MUS_60_SOA_Mushroom_Walk#48897", "MUS_60_SOA_SethekkHollow_Walk#48895", "MUS_60_SOA_Southport_Garrison_Walk#49036",})
|
|
Zn(L["Zones"], L["Draenor"], L["Talador"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Talador"], prefol, "MUS_60_TD_General_Walk#49079", "MUS_60_TD_Arakkoa_Walk#49085", "MUS_60_TD_Auchindoun_Walk#49082", "MUS_60_TD_CrystalMine_Walk#49088", "MUS_60_TD_DeathwebHollow_Walk#49087", "MUS_60_TD_Draenei_Walk#49081", "MUS_60_TD_DraeneiHoly_Walk#49083", "MUS_60_TD_DraeneiWartorn_Walk#49089", "MUS_60_TD_Fel_Walk#49084", "MUS_60_TD_Ogre_Walk#49086", "MUS_60_TD_Zangarra_Walk#49354",})
|
|
Zn(L["Zones"], L["Draenor"], L["Tanaan Jungle"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Tanaan Jungle"], prefol, "MUS_60_TJ_BlackrockQuarry_Walk#48335", "MUS_60_TJ_Guldan_Walk#48333", "MUS_60_TJ_HeartBlood_Walk#48334", "MUS_60_TJ_KargathProvingGrounds_Walk#48296", "MUS_60_TJ_PathofGlory_Walk#48298", "MUS_60_TJ_UmbralHalls_Walk#48299",})
|
|
|
|
-- Zones: Broken Isles
|
|
Zn(L["Zones"], L["Broken Isles"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Broken Isles"], "|cffffd800" .. L["Broken Isles"], {""})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Antoran Wastes (Argus)"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Antoran Wastes (Argus)"], prefol, "MUS_73_AntoranWastes_GeneralWalk#90584", "MUS_73_AntoranWastes_FullLegionWalk#90587", "MUS_73_AntoranWastes_HoldoutWalk#90586", "MUS_70_Invasion_Legion_GeneralWalk#75371", "MUS_70_Mardum_TheDoomFortress#56362", "MUS_73_Vindicaar_Walk_OverAntoranWastes_Gold#90700", "MUS_73_RAID_AntorusGeneralWalk#90609",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Azsuna"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Azsuna"], prefol, "MUS_70_Zone_Azsuna_GeneralWalk_Day#73363", "MUS_70_Zone_Azsuna_GeneralWalk_Night#73362", "MUS_70_Zone_Azsuna_Artif_Walk#77082", "MUS_70_Zone_Azsuna_Legion_WalkE#75106", "MUS_70_Zone_Azsuna_Sombre_Walk#77083", "MUS_70_Zone_Azsuna_WalkB#75104", "MUS_70_Zone_Azsuna_WalkC#75105", "MUS_70_Zone_Azsuna_WalkD#75216",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Broken Shore"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Broken Shore"], prefol, "MUS_70_BrokenShore_GeneralWalk_A#75355", "MUS_70_BrokenShore_Alliance_Walk#75363", "MUS_70_BrokenShore_Ashbringer_Moment#53990", "MUS_70_BrokenShore_Horde_Walk#75366", "MUS_70_BrokenShore_Legion_Walk_TensionA#75367", "MUS_70_BrokenShore_Legion_Walk_TensionB#75368", "MUS_70_Artif_BrokenShore_BattleWalk#53988", "MUS_70_Artif_BrokenShore_CaveWalk#53989",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Dalaran"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Dalaran"], prefol, "MUS_70_Zone_Dalaran_Ext_GeneralWalk_DAY#70715", "MUS_70_Zone_Dalaran_Ext_GeneralWalk_NIGHT#70716", "MUS_70_Zone_Dalaran_Ext_KrasusLanding#75072", "MUS_70_Zone_Dalaran_Mage_OH_Bold#75109", "MUS_70_Zone_Dalaran_Mage_OH_Light#75108", "MUS_70_Zone_Dalaran_Mage_Walk_A#75050", "MUS_70_Zone_Dalaran_Mage_Walk_B#75052", "MUS_70_Zone_Dalaran_Rogue_Walk_A#75292", "MUS_70_Zone_Dalaran_Rogue_Walk_B#75293", "MUS_70_Zone_Dalaran_Sewers_Walk_A#75048", "MUS_70_Zone_Dalaran_Sewers_Walk_B#75049",}) -- "MUS_70_Zone_Dalaran_Brewfest_Beergarden#75107", "MUS_70_Zone_Dalaran_Sewer_DwarfBardEmitter#75094"
|
|
Zn(L["Zones"], L["Broken Isles"], L["Highmountain"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Highmountain"], prefol, "MUS_70_Zone_Highmountain_Mountain_General_Walk#73367", "MUS_70_Zone_Highmountain_Azshara_HulnFlashback_Walk#22964", "MUS_70_Zone_Highmountain_Bloodtotem#73366", "MUS_70_Zone_Highmountain_Coast_Walk#76578", "MUS_70_Zone_Highmountain_DrogbarEarth_Walk#76613", "MUS_70_Zone_Highmountain_HunterLodge_Walk#76579", "MUS_70_Zone_Highmountain_River#76575", "MUS_70_Zone_Highmountain_ThunderTotem_Inn#76616", "MUS_70_Zone_Highmountain_ThunderTotem_Walk#76577",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Krokuun (Argus)"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Krokuun (Argus)"], prefol, "mus_73_krokuun_generalwalk#90541", "mus_73_krokuun_battlefieldwalk#90542", "mus_73_krokuun_courtoftheavenger#90545", "mus_73_krokuun_xenedarlandingwalk#90543", "mus_73_vindicaar_walk_overkrokuun_gold#90698",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Mac'Aree (Argus)"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Mac'Aree (Argus)"], prefol, "MUS_73_MacAree_GeneralWalk#90485", "MUS_73_MacAree_VoidFullWalk#90509", "MUS_73_MacAree_KiljaedenWalk#90510", "MUS_73_TheSeatoftheTriumvirate_VoidMediumWalk#90573", "MUS_73_Vindicaar_Walk_OverMacAree_Gold#90699",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Mardum"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Mardum"], prefol, "MUS_70_Mardum_WalkA#56358", "MUS_70_Mardum_WalkB#56361", "MUS_70_Mardum_WalkC#56360", "MUS_70_Mardum_IllidariFoothold#56363", "MUS_70_Mardum_TheDoomFortress#56362",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Stormheim"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Stormheim"], prefol, "MUS_70_Zone_Stormheim_General_Walk#73360", "MUS_70_Zone_Stormheim_DarkCoast_Walk#76490", "MUS_70_Zone_Stormheim_Mountain_Walk#76489", "MUS_70_Zone_Stormheim_Mystic_Walk#76491", "MUS_70_Zone_Stormheim_Valor_Walk#76492", "MUS_70_Zone_Stormheim_Village_Walk#73361",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Suramar"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Suramar"], prefol, "MUS_70_Zone_Suramar_Forest_General_Walk#73358", "MUS_70_Zone_Suramar_MoonGuard_Walk#73359", "MUS_70_Zone_Suramar_Sombre_Walk#76667", "MUS_70_Zone_SuramarCity_Corrupted_Walk#76670", "MUS_70_Zone_SuramarCity_Magnificent_Walk#76669", "MUS_70_Zone_SuramarCity_Occupied_Walk#76668", "MUS_70_Zone_Stormheim_General_Walk#73360", "MUS_70_Zone_Stormheim_Village_Walk#73361",})
|
|
Zn(L["Zones"], L["Broken Isles"], L["Val'sharah"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Val'sharah"], prefol, "MUS_70_Zone_ValSharah_GeneralWalk_Day#73365", "MUS_70_Zone_ValSharah_GeneralWalk_Night#73364", "MUS_70_Zone_ValSharah_Dark_Walk#76207", "MUS_70_Zone_ValSharah_Gilnean_Walk#76210", "MUS_70_Zone_ValSharah_NightElf_BarrowDens_Walk#51337", "MUS_70_Zone_ValSharah_NightElf_Druid_Walk#76204", "MUS_70_Zone_ValSharah_NightElf_Ruins_Walk#76206", "MUS_70_Zone_ValSharah_NightElf_TempleWalk#76205",})
|
|
|
|
-- Zones: Kul Tiras
|
|
Zn(L["Zones"], L["Kul Tiras"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Kul Tiras"], "|cffffd800" .. L["Kul Tiras"], {""})
|
|
Zn(L["Zones"], L["Kul Tiras"], L["Drustvar"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Drustvar"], prefol, "MUS_80_Drustvar_AromsStand#115790", "MUS_80_Drustvar_Chandlery#116862", "MUS_80_Drustvar_Corlain#115798", "MUS_80_Drustvar_CrimsonForest#115793", "MUS_80_Drustvar_Fallhaven_Day#116808", "MUS_80_Drustvar_Fallhaven_Night#116809", "MUS_80_Drustvar_HighroadPass#115787", "MUS_80_Drustvar_Town#93658", "MUS_80_Drustvar_Waycrest#115809", "MUS_80_Vol'dun_Azerite#116567",})
|
|
Zn(L["Zones"], L["Kul Tiras"], L["Mechagon"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Mechagon"], prefol, "MUS_82_Mechagon_GeneralWalk#137815", "MUS_82_Mechagon_BondosYard#138271", "MUS_82_Mechagon_ForestWalk#138266", "MUS_82_Mechagon_Rustbolt#138270", "MUS_82_Mechagon_ScrapboneDenWalk#138267", "MUS_82_Mechagon_WesternSprayWalk#138269",})
|
|
Zn(L["Zones"], L["Kul Tiras"], L["Stormsong Valley"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Stormsong Valley"], prefol, "MUS_80_StormsongValley_Walk_Day#116050", "MUS_80_StormsongValley_Walk_Night#116068", "MUS_80_StormsongValley_Ashvane#116055", "MUS_80_StormsongValley_Horde#116057", "MUS_80_StormsongValley_Naga#116054", "MUS_80_StormsongValley_OldGods#116056", "MUS_80_StormsongValley_Quilboar#116052", "MUS_80_StormsongValley_ShrineofStorms#116091", "MUS_80_StormsongValley_Tortollan#116070",})
|
|
Zn(L["Zones"], L["Kul Tiras"], L["Tiragarde Sound"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Tiragarde Sound"], prefol, "MUS_80_TiragardeSound_Walk_Day#115888", "MUS_80_TiragardeSound_Walk_Night#115896", "MUS_80_TiragardeSound_Anglepoint_OldGods#116661", "MUS_80_TiragardeSound_Ashvane#115988", "MUS_80_TiragardeSound_Boralus_Day#116005", "MUS_80_TiragardeSound_Boralus_Night#116006", "MUS_80_TiragardeSound_Estate_Day#115967", --[["MUS_80_TiragardeSound_Estate_Night#115968",]] "MUS_80_TirgardeSound_Freehold#116110", "MUS_80_TiragardeSound_SirenSong#115999", "MUS_80_TiragardeSound_SirenSong_Cave#116659", "MUS_80_TiragardeSound_Proudmore_Day#116290", "MUS_80_TiragardeSound_Proudmore_Night#116291", "MUS_80_TiragardeSound_VigilHill_Day#115997", --[["MUS_80_TiragardeSound_VigilHill_Night#115998",]] "MUS_80_TiragardeSound_Witch#116660", --[["MUS_80_TiragardeSound_Taverns_Day#116559", "MUS_80_TiragardeSound_Taverns_Night#116560",]] "MUS_80_Vol'dun_Azerite#116567",})
|
|
|
|
-- Zones: Zandalar
|
|
Zn(L["Zones"], L["Zandalar"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Zandalar"], "|cffffd800" .. L["Zandalar"], {""})
|
|
Zn(L["Zones"], L["Zandalar"], L["Nazjatar"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Nazjatar"], prefol, "MUS_82_Nazjatar_GeneralWalk_01#137770", "MUS_82_Nazjatar_AzsharaWalk_01#138519", "MUS_82_Nazjatar_CaveWalk_01#138516", "MUS_82_Nazjatar_HubWalk_01#138520", "MUS_82_Nazjatar_LandingWalk_01#138506", "MUS_82_Nazjatar_SeaweedWalk_01#138513", "MUS_82_Nazjatar_ZinAzshariWalk_01#138508",})
|
|
Zn(L["Zones"], L["Zandalar"], L["Nazmir"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Nazmir"], prefol, "MUS_80_Nazmir_GeneralWalk_Day#93666", "MUS_80_Nazmir_GeneralWalk_Night#116065", "MUS_80_Nazmir_Jurassic#116224", "MUS_80_Nazmir_Naga#116115", "MUS_80_Nazmir_Necropolis#116108", "MUS_80_Nazmir_Sethrak#116116", "MUS_80_Nazmir_Void#93672",})
|
|
Zn(L["Zones"], L["Zandalar"], L["Vol'dun"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Vol'dun"], prefol, "MUS_80_Vol'dun_GeneralWalk_Day#116281", --[["MUS_80_Vol'dun_GeneralWalk_Night#116284",]] "MUS_80_Vol'dun_Ashvane#116538", "MUS_80_Vol'dun_Azerite#116567", "MUS_80_Vol'dun_Distorted#116561", "MUS_80_Vol'dun_Naga#116486", "MUS_80_Vol'dun_Sethrak#116484", "MUS_80_Vol'dun_Tortollan#116485", "MUS_80_Nazmir_Necropolis#116108",})
|
|
Zn(L["Zones"], L["Zandalar"], L["Zuldazar"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Zuldazar"], prefol, "MUS_80_Zuldazar_GeneralWalk_Day#116611", --[["MUS_80_Zuldazar_GeneralWalk_Night#116629",]] "MUS_80_Zuldazar_Atal'Dazar#117049", "MUS_80_Zuldazar_Azerite#116609", "MUS_80_Zuldazar_BloodMagic#117025", "MUS_80_Zuldazar_Dazar'alor_Day#116674", "MUS_80_Zuldazar_Dazar'alor_Night#116986", --[["MUS_80_Zuldazar_Gral'sGrotto#117011",]] "MUS_80_Zuldazar_Naga#116962", "MUS_80_Zuldazar_Sethrak#116951", "MUS_80_Zuldazar_Tortollan#116964", "MUS_80_DGN_CityofGold_Grand#93663",})
|
|
|
|
-- Zones: Shadowlands
|
|
Zn(L["Zones"], L["Shadowlands"], "|cffffd800", {""})
|
|
Zn(L["Zones"], L["Shadowlands"], "|cffffd800" .. L["Shadowlands"], {""})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Exile's Reach"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Exile's Reach"], prefol, "MUS_NPE_GeneralWalk#136278", "MUS_NPE_BattleIntro#136271", "MUS_NPE_BoatIntro#136272", "MUS_NPE_BoatWalk#136273", "MUS_NPE_Camp#136274", "MUS_NPE_DarkmaulCitadel#136277", "MUS_NPE_Harpy#136279", "MUS_NPE_OnFire#136276", "MUS_NPE_Outro#136270", "MUS_NPE_Quillboar#136280", "MUS_NPE_RTC_Attack(NYI)#136297",})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Ardenweald"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Ardenweald"], prefol, "ZONE_90_AW_Tree_Withered#173914", "ZONE_90_AW_Tree_WinterQueenRoom#173966", "ZONE_90_AW_Tree_InDanger#173913", "ZONE_90_AW_Tree_Healthy#173969", "ZONE_90_AW_Tree_Drust#173912", "ZONE_90_AW_Serene#173964", "ZONE_90_AW_Mischief_GossamerCliffs#173977", "ZONE_90_AW_Mischief#173976", "ZONE_90_AW_MelancholyDream_GeneralWalk#173962", "ZONE_90_AW_Hunger#173909", "ZONE_90_AW_Hollow_Drust#173911", "ZONE_90_AW_Hollow#173908", "ZONE_90_AW_HeartofTheForest#174034", "ZONE_90_AW_GroveofAwakening#173967", "ZONE_90_AW_Dreamer#173968", "ZONE_90_AW_Devious#173975", "ZONE_90_AW_Amphitheater#173970",})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Bastion"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Bastion"], prefol, "ZONE_90_BA_Broker_Walk#173825", "ZONE_90_BA_ElysianHold_Kyrian_Walk#173691", "ZONE_90_BA_Forsworn_HEAVY_Walk#173688", "ZONE_90_BA_Forsworn_LIGHT_Walk#173687", "ZONE_90_BA_Forsworn_MEDIUM_Walk#173686", "ZONE_90_BA_Garden_Walk#173684", "ZONE_90_BA_General_Walk#173683", "ZONE_90_BA_Kyrian_Meditative_Walk#173685", "ZONE_90_BA_Kyrian_Temple_Walk#173758", "ZONE_90_BA_Kyrian_Training_GardenWalk#173826", "ZONE_90_BA_Kyrian_Training_Walk#173689", "ZONE_90_BA_Maldraxxus_Walk#173847", "ZONE_90_BA_MirisChapel#173850",})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Maldraxxus"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Maldraxxus"], prefol, "ZONE_90_MX_Maldraxxus_GeneralWalk#174450", "ZONE_90_MX_HouseofConstructs_Walk#174451", "ZONE_90_MX_HouseoftheChosen_Walk#174452", "ZONE_90_MX_HouseofEyes_Walk#174455", "ZONE_90_MX_HouseofPlagues_Walk#174453", "ZONE_90_MX_HouseofRituals_Walk#174454", "ZONE_90_MX_HouseofRituals_Domination#174531", "ZONE_90_MX_Necropolis_Walk#174457", "ZONE_90_MX_TheaterofPain_Walk#174456" --[["ZONE_90_MX_Cov_SeatofthePrimus_Walk#174529", "ZONE_90_MX_Cov_SeatofthePrimus_BleakRedoubt#177748", "ZONE_90_MX_Cov_SeatofthePrimus_Halls#177753"]],})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Maw"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Maw"], prefol, "ZONE_90_MAW_Wilds_GeneralWalk#174983", "ZONE_90_MAW_Crystal_Walk#175583", "ZONE_90_MAW_Fortress_Walk#175584", "ZONE_90_MAW_Torghast_InteriorWalk#175661", "ZONE_90_MAW_Prologue_General_Walk#176906", "ZONE_90_MAW_Prologue_Hero_Action#176908", "ZONE_90_MAW_Prologue_Hero_Ambient#176909", "ZONE_90_MAW_AW_CovCh2_TyrandeInMaw_Walk#177217", "ZONE_90_MAW_AW_CovCh2_TyrandeInTorghast_Walk#177218",})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Oribos"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Oribos"], prefol, "ZONE_90_OR_RingofFates#173954", "ZONE_90_OR_RingofTransference#173953",})
|
|
Zn(L["Zones"], L["Shadowlands"], L["Revendreth"] , { "|cffffd800" .. L["Zones"] .. ": " .. L["Revendreth"], prefol, "Zone_90_RD_EmberCourt_GeneralWalk#172764", "ZONE_90_RD_Forest_GeneralWalk#174072", "ZONE_90_RD_Ruins#174073", "ZONE_90_RD_Courtyard#174074", "ZONE_90_RD_Decadence#174075", "ZONE_90_RD_Sinister#174077", "ZONE_90_RD_Swamp#174078", "ZONE_90_RD_Sinfall#174079", --[["ZONE_90_RD_Interior#174080",]] "ZONE_90_RD_Scortched#174076",})
|
|
|
|
-- Dungeons: World of Warcraft
|
|
Zn(L["Dungeons"], L["World of Warcraft"], "|cffffd800" .. L["World of Warcraft"], {""})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Blackfathom Deeps"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackfathom Deeps"], prefol, "Zone-Desert Day#4754", "Zone-Desert Night#4755",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Blackrock Depths"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackrock Depths"], prefol, "Zone-Volcanic Day#2529",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Blackrock Spire"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackrock Spire"], prefol, "Orgrimmar Walking#5055", "Zone-CursedLand Felwood#5455", "Zone-VolcanicCave#2539",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Blackwing Lair"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackwing Lair"], prefol, "Zone - Plaguelands#6066",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Deadmines"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Deadmines"], prefol, "MUS_Deadmines#23609", "MUS_ChoGall_E#22151", "Zone-Orgrimmar#2901", "Moment-Spooky01#5037",}) -- "Zone-Mystery#6065"
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Dire Maul"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Dire Maul"], prefol, "Zone-EnchantedForest Day#2530", "Zone-EnchantedForest Night#2540", "Zone-Evil Forest Night#2534",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Gnomeregan"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Gnomeregan"], prefol, "Zone-Gnomeragon#7341",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Maraudon"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Maraudon"], prefol, "Zone-BarrenDry Night#2536", "Zone-Soggy Day#7082", "Zone-Soggy Night#6836",}) -- "Moment - Battle02#6262"
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Molten Core"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Molten Core"], prefol, "Moment - Battle01#6077", "Moment - Battle02#6262", "Moment - Battle03#6078", "Moment - Battle04#6079", "Moment - Battle05#6253", "Moment - Battle06#6350",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Razorfen Downs"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Razorfen Downs"], prefol, "Zone-Undercity#5074", "Zone-Undead Dance#7083",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Razorfen Kraul"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Razorfen Kraul"], prefol, "Zone-Desert Cave#5394",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Ruins of Ahn'Qiraj"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Ruins of Ahn'Qiraj"], prefol, "Zone - AhnQirajExterior#8531",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Scarlet Halls"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Scarlet Halls"], prefol, "MUS_50_SM_Dungeon_TrainingWalk#33725", "MUS_50_ScarletMonastery_A_Hero#30478",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Scarlet Monastery"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Scarlet Monastery"], prefol, "MUS_50_SM_Dungeon_ChapelGardensWalk#33738", "MUS_50_SM_Dungeon_CrusaderWalk#33740", "MUS_50_SM_Dungeon_TunnelsWalk#33723", "MUS_50_SM_Dungeon_VestibuleWalk#33721", "MUS_50_ScarletMonastery_A_Hero#30478", "MUS_Haunted_UU#22182",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Scholomance"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Scholomance"], prefol, "MUS_50_Scholomance_Walk#33521", "MUS_50_Scholomance_ChamberofSummoning#33511", "MUS_50_Scholomance_HeadmastersStudy#33513", "MUS_50_Scholomance_TheReliquary#33510", "MUS_50_Scholomance_TheUpperStudy#33512",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Shadowfang Keep"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Shadowfang Keep"], prefol, "MUS_ShadowfangKeep#23610", "MUS_Scarred_UU#22198", "MUS_Shadows_UU#22200", "Zone-EvilForest Day#2524",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Stockade"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Stockade"], prefol, "StomWindJail#4223",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Stratholme"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Stratholme"], prefol, "Zone-Undercity#5074",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Sunken Temple"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Sunken Temple"], prefol, "MUS_SwampOfSorrowsTroll#22542", "Zone-Soggy Day#7082", "Zone-Soggy Night#6836", "Moment - Battle02#6262", "Moment - Battle05#6253", "Moment - Battle06#6350",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Temple of Ahn'Qiraj"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Temple of Ahn'Qiraj"], prefol, "AhnQirajInteriorCenterRoom#8579", "AhnQirajKingRoom#8578", "AhnQirajTriangleRoomWalking#8577", "Zone - AhnQirajExterior#8531", "Zone Music - AhnQirajInteriorWa#8563",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Uldaman"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Uldaman"], prefol, "Zone-Volcanic Day#2529", "Moment-Battle05#6253", "Moment-Battle06#6350",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Wailing Caverns"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Wailing Caverns"], prefol, "MUS_TheWailingCaverns#22829", "Zone-Jungle Day#2525", "Zone-Jungle Night#2535", "Zone - Plaguelands#6066",})
|
|
Zn(L["Dungeons"], L["World of Warcraft"], L["Zul'Farrak"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Zul'Farrak"], prefol, "MUS_TanarisTrollA#22867",})
|
|
|
|
-- Dungeons: The Burning Crusade
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], "|cffffd800" .. L["The Burning Crusade"], {""})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Black Morass"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Black Morass"], prefol, "Zone-CavernsofTimeBlackMorassWa#10731",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Black Temple"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Black Temple"], prefol, "Zone-BlackTempleWalk#11696", "Zone-BlackTempleKaraborWalk#11697", "Zone-BlackTempleSanctuaryWalk#11699", "Zone-BlackTempleAnguishWalk#11700", "Zone-BlackTempleVigilWalk#11701", "Zone-BlackTempleReliquaryWalk#11702", "Zone-BlackTempleDenWalk#11703", "Event_BlackTemplePreludeEvent01#11716",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Coilfang Reservoir"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Coilfang Reservoir"], prefol, "Zone-ZangarmarshCoilfangWalk#10726",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Hellfire Ramparts"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Hellfire Ramparts"], prefol, "Zone-HellfireCitadelRampartsWal#10727",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Hyjal Summit"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Hyjal Summit"], prefol, "Zone-HyjalPastNordrassilWalk#11652", "Zone-HyjalPastSummitWalk#11653",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Karazhan"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Karazhan"], prefol, "Zone-KarazhanGeneralDefault#12154", "Zone-KarazhanFoyerWalk#12156", "Zone-KarazhanStableWalk#12159", "Zone-KarazhanOperaWalk#12163", "Zone-KarazhanBackstageWalk#12162", "Zone-KarazhanLibraryWalk#12164", "Zone-KarazhanTowerNetherspiteW#12170", "Zone-KarazhanMalchezaarWalk#12168",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Magisters' Terrace"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Magisters' Terrace"], prefol, "Zone-MagistersTerraceWalking#12532", "Zone-MagistersTerraceIntWalking#12533", "Zone-MagistersTerraceKaelThas#12531",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Old Hillsbrad Foothills"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Old Hillsbrad Foothills"], prefol, "MUS_DurnholdeKeep#22788", "MUS_TarrenMill#22790", "Zone-CavernsoftimeHillsbradExtW#10770",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Sunwell Plateau"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Sunwell Plateau"], prefol, "Zone-SunwellPlateauWalking#12536",})
|
|
Zn(L["Dungeons"], L["The Burning Crusade"], L["Tempest Keep"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Tempest Keep"], prefol, "Zone-TempestKeepWalkingUni#12128", "Zone-TempestKeepBosses#12129",})
|
|
|
|
-- Dungeons: Wrath of the Lich King
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], "|cffffd800" .. L["Wrath of the Lich King"], {""})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Ahn'kahet (Old Kingdom)"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Ahn'kahet (Old Kingdom)"], prefol, "Zone-AzjolNerubC#15098", "Zone-AzjolNerubD#15099", "Zone-AzjolNerubE#15100",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Azjol-Nerub"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Azjol-Nerub"], prefol, "Zone-AzjolNerubA#15096", "Zone-AzjolNerubE#15100", "Zone-AzjolNerubB#15097", "Zone-AzjolNerubD#15099",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Culling of Stratholme"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Culling of Stratholme"], prefol, "Zone-StratholmePastOutdoorsDay#14920", "Zone-StratholmePastOutdoorsNigh#14921",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Drak'Tharon Keep"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Drak'Tharon Keep"], prefol, "Zone-DraktharonRaptorPens#15087",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Eye of Eternity"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Eye of Eternity"], prefol, "Zone-NexusGeneralWalkE#15061",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Forge of Souls"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Forge of Souls"], prefol, "Zone-ForgeOfSoulsWalk#17277", "MUS_70_Artif_DK_IcecrownWalk#77050", "Event-Bronjahm#17280",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Gundrak"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Gundrak"], prefol, "Zone-GundrakGeneralWalk#15089", "Zone-GundrakCaveofMamtoth#15092", "Zone-GundrakDenofSseratus#15090", "Zone-GundrakPoolofTwisted#15093", "Zone-GundrakChamberofAkali#15094", "Zone-GundrakTombofAncients#15091",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Halls of Lightning"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Lightning"], prefol, "Zone-UldarLightningGeneralWalk#14942", "Zone-UldarLightningBattleWalk#14945",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Halls of Reflection"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Reflection"], prefol, "Zone-IcecrownDungeonWalk#17278", "Event-HallsofReflection1#17282", "Event-HallsofReflection2#17283",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Halls of Stone"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Stone"], prefol, "Zone-UlduarStoneGeneralWalk#14937", "Zone-UlduarStoneBattleWalk#14939", "Zone-UlduarRaidGeneralWalk#15838",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Icecrown Citadel"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Icecrown Citadel"], prefol, "Zone-IcecrownRaidFloor2Intro#17291", "Zone-IcecrownRaidFloor2Plague#17294", "Zone-IcecrownRaidFloor2Spire#17296", "Zone-IcecrownRaidFloor2Valithria#17300", "Zone-IcecrownRaidFloor2Frost#17298", "Zone-IcecrownDungeonWalk#17278", "Zone-CrimsonHallWalk#17287", "Zone-ForgeOfSoulsWalk#17277", "Zone-FrostmourneWalk#17286", "Zone-PitofSaron#17310", "Zone-SindragosaWalk#17288",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Naxxramas"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Naxxramas"], prefol, "NaxxramasAbominationWing#8675", "NaxxramasPlagueWing#8678", "NaxxramasSpiderWing#8679", "Zone-NaxxramasAbominationBoss#8888", "Zone-NaxxramasPlagueBoss#8886", "Zone-NaxxramasSpiderBoss#8887", "Zone-NaxxramasKelthuzad#8889", "Zone-NaxxramasFrostWyrm#8890", "Zone - NaxxramsDeathKnight#8687",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Nexus"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Nexus"], prefol, "Zone-NexusGeneralWalkA#15057", "Zone-NexusGeneralWalkB#15058", "Zone-NexusGeneralWalkC#15059", "Zone-NexusGeneralWalkD#15060",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Obsidian Sanctum"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Obsidian Sanctum"], prefol, "Zone-ChamberAspects01Day#15077", "Zone-ChamberAspects01Night#15078",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Oculus"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Oculus"], prefol, "Zone-NexusGeneralWalkE#15061", "Zone-ColdarraNexusEXT#14959",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Onyxia's Lair"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Onyxia's Lair"], prefol, "Moment-Orc Barren#7474",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Pit of Saron"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Pit of Saron"], prefol, "Zone-PitofSaronEntry#17308", "Zone-PitofSaron#17310", "Zone-PitofSaronTyrannus#17314",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Ruby Sanctum"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Ruby Sanctum"], prefol, "RubySanctumWalk#17672",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Ulduar"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Ulduar"], prefol, "UR_UlduarRaidGeneralWalk#15838", "UR_BaseCampWalk#15854", "UR_CelestialHallWalk#15842", "UR_ConservatoryWalk#15843", "UR_CorridorsOfIngenuityWalk#15841", "UR_DescentWalk#15839", "UR_KingLlaneWalk#15835", "UR_PrisonOfYoggSaronWalk#15840", "UR_RazorscalesAerieWalk#15868", "UR_SparkOfImaginationWalk#15847", "UR_TheColossalForgeWalk#15865", "UR_TheScrapyardWalk#15871", "UR_TramHallWalk#15901", "UR_WyrmrestTempleWalk#15837",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Utgarde Keep"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Utgarde Keep"], prefol, "Zone-UtgardeA#15062", "Zone-UtgardeE#15066", "Music_Temp_95#14871",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Utgarde Pinnacle"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Utgarde Pinnacle"], prefol, "Zone-UtgardeA#15062", "Zone-UtgardeD#15065", "Music_Temp_95#14871", "Music_Temp_98#14874",})
|
|
Zn(L["Dungeons"], L["Wrath of the Lich King"], L["Vault of Archavon"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Vault of Archavon"], prefol, "Zone-UldarLightningGeneralWalk#14942",})
|
|
|
|
-- Dungeons: Cataclysm
|
|
Zn(L["Dungeons"], L["Cataclysm"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Cataclysm"], "|cffffd800" .. L["Cataclysm"], {""})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Bastion of Twilight"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Bastion of Twilight"], prefol, "MUS_BastionOfTwilight#23167",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Blackrock Caverns"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackrock Caverns"], prefol, "MUS_BlackrockCaverns#23170",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Blackwing Descent"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackwing Descent"], prefol, "MUS_BlackwingDescent#23171",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Dragon Soul"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Dragon Soul"], prefol, "MUS_43_DragonSoul_DWBackWalk#26618", "MUS_43_DragonSoul_EyeOfEternityWalk#26616", "MUS_43_DragonSoul_MaelstromWalk#26619", "MUS_43_DragonSoul_OldGodWalk#26614", "MUS_43_DragonSoul_SkyfireWalk#26617", "MUS_43_DragonSoul_WyrmrestSummitWalk#26615", "MUS_43_DragonSoul_WyrmrestWalk#26611",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["End Time"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["End Time"], prefol, "MUS_43_EndTime_GeneralWalk#26573", "MUS_43_EndTime_EmeraldWalk#26574", "MUS_43_EndTime_MurozondIntro#26571", "Zone-NorthrenRiplashDay#15044", "Zone-NorthrenRiplashNight#15045",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Firelands"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Firelands"], prefol, "MUS_FL_FirelandsA_01#25396", "MUS_FL_FirelandsA_02#25397", "MUS_FL_FirelandsA_03#25398", "MUS_FL_FirelandsA_04#25399", "MUS_FL_FirelandsB_01#25400", "MUS_FL_FirelandsB_02#25401", "MUS_FL_FirelandsB_03#25402", "MUS_FL_FirelandsB_04#25403", "MUS_FL_FirelandsB_05#25404", "MUS_FL_DruidofFlameA_03#25389", "MUS_FL_DruidofFlameA_02#25390", "MUS_FL_DruidofFlameA_01#25391", "MUS_FL_DruidofFlameB_01#25392", "MUS_FL_DruidofFlameB_02#25393", "MUS_FL_DruidofFlameB_03#25394", "MUS_FL_DruidofFlameB_04#25395",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Grim Batol"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Grim Batol"], prefol, "MUS_GrimBatol#22637", "MUS_GrimBatolDungeonAlt#23169",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Halls of Origination"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Origination"], prefol, "MUS_HallsOfOriginationInt#23174",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Hour of Twilight"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Hour of Twilight"], prefol, "MUS_43_HourOfTwilight_GeneralWalk#26604", "MUS_43_HourOfTwilight_WyrmrestWalk#26610",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Lost City of the Tol'vir"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Lost City of the Tol'vir"], prefol, "MUS_LostCityOfTheTolvir#23173",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Stonecore"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Stonecore"], prefol, "MUS_Stonecore#23166",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Throne of the Four Winds"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Throne of the Four Winds"], prefol, "MUS_Skywall#23175",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Throne of the Tides"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Throne of the Tides"], prefol, "MUS_ThroneOfTheTides#23172",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Well of Eternity"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Well of Eternity"], prefol, "MUS_43_WellOfEternity_AzsharaWalk#26581", "MUS_43_WellOfEternity_IllidanWalk#26582", "MUS_43_WellOfEternity_MannorothWalk#26583",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Zul'Aman"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Zul'Aman"], prefol, "Zone-ZulamanWalkingUni#12133",})
|
|
Zn(L["Dungeons"], L["Cataclysm"], L["Zul'Gurub"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Zul'Gurub"], prefol, "MUS_ZA_altarofthebloodgod#24656", "MUS_ZA_mandokirsdomain#24652", "MUS_ZA_templeofbethekk#24654", "MUS_ZA_thecacheofmadness#24653", "MUS_ZA_thedevilsterrace#24655", "MUS_ZandalariTroll#24681", "Zone-Jungle Day#2525", "Zone-Jungle Night#2535",})
|
|
|
|
-- Dungeons: Mists of Pandaria
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], "|cffffd800" .. L["Mists of Pandaria"], {""})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Heart Of Fear"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Heart Of Fear"], prefol, "Zone-50-HOF-Raid-AmberWalk#33709", "Zone-50-HOF-Raid-AntechamberWalk#33700", "Zone-50-HOF-Raid-AtriumWalk#33707", "Zone-50-HOF-Raid-OratoriumWalk#33701", "Zone-50-HOF-Raid-StagingDreadWalk#33706", "Zone-50-HOF-Raid-StairwayWalk#33704", "Zone-50-HOF-Raid-TrainingWalk#33703",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Gate of the Setting Sun"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Gate of the Setting Sun"], prefol, "MUS_50_GSS_Dungeon_GeneralWalk#33602",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Mogu'shan Palace"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Mogu'shan Palace"], prefol, "MUS_50_MSP_Dungeon_BossWalk#33195", "MUS_50_MSP_Dungeon_ShaWalk#33196", "MUS_50_MSP_Dungeon_ShrineWalk#33215",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Mogu'shan Vaults"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Mogu'shan Vaults"], prefol, "MUS_50_MSV_Raid_MoguShanVaults_GeneralWalk#29209",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Shado-Pan Monastery"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Shado-Pan Monastery"], prefol, "MUS_50_SPM_Dungeon_ShadoPan_GeneralWalk#33651",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Siege of Orgrimmar"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Siege of Orgrimmar"], prefol, "MUS_54_SOR_FULLRAID_GeneralWalk#39709", "MUS_54_SOR_Gates_CleftofShadows_Walk#39707", "MUS_54_SOR_Gates_DarkspearOffensive_Walk#39705", "MUS_54_SOR_Gates_Exterior_GeneralWalk#39703", "MUS_54_SOR_InnerSanctum_Garrosh_Sha_Walk#39680", "MUS_54_SOR_InnerSanctum_Garrosh_SWHarbor_Walk#39681", "MUS_54_SOR_OrgrimmarRaid_Walk_FirstHalf_Internal#39652", "MUS_54_SOR_OrgrimmarRaid_Walk_FirstHalf_External#39648", "MUS_54_SOR_OrgrimmarRaid_Walk_SecondHalf_Internal#39647", "MUS_54_SOR_OrgrimmarRaid_Walk_SecondHalf_External#39649", "MUS_54_SOR_Underhold_General_Walk#39711", "MUS_54_SOR_Underhold_Menagerie_Walk#39712", "MUS_54_SOR_Underhold_Arsenal_Walk#39713", "MUS_54_SOR_Underhold_Siegeworks_Walk#39714", "MUS_54_SOR_Vale_Immerseus_Walk#39691", "MUS_54_SOR_Vale_ScarredVale_Walk#39693", "MUS_54_SOR_Vale_NorushenRoom_Walk#39695",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Siege of Niuzao Temple"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Siege of Niuzao Temple"], prefol, "MUS_50_SoN_Dungeon_HallowedOutTreeWalk#33612", "MUS_50_SoN_Dungeon_NiuzaoExteriorWalk#33614",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Stormstout Brewery"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Stormstout Brewery"], prefol, "MUS_50_SSB_Dungeon_StormstoutBrewhall_INTRO#33756", "MUS_50_SSB_Dungeon_StormstoutBrewhall_Walk#33757",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Temple of the Jade Serpent"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Temple of the Jade Serpent"], prefol, "MUS_50_TJS_Dungeon_FountainoftheEverseeing_Walk#31987", "MUS_50_TJS_Dungeon_ShaofDoubt_Battle#31990", "MUS_50_TJS_Dungeon_ScrollkeepersSanctum_Battle#31991", "MUS_50_TJS_Dungeon_TempleoftheJadeSerpent_GeneralWalk#31992",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Terrace of Endless Spring"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Terrace of Endless Spring"], prefol, "MUS_50_TES_Raid_TerraceofEndlessSpring_GeneralWalk#33625",})
|
|
Zn(L["Dungeons"], L["Mists of Pandaria"], L["Throne of Thunder"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Throne of Thunder"], prefol, "MUS_52_TKRaid_ThroneOfThunder_Main#36702", "MUS_52_TKRaid_Wing3_FleshShaping_Walk#36920", "MUS_52_TKRaid_Wing1_Troll_Walk#36921", "MUS_52_TKRaid_Wing2_Creatures_Walk#36922", "MUS_52_TKRaid_Wing4_Palace_Walk#36923", "MUS_52_TKRaid_Wing1_Troll_Battle#37010",})
|
|
|
|
-- Dungeons: Warlords of Draenor
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], "|cffffd800" .. L["Warlords of Draenor"], {""})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Auchindoun"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Auchindoun"], prefol, "Zone-60-Dungeon-Auchindoun-NaveOfEternalRest-Battle#49196", "Zone-60-Dungeon-Auchindoun-CongregationOfSouls#49200", "Zone-60-Dungeon-Auchindoun-EasternTransept#49198", "Zone-60-Dungeon-Auchindoun-WesternTransept-Battle#49197",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Blackrock Foundry"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Blackrock Foundry"], prefol, "MUS_60_Dungeon_BlackRock_Foundry_General#49225",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Bloodmaul Slag Mines"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Bloodmaul Slag Mines"], prefol, "MUS_60_FFR_Ogre_Walk#49192", "MUS_60_FFR_Ogre_Battle#49195",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Everbloom"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Everbloom"], prefol, "MUS_60_Dungeon_Everbloom_Stormwind#49219", "MUS_60_Dungeon_Everbloom_PoolsofLife#49220", "MUS_60_Dungeon_Everbloom_Verdant_Grove#49221", "MUS_60_Dungeon_Everbloom_Xeritacs_Burrow#49222", "MUS_60_Dungeon_Everbloom_VioletBluff#49223",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Hellfire Citadel"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Hellfire Citadel"], prefol, "MUS_62_Tanaan_HFC_IronHorde_Cathedral_Walk#51515", "MUS_62_Tanaan_HFC_IronHorde_Fel_Walk#51519", "MUS_62_Tanaan_HFC_Boss_Battle#51573", "MUS_62_Tanaan_HFC_Kilrogg_Batlle#51574", "MUS_62_Tanaan_HFC_Fel_Walk#51520", "MUS_62_Tanaan_HFC_Archimonde_Battle#51525", "MUS_62_Tanaan_HFC_Eredar_Walk#51521", "MUS_62_Tanaan_HFC_Iskar_Battle#51522", "MUS_62_Tanaan_HFC_Grommash_Battle#51523", "MUS_62_Tanaan_HFC_Archimonde_TwistingNether_Walk#51526",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Highmaul"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Highmaul"], prefol, "MUS_60_Dungeon_Highmaul_General#49276", "MUS_60_Dungeon_Highmaul_ImperatorsRise#49351", "MUS_60_Dungeon_Highmaul_PathOfVictors#49345", "MUS_60_Dungeon_Highmaul_TheUnderbelly#49282",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Iron Docks"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Iron Docks"], prefol, "MUS_60_Dungeon_IronDocks_Walk#49187", "MUS_60_Dungeon_IronDocks_BlackhandsMight#49188",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Shadowmoon Burial Grounds"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Shadowmoon Burial Grounds"], prefol, "MUS_60_Dungeon_SMBurialGrounds_Walk#49206", "MUS_60_Dungeon_SMBurialGrounds_CryptsoftheAncients#49208", "MUS_60_Dungeon_SMBurialGrounds_PoolsofReflection#49209", "MUS_60_Dungeon_SMBurialGrounds_AltarofShadow#49210",})
|
|
Zn(L["Dungeons"], L["Warlords of Draenor"], L["Skyreach"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Skyreach"], prefol, "MUS_60_Dungeon_Skyreach_General_A#49129",})
|
|
|
|
-- Dungeons: Legion
|
|
Zn(L["Dungeons"], L["Legion"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Legion"], "|cffffd800" .. L["Legion"], {""})
|
|
Zn(L["Dungeons"], L["Legion"], L["Antorus, the Burning Throne"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Antorus, the Burning Throne"], prefol, "MUS_73_RAID_AntorusGeneralWalk#90609", "MUS_73_RAID_AntorusBattleWalk#90610", "MUS_73_RAID_AntorusElunariaWalk#90611", "MUS_73_RAID_BurningThroneWalk#90612",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Arcway"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Arcway"], prefol, "MUS_60_FFR_Ogre_Walk#49192",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Black Rook Hold"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Black Rook Hold"], prefol, "MUS_70_BlackRookHold_WalkA#76004", "MUS_70_BlackRookHold_WalkB#76007", "MUS_70_BlackRookHold_WalkC#76009",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Cathedral of Eternal Night"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Cathedral of Eternal Night"], prefol, "MUS_72_ToS_Dungeon_GeneralWalk#85030", "MUS_72_ToS_Dungeon_GardenWalk#85032", "MUS_72_ToS_Dungeon_ChapelWalk#85031", "MUS_72_ToS_Dungeon_LegionWalk#85033", "MUS_72_ToS_Dungeon_LibraryWalk#85169",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Court of Stars"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Court of Stars"], prefol, "MUS_70_DGN_SuramarCityDungeon_Walk01#76837", "MUS_70_DGN_SuramarCityDungeon_Walk02#76838",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Darkheart Thicket"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Darkheart Thicket"], prefol, "MUS_70_Nightmare_Orchestral#73385", "MUS_70_Nightmare_Solo#73392", "MUS_70_Nightmare_Synth#73386",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Emerald Nightmare"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Emerald Nightmare"], prefol, "MUS_70_Nightmare_Orchestral#73385", "MUS_70_Nightmare_Solo#73392", "MUS_70_Nightmare_Synth#73386", "MUS_70_Nightmare_TheEmeraldDream_Walk#76859",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Eye of Azshara"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Eye of Azshara"], prefol, "MUS_70_EyeofAzshara_Walk_A#75040", "MUS_70_EyeofAzshara_Walk_B#74971", "MUS_70_EyeofAzshara_Walk_C#74973", "MUS_70_EyeofAzshara_Walk_D#74983",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Halls of Valor"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Valor"], prefol, "MUS_70_HallsofValor_WalkA#75676", "MUS_70_HallsofValor_WalkB#75678", "MUS_70_HallsofValor_WalkC#75679",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Maw of Souls"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Maw of Souls"], prefol, "MUS_70_MawofSouls_WalkA#75548", "MUS_70_MawofSouls_WalkB#75549", "MUS_70_MawofSouls_WalkC#75551",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Neltharion's Lair"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Neltharion's Lair"], prefol, "MUS_70_NetharionsLair_WalkA#75947", "MUS_70_NetharionsLair_WalkB#75949", "MUS_70_NetharionsLair_WalkC#75953", "MUS_70_NetharionsLair_WalkD#75954",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Nighthold"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Nighthold"], prefol, "MUS_62_Tanaan_HFC_Archimonde_Battle#51525", "MUS_71_TheNightholdIndoorWalk#79673", "MUS_71_TheNightholdOutdoorWalk#79674", "MUS_71_TheNightholdBattleHeavy#79675", "MUS_71_TheNightholdLegionFel#79676",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Return to Karazhan"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Return to Karazhan"], prefol, "MUS_71_KarazhanGeneralDefault#79499",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Seat of the Triumvirate"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Seat of the Triumvirate"], prefol, "MUS_73_TheSeatoftheTriumvirate_VoidFullWalk#90572", "MUS_73_TheSeatoftheTriumvirate_VoidMediumWalk#90573",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Tomb of Sargeras"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Tomb of Sargeras"], prefol, "MUS_72_ToS_Raid_GeneralWalk#85171", "MUS_72_ToS_Raid_LegionWalk#85887", "MUS_72_ToS_Raid_TitanWalk#85888", "MUS_72_ToS_Raid_NightElfWalk#85889", "MUS_72_ToS_Raid_Naga_GeneralWalk#86406", "MUS_72_ToS_Raid_Naga_BossWalk#86407",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Trial of Valor"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Trial of Valor"], prefol, "MUS_70_HallsofValor_WalkA#75676", "MUS_70_HallsofValor_WalkB#75678", "MUS_70_HallsofValor_WalkC#75679", "MUS_70_Zone_Stormheim_Mystic_Walk#76491", "MUS_71_TrialOfValor-DarkCoast-Walk#79719",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Vault of the Wardens"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Vault of the Wardens"], prefol, "MUS_70_VOTW_Walk_A#74778",})
|
|
Zn(L["Dungeons"], L["Legion"], L["Violet Hold"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Violet Hold"], prefol, "Zone-VioletHoldWalkUni#14910",})
|
|
|
|
-- Dungeons: Battle for Azeroth
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], "|cffffd800" .. L["Battle for Azeroth"], {""})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Atal'Dazar"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Atal'Dazar"], prefol, "MUS_80_DGN_CityofGold#93663",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Battle of Dazar'alor"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Battle of Dazar'alor"], prefol, "MUS_81_RAID_Zuldazar_Alliance_BloodMoon#126421", "MUS_81_RAID_Zuldazar_Alliance_Port#126352", "MUS_81_RAID_Zuldazar_Horde_Walk#125915", "MUS_81_RAID_Zuldazar_Horde_Port#126348", "MUS_81_RAID_Zuldazar_Pyramid#126329", "MUS_81_RAID_Zuldazar_Boss_Jaina02#126356",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Crucible of Storms"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Crucible of Storms"], prefol, "MUS_815_CrucibleofStorms#129930", "MUS_815_RAID_CrucibleofStorms_GeneralWalk01#129976", "MUS_815_RAID_CrucibleofStorms_Boss01#129975", "MUS_815_RAID_CrucibleofStorms_Boss02#129979", "MUS_80_DGN_ShrineOfStorms_Shadows#116123",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Eternal Palace"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Eternal Palace"], prefol, "MUS_82_EternalPalace_Raid_UnderwaterlWalk#138630",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Freehold"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Freehold"], prefol, "MUS_70_Nightmare_Solo#73392", "MUS_80_DGN_Freehold_Outskirts#93660",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Kings' Rest"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Kings' Rest"], prefol, "MUS_80_DGN_King'sRest#117218",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Motherlode"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Motherlode"], prefol, "MUS_80_DGN_TheMotherlode_General_Walk#117425", "MUS_80_DGN_TheMotherlode_BombArea_Walk#117427",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Ny'alotha"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Ny'alotha"], prefol, "RAID_83_Nyalotha_Nzoth_Mind_GeneralWalk#148259", "RAID_83_Nyalotha_ExteriorWalk_A#148228", "RAID_83_Nyalotha_ExteriorWalk_B#148232", "RAID_83_Nyalotha_InteriorWalk_A#148227", "RAID_83_Nyalotha_InteriorWalk_B#148233", "RAID_83_Nyalotha_InteriorWalk_C#148234", "RAID_83_Nyalotha_Wrathion#148215",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Operation Mechagon"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Operation Mechagon"], prefol, "MUS_82_DGN_Mechagon_IslandWalk#138441",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Shrine of the Storm"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Shrine of the Storm"], prefol, "MUS_80_DGN_ShrineOfStorms_Walk#116118", "MUS_80_DGN_ShrineOfStorms_Shadows#116123",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Siege of Boralus"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Siege of Boralus"], prefol, "MUS_80_DGN_SiegeOfBoralus_Walk#116219", "MUS_80_DGN_SiegeOfBoralus_Kraken#116225",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Temple of Sethraliss"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Temple of Sethraliss"], prefol, "MUS_80_DGN_TempleofSethraliss#117251",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Tol Dagor"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Tol Dagor"], prefol, "MUS_80_DGN_TolDagor_Outside#116230", "MUS_80_DGN_TolDagor_Armory#117224",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Uldir"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Uldir"], prefol, "MUS_80_RAID_Uldir_Blood#117988", "MUS_80_RAID_Uldir_Corruption#117670", "MUS_80_RAID_Uldir_G'huun_Intro#118031", "MUS_80_RAID_Uldir_Taloc_Intro#118029", "MUS_80_RAID_Uldir_Zul_Intro#118030",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Underrot"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Underrot"], prefol, "MUS_80_DGN_TheUnderrot#117262",})
|
|
Zn(L["Dungeons"], L["Battle for Azeroth"], L["Waycrest Manor"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Waycrest Manor"], prefol, "MUS_80_DGN_WaycrestManor_Outdoors#117086",})
|
|
|
|
-- Dungeons: Shadowlands
|
|
Zn(L["Dungeons"], L["Shadowlands"], "|cffffd800", {""})
|
|
Zn(L["Dungeons"], L["Shadowlands"], "|cffffd800" .. L["Shadowlands"], {""})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Castle Nathria"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Castle Nathria"], prefol, "RAID_90_RD_Chamber_General_Walk#176510", "RAID_90_RD_Dark_Walk#176521", "RAID_90_RD_Ballroom_AfterFight#175697", "RAID_90_RD_Ballroom_Combat#175695", "RAID_90_RD_Ballroom_DanceTilYouDie#175696", "RAID_90_RD_Ballroom_Distant#176497", --[["RAID_90_RD_Ballroom_Intermission#174982",]] "RAID_90_RD_Ballroom_PreFight#175700", "RAID_90_RD_Master_BattleA#176530", "RAID_90_RD_Master_BattleB#176532", "RAID_90_RD_Master_BattleC#176533", "RAID_90_RD_Master_FinaleRP#176537", "RAID_90_RD_Sewer_Walk#176523", "RAID_90_RD_CastleNathria_Battle01#176545", "RAID_90_RD_CastleNathria_Battle02#176546",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["De Other Side"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["De Other Side"], prefol, "DGN_90_AW_DeOtherSide_AW_Walk#175994", "DGN_90_AW_DeOtherSide_AW_Battle#175995", "DGN_90_AW_DeOtherSide_Final_Battle#175999", "DGN_90_AW_DeOtherSide_MG_Battle#175998", "DGN_90_AW_DeOtherSide_MG_Walk#175997", "DGN_90_AW_DeOtherSide_Start#175990", "DGN_90_AW_DeOtherSide_ZG_Battle#175993", "DGN_90_AW_DeOtherSide_ZG_Walk#175992",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Halls of Atonement"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Halls of Atonement"], prefol, "DGN_90_RD_HallsOfAtonement_Walk#176112", "DGN_90_RD_HallsOfAtonement_Cathedral#176114",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Mists of Tirna Scithe"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Mists of Tirna Scithe"], prefol, "DGN_90_AW_MistsofTirnaScithe_Oaken#175982", "DGN_90_AW_MistsofTirnaScithe_MistVeil#175983", "DGN_90_AW_MistsofTirnaScithe_Tirna#175984", "DGN_90_AW_MistsofTirnaScithe_AfterMistCaller#175986",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Necrotic Wake"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Necrotic Wake"], prefol, "DGN_90_BA_NecroticWake_GeneralWalk#175827", "DGN_90_BA_NecroticWake_NecropolisInterior#175828",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Plaguefall"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Plaguefall"], prefol, "DGN_90_MX_Plaguefall_GeneralWalk#175823", "DGN_90_MX_Plaguefall_InteriorWalk#175824",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Sanctum of Domination"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Sanctum of Domination"], prefol, "mus_90_maw_torghast_ambient_h_2#184680",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Sanguine Depths"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Sanguine Depths"], prefol, "DGN_90_RD_SanguineDepths_Walk1#176107", "DGN_90_RD_SanguineDepths_Walk2#176108", "DGN_90_RD_SanguineDepths_Battle#176111",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Spires of Ascension"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Spires of Ascension"], prefol, "DGN_90_BA_SpiresofAscension_Walk1#175978", "DGN_90_BA_SpiresofAscension_Walk2#175979",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Tazavesh"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Tazavesh"], prefol, "mus_91_tavazesh_1_a#185588", "mus_91_tavazesh_1_b#186013", "mus_91_tavazesh_1_m#185599",})
|
|
Zn(L["Dungeons"], L["Shadowlands"], L["Theater of Pain"] , { "|cffffd800" .. L["Dungeons"] .. ": " .. L["Theater of Pain"], prefol, "DGN_90_MX_TheaterofPain_GeneralWalk#175703", "DGN_90_MX_TheaterofPain_AbomWalk#175704", "DGN_90_MX_TheaterofPain_LichWalk#175706", "DGN_90_MX_TheaterofPain_BATTLE#175702",})
|
|
|
|
-- Various
|
|
Zn(L["Various"], L["Various"], "|cffffd800" .. L["Various"], {""})
|
|
Zn(L["Various"], L["Various"], L["Allied Races"], { "|cffffd800" .. L["Various"] .. ": " .. L["Allied Races"], prefol,
|
|
"|cffffd800", "|cffffd800" .. L["Dark Iron Dwarves"], "MUS_80_AlliedRace_DarkIronDwarf_Intro#117230", "MUS_80_AlliedRace_DarkIronDwarf_Intro02#117258", "MUS_80_AlliedRace_DarkIronDwarf_Intro03#117261", "MUS_80_AlliedRace_DarkIronDwarf01_Start#117245", "MUS_80_AlliedRace_DarkIronDwarf02_Start#117246", "MUS_80_AlliedRace_DarkIronDwarf_Scenario_SFC#117250", "MUS_80_AlliedRace_DarkIronDwarf_Scenario_Firelands#117260",
|
|
"|cffffd800", "|cffffd800" .. L["Highmountain Tauren"], "MUS_735_AR_RTC_HighmountainTauren_Flythrough#98204",
|
|
"|cffffd800", "|cffffd800" .. L["Kul Tiran Humans"], "MUS_815_AlliedRace_KulTiran_Harbormaster#129703", "MUS_815_AlliedRace_KulTiran_Brennadam#129705", "MUS_815_AlliedRace_KulTiran_Atwater#129706", "MUS_815_AlliedRace_KulTiran_FogtideComplete#129715", "MUS_815_AlliedRace_KulTiran_Boat#129717", "MUS_815_AlliedRace_KulTiran_EvergreenGrove#129733",
|
|
"|cffffd800", "|cffffd800" .. L["Lightforged Draenei"], "MUS_735_AR_RTC_LightforgedDraenei_Flythrough#98201", "MUS_735_AlliedRace_LightforgedDraenei_Vindicaar_01#97314", "MUS_735_AlliedRace_LightforgedDraenei_ForgeofAeons#97316", "MUS_735_AR_RTC_LightforgedDraenei_PreScenario_01#98199", "MUS_735_AR_RTC_LightforgedDraenei_PreScenario_02#98200",
|
|
"|cffffd800", "|cffffd800" .. L["Mag'har Orcs"], "MUS_80_AlliedRace_Mag'harOrc_Intro#117279", "MUS_80_AlliedRace_Mag'harOrc02_Intro#117436", "MUS_80_AlliedRace_Mag'harOrc01#117280", "MUS_80_AlliedRace_Mag'harOrc02#117281", "MUS_80_AlliedRace_Mag'harOrc_Light#117286", "MUS_80_AlliedRace_Mag'harOrc_Light_Intro#117441",
|
|
"|cffffd800", "|cffffd800" .. L["Nightborne"], "MUS_735_AR_RTC_Nightborne_Flythrough#98205", "MUS_735_AR_RTC_Nightborne_Silvermoon_01#98214", "MUS_735_AR_RTC_Nightborne_Silvermoon_03#98215", "MUS_735_AR_RTC_Nightborne_ThalyssraEstate_01#98195", "MUS_735_AR_RTC_Nightborne_ThalyssraEstate_02#98196", "MUS_735_AR_RTC_Nightborne_ThalyssraEstate_03#98197",
|
|
"|cffffd800", "|cffffd800" .. L["Void Elves"], "MUS_735_AR_RTC_VoidElf_Flythrough#98206", "MUS_735_AlliedRace_VoidElf_01#97311", "MUS_735_AlliedRace_VoidElf_02#97312", "MUS_735_AlliedRace_VoidElf_Scenario_01#97782", "MUS_735_AlliedRace_VoidElf_Scenario_02#97783", "MUS_735_AlliedRace_VoidElf_Scenario_03#97784", "MUS_735_AR_ThunderBluff_VoidAttack#97785",
|
|
"|cffffd800", "|cffffd800" .. L["Zandalari Trolls"], "MUS_815_AlliedRace_Zandalari_Instigators#129762", "MUS_815_AlliedRace_Zandalari_LoaBwonsamdi#129666", "MUS_815_AlliedRace_Zandalari_LoaFly#129773", "MUS_815_AlliedRace_Zandalari_LoaGonk#129663", "MUS_815_AlliedRace_Zandalari_LoaPaku#129664", "MUS_815_AlliedRace_Zandalari_Start#129774",
|
|
"|cffffd800", "|cffffd800" .. L["Embassies"], "MUS_735_AlliedRace_EmbassyAlliance_01#97594", "MUS_735_AlliedRace_EmbassyHorde_01#97593",
|
|
})
|
|
Zn(L["Various"], L["Various"], L["Arenas"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Arenas"], prefol, "Intro-NagrandDimond#10623", "MUS_50_Scenario_ArenaofAnnihilation#34019", "MUS_51_PVP_BrawlersGuild_Horde#34967", --[["MUS_80_PVP_ZandalarArena#117041", "MUS_80_PVP_KulTirasArena#114680",--]] "PVP-Battle Grounds#8233", "Zone-BladesEdge#9002",})
|
|
Zn(L["Various"], L["Various"], L["Battlegrounds"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Battlegrounds"], prefol, "Altervac Valley_PVP#8014", "MUS_50_Scenario_TempleofKotmogu#33978", "MUS_815_PVP_ArathiBasin_Intro#129818", "MUS_815_PVP_WarsongGultch_Intro#129817", "MUS_BattleForGilneas_BG#23612", "MUS_TwinPeaks_BG#23613", "PVP-Battle Grounds#8233", "PVP-Battle Grounds--DeepwindGorge#37659", "PVP-Battle Grounds-Pandaria#33714", "PVP-Battle Grounds-SilvershardMines#33713", "PVPVictoryAlliance#8455", "PVPVictoryHorde#8454", "Zone-WintergraspContested#14912",})
|
|
Zn(L["Various"], L["Various"], L["Cinematics"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Cinematics"], prefol,
|
|
-- Cinematic Music: World of Warcraft (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["World of Warcraft"],
|
|
"|Cffffffff" .. L["Ten Years of Warcraft"] .. " |r#625988#27", -- interface/cinematics/logo.mp3
|
|
"|Cffffffff" .. L["World of Warcraft"] .. " |r#625564#170", -- interface/cinematics/wow_intro.mp3
|
|
|
|
-- Cinematic Music: The Burning Crusade (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["The Burning Crusade"],
|
|
"|Cffffffff" .. L["The Burning Crusade"] .. " |r#625565#168", -- interface/cinematics/wow_intro_bc.mp3
|
|
|
|
-- Cinematic Music: Wrath of the Lich King (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Wrath of the Lich King"],
|
|
"|Cffffffff" .. L["Wrath of the Lich King"] .. " |r#457498#198", -- interface/cinematics/wow_intro_lk.mp3
|
|
"|Cffffffff" .. L["Battle of Angrathar the Wrathgate"] .. " |r#458394#265", -- interface/cinematics/wow_wrathgate.mp3
|
|
"|Cffffffff" .. L["Fall of the Lich King"] .. " |r#625989#231", -- interface/cinematics/wow_fotlk.mp3
|
|
|
|
-- Cinematic Music: Cataclysm (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Cataclysm"],
|
|
"|Cffffffff" .. L["Cataclysm"] .. " |r#455939#144", -- interface/cinematics/wow3x_intro.mp3
|
|
"|Cffffffff" .. L["Last Stand"] .. " |r#455940#101", -- interface/cinematics/worgen.mp3
|
|
"|Cffffffff" .. L["Leaving Kezan"] .. " |r#452603#104", -- interface/cinematics/goblin.mp3
|
|
"|Cffffffff" .. L["The Dragon Soul"] .. " |r#576955#29", -- interface/cinematics/dsi_act1.mp3
|
|
"|Cffffffff" .. L["Spine of Deathwing"] .. " |r#576956#21", -- interface/cinematics/dsi_act2.mp3
|
|
"|Cffffffff" .. L["Madness of Deathwing"] .. " |r#576957#27", -- interface/cinematics/dsi_act3.mp3
|
|
"|Cffffffff" .. L["Fall of Deathwing"] .. " |r#577085#94", -- interface/cinematics/dsi_act4.mp3
|
|
|
|
-- Cinematic Music: Mists of Pandaria (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Mists of Pandaria"],
|
|
"|Cffffffff" .. L["Mists of Pandaria"] .. " |r#644071#228", -- interface/cinematics/wow_intro_mop.mp3
|
|
"|Cffffffff" .. L["Risking It All"] .. " |r#644128#62", -- interface/cinematics/mop_gse.mp3
|
|
"|Cffffffff" .. L["Leaving the Wandering Isle"] .. " |r#644124#40", -- interface/cinematics/mop_br.mp3
|
|
"|Cffffffff" .. L["Jade Forest Crash"] .. " |r#654949#18", -- interface/cinematics/mop_jade_crash.mp3
|
|
"|Cffffffff" .. L["The King's Command"] .. " |r#644136#59", -- interface/cinematics/mop_wra.mp3
|
|
"|Cffffffff" .. L["The Art of War"] .. " |r#644138#56", -- interface/cinematics/mop_wrh.mp3
|
|
"|Cffffffff" .. L["Battle of Serpent's Heart"] .. " |r#644134#106", -- interface/cinematics/mop_jade.mp3
|
|
"|Cffffffff" .. L["The Fleet in Krasarang (Horde)"] .. " |r#668416#27", -- interface/cinematics/mop_hsl.mp3
|
|
"|Cffffffff" .. L["The Fleet in Krasarang (Alliance)"] .. " |r#668414#27", -- interface/cinematics/mop_asl.mp3
|
|
"|Cffffffff" .. L["Hellscream's Downfall (Horde)"] .. " |r#916419#161", -- interface/cinematics/oro_horde.mp3
|
|
"|Cffffffff" .. L["Hellscream's Downfall (Alliance)"] .. " |r#916417#140", -- interface/cinematics/oro_alliance.mp3
|
|
|
|
-- Cinematic Music: Warlords of Draenor (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Warlords of Draenor"],
|
|
"|Cffffffff" .. L["Warlords of Draenor"] .. " |r#1068826#258", -- interface/cinematics/wod_mainintro.mp3
|
|
"|Cffffffff" .. L["Darkness Falls"] .. " |r#1068485#91", -- interface/cinematics/wod_vel.mp3
|
|
"|Cffffffff" .. L["The Battle of Thunder Pass"] .. " |r#1068482#86", -- interface/cinematics/wod_fwv.mp3
|
|
"|Cffffffff" .. L["And Justice for Thrall"] .. " |r#1068483#157", -- interface/cinematics/wod_gvt.mp3
|
|
"|Cffffffff" .. L["Into the Portal"] .. " |r#1068480#41", -- interface/cinematics/wod_dpi.mp3
|
|
"|Cffffffff" .. L["A Taste of Iron"] .. " |r#1068481#44", -- interface/cinematics/wod_dpo.mp3
|
|
"|Cffffffff" .. L["The Battle for Shattrath"] .. " |r#1068484#138", -- interface/cinematics/wod_sra.mp3
|
|
"|Cffffffff" .. L["Gul'dan Ascendant"] .. " |r#1112524#139", -- interface/cinematics/wod_gto.mp3
|
|
"|Cffffffff" .. L["Gul'dan's Plan"] .. " |r#1139556#29", -- interface/cinematics/wod_hfi.mp3
|
|
"|Cffffffff" .. L["Victory in Draenor!"] .. " |r#1139557#120", -- interface/cinematics/wod_hfo.mp3
|
|
"|Cffffffff" .. L["Establish Your Garrison (Horde)"] .. " |r#1068476#18", -- interface/cinematics/wod_gar_horde_tier0-1.mp3
|
|
"|Cffffffff" .. L["Establish Your Garrison (Alliance)"] .. " |r#1068351#21", -- interface/cinematics/wod_gar_alliance_tier0-1.mp3
|
|
"|Cffffffff" .. L["Bigger is Better (Horde)"] .. " |r#1068475#23", -- interface/cinematics/wod_gar_horde_tier1-2.mp3
|
|
"|Cffffffff" .. L["Bigger is Better (Alliance)"] .. " |r#1068478#26", -- interface/cinematics/wod_gar_alliance_tier1-2.mp3
|
|
"|Cffffffff" .. L["My Very Own Castle (Horde)"] .. " |r#1068474#26", -- interface/cinematics/wod_gar_horde_tier2-3.mp3
|
|
"|Cffffffff" .. L["My Very Own Castle (Alliance)"] .. " |r#1068477#22", -- interface/cinematics/wod_gar_alliance_tier2-3.mp3
|
|
"|Cffffffff" .. L["Shipyard Construction (Horde)"] .. " |r#1137841#19", -- interface/cinematics/wod_gar_shipyard_lj_h.mp3
|
|
"|Cffffffff" .. L["Shipyard Construction (Alliance)"] .. " |r#1137839#20", -- interface/cinematics/wod_gar_shipyard_lj_a.mp3
|
|
|
|
-- Cinematic Music: Legion (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Legion"],
|
|
"|Cffffffff" .. L["Legion"] .. " |r#1487144#225", -- interface/cinematics/legion_intro.mp3
|
|
"|Cffffffff" .. L["The Invasion Begins"] .. " |r#1487142#64", -- interface/cinematics/legion_dh1.mp3
|
|
"|Cffffffff" .. L["Return to the Black Temple"] .. " |r#1487143#129", -- interface/cinematics/legion_dh2.mp3
|
|
"|Cffffffff" .. L["The Demon's Trail"] .. " |r#1487148#38", -- interface/cinematics/legion_val_yx.mp3
|
|
"|Cffffffff" .. L["The Fate of Val'sharah"] .. " |r#1487147#82", -- interface/cinematics/legion_val_yd.mp3
|
|
"|Cffffffff" .. L["Fate of the Horde"] .. " |r#1487145#145", -- interface/cinematics/legion_org_vs.mp3
|
|
"|Cffffffff" .. L["A New Life for Undeath"] .. " |r#1487146#114", -- interface/cinematics/legion_sth.mp3
|
|
"|Cffffffff" .. L["Harbingers Gul'dan"] .. " |r#1487156#364", -- interface/cinematics/legion_hrb_g.mp3
|
|
"|Cffffffff" .. L["Harbingers Khadgar"] .. " |r#1487155#311", -- interface/cinematics/legion_hrb_k.mp3
|
|
"|Cffffffff" .. L["Harbingers Illidan"] .. " |r#1487157#245", -- interface/cinematics/legion_hrb_i.mp3
|
|
"|Cffffffff" .. L["The Nightborne Pact"] .. " |r#1510277#129", -- interface/cinematics/legion_su_i.mp3
|
|
"|Cffffffff" .. L["Stormheim (Horde)"] .. " |r#1506511#19", -- interface/cinematics/legion_g_h_sth.mp3
|
|
"|Cffffffff" .. L["Stormheim (Alliance)"] .. " |r#1506512#20", -- interface/cinematics/legion_g_a_sth.mp3
|
|
"|Cffffffff" .. L["Tomb of Sargeras"] .. " |r#1505326#15", -- interface/cinematics/legion_bs_i.mp3
|
|
"|Cffffffff" .. L["The Battle for Broken Shore (Alliance)"] .. " |r#1506318#252", -- interface/cinematics/legion_bs_a.mp3
|
|
"|Cffffffff" .. L["The Battle for Broken Shore (Horde)"] .. " |r#1506319#260", -- interface/cinematics/legion_bs_h.mp3
|
|
"|Cffffffff" .. L["A Falling Star"] .. " |r#1510075#77", -- interface/cinematics/legion_iq_lv.mp3
|
|
"|Cffffffff" .. L["Destiny Unfulfilled"] .. " |r#1510074#50", -- interface/cinematics/legion_iq_id.mp3
|
|
"|Cffffffff" .. L["The Nighthold"] .. " |r#1558961#81", -- interface/cinematics/legion_su_r.mp3
|
|
"|Cffffffff" .. L["Victory at The Nighthold"] .. " |r#1617300#161", -- interface/cinematics/legion_72_tst.mp3
|
|
"|Cffffffff" .. L["A Found Memento"] .. " |r#1617299#164", -- interface/cinematics/legion_72_ars.mp3
|
|
"|Cffffffff" .. L["Assault on the Broken Shore"] .. " |r#1617301#29", -- interface/cinematics/legion_72_ots.mp3
|
|
"|Cffffffff" .. L["Kil'Jaeden's Downfall"] .. " |r#1671790#137", -- interface/cinematics/legion_72_tsf.mp3
|
|
"|Cffffffff" .. L["Arrival on Argus"] .. " |r#1720225#195", -- interface/cinematics/legion_73_agi.mp3
|
|
"|Cffffffff" .. L["Rejection of the Gift"] .. " |r#1720226#198", -- interface/cinematics/legion_73_rtg.mp3
|
|
"|Cffffffff" .. L["Reincarnation of Alleria Windrunner"] .. " |r#1720227#32", -- interface/cinematics/legion_73_avt.mp3
|
|
"|Cffffffff" .. L["Rise of Argus"] .. " |r#1720231#57", -- interface/cinematics/legion_73_pan.mp3
|
|
"|Cffffffff" .. L["Antorus Ending"] .. " |r#1780281#182", -- interface/cinematics/legion_73_afn.mp3
|
|
"|Cffffffff" .. L["Epilogue (Horde)"] .. " |r#1862317#145", -- interface/cinematics/legion_735_eph.mp3
|
|
"|Cffffffff" .. L["Epilogue (Alliance)"] .. " |r#1862316#157", -- interface/cinematics/legion_735_epa.mp3
|
|
|
|
-- Cinematic Music: Battle for Azeroth (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Battle for Azeroth"],
|
|
"|Cffffffff" .. L["Battle for Azeroth"] .. " |r#2125419#263", -- interface/cinematics/bfa_800_rb.mp3
|
|
"|Cffffffff" .. L["Warbringers Sylvanas"] .. " |r#2175009#232", -- interface/cinematics/bfa_800_sv.mp3
|
|
"|Cffffffff" .. L["The Fall of Lordaeron"] .. " |r#2175023#223", -- interface/cinematics/bfa_800_ltc_h.mp3
|
|
"|Cffffffff" .. L["Jaina Joins the Battle"] .. " |r#2175028#86", -- interface/cinematics/bfa_800_ltt.mp3
|
|
"|Cffffffff" .. L["Embers of War"] .. " |r#2175018#178", -- interface/cinematics/bfa_800_ltc_a.mp3
|
|
"|Cffffffff" .. L["Arrival to Zandalar"] .. " |r#2175033#183", -- interface/cinematics/bfa_800_stz.mp3
|
|
"|Cffffffff" .. L["Vision of Sailor's Memory"] .. " |r#2175038#25", -- interface/cinematics/bfa_800_zia.mp3
|
|
"|Cffffffff" .. L["Jaina Returns to Kul Tiras"] .. " |r#2175043#118", -- interface/cinematics/bfa_800_kta.mp3
|
|
"|Cffffffff" .. L["Jaina's Nightmare"] .. " |r#2175048#96", -- interface/cinematics/bfa_800_jnm.mp3
|
|
"|Cffffffff" .. L["Warbringers Jaina"] .. " |r#2175053#274", -- interface/cinematics/bfa_800_ja.mp3
|
|
"|Cffffffff" .. L["A Deal with Death"] .. " |r#2175058#178", -- interface/cinematics/bfa_800_bar.mp3
|
|
"|Cffffffff" .. L["The Threat Within"] .. " |r#2175063#136", -- interface/cinematics/bfa_800_zcf.mp3
|
|
"|Cffffffff" .. L["The Return of Hope"] .. " |r#2175068#152", -- interface/cinematics/bfa_800_ktf.mp3
|
|
"|Cffffffff" .. L["Realm Of Torment"] .. " |r#2175073#164", -- interface/cinematics/bfa_800_rot.mp3
|
|
"|Cffffffff" .. L["Terror of Darkshore"] .. " |r#2543204#164", -- interface/cinematics/bfa_810_tod.mp3
|
|
"|Cffffffff" .. L["An Unexpected Reunion"] .. " |r#2845776#170", -- interface/cinematics/bfa_815_dpr.mp3
|
|
"|Cffffffff" .. L["Siege of Dazar'alor"] .. " |r#2565179#128", -- interface/cinematics/bfa_810_akt.mp3
|
|
"|Cffffffff" .. L["Battle of Dazar'alor"] .. " |r#2543223#121", -- interface/cinematics/bfa_810_dor.mp3
|
|
"|Cffffffff" .. L["Warbringers Azshara"] .. " |r#2991597#425", -- interface/cinematics/bfa_820_awb.mp3
|
|
"|Cffffffff" .. L["Rise of Azshara (Horde)"] .. " |r#3039647#133", -- interface/cinematics/bfa_820_enc_262_h.mp3
|
|
"|Cffffffff" .. L["Rise of Azshara (Alliance)"] .. " |r#3039642#132", -- interface/cinematics/bfa_820_enc_262_a.mp3
|
|
"|Cffffffff" .. L["The Negotiation"] .. " |r#3075714#201", -- interface/cinematics/bfa_825_lh.mp3
|
|
"|Cffffffff" .. L["Reckoning"] .. " |r#3075719#379", -- interface/cinematics/bfa_825_os.mp3
|
|
"|Cffffffff" .. L["Azshara's Eternal Palace"] .. " |r#3022943#83", -- interface/cinematics/bfa_820_enc_261.mp3
|
|
"|Cffffffff" .. L["Wrathion's Scene"] .. " |r#3231695#61", -- interface/cinematics/bfa_83_927.mp3
|
|
"|Cffffffff" .. L["Visions of N'Zoth"] .. " |r#3231690#135", -- interface/cinematics/bfa_83_928.mp3
|
|
|
|
-- Cinematic Music: Shadowlands (movie.dbc)
|
|
"|cffffd800", "|cffffd800" .. L["Shadowlands"],
|
|
"|Cffffffff" .. L["Shadowlands"] .. " |r#3727029#320", -- interface/cinematics/shadowlands_901_si.mp3
|
|
"|Cffffffff" .. L["Afterlives Ardenweald"] .. " |r#3814425#362", -- interface/cinematics/shadowlands_901_aw.mp3
|
|
"|Cffffffff" .. L["Afterlives Bastion"] .. " |r#3809924#396", -- interface/cinematics/shadowlands_901_ba.mp3
|
|
"|Cffffffff" .. L["Afterlives Maldraxxus"] .. " |r#3814420#258", -- interface/cinematics/shadowlands_901_mx.mp3
|
|
"|Cffffffff" .. L["Afterlives Revendreth"] .. " |r#3814415#224", -- interface/cinematics/shadowlands_901_rd.mp3
|
|
"|Cffffffff" .. L["Exile's Reach (Horde)"] .. " |r#3755758#22", -- interface/cinematics/shadowlands_902_931.mp3
|
|
"|Cffffffff" .. L["Exile's Reach (Alliance)"] .. " |r#3260363#22", -- interface/cinematics/shadowlands_901_895.mp3
|
|
"|Cffffffff" .. L["Dark Abduction"] .. " |r#3755759#126", -- interface/cinematics/shadowlands_902_937.mp3
|
|
"|Cffffffff" .. L["For Teldrassil"] .. " |r#3755760#148", -- interface/cinematics/shadowlands_902_942.mp3
|
|
"|Cffffffff" .. L["Beyond The Veil"] .. " |r#3851149#104", -- interface/cinematics/shadowlands_901_lc.mp3
|
|
"|Cffffffff" .. L["Remember This Lesson"] .. " |r#3756096#197", -- interface/cinematics/shadowlands_901_rme.mp3
|
|
"|Cffffffff" .. L["Breaking The Arbiter"] .. " |r#3756093#95", -- interface/cinematics/shadowlands_901_bta.mp3
|
|
"|Cffffffff" .. L["A Glimpse Into Darkness"] .. " |r#3756092#66", -- interface/cinematics/shadowlands_901_etm.mp3
|
|
"|Cffffffff" .. L["No More Lies"] .. " |r#3756094#206", -- interface/cinematics/shadowlands_901_pim.mp3
|
|
"|Cffffffff" .. L["Sylvanas' Choice"] .. " |r#3756097#153", -- interface/cinematics/shadowlands_902_948.mp3
|
|
"|Cffffffff" .. L["Kingsmourne"] .. " |r#4035004#178", -- interface/cinematics/shadowlands_910_aaa.mp3
|
|
"|Cffffffff" .. L["Ysera Reborn"] .. " |r#3756095#144", -- interface/cinematics/shadowlands_902_941.mp3
|
|
"|Cffffffff" .. L["Battle For Ardenweald"] .. " |r#4202880#186", -- interface/cinematics/shadowlands_910_951.mp3
|
|
})
|
|
Zn(L["Various"], L["Various"], L["Class Trials"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Class Trials"], prefol, "MUS_70_ClassTrial_Horde_BattleWalk#71954", "MUS_70_ClassTrial_Alliance_BattleWalk#71959",})
|
|
Zn(L["Various"], L["Various"], L["Credits"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Credits"], prefol, "Menu-Credits01#10763", "Menu-Credits02#10804", "Menu-Credits03#13822", "Menu-Credits04#23812", "Menu-Credits05#32015", "Menu-Credits06#34020", "Menu-Credits07#56354", "Menu-Credits08#113560"})
|
|
Zn(L["Various"], L["Various"], L["Events"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Events"], prefol,
|
|
"|cffffd800", "|cffffd800" .. L["Darkmoon Faire"], "MUS_43_DarkmoonFaire_IslandWalk#26536", "MUS_43_DarkmoonFaire_PavillionWalk#26539", "MUS_51_DarkmoonFaire_MerryGoRound_01#34440",
|
|
-- Flagged as Bad ID: "|cffffd800", "|cffffd800" .. L["Plants vs Zombies"], "EVENT_PvZ_Babbling#23487", "EVENT_PvZ_Dadadoo#23488", "EVENT_PvZ_Doobeedoo#23489", "EVENT_PvZ_Lalala#23490", "EVENT_PvZ_Sunflower#23491", "EVENT_PvZ_Zombieonyourlawn#23492",
|
|
"|cffffd800", "|cffffd800" .. L["Trial of Style"], "MUS_725_Event_Transmog_TrialOfStyle_1_Preparation#85957", "MUS_725_Event_Transmog_TrialOfStyle_2_Competition#85958", "MUS_725_Event_Transmog_TrialOfStyle_4_EndOfCompetition#85960",
|
|
})
|
|
Zn(L["Various"], L["Various"], L["Island Expeditions"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Island Expeditions"], prefol,
|
|
"|cffffd800", "|cffffd800" .. L["Adventure"], "MUS_80_Islands_Adventure_Walk#115050", "MUS_80_Islands_Adventure_Invasion_Walk#115414", "MUS_80_Islands_Adventure_Victory#115053",
|
|
"|cffffd800", "|cffffd800" .. L["Mystical"], "MUS_80_Islands_Mystical_Walk#115689", "MUS_80_Islands_Mystical_Invasion_Walk#117352",
|
|
"|cffffd800", "|cffffd800" .. L["Winter"], "MUS_80_Islands_Winter_Walk#117377", "MUS_80_Islands_Winter_Invasion_Walk#117378",
|
|
"|cffffd800", "|cffffd800" .. L["Havenswood"], "MUS_81_Islands_Havenswood_Walk#125908",
|
|
"|cffffd800", "|cffffd800" .. L["Jorundall"], "MUS_81_Islands_Jorundall_Walk#126149",
|
|
})
|
|
Zn(L["Various"], L["Various"], L["Main Titles"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Main Titles"], prefol, "GS_Retail#10924", "GS_BurningCrusade#10925", "GS_LichKing#12765", "GS_Cataclysm#23640", "MUS_50_HeartofPandaria_MainTitle#28509", "MUS_60_MainTitle#40169", "MUS_70_MainTitle#56353", "MUS_80_MainTitle#113559", "MUS_90_MainTitle#170711",}) -- "MUS_1.0_MainTitle_Original#47598"
|
|
Zn(L["Various"], L["Various"], L["Music Rolls"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Music Rolls"], prefol, "MUS_61_GarrisonMusicBox_01#49511", "MUS_61_GarrisonMusicBox_02#49512", "MUS_61_GarrisonMusicBox_03#49513", "MUS_61_GarrisonMusicBox_04#49514", "MUS_61_GarrisonMusicBox_05#49515", "MUS_61_GarrisonMusicBox_06#49516", "MUS_61_GarrisonMusicBox_07#49529", "MUS_61_GarrisonMusicBox_08#49530", "MUS_61_GarrisonMusicBox_09#49531", "MUS_61_GarrisonMusicBox_10#49533", "MUS_61_GarrisonMusicBox_11#49535", "MUS_61_GarrisonMusicBox_12#49536", "MUS_61_GarrisonMusicBox_13#49538", "MUS_61_GarrisonMusicBox_14#49539", "MUS_61_GarrisonMusicBox_15#49540", "MUS_61_GarrisonMusicBox_16#49541", "MUS_61_GarrisonMusicBox_17#49543", "MUS_61_GarrisonMusicBox_18#49544", "MUS_61_GarrisonMusicBox_19#49545", "MUS_61_GarrisonMusicBox_20#49546", "MUS_61_GarrisonMusicBox_21#49526", "MUS_61_GarrisonMusicBox_22#49528", "MUS_61_GarrisonMusicBox_23_Alliance#49517", "MUS_61_GarrisonMusicBox_24_Alliance#49518", "MUS_61_GarrisonMusicBox_25_Alliance#49519", "MUS_61_GarrisonMusicBox_26_Alliance#49520", "MUS_61_GarrisonMusicBox_27_Alliance#49521", "MUS_61_GarrisonMusicBox_28_Alliance#49522", "MUS_61_GarrisonMusicBox_29_Alliance#49523", "MUS_61_GarrisonMusicBox_30_Alliance#49524", "MUS_61_GarrisonMusicBox_31_Alliance#49525", "MUS_61_GarrisonMusicBox_23_Horde#49555", "MUS_61_GarrisonMusicBox_24_Horde#49554", "MUS_61_GarrisonMusicBox_25_Horde#49553", "MUS_61_GarrisonMusicBox_26_Horde#49552", "MUS_61_GarrisonMusicBox_27_Horde#49551", "MUS_61_GarrisonMusicBox_28_Horde#49550", "MUS_61_GarrisonMusicBox_29_Horde#49549", "MUS_61_GarrisonMusicBox_30_Horde#49548", "MUS_61_GarrisonMusicBox_31_Horde#49547",})
|
|
Zn(L["Various"], L["Various"], L["Narration"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Narration"], prefol, "BloodElfFlybyNarration#9156", "DeathKnightFlybyNarration#12938", "DraeneiFlybyNarration#9155", "DwarfFlyByNarration#3740", "GnomeFlyByNarration#3841", "GoblinFlybyNarration#23106", "HumanFlyByNarration#3840", "NightElfFlyByNarration#3800", "OrcFlyByNarration#3760", "PandarenFlybyNarration#31699", "TaurenFlyByNarration#4122", "TrollFlyByNarration#4080", "WorgenFlybyNarration#23105", "UndeadFlybyNarration#3358",})
|
|
Zn(L["Various"], L["Various"], L["Pet Battles"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Pet Battles"], prefol, "MUS_50_PetBattles_01#28753", "MUS_50_PetBattles_02#28754",})
|
|
Zn(L["Various"], L["Various"], L["Themes"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Themes"], prefol,
|
|
"|cffffd800", "|cffffd800" .. L["Anduin's Theme"], "MUS_70_Zone_Stormwind_PostBrokenShore_Funeral_01#75552", "MUS_70_Zone_Stormwind_LionsRest_Day#73345", "MUS_70_BrokenShore_ShipIntro#73387", "MUS_72_BrokenShore_Wyrnnfall_Intro#85166",
|
|
"|cffffd800", "|cffffd800" .. L["Jaina's Theme"], "MUS_60_Proudmoore_01#49356", "MUS_60_Proudmoore_02#49357", "MUS_60_Proudmoore_03#49358",
|
|
"|cffffd800", "|cffffd800" .. L["Tea with Jaina"], "ClientScene_51_TeaWithJaina_Music_01#34891",
|
|
"|cffffd800", "|cffffd800" .. L["Power of the Horde"], "_MUS_61_GarrisonMusicBox_24_NotUsed#49534",
|
|
"|cffffd800", "|cffffd800" .. L["Diablo Anniversary"], "MUS_71_Event_DiabloAnniversary_TristramGuitar (Everything)#78803",
|
|
})
|
|
Zn(L["Various"], L["Various"], L["Warfronts"] , { "|cffffd800" .. L["Various"] .. ": " .. L["Warfronts"], prefol,
|
|
"|cffffd800", "|cffffd800" .. L["Battle for Darkshore"], "MUS_81_Warfronts_Darkshore_Alliance_General_Walk#125670", "MUS_81_Warfronts_Darkshore_Alliance_FinalAssault#125671", "MUS_81_Warfronts_Darkshore_Horde_General_Walk#125883", "MUS_81_Warfronts_Darkshore_Horde_FinalAssault#125884",
|
|
"|cffffd800", "|cffffd800" .. L["Battle for Stromgarde"], "MUS_80_Warfronts_Arathi_Alliance_General_Walk#116361", "MUS_80_Warfront_Arathi_Horde_General_Walk#85251", "MUS_80_ArathiHighlands_PostWarfronts#120246",
|
|
})
|
|
|
|
-- Movies
|
|
Zn(L["Movies"], L["Movies"], "|cffffd800" .. L["Movies"], {""})
|
|
Zn(L["Movies"], L["Movies"], L["World of Warcraft"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["World of Warcraft"], prefol, L["Ten Years of Warcraft"] .. " |r(1)", L["World of Warcraft"] .. " |r(2)"})
|
|
Zn(L["Movies"], L["Movies"], L["The Burning Crusade"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["The Burning Crusade"], prefol, L["The Burning Crusade"] .. " |r(27)"})
|
|
Zn(L["Movies"], L["Movies"], L["Wrath of the Lich King"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Wrath of the Lich King"], prefol, L["Wrath of the Lich King"] .. " |r(18)", L["Battle of Angrathar the Wrathgate"] .. " |r(14)", L["Fall of the Lich King"] .. " |r(16)"})
|
|
Zn(L["Movies"], L["Movies"], L["Cataclysm"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Cataclysm"], prefol, L["Cataclysm"] .. " |r(23)", L["Last Stand"] .. " |r(21)", L["Leaving Kezan"] .. " |r(22)", L["The Dragon Soul"] .. " |r(73)", L["Spine of Deathwing"] .. " |r(74)", L["Madness of Deathwing"] .. " |r(75)", L["Fall of Deathwing"] .. " |r(76)"})
|
|
Zn(L["Movies"], L["Movies"], L["Mists of Pandaria"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Mists of Pandaria"], prefol, L["Mists of Pandaria"] .. " |r(115)", L["Risking It All"] .. " |r(117)", L["Leaving the Wandering Isle"] .. " |r(116)", L["Jade Forest Crash"] .. " |r(121)", L["The King's Command"] .. " |r(119)", L["The Art of War"] .. " |r(120)", L["Battle of Serpent's Heart"] .. " |r(118)", L["The Fleet in Krasarang (Horde)"] .. " |r(128)", L["The Fleet in Krasarang (Alliance)"] .. " |r(127)", L["Hellscream's Downfall (Horde)"] .. " |r(151)", L["Hellscream's Downfall (Alliance)"] .. " |r(152)"})
|
|
Zn(L["Movies"], L["Movies"], L["Warlords of Draenor"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Warlords of Draenor"], prefol, L["Warlords of Draenor"] .. " |r(195)", L["Darkness Falls"] .. " |r(167)", L["The Battle of Thunder Pass"] .. " |r(168)", L["And Justice for Thrall"] .. " |r(177)", L["Into the Portal"] .. " |r(185)", L["A Taste of Iron"] .. " |r(187)", L["The Battle for Shattrath"] .. " |r(188)", L["Gul'dan Ascendant"] .. " |r(270)", L["Gul'dan's Plan"] .. " |r(294)", L["Victory in Draenor!"] .. " |r(295)", L["Establish Your Garrison (Horde)"] .. " |r(189)", L["Establish Your Garrison (Alliance)"] .. " |r(192)", L["Bigger is Better (Horde)"] .. " |r(190)", L["Bigger is Better (Alliance)"] .. " |r(193)", L["My Very Own Castle (Horde)"] .. " |r(191)", L["My Very Own Castle (Alliance)"] .. " |r(194)", L["Shipyard Construction (Horde)"] .. " |r(292)", L["Shipyard Construction (Alliance)"] .. " |r(293)"})
|
|
Zn(L["Movies"], L["Movies"], L["Legion"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Legion"], prefol, L["Legion"] .. " |r(470)", L["The Invasion Begins"] .. " |r(469)", L["Return to the Black Temple"] .. " |r(471)", L["The Demon's Trail"] .. " |r(473)", L["The Fate of Val'sharah"] .. " |r(472)", L["Fate of the Horde"] .. " |r(474)", L["A New Life for Undeath"] .. " |r(475)", L["Harbingers Gul'dan"] .. " |r(476)", L["Harbingers Khadgar"] .. " |r(477)", L["Harbingers Illidan"] .. " |r(478)", L["The Nightborne Pact"] .. " |r(485)", L["Stormheim (Alliance)"] .. " |r(483)", L["Stormheim (Horde)"] .. " |r(484)", L["Tomb of Sargeras"] .. " |r(486)", L["The Battle for Broken Shore"] .. " |r(487)", L["A Falling Star"] .. " |r(489)", L["Destiny Unfulfilled"] .. " |r(490)", L["The Nighthold"] .. " |r(549)", L["Victory at The Nighthold"] .. " |r(635)", L["A Found Memento"] .. " |r(636)", L["Assault on the Broken Shore"] .. " |r(637)", L["Kil'jaeden's Downfall"] .. " |r(656)", L["Arrival on Argus"] .. " |r(677)", L["Rejection of the Gift"] .. " |r(679)", L["Reincarnation of Alleria Windrunner"] .. " |r(682)", L["Rise of Argus"] .. " |r(687)", L["Antorus Ending"] .. " |r(689)", L["Epilogue (Horde)"] .. " |r(717)", L["Epilogue (Alliance)"] .. " |r(716)"})
|
|
Zn(L["Movies"], L["Movies"], L["Battle for Azeroth"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Battle for Azeroth"], prefol,
|
|
L["Battle for Azeroth"] .. " |r(852)",
|
|
L["Warbringers Sylvanas"] .. " |r(853)",
|
|
L["The Fall of Lordaeron"] .. " |r(855)",
|
|
L["Jaina Joins the Battle"] .. " |r(856)",
|
|
L["Embers of War"] .. " |r(854)",
|
|
L["Arrival to Zandalar"] .. " |r(857)",
|
|
L["Vision of Sailor's Memory"] .. " |r(858)",
|
|
L["Jaina Returns to Kul Tiras"] .. " |r(859)",
|
|
L["Jaina's Nightmare"] .. " |r(860)",
|
|
L["Warbringers Jaina"] .. " |r(861)",
|
|
L["A Deal with Death"] .. " |r(862)",
|
|
L["The Threat Within"] .. " |r(863)",
|
|
L["The Return of Hope"] .. " |r(864)",
|
|
L["Realm Of Torment"] .. " |r(865)",
|
|
L["Terror of Darkshore"] .. " |r(874)",
|
|
L["An Unexpected Reunion"] .. " |r(879)",
|
|
L["Siege of Dazar'alor"] .. " |r(876)",
|
|
L["Battle of Dazar'alor"] .. " |r(875)",
|
|
L["Warbringers Azshara"] .. " |r(884)",
|
|
L["Rise of Azshara (Horde)"] .. " |r(894)",
|
|
L["Rise of Azshara (Alliance)"] .. " |r(883)",
|
|
L["The Negotiation"] .. " |r(903)",
|
|
-- L["Reckoning"] .. " |r(904)",
|
|
L["Azshara's Eternal Palace"] .. " |r(920)",
|
|
L["Wrathion's Scene"] .. " |r(927)",
|
|
L["Visions of N'Zoth"] .. " |r(928)",
|
|
})
|
|
Zn(L["Movies"], L["Movies"], L["Shadowlands"] , { "|cffffd800" .. L["Movies"] .. ": " .. L["Shadowlands"], prefol,
|
|
L["Shadowlands"] .. " |r(936)",
|
|
L["Afterlives Ardenweald"] .. " |r(935)",
|
|
L["Afterlives Bastion"] .. " |r(932)",
|
|
L["Afterlives Maldraxxus"] .. " |r(934)",
|
|
L["Afterlives Revendreth"] .. " |r(933)",
|
|
L["Exile's Reach (Horde)"] .. " |r(931)",
|
|
L["Exile's Reach (Alliance)"] .. " |r(895)",
|
|
L["Dark Abduction"] .. " |r(937)",
|
|
L["For Teldrassil"] .. " |r(942)",
|
|
L["Beyond The Veil"] .. " |r(943)",
|
|
L["Remember This Lesson"] .. " |r(944)",
|
|
L["Breaking The Arbiter"] .. " |r(945)",
|
|
L["A Glimpse Into Darkness"] .. " |r(946)",
|
|
L["No More Lies"] .. " |r(947)",
|
|
L["Sylvanas' Choice"] .. " |r(948)",
|
|
L["Kingsmourne"] .. " |r(949)",
|
|
L["Ysera Reborn"] .. " |r(941)",
|
|
L["Battle For Ardenweald"] .. " |r(951)",
|
|
})
|
|
-- Give zone table a file level scope so slash command function can access it
|
|
LeaPlusLC["ZoneList"] = ZoneList
|
|
|
|
-- Show relevant list items
|
|
local function UpdateList()
|
|
FauxScrollFrame_Update(scrollFrame, #ListData, numButtons, 16)
|
|
for index = 1, numButtons do
|
|
local offset = index + FauxScrollFrame_GetOffset(scrollFrame)
|
|
local button = scrollFrame.buttons[index]
|
|
button.index = offset
|
|
if offset <= #ListData then
|
|
-- Show zone listing or track listing
|
|
button:SetText(ListData[offset].zone or ListData[offset])
|
|
-- Set width of highlight texture
|
|
if button:GetTextWidth() > 290 then
|
|
button.t:SetSize(290, 16)
|
|
else
|
|
button.t:SetSize(button:GetTextWidth(), 16)
|
|
end
|
|
-- Show the button
|
|
button:Show()
|
|
-- Hide highlight bar texture by default
|
|
button.s:Hide()
|
|
-- Hide highlight bar if the button is a heading
|
|
if strfind(button:GetText(), "|c") then button.t:Hide() end
|
|
-- Show last played track highlight bar texture
|
|
if LastPlayed == button:GetText() then
|
|
local HeadingOfCurrentFolder = ListData[1]
|
|
if HeadingOfCurrentFolder == HeadingOfClickedTrack then
|
|
button.s:Show()
|
|
end
|
|
end
|
|
-- Show last played folder highlight bar texture
|
|
if LastFolder == button:GetText() then
|
|
button.s:Show()
|
|
end
|
|
-- Set width of highlight bar
|
|
if button:GetTextWidth() > 290 then
|
|
button.s:SetSize(290, 16)
|
|
else
|
|
button.s:SetSize(button:GetTextWidth(), 16)
|
|
end
|
|
-- Limit click to label width
|
|
local bWidth = button:GetFontString():GetStringWidth() or 0
|
|
if bWidth > 290 then bWidth = 290 end
|
|
button:SetHitRectInsets(0, 454 - bWidth, 0, 0)
|
|
-- Disable label click movement
|
|
button:SetPushedTextOffset(0, 0)
|
|
-- Disable word wrap and set width
|
|
button:GetFontString():SetWidth(290)
|
|
button:GetFontString():SetWordWrap(false)
|
|
else
|
|
button:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Give function file level scope (it's used in SetPlusScale to set the highlight bar scale)
|
|
LeaPlusLC.UpdateList = UpdateList
|
|
|
|
-- Right-button click to go back
|
|
local function BackClick()
|
|
-- Return to the current zone list (back button)
|
|
if type(ListData[1]) == "string" then
|
|
-- Strip the color code from the list data
|
|
local nocol = string.gsub(ListData[1], "|cffffd800", "")
|
|
-- Strip the zone
|
|
local backzone = strsplit(":", nocol, 2)
|
|
-- Don't go back if random or search category is being shown
|
|
if backzone == L["Random"] or backzone == L["Search"] then return end
|
|
-- Show the tracklist continent
|
|
if ZoneList[backzone] then ListData = ZoneList[backzone] end
|
|
UpdateList()
|
|
scrollFrame:SetVerticalScroll(ZonePage or 0)
|
|
end
|
|
end
|
|
|
|
-- Function to make navigation menu buttons
|
|
local function MakeButton(where, y)
|
|
local mbtn = CreateFrame("Button", nil, LeaPlusLC["Page9"])
|
|
mbtn:Show()
|
|
mbtn:SetAlpha(1.0)
|
|
mbtn:SetPoint("TOPLEFT", 146, y)
|
|
|
|
-- Create hover texture
|
|
mbtn.t = mbtn:CreateTexture(nil, "BACKGROUND")
|
|
mbtn.t:SetColorTexture(0.3, 0.3, 0.00, 0.8)
|
|
mbtn.t:SetAlpha(0.7)
|
|
mbtn.t:SetAllPoints()
|
|
mbtn.t:Hide()
|
|
|
|
-- Create highlight texture
|
|
mbtn.s = mbtn:CreateTexture(nil, "BACKGROUND")
|
|
mbtn.s:SetColorTexture(0.3, 0.3, 0.00, 0.8)
|
|
mbtn.s:SetAlpha(1.0)
|
|
mbtn.s:SetAllPoints()
|
|
mbtn.s:Hide()
|
|
|
|
-- Create fontstring
|
|
mbtn.f = mbtn:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
mbtn.f:SetPoint('LEFT', 1, 0)
|
|
mbtn.f:SetText(L[where])
|
|
|
|
mbtn:SetScript("OnEnter", function()
|
|
mbtn.t:Show()
|
|
end)
|
|
|
|
mbtn:SetScript("OnLeave", function()
|
|
mbtn.t:Hide()
|
|
end)
|
|
|
|
-- Set button size when shown
|
|
mbtn:SetScript("OnShow", function()
|
|
mbtn:SetSize(mbtn.f:GetStringWidth() + 1, 16)
|
|
end)
|
|
|
|
mbtn:SetScript("OnClick", function()
|
|
-- Show zone listing for clicked item
|
|
ListData = ZoneList[where]
|
|
UpdateList()
|
|
end)
|
|
|
|
return mbtn, mbtn.s
|
|
|
|
end
|
|
|
|
-- Create a table for each button
|
|
local conbtn = {}
|
|
for q, w in pairs(ZoneList) do
|
|
conbtn[q] = {}
|
|
end
|
|
|
|
-- Create buttons
|
|
local function MakeButtonNow(title, anchor)
|
|
conbtn[title], conbtn[title].s = MakeButton(title, height)
|
|
conbtn[title]:ClearAllPoints()
|
|
if title == L["Zones"] then
|
|
-- Set first button position
|
|
conbtn[title]:SetPoint("TOPLEFT", LeaPlusLC["Page9"], "TOPLEFT", 145, -70)
|
|
elseif anchor then
|
|
-- Set subsequent button positions
|
|
conbtn[title]:SetPoint("TOPLEFT", conbtn[anchor], "BOTTOMLEFT", 0, 0)
|
|
conbtn[title].f:SetText(L[title])
|
|
end
|
|
end
|
|
|
|
MakeButtonNow(L["Zones"])
|
|
MakeButtonNow(L["Dungeons"], L["Zones"])
|
|
MakeButtonNow(L["Various"], L["Dungeons"])
|
|
MakeButtonNow(L["Movies"], L["Various"])
|
|
MakeButtonNow(L["Random"], L["Movies"])
|
|
MakeButtonNow(L["Search"]) -- Positioned when search editbox is created
|
|
|
|
-- Show button highlight for clicked button
|
|
for q, w in pairs(ZoneList) do
|
|
if type(w) == "string" and conbtn[w] then
|
|
conbtn[w]:HookScript("OnClick", function()
|
|
-- Hide all button highlights
|
|
for k, v in pairs(ZoneList) do
|
|
if type(v) == "string" and conbtn[v] then
|
|
conbtn[v].s:Hide()
|
|
end
|
|
end
|
|
-- Show clicked button highlight
|
|
conbtn[w].s:Show()
|
|
LeaPlusDB["MusicContinent"] = w
|
|
scrollFrame:SetVerticalScroll(0)
|
|
-- Set TempFolder for listings without folders
|
|
if w == L["Random"] then TempFolder = L["Random"] end
|
|
if w == L["Search"] then TempFolder = L["Search"] end
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Create scroll bar
|
|
scrollFrame = CreateFrame("ScrollFrame", "LeaPlusScrollFrame", LeaPlusLC["Page9"], "FauxScrollFrameTemplate")
|
|
scrollFrame:SetPoint("TOPLEFT", 0, -32)
|
|
scrollFrame:SetPoint("BOTTOMRIGHT", -30, 50)
|
|
scrollFrame:SetFrameLevel(10)
|
|
scrollFrame:SetScript("OnVerticalScroll", function(self, offset)
|
|
FauxScrollFrame_OnVerticalScroll(self, offset, 16, UpdateList)
|
|
end)
|
|
|
|
-- Add stop button
|
|
local stopBtn = LeaPlusLC:CreateButton("StopMusicBtn", LeaPlusLC["Page9"], "Stop", "TOPLEFT", 146, -292, 0, 25, true, "")
|
|
stopBtn:Hide(); stopBtn:Show()
|
|
LeaPlusLC:LockItem(stopBtn, true)
|
|
stopBtn:SetScript("OnClick", function()
|
|
if musicHandle then
|
|
StopSound(musicHandle)
|
|
musicHandle = nil
|
|
-- Hide highlight bars
|
|
LastPlayed = ""
|
|
LastFolder = ""
|
|
UpdateList()
|
|
end
|
|
-- Cancel sound file music timer
|
|
if LeaPlusLC.TrackTimer then LeaPlusLC.TrackTimer:Cancel() end
|
|
-- Lock button and unregister next track events
|
|
LeaPlusLC:LockItem(stopBtn, true)
|
|
uframe:UnregisterEvent("SOUNDKIT_FINISHED")
|
|
uframe:UnregisterEvent("LOADING_SCREEN_DISABLED")
|
|
end)
|
|
|
|
-- Store currently playing track number
|
|
local tracknumber = 1
|
|
|
|
-- Function to play a track and show the static highlight bar
|
|
local function PlayTrack()
|
|
-- Play tracks
|
|
if musicHandle then StopSound(musicHandle) end
|
|
local file, soundID, trackTime
|
|
if playlist[tracknumber]:match("([^,]+)%#([^,]+)%#([^,]+)") then
|
|
-- Music file with track time
|
|
file, soundID, trackTime = playlist[tracknumber]:match("([^,]+)%#([^,]+)%#([^,]+)")
|
|
willPlay, musicHandle = PlaySoundFile(soundID, "Master", false, true)
|
|
else
|
|
-- Sound kit without track time
|
|
file, soundID = playlist[tracknumber]:match("([^,]+)%#([^,]+)")
|
|
willPlay, musicHandle = PlaySound(soundID, "Master", false, true)
|
|
end
|
|
-- Cancel existing music timer for a sound file
|
|
if LeaPlusLC.TrackTimer then LeaPlusLC.TrackTimer:Cancel() end
|
|
if playlist[tracknumber]:match("([^,]+)%#([^,]+)%#([^,]+)") then
|
|
-- Track is a sound file with track time so create track timer
|
|
LeaPlusLC.TrackTimer = C_Timer.NewTimer(trackTime + 1, function()
|
|
if musicHandle then StopSound(musicHandle) end
|
|
if tracknumber == #playlist then
|
|
-- Playlist is at the end, restart from first track
|
|
tracknumber = 1
|
|
end
|
|
PlayTrack()
|
|
end)
|
|
end
|
|
-- Store its handle for later use
|
|
LastMusicHandle = musicHandle
|
|
LastPlayed = playlist[tracknumber]
|
|
tracknumber = tracknumber + 1
|
|
-- Show static highlight bar
|
|
for index = 1, numButtons do
|
|
local button = scrollFrame.buttons[index]
|
|
local item = button:GetText()
|
|
if item then
|
|
if item:match("([^,]+)%#([^,]+)%#([^,]+)") then
|
|
-- Music file with track time
|
|
local item, void, void = item:match("([^,]+)%#([^,]+)%#([^,]+)")
|
|
if item then
|
|
if item == file and LastFolder == TempFolder then
|
|
button.s:Show()
|
|
else
|
|
button.s:Hide()
|
|
end
|
|
end
|
|
else
|
|
-- Sound kit without track time
|
|
local item, void = item:match("([^,]+)%#([^,]+)")
|
|
if item then
|
|
if item == file and LastFolder == TempFolder then
|
|
button.s:Show()
|
|
else
|
|
button.s:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Create editbox for search
|
|
local sBox = LeaPlusLC:CreateEditBox("MusicSearchBox", LeaPlusLC["Page9"], 78, 10, "TOPLEFT", 150, -260, "MusicSearchBox", "MusicSearchBox")
|
|
sBox:SetMaxLetters(50)
|
|
|
|
-- Position search button above editbox
|
|
conbtn[L["Search"]]:ClearAllPoints()
|
|
conbtn[L["Search"]]:SetPoint("BOTTOMLEFT", sBox, "TOPLEFT", -4, 0)
|
|
|
|
-- Set initial search data
|
|
for q, w in pairs(ZoneList) do
|
|
if conbtn[w] then
|
|
conbtn[w]:HookScript("OnClick", function()
|
|
if w == L["Search"] then
|
|
ListData[1] = "|cffffd800" .. L["Search"]
|
|
if #ListData == 1 then
|
|
ListData[2] = "|cffffffaa{" .. L["enter zone or track name"] .. "}"
|
|
end
|
|
UpdateList()
|
|
else
|
|
sBox:ClearFocus()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Function to show search results
|
|
local function ShowSearchResults()
|
|
-- Get unescaped editbox text
|
|
local searchText = gsub(strlower(sBox:GetText()), '(['..("%^$().[]*+-?"):gsub("(.)", "%%%1")..'])', "%%%1")
|
|
-- Wipe the track listing
|
|
wipe(ListData)
|
|
-- Set the track list heading
|
|
ListData[1] = "|cffffd800" .. L["Search"]
|
|
-- Show the subheading only if no search results are being shown
|
|
if searchText == "" then
|
|
ListData[2] = "|cffffffaa{" .. L["enter zone or track name"] .. "}"
|
|
else
|
|
ListData[2] = ""
|
|
end
|
|
-- Traverse music listing and populate ListData
|
|
if searchText ~= "" then
|
|
local word1, word2, word3, word4, word5 = strsplit(" ", (strtrim(searchText):gsub("%s+", " ")))
|
|
RunScript('LeaPlusGlobalHash = {}')
|
|
local hash = LeaPlusGlobalHash
|
|
local trackCount = 0
|
|
for i, e in pairs(LeaPlusLC.ZoneList) do
|
|
if LeaPlusLC.ZoneList[e] then
|
|
for a, b in pairs(LeaPlusLC.ZoneList[e]) do
|
|
if b.tracks then
|
|
for k, v in pairs(b.tracks) do
|
|
if (strfind(v, "#") or strfind(v, "|r")) and (strfind(strlower(v), word1) or strfind(strlower(b.zone), word1) or strfind(strlower(b.category), word1)) then
|
|
if not word2 or word2 ~= "" and (strfind(strlower(v), word2) or strfind(strlower(b.zone), word2) or strfind(strlower(b.category), word2)) then
|
|
if not word3 or word3 ~= "" and (strfind(strlower(v), word3) or strfind(strlower(b.zone), word3) or strfind(strlower(b.category), word3)) then
|
|
if not word4 or word4 ~= "" and (strfind(strlower(v), word4) or strfind(strlower(b.zone), word4) or strfind(strlower(b.category), word4)) then
|
|
if not word5 or word5 ~= "" and (strfind(strlower(v), word5) or strfind(strlower(b.zone), word5) or strfind(strlower(b.category), word5)) then
|
|
-- Show category
|
|
if not hash[b.category] then
|
|
tinsert(ListData, "|cffffffff")
|
|
if b.category == e then
|
|
-- No category so just show ZoneList entry (such as Various)
|
|
tinsert(ListData, "|cffffd800" .. e)
|
|
else
|
|
-- Category exists so show that
|
|
tinsert(ListData, "|cffffd800" .. e .. ": " .. b.category)
|
|
end
|
|
hash[b.category] = true
|
|
end
|
|
-- Show track
|
|
tinsert(ListData, "|Cffffffaa" .. b.zone .. " |r" .. v)
|
|
trackCount = trackCount + 1
|
|
hash[v] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Set results tag
|
|
if trackCount == 1 then
|
|
ListData[2] = "|cffffffaa{" .. trackCount .. " " .. L["result"] .. "}"
|
|
else
|
|
ListData[2] = "|cffffffaa{" .. trackCount .. " " .. L["results"] .. "}"
|
|
end
|
|
end
|
|
-- Refresh the track listing
|
|
UpdateList()
|
|
-- Set track listing to top
|
|
scrollFrame:SetVerticalScroll(0)
|
|
end
|
|
|
|
-- Populate ListData when editbox is changed by user
|
|
sBox:HookScript("OnTextChanged", function(self, userInput)
|
|
if userInput then
|
|
-- Show search page
|
|
conbtn[L["Search"]]:Click()
|
|
-- If search results are currently playing, stop playback since search results will be changed
|
|
if LastFolder == L["Search"] then stopBtn:Click() end
|
|
-- Show search results
|
|
ShowSearchResults()
|
|
end
|
|
end)
|
|
|
|
-- Populate ListData when editbox enter key is pressed
|
|
sBox:HookScript("OnEnterPressed", function()
|
|
-- Show search page
|
|
conbtn[L["Search"]]:Click()
|
|
-- If search results are currently playing, stop playback since search results will be changed
|
|
if LastFolder == L["Search"] then stopBtn:Click() end
|
|
-- Show search results
|
|
ShowSearchResults()
|
|
end)
|
|
|
|
-- Function to get random argument for random track listing
|
|
local function GetRandomArgument(...)
|
|
return (select(random(select("#", ...)), ...))
|
|
end
|
|
|
|
-- Function to show random track listing
|
|
local function ShowRandomList()
|
|
-- If random track is currently playing, stop playback since random track list will be changed
|
|
if LastFolder == L["Random"] then
|
|
stopBtn:Click()
|
|
end
|
|
-- Wipe the track listing for random
|
|
wipe(ListData)
|
|
-- Set the track list heading
|
|
ListData[1] = "|cffffd800" .. L["Random"]
|
|
ListData[2] = "|Cffffffaa{" .. L["click here for new selection"] .. "}" -- Must be capital |C
|
|
ListData[3] = "|cffffd800"
|
|
ListData[4] = "|cffffd800" .. L["Selection of music tracks"] -- Must be lower case |c
|
|
-- Populate list data until it contains desired number of tracks
|
|
while #ListData < 50 do
|
|
-- Get random category
|
|
local rCategory = GetRandomArgument(L["Zones"], L["Dungeons"], L["Various"])
|
|
-- Get random zone within category
|
|
local rZone = random(1, #ZoneList[rCategory])
|
|
-- Get random track within zone
|
|
local rTrack = ZoneList[rCategory][rZone].tracks[random(1, #ZoneList[rCategory][rZone].tracks)]
|
|
-- Insert track into ListData if it's not a duplicate or on the banned list
|
|
if rTrack and rTrack ~= "" and strfind(rTrack, "#") and not tContains(ListData, "|Cffffffaa" .. ZoneList[rCategory][rZone].zone .. " |r" .. rTrack) then
|
|
if not tContains(randomBannedList, L[ZoneList[rCategory][rZone].zone]) and not tContains(randomBannedList, rTrack) then
|
|
tinsert(ListData, "|Cffffffaa" .. ZoneList[rCategory][rZone].zone .. " |r" .. rTrack)
|
|
end
|
|
end
|
|
end
|
|
-- Refresh the track listing
|
|
UpdateList()
|
|
-- Set track listing to top
|
|
scrollFrame:SetVerticalScroll(0)
|
|
end
|
|
|
|
-- Show random track listing on startup when random button is clicked
|
|
for q, w in pairs(ZoneList) do
|
|
if conbtn[w] then
|
|
conbtn[w]:HookScript("OnClick", function()
|
|
if w == L["Random"] then
|
|
-- Generate initial playlist for first run
|
|
if #ListData == 0 then
|
|
ShowRandomList()
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Create list items
|
|
scrollFrame.buttons = {}
|
|
for i = 1, numButtons do
|
|
scrollFrame.buttons[i] = CreateFrame("Button", nil, LeaPlusLC["Page9"])
|
|
local button = scrollFrame.buttons[i]
|
|
|
|
button:SetSize(470 - 14, 16)
|
|
button:SetNormalFontObject("GameFontHighlightLeft")
|
|
button:SetPoint("TOPLEFT", 246, -62+ -(i - 1) * 16 - 8)
|
|
|
|
-- Create highlight bar texture
|
|
button.t = button:CreateTexture(nil, "BACKGROUND")
|
|
button.t:SetPoint("TOPLEFT", button, 0, 0)
|
|
button.t:SetSize(516, 16)
|
|
|
|
button.t:SetColorTexture(0.3, 0.3, 0.0, 0.8)
|
|
button.t:SetAlpha(0.7)
|
|
button.t:Hide()
|
|
|
|
-- Create last playing highlight bar texture
|
|
button.s = button:CreateTexture(nil, "BACKGROUND")
|
|
button.s:SetPoint("TOPLEFT", button, 0, 0)
|
|
button.s:SetSize(516, 16)
|
|
|
|
button.s:SetColorTexture(0.3, 0.4, 0.00, 0.6)
|
|
button.s:Hide()
|
|
|
|
button:SetScript("OnEnter", function()
|
|
-- Highlight links only
|
|
if not string.match(button:GetText() or "", "|c") then
|
|
button.t:Show()
|
|
end
|
|
end)
|
|
|
|
button:SetScript("OnLeave", function()
|
|
button.t:Hide()
|
|
end)
|
|
|
|
button:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
|
|
|
-- Handler for playing next SoundKit track in playlist
|
|
uframe:SetScript("OnEvent", function(self, event, stoppedHandle)
|
|
if event == "SOUNDKIT_FINISHED" then
|
|
-- Do nothing if stopped sound kit handle doesnt match last played track handle
|
|
if LastMusicHandle and LastMusicHandle ~= stoppedHandle then return end
|
|
-- Reset track number if playlist has reached the end
|
|
if tracknumber == #playlist then tracknumber = 1 end
|
|
-- Play next track
|
|
PlayTrack()
|
|
elseif event == "LOADING_SCREEN_DISABLED" then
|
|
-- Restart player if it stopped between tracks during loading screen
|
|
if playlist and tracknumber and playlist[tracknumber] and not willPlay and not musicHandle then
|
|
tracknumber = tracknumber - 1
|
|
C_Timer.After(0.1, PlayTrack)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Click handler for track, zone and back button
|
|
button:SetScript("OnClick", function(self, btn)
|
|
if btn == "LeftButton" then
|
|
-- Remove focus from search box
|
|
sBox:ClearFocus()
|
|
-- Get clicked track text
|
|
local item = self:GetText()
|
|
-- Do nothing if its a blank line or informational heading
|
|
if not item or strfind(item, "|c") then return end
|
|
if item == "|Cffffffaa{" .. L["click here for new selection"] .. "}" then -- must be capital |C
|
|
-- Create new random track listing
|
|
ShowRandomList()
|
|
return
|
|
elseif strfind(item, "#") then
|
|
-- Enable sound if required
|
|
if GetCVar("Sound_EnableAllSound") == "0" then SetCVar("Sound_EnableAllSound", "1") end
|
|
-- Disable music if it's currently enabled
|
|
if GetCVar("Sound_EnableMusic") == "1" then SetCVar("Sound_EnableMusic", "0") end
|
|
-- Add all tracks to playlist
|
|
wipe(playlist)
|
|
local StartItem = 0
|
|
-- Get item clicked row number
|
|
for index = 1, #ListData do
|
|
local item = ListData[index]
|
|
if self:GetText() == item then StartItem = index end
|
|
end
|
|
-- Add all items from clicked item onwards to playlist
|
|
for index = StartItem, #ListData do
|
|
local item = ListData[index]
|
|
if item then
|
|
if strfind(item, "#") then
|
|
tinsert(playlist, item)
|
|
end
|
|
end
|
|
end
|
|
-- Add all items up to clicked item to playlist
|
|
for index = 1, StartItem do
|
|
local item = ListData[index]
|
|
if item then
|
|
if strfind(item, "#") then
|
|
tinsert(playlist, item)
|
|
end
|
|
end
|
|
end
|
|
-- Enable the stop button
|
|
LeaPlusLC:LockItem(stopBtn, false)
|
|
-- Set Temp Folder to Random if track is in Random
|
|
if ListData[1] == "|cffffd800" .. L["Random"] then TempFolder = L["Random"] end
|
|
-- Set Temp Folder to Search if track is in Search
|
|
if ListData[1] == "|cffffd800" .. L["Search"] then TempFolder = L["Search"] end
|
|
-- Store information about the track we are about to play
|
|
tracknumber = 1
|
|
LastPlayed = item
|
|
LastFolder = TempFolder
|
|
HeadingOfClickedTrack = ListData[1]
|
|
-- Play first track
|
|
PlayTrack()
|
|
-- Play subsequent tracks
|
|
uframe:RegisterEvent("SOUNDKIT_FINISHED")
|
|
uframe:RegisterEvent("LOADING_SCREEN_DISABLED")
|
|
return
|
|
elseif strfind(item, "|r") then
|
|
-- A movie was clicked
|
|
local movieName, movieID = item:match("([^,]+)%|r([^,]+)")
|
|
movieID = strtrim(movieID, "()")
|
|
if IsMoviePlayable(movieID) then
|
|
stopBtn:Click()
|
|
MovieFrame_PlayMovie(MovieFrame, movieID)
|
|
else
|
|
LeaPlusLC:Print("Movie not playable.")
|
|
end
|
|
return
|
|
else
|
|
-- A zone was clicked so show track listing
|
|
ZonePage = scrollFrame:GetVerticalScroll()
|
|
-- Find the track listing for the clicked zone
|
|
for q, w in pairs(ZoneList) do
|
|
for k, v in pairs(ZoneList[w]) do
|
|
if item == v.zone then
|
|
-- Show track listing
|
|
TempFolder = item
|
|
LeaPlusDB["MusicZone"] = item
|
|
ListData = v.tracks
|
|
UpdateList()
|
|
-- Hide hover highlight if track under pointer is a heading
|
|
if strfind(scrollFrame.buttons[i]:GetText(), "|c") then
|
|
scrollFrame.buttons[i].t:Hide()
|
|
end
|
|
-- Show top of track list
|
|
scrollFrame:SetVerticalScroll(0)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif btn == "RightButton" then
|
|
-- Back button was clicked
|
|
BackClick()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
-- Right-click to go back (from anywhere on the main content area of the panel)
|
|
LeaPlusLC["PageF"]:HookScript("OnMouseUp", function(self, btn)
|
|
if LeaPlusLC["Page9"]:IsShown() and LeaPlusLC["Page9"]:IsMouseOver(0, 0, 0, -440) == false and LeaPlusLC["Page9"]:IsMouseOver(-330, 0, 0, 0) == false then
|
|
if btn == "RightButton" then
|
|
BackClick()
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Delete the global scroll frame pointer
|
|
_G.LeaPlusScrollFrame = nil
|
|
|
|
-- Set zone listing on startup
|
|
if LeaPlusDB["MusicContinent"] and LeaPlusDB["MusicContinent"] ~= "" then
|
|
-- Saved music continent exists
|
|
if conbtn[LeaPlusDB["MusicContinent"]] then
|
|
-- Saved continent is valid button so click it
|
|
conbtn[LeaPlusDB["MusicContinent"]]:Click()
|
|
else
|
|
-- Saved continent is not valid button so click default button
|
|
conbtn[L["Zones"]]:Click()
|
|
end
|
|
else
|
|
-- Saved music continent does not exist so click default button
|
|
conbtn[L["Zones"]]:Click()
|
|
end
|
|
UpdateList()
|
|
|
|
-- Manage events
|
|
LeaPlusLC["Page9"]:RegisterEvent("PLAYER_LOGOUT")
|
|
LeaPlusLC["Page9"]:RegisterEvent("UI_SCALE_CHANGED")
|
|
LeaPlusLC["Page9"]:SetScript("OnEvent", function(self, event)
|
|
if event == "PLAYER_LOGOUT" then
|
|
-- Stop playing at reload or logout
|
|
if musicHandle then
|
|
StopSound(musicHandle)
|
|
end
|
|
elseif event == "UI_SCALE_CHANGED" then
|
|
-- Refresh list
|
|
UpdateList()
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
-- Run on startup
|
|
LeaPlusLC:MediaFunc()
|
|
|
|
-- Release memory
|
|
LeaPlusLC.MediaFunc = nil
|
|
|
|
----------------------------------------------------------------------
|
|
-- Panel alpha
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to set panel alpha
|
|
local function SetPlusAlpha()
|
|
-- Set panel alpha
|
|
LeaPlusLC["PageF"].t:SetAlpha(1 - LeaPlusLC["PlusPanelAlpha"])
|
|
-- Show formatted value
|
|
LeaPlusCB["PlusPanelAlpha"].f:SetFormattedText("%.0f%%", LeaPlusLC["PlusPanelAlpha"] * 100)
|
|
end
|
|
|
|
-- Set alpha on startup
|
|
SetPlusAlpha()
|
|
|
|
-- Set alpha after changing slider
|
|
LeaPlusCB["PlusPanelAlpha"]:HookScript("OnValueChanged", SetPlusAlpha)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Panel scale
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to set panel scale
|
|
local function SetPlusScale()
|
|
-- Reset panel position
|
|
LeaPlusLC["MainPanelA"], LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"] = "CENTER", "CENTER", 0, 0
|
|
if LeaPlusLC["PageF"]:IsShown() then
|
|
LeaPlusLC["PageF"]:Hide()
|
|
LeaPlusLC["PageF"]:Show()
|
|
end
|
|
-- Set panel scale
|
|
LeaPlusLC["PageF"]:SetScale(LeaPlusLC["PlusPanelScale"])
|
|
-- Update music player highlight bar scale
|
|
LeaPlusLC:UpdateList()
|
|
end
|
|
|
|
-- Set scale on startup
|
|
LeaPlusLC["PageF"]:SetScale(LeaPlusLC["PlusPanelScale"])
|
|
|
|
-- Set scale and reset panel position after changing slider
|
|
LeaPlusCB["PlusPanelScale"]:HookScript("OnMouseUp", SetPlusScale)
|
|
LeaPlusCB["PlusPanelScale"]:HookScript("OnMouseWheel", SetPlusScale)
|
|
|
|
-- Show formatted slider value
|
|
LeaPlusCB["PlusPanelScale"]:HookScript("OnValueChanged", function()
|
|
LeaPlusCB["PlusPanelScale"].f:SetFormattedText("%.0f%%", LeaPlusLC["PlusPanelScale"] * 100)
|
|
end)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Options panel
|
|
----------------------------------------------------------------------
|
|
|
|
-- Hide Leatrix Plus if game options panel is shown
|
|
InterfaceOptionsFrame:HookScript("OnShow", LeaPlusLC.HideFrames);
|
|
VideoOptionsFrame:HookScript("OnShow", LeaPlusLC.HideFrames);
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block friend requests
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to decline friend requests
|
|
local function DeclineReqs()
|
|
if LeaPlusLC["NoFriendRequests"] == "On" then
|
|
for i = BNGetNumFriendInvites(), 1, -1 do
|
|
local id, player = BNGetFriendInviteInfo(i)
|
|
if id and player then
|
|
BNDeclineFriendInvite(id)
|
|
C_Timer.After(0.1, function()
|
|
LeaPlusLC:Print(L["A friend request from"] .. " " .. player .. " " .. L["was automatically declined."])
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Event frame for incoming friend requests
|
|
local DecEvt = CreateFrame("FRAME")
|
|
DecEvt:SetScript("OnEvent", DeclineReqs)
|
|
|
|
-- Function to register or unregister the event
|
|
local function ControlEvent()
|
|
if LeaPlusLC["NoFriendRequests"] == "On" then
|
|
DecEvt:RegisterEvent("BN_FRIEND_INVITE_ADDED")
|
|
DeclineReqs()
|
|
else
|
|
DecEvt:UnregisterEvent("BN_FRIEND_INVITE_ADDED")
|
|
end
|
|
end
|
|
|
|
-- Set event status when option is enabled
|
|
LeaPlusCB["NoFriendRequests"]:HookScript("OnClick", ControlEvent)
|
|
|
|
-- Set event status on startup
|
|
ControlEvent()
|
|
|
|
----------------------------------------------------------------------
|
|
-- Invite from whisper (configuration panel)
|
|
----------------------------------------------------------------------
|
|
|
|
-- Create configuration panel
|
|
local InvPanel = LeaPlusLC:CreatePanel("Invite from whispers", "InvPanel")
|
|
|
|
-- Add editbox
|
|
LeaPlusLC:MakeTx(InvPanel, "Settings", 16, -72)
|
|
LeaPlusLC:MakeCB(InvPanel, "InviteFriendsOnly", "Restrict to friends and guild members", 16, -92, false, "If checked, group invites will only be sent to friends and guild members.|n|nIf unchecked, group invites will be sent to everyone.")
|
|
|
|
LeaPlusLC:MakeTx(InvPanel, "Keyword", 356, -72)
|
|
local KeyBox = LeaPlusLC:CreateEditBox("KeyBox", InvPanel, 140, 10, "TOPLEFT", 356, -92, "KeyBox", "KeyBox")
|
|
|
|
-- Function to show the keyword in the option tooltip
|
|
local function SetKeywordTip()
|
|
LeaPlusCB["InviteFromWhisper"].tiptext = gsub(LeaPlusCB["InviteFromWhisper"].tiptext, "(|cffffffff)[^|]*(|r)", "%1" .. LeaPlusLC["InvKey"] .. "%2")
|
|
end
|
|
|
|
-- Function to save the keyword
|
|
local function SetInvKey()
|
|
local keytext = KeyBox:GetText()
|
|
if keytext and keytext ~= "" then
|
|
LeaPlusLC["InvKey"] = strtrim(KeyBox:GetText())
|
|
else
|
|
LeaPlusLC["InvKey"] = "inv"
|
|
end
|
|
-- Show the keyword in the option tooltip
|
|
SetKeywordTip()
|
|
end
|
|
|
|
-- Show the keyword in the option tooltip on startup
|
|
SetKeywordTip()
|
|
|
|
-- Save the keyword when it changes
|
|
KeyBox:SetScript("OnTextChanged", SetInvKey)
|
|
|
|
-- Refresh editbox with trimmed keyword when edit focus is lost (removes additional spaces)
|
|
KeyBox:SetScript("OnEditFocusLost", function()
|
|
KeyBox:SetText(LeaPlusLC["InvKey"])
|
|
end)
|
|
|
|
-- Help button hidden
|
|
InvPanel.h:Hide()
|
|
|
|
-- Back button handler
|
|
InvPanel.b:SetScript("OnClick", function()
|
|
-- Save the keyword
|
|
SetInvKey()
|
|
-- Show the options panel
|
|
InvPanel:Hide(); LeaPlusLC["PageF"]:Show(); LeaPlusLC["Page2"]:Show()
|
|
return
|
|
end)
|
|
|
|
-- Add reset button
|
|
InvPanel.r:SetScript("OnClick", function()
|
|
-- Settings
|
|
LeaPlusLC["InviteFriendsOnly"] = "Off"
|
|
-- Reset the keyword to default
|
|
LeaPlusLC["InvKey"] = "inv"
|
|
-- Set the editbox to default
|
|
KeyBox:SetText("inv")
|
|
-- Save the keyword
|
|
SetInvKey()
|
|
-- Refresh panel
|
|
InvPanel:Hide(); InvPanel:Show()
|
|
end)
|
|
|
|
-- Ensure keyword is a string on startup
|
|
LeaPlusLC["InvKey"] = tostring(LeaPlusLC["InvKey"]) or "inv"
|
|
|
|
-- Set editbox value when shown
|
|
KeyBox:HookScript("OnShow", function()
|
|
KeyBox:SetText(LeaPlusLC["InvKey"])
|
|
end)
|
|
|
|
-- Configuration button handler
|
|
LeaPlusCB["InvWhisperBtn"]:SetScript("OnClick", function()
|
|
if IsShiftKeyDown() and IsControlKeyDown() then
|
|
-- Preset profile
|
|
LeaPlusLC["InviteFriendsOnly"] = "On"
|
|
LeaPlusLC["InvKey"] = "inv"
|
|
KeyBox:SetText(LeaPlusLC["InvKey"])
|
|
SetInvKey()
|
|
else
|
|
-- Show panel
|
|
InvPanel:Show()
|
|
LeaPlusLC:HideFrames()
|
|
end
|
|
end)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Create panel in game options panel
|
|
----------------------------------------------------------------------
|
|
|
|
do
|
|
|
|
local interPanel = CreateFrame("FRAME")
|
|
interPanel.name = "Leatrix Plus"
|
|
|
|
local maintitle = LeaPlusLC:MakeTx(interPanel, "Leatrix Plus", 0, 0)
|
|
maintitle:SetFont(maintitle:GetFont(), 72)
|
|
maintitle:ClearAllPoints()
|
|
maintitle:SetPoint("TOP", 0, -72)
|
|
|
|
local expTitle = LeaPlusLC:MakeTx(interPanel, "Shadowlands", 0, 0)
|
|
expTitle:SetFont(expTitle:GetFont(), 32)
|
|
expTitle:ClearAllPoints()
|
|
expTitle:SetPoint("TOP", 0, -152)
|
|
|
|
local subTitle = LeaPlusLC:MakeTx(interPanel, "curseforge.com/wow/addons/leatrix-plus", 0, 0)
|
|
subTitle:SetFont(subTitle:GetFont(), 20)
|
|
subTitle:ClearAllPoints()
|
|
subTitle:SetPoint("BOTTOM", 0, 72)
|
|
|
|
local slashTitle = LeaPlusLC:MakeTx(interPanel, "/ltp", 0, 0)
|
|
slashTitle:SetFont(slashTitle:GetFont(), 72)
|
|
slashTitle:ClearAllPoints()
|
|
slashTitle:SetPoint("BOTTOM", subTitle, "TOP", 0, 40)
|
|
|
|
local pTex = interPanel:CreateTexture(nil, "BACKGROUND")
|
|
pTex:SetAllPoints()
|
|
pTex:SetTexture("Interface\\GLUES\\Models\\UI_MainMenu\\swordgradient2")
|
|
pTex:SetAlpha(0.2)
|
|
pTex:SetTexCoord(0, 1, 1, 0)
|
|
|
|
InterfaceOptions_AddCategory(interPanel)
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Final code for RunOnce
|
|
----------------------------------------------------------------------
|
|
|
|
-- Update addon memory usage (speeds up initial value)
|
|
UpdateAddOnMemoryUsage();
|
|
|
|
-- Release memory
|
|
LeaPlusLC.RunOnce = nil
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L60: Default events
|
|
----------------------------------------------------------------------
|
|
|
|
local function eventHandler(self, event, arg1, arg2, ...)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Invite from whisper
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "CHAT_MSG_WHISPER" or event == "CHAT_MSG_BN_WHISPER" then
|
|
if (not UnitExists("party1") or UnitIsGroupLeader("player") or UnitIsGroupAssistant("player")) and strlower(strtrim(arg1)) == strlower(LeaPlusLC["InvKey"]) then
|
|
if not LeaPlusLC:IsInLFGQueue() then
|
|
if event == "CHAT_MSG_WHISPER" then
|
|
if LeaPlusLC:FriendCheck(arg2) or LeaPlusLC["InviteFriendsOnly"] == "Off" then
|
|
C_PartyInfo.InviteUnit(arg2)
|
|
end
|
|
elseif event == "CHAT_MSG_BN_WHISPER" then
|
|
local presenceID = select(11, ...)
|
|
if presenceID and BNIsFriend(presenceID) then
|
|
local index = BNGetFriendIndex(presenceID)
|
|
if index then
|
|
local accountInfo = C_BattleNet.GetFriendAccountInfo(index)
|
|
local gameAccountInfo = accountInfo.gameAccountInfo
|
|
local gameAccountID = gameAccountInfo.gameAccountID
|
|
if gameAccountID then
|
|
BNInviteFriend(gameAccountID)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block duel requests
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "DUEL_REQUESTED" and not LeaPlusLC:FriendCheck(arg1) then
|
|
CancelDuel()
|
|
StaticPopup_Hide("DUEL_REQUESTED")
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block pet battle duel requests
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "PET_BATTLE_PVP_DUEL_REQUESTED" and not LeaPlusLC:FriendCheck(arg1) then
|
|
C_PetBattles.CancelPVPDuel()
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automatically accept resurrection requests
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "RESURRECT_REQUEST" then
|
|
|
|
-- Exclude pylon and brazier requests
|
|
local pylonLoc
|
|
|
|
-- Exclude Failure Detection Pylon
|
|
pylonLoc = "Failure Detection Pylon"
|
|
if GameLocale == "zhCN" then pylonLoc = "故障检测晶塔"
|
|
elseif GameLocale == "zhTW" then pylonLoc = "滅團偵測水晶塔"
|
|
elseif GameLocale == "ruRU" then pylonLoc = "Пилон для обнаружения проблем"
|
|
elseif GameLocale == "koKR" then pylonLoc = "고장 감지 변환기"
|
|
elseif GameLocale == "esMX" then pylonLoc = "Pilón detector de errores"
|
|
elseif GameLocale == "ptBR" then pylonLoc = "Pilar Detector de Falhas"
|
|
elseif GameLocale == "deDE" then pylonLoc = "Fehlschlagdetektorpylon"
|
|
elseif GameLocale == "esES" then pylonLoc = "Pilón detector de errores"
|
|
elseif GameLocale == "frFR" then pylonLoc = "Pylône de détection des échecs"
|
|
elseif GameLocale == "itIT" then pylonLoc = "Pilone d'Individuazione Fallimenti"
|
|
end
|
|
if arg1 == pylonLoc then return end
|
|
|
|
-- Exclude Brazier of Awakening
|
|
pylonLoc = "Brazier of Awakening"
|
|
if GameLocale == "zhCN" then pylonLoc = "觉醒火盆"
|
|
elseif GameLocale == "zhTW" then pylonLoc = "覺醒火盆"
|
|
elseif GameLocale == "ruRU" then pylonLoc = "Жаровня пробуждения"
|
|
elseif GameLocale == "koKR" then pylonLoc = "각성의 화로"
|
|
elseif GameLocale == "esMX" then pylonLoc = "Blandón del Despertar"
|
|
elseif GameLocale == "ptBR" then pylonLoc = "Braseiro do Despertar"
|
|
elseif GameLocale == "deDE" then pylonLoc = "Kohlenbecken des Erwachens"
|
|
elseif GameLocale == "esES" then pylonLoc = "Blandón de Despertar"
|
|
elseif GameLocale == "frFR" then pylonLoc = "Brasero de l'Éveil"
|
|
elseif GameLocale == "itIT" then pylonLoc = "Braciere del Risveglio"
|
|
end
|
|
if arg1 == pylonLoc then return end
|
|
|
|
-- Manage other resurrection requests
|
|
if not UnitAffectingCombat(arg1) then
|
|
AcceptResurrect()
|
|
StaticPopup_Hide("RESURRECT_NO_TIMER")
|
|
end
|
|
return
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Accept summon
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "CONFIRM_SUMMON" then
|
|
if not UnitAffectingCombat("player") then
|
|
local sName = C_SummonInfo.GetSummonConfirmSummoner()
|
|
local sLocation = C_SummonInfo.GetSummonConfirmAreaName()
|
|
LeaPlusLC:Print(L["The summon from"] .. " " .. sName .. " (" .. sLocation .. ") " .. L["will be automatically accepted in 10 seconds unless cancelled."])
|
|
C_Timer.After(10, function()
|
|
local sNameNew = C_SummonInfo.GetSummonConfirmSummoner()
|
|
local sLocationNew = C_SummonInfo.GetSummonConfirmAreaName()
|
|
if sName == sNameNew and sLocation == sLocationNew then
|
|
-- Automatically accept summon after 10 seconds if summoner name and location have not changed
|
|
C_SummonInfo.ConfirmSummon()
|
|
StaticPopup_Hide("CONFIRM_SUMMON")
|
|
end
|
|
end)
|
|
end
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Block party invites and party from friends
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "PARTY_INVITE_REQUEST" then
|
|
|
|
-- If a friend, accept if you're accepting friends and not in Dungeon Finder
|
|
if (LeaPlusLC["AcceptPartyFriends"] == "On" and LeaPlusLC:FriendCheck(arg1)) then
|
|
if not LeaPlusLC:IsInLFGQueue() then
|
|
AcceptGroup()
|
|
for i=1, STATICPOPUP_NUMDIALOGS do
|
|
if _G["StaticPopup"..i].which == "PARTY_INVITE" then
|
|
_G["StaticPopup"..i].inviteAccepted = 1
|
|
StaticPopup_Hide("PARTY_INVITE")
|
|
break
|
|
elseif _G["StaticPopup"..i].which == "PARTY_INVITE_XREALM" then
|
|
_G["StaticPopup"..i].inviteAccepted = 1
|
|
StaticPopup_Hide("PARTY_INVITE_XREALM")
|
|
break
|
|
end
|
|
end
|
|
-- Confirm invite to party sync group request
|
|
if QuestSessionManager.ConfirmInviteToGroupReceivedDialog.ButtonContainer.Confirm:IsShown() then
|
|
QuestSessionManager.ConfirmInviteToGroupReceivedDialog.ButtonContainer.Confirm:Click()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
|
|
-- If not a friend and you're blocking invites, decline
|
|
if LeaPlusLC["NoPartyInvites"] == "On" then
|
|
if LeaPlusLC:FriendCheck(arg1) then
|
|
return
|
|
else
|
|
DeclineGroup()
|
|
StaticPopup_Hide("PARTY_INVITE")
|
|
StaticPopup_Hide("PARTY_INVITE_XREALM")
|
|
-- Decline invite to party sync group request
|
|
if QuestSessionManager.ConfirmInviteToGroupReceivedDialog.ButtonContainer.Decline:IsShown() then
|
|
QuestSessionManager.ConfirmInviteToGroupReceivedDialog.ButtonContainer.Decline:Click()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Disable loot warnings
|
|
----------------------------------------------------------------------
|
|
|
|
-- Disable warnings for attempting to roll Need or Disenchant on loot
|
|
if event == "CONFIRM_LOOT_ROLL" or event == "CONFIRM_DISENCHANT_ROLL" then
|
|
ConfirmLootRoll(arg1, arg2)
|
|
StaticPopup_Hide("CONFIRM_LOOT_ROLL")
|
|
return
|
|
end
|
|
|
|
-- Disable warning for attempting to loot a Bind on Pickup item
|
|
if event == "LOOT_BIND_CONFIRM" then
|
|
ConfirmLootSlot(arg1, arg2)
|
|
StaticPopup_Hide("LOOT_BIND",...)
|
|
return
|
|
end
|
|
|
|
-- Disable warning for attempting to vendor an item within its refund window
|
|
if event == "MERCHANT_CONFIRM_TRADE_TIMER_REMOVAL" then
|
|
SellCursorItem()
|
|
return
|
|
end
|
|
|
|
-- Disable warning for attempting to mail an item within its refund window
|
|
if event == "MAIL_LOCK_SEND_ITEMS" then
|
|
RespondMailLockSendItem(arg1, true)
|
|
return
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Automatically release in battlegrounds
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "PLAYER_DEAD" then
|
|
|
|
-- If player has ability to self-resurrect (soulstone, reincarnation, etc), do nothing and quit
|
|
if C_DeathInfo.GetSelfResurrectOptions() and #C_DeathInfo.GetSelfResurrectOptions() > 0 then return end
|
|
|
|
-- Resurrect if player is in a battleground
|
|
local InstStat, InstType = IsInInstance()
|
|
if InstStat and InstType == "pvp" then
|
|
RepopMe()
|
|
return
|
|
end
|
|
|
|
-- Resurrect if playuer is in a PvP location
|
|
local areaID = C_Map.GetBestMapForUnit("player") or 0
|
|
if areaID == 123 -- Wintergrasp
|
|
or areaID == 244 -- Tol Barad (PvP)
|
|
or areaID == 588 -- Ashran
|
|
or areaID == 622 -- Stormshield
|
|
or areaID == 624 -- Warspear
|
|
then
|
|
RepopMe()
|
|
return
|
|
end
|
|
|
|
return
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Hide the combat log
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "UPDATE_CHAT_WINDOWS" then
|
|
ChatFrame2Tab:EnableMouse(false)
|
|
ChatFrame2Tab:SetText(" ") -- Needs to be something for chat settings to function
|
|
ChatFrame2Tab:SetScale(0.01)
|
|
ChatFrame2Tab:SetWidth(0.01)
|
|
ChatFrame2Tab:SetHeight(0.01)
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L62: Profile events
|
|
----------------------------------------------------------------------
|
|
|
|
if event == "ADDON_LOADED" then
|
|
if arg1 == "Leatrix_Plus" then
|
|
|
|
-- Replace old var names with new ones
|
|
local function UpdateVars(oldvar, newvar)
|
|
if LeaPlusDB[oldvar] and not LeaPlusDB[newvar] then LeaPlusDB[newvar] = LeaPlusDB[oldvar]; LeaPlusDB[oldvar] = nil end
|
|
end
|
|
|
|
UpdateVars("MuteHorned", "MuteUnicorns") -- 9.0.22 (27th March 2021)
|
|
UpdateVars("MuteCreeper", "MuteSoulseekers") -- 9.0.22 (27th March 2021)
|
|
UpdateVars("MuteATV", "MuteHovercraft") -- 9.0.22 (27th March 2021)
|
|
UpdateVars("MuteR21X", "MuteAerials") -- 9.0.22 (27th March 2021)
|
|
UpdateVars("MuteGolem", "MuteMechsuits") -- 9.0.22 (27th March 2021)
|
|
|
|
-- Automation
|
|
LeaPlusLC:LoadVarChk("AutomateQuests", "Off") -- Automate quests
|
|
LeaPlusLC:LoadVarChk("AutoQuestShift", "Off") -- Automate quests requires shift
|
|
LeaPlusLC:LoadVarChk("AutoQuestAvailable", "On") -- Accept available quests
|
|
LeaPlusLC:LoadVarChk("AutoQuestCompleted", "On") -- Turn-in completed quests
|
|
LeaPlusLC:LoadVarChk("AutoQuestNoDaily", "Off") -- Don't accept daily quests
|
|
LeaPlusLC:LoadVarChk("AutoQuestNoWeekly", "Off") -- Don't accept weekly quests
|
|
LeaPlusLC:LoadVarChk("AutomateGossip", "Off") -- Automate gossip
|
|
LeaPlusLC:LoadVarChk("AutoAcceptSummon", "Off") -- Accept summon
|
|
LeaPlusLC:LoadVarChk("AutoAcceptRes", "Off") -- Accept resurrection
|
|
LeaPlusLC:LoadVarChk("AutoReleasePvP", "Off") -- Release in PvP
|
|
|
|
LeaPlusLC:LoadVarChk("AutoSellJunk", "Off") -- Sell junk automatically
|
|
LeaPlusLC:LoadVarChk("AutoRepairGear", "Off") -- Repair automatically
|
|
LeaPlusLC:LoadVarChk("AutoRepairGuildFunds", "On") -- Repair using guild funds
|
|
|
|
-- Social
|
|
LeaPlusLC:LoadVarChk("NoDuelRequests", "Off") -- Block duels
|
|
LeaPlusLC:LoadVarChk("NoPetDuels", "Off") -- Block pet battle duels
|
|
LeaPlusLC:LoadVarChk("NoPartyInvites", "Off") -- Block party invites
|
|
LeaPlusLC:LoadVarChk("NoFriendRequests", "Off") -- Block friend requests
|
|
|
|
LeaPlusLC:LoadVarChk("AcceptPartyFriends", "Off") -- Party from friends
|
|
LeaPlusLC:LoadVarChk("SyncFromFriends", "Off") -- Sync from friends
|
|
LeaPlusLC:LoadVarChk("AutoConfirmRole", "Off") -- Queue from friends
|
|
LeaPlusLC:LoadVarChk("InviteFromWhisper", "Off") -- Invite from whispers
|
|
LeaPlusLC:LoadVarChk("InviteFriendsOnly", "Off") -- Restrict invites to friends
|
|
LeaPlusLC["InvKey"] = LeaPlusDB["InvKey"] or "inv" -- Invite from whisper keyword
|
|
|
|
-- Chat
|
|
LeaPlusLC:LoadVarChk("UseEasyChatResizing", "Off") -- Use easy resizing
|
|
LeaPlusLC:LoadVarChk("NoCombatLogTab", "Off") -- Hide the combat log
|
|
LeaPlusLC:LoadVarChk("NoChatButtons", "Off") -- Hide chat buttons
|
|
LeaPlusLC:LoadVarChk("ShowVoiceButtons", "Off") -- Show voice buttons
|
|
LeaPlusLC:LoadVarChk("ShowChatMenuButton", "Off") -- Show chat menu button
|
|
LeaPlusLC:LoadVarChk("NoSocialButton", "Off") -- Hide social button
|
|
LeaPlusLC:LoadVarChk("UnclampChat", "Off") -- Unclamp chat frame
|
|
LeaPlusLC:LoadVarChk("MoveChatEditBoxToTop", "Off") -- Move editbox to top
|
|
|
|
LeaPlusLC:LoadVarChk("NoStickyChat", "Off") -- Disable sticky chat
|
|
LeaPlusLC:LoadVarChk("NoStickyEditbox", "Off") -- Disable sticky editbox
|
|
LeaPlusLC:LoadVarChk("UseArrowKeysInChat", "Off") -- Use arrow keys in chat
|
|
LeaPlusLC:LoadVarChk("NoChatFade", "Off") -- Disable chat fade
|
|
LeaPlusLC:LoadVarChk("UnivGroupColor", "Off") -- Universal group color
|
|
LeaPlusLC:LoadVarChk("RecentChatWindow", "Off") -- Recent chat window
|
|
LeaPlusLC:LoadVarNum("RecentChatSize", 170, 170, 600) -- Recent chat size
|
|
LeaPlusLC:LoadVarChk("MaxChatHstory", "Off") -- Increase chat history
|
|
|
|
-- Text
|
|
LeaPlusLC:LoadVarChk("HideErrorMessages", "Off") -- Hide error messages
|
|
LeaPlusLC:LoadVarChk("NoHitIndicators", "Off") -- Hide portrait text
|
|
LeaPlusLC:LoadVarChk("HideZoneText", "Off") -- Hide zone text
|
|
|
|
LeaPlusLC:LoadVarChk("MailFontChange", "Off") -- Resize mail text
|
|
LeaPlusLC:LoadVarNum("LeaPlusMailFontSize", 15, 10, 36) -- Mail text slider
|
|
|
|
LeaPlusLC:LoadVarChk("QuestFontChange", "Off") -- Resize quest text
|
|
LeaPlusLC:LoadVarNum("LeaPlusQuestFontSize", 12, 10, 36) -- Quest text slider
|
|
|
|
-- Interface
|
|
LeaPlusLC:LoadVarChk("MinimapMod", "Off") -- Enhance minimap
|
|
LeaPlusLC:LoadVarChk("HideZoneTextBar", "Off") -- Hide zone text bar
|
|
LeaPlusLC:LoadVarChk("HideMiniZoomBtns", "Off") -- Hide zoom buttons
|
|
LeaPlusLC:LoadVarChk("HideMiniClock", "Off") -- Hide the clock
|
|
LeaPlusLC:LoadVarNum("MinimapScale", 1, 1, 2) -- Minimap scale slider
|
|
|
|
LeaPlusLC:LoadVarChk("TipModEnable", "Off") -- Enhance tooltip
|
|
LeaPlusLC:LoadVarChk("TipShowRank", "On") -- Show rank for your guild
|
|
LeaPlusLC:LoadVarChk("TipShowOtherRank", "Off") -- Show rank for other guilds
|
|
LeaPlusLC:LoadVarChk("TipShowTarget", "On") -- Show target
|
|
LeaPlusLC:LoadVarChk("TipBackSimple", "Off") -- Color backdrops
|
|
LeaPlusLC:LoadVarChk("TipHideInCombat", "Off") -- Hide tooltips during combat
|
|
LeaPlusLC:LoadVarNum("LeaPlusTipSize", 1.00, 0.50, 2.00) -- Tooltip scale slider
|
|
LeaPlusLC:LoadVarNum("TipOffsetX", -13, -5000, 5000) -- Tooltip X offset
|
|
LeaPlusLC:LoadVarNum("TipOffsetY", 94, -5000, 5000) -- Tooltip Y offset
|
|
LeaPlusLC:LoadVarNum("TooltipAnchorMenu", 1, 1, 5) -- Tooltip anchor menu
|
|
LeaPlusLC:LoadVarNum("TipCursorX", 0, -128, 128) -- Tooltip cursor X offset
|
|
LeaPlusLC:LoadVarNum("TipCursorY", 0, -128, 128) -- Tooltip cursor Y offset
|
|
|
|
LeaPlusLC:LoadVarChk("EnhanceDressup", "Off") -- Enhance dressup
|
|
LeaPlusLC:LoadVarChk("ShowVolume", "Off") -- Show volume slider
|
|
LeaPlusLC:LoadVarChk("ShowVolumeInFrame", "Off") -- Volume slider dual layout
|
|
|
|
LeaPlusLC:LoadVarChk("ShowCooldowns", "Off") -- Show cooldowns
|
|
LeaPlusLC:LoadVarChk("ShowCooldownID", "On") -- Show cooldown ID in tips
|
|
LeaPlusLC:LoadVarChk("NoCooldownDuration", "On") -- Hide cooldown duration
|
|
LeaPlusLC:LoadVarChk("CooldownsOnPlayer", "Off") -- Anchor to player
|
|
LeaPlusLC:LoadVarChk("DurabilityStatus", "Off") -- Show durability status
|
|
LeaPlusLC:LoadVarChk("ShowPetSaveBtn", "Off") -- Show pet save button
|
|
LeaPlusLC:LoadVarChk("ShowRaidToggle", "Off") -- Show raid button
|
|
LeaPlusLC:LoadVarChk("ShowBorders", "Off") -- Show borders
|
|
LeaPlusLC:LoadVarNum("BordersTop", 0, 0, 300) -- Top border
|
|
LeaPlusLC:LoadVarNum("BordersBottom", 0, 0, 300) -- Bottom border
|
|
LeaPlusLC:LoadVarNum("BordersLeft", 0, 0, 300) -- Left border
|
|
LeaPlusLC:LoadVarNum("BordersRight", 0, 0, 300) -- Right border
|
|
LeaPlusLC:LoadVarNum("BordersAlpha", 0, 0, 0.9) -- Border alpha
|
|
LeaPlusLC:LoadVarChk("ShowPlayerChain", "Off") -- Show player chain
|
|
LeaPlusLC:LoadVarNum("PlayerChainMenu", 2, 1, 3) -- Player chain dropdown value
|
|
LeaPlusLC:LoadVarChk("ShowWowheadLinks", "Off") -- Show Wowhead links
|
|
|
|
-- Frames
|
|
LeaPlusLC:LoadVarChk("FrmEnabled", "Off") -- Manage frames
|
|
|
|
LeaPlusLC:LoadVarChk("ManageBuffs", "Off") -- Manage buffs
|
|
LeaPlusLC:LoadVarAnc("BuffFrameA", "TOPRIGHT") -- Manage buffs anchor
|
|
LeaPlusLC:LoadVarAnc("BuffFrameR", "TOPRIGHT") -- Manage buffs relative
|
|
LeaPlusLC:LoadVarNum("BuffFrameX", -205, -5000, 5000) -- Manage buffs position X
|
|
LeaPlusLC:LoadVarNum("BuffFrameY", -13, -5000, 5000) -- Manage buffs position Y
|
|
LeaPlusLC:LoadVarNum("BuffFrameScale", 1, 0.5, 2) -- Manage buffs scale
|
|
|
|
LeaPlusLC:LoadVarChk("ManagePowerBar", "Off") -- Manage power bar
|
|
LeaPlusLC:LoadVarAnc("PowerBarA", "BOTTOM") -- Manage power bar anchor
|
|
LeaPlusLC:LoadVarAnc("PowerBarR", "BOTTOM") -- Manage power bar relative
|
|
LeaPlusLC:LoadVarNum("PowerBarX", 0, -5000, 5000) -- Manage power bar position X
|
|
LeaPlusLC:LoadVarNum("PowerBarY", 115, -5000, 5000) -- Manage power bar position Y
|
|
LeaPlusLC:LoadVarNum("PowerBarScale", 1, 0.5, 2) -- Manage power bar scale
|
|
|
|
LeaPlusLC:LoadVarChk("ManageWidget", "Off") -- Manage widget
|
|
LeaPlusLC:LoadVarAnc("WidgetA", "TOP") -- Manage widget anchor
|
|
LeaPlusLC:LoadVarAnc("WidgetR", "TOP") -- Manage widget relative
|
|
LeaPlusLC:LoadVarNum("WidgetX", 0, -5000, 5000) -- Manage widget position X
|
|
LeaPlusLC:LoadVarNum("WidgetY", -15, -5000, 5000) -- Manage widget position Y
|
|
LeaPlusLC:LoadVarNum("WidgetScale", 1, 0.5, 2) -- Manage widget scale
|
|
|
|
LeaPlusLC:LoadVarChk("ManageFocus", "Off") -- Manage focus
|
|
LeaPlusLC:LoadVarAnc("FocusA", "CENTER") -- Manage focus anchor
|
|
LeaPlusLC:LoadVarAnc("FocusR", "CENTER") -- Manage focus relative
|
|
LeaPlusLC:LoadVarNum("FocusX", 0, -5000, 5000) -- Manage focus position X
|
|
LeaPlusLC:LoadVarNum("FocusY", 0, -5000, 5000) -- Manage focus position Y
|
|
LeaPlusLC:LoadVarNum("FocusScale", 1, 0.5, 2) -- Manage focus scale
|
|
|
|
LeaPlusLC:LoadVarChk("ClassColFrames", "Off") -- Class colored frames
|
|
LeaPlusLC:LoadVarChk("ClassColPlayer", "On") -- Class colored player frame
|
|
LeaPlusLC:LoadVarChk("ClassColTarget", "On") -- Class colored target frame
|
|
|
|
LeaPlusLC:LoadVarChk("NoAlerts", "Off") -- Hide alerts
|
|
LeaPlusLC:LoadVarChk("HideBodyguard", "Off") -- Hide bodyguard window
|
|
LeaPlusLC:LoadVarChk("HideTalkingFrame", "Off") -- Hide talking frame
|
|
LeaPlusLC:LoadVarChk("HideCleanupBtns", "Off") -- Hide clean-up buttons
|
|
LeaPlusLC:LoadVarChk("HideBossBanner", "Off") -- Hide boss banner
|
|
LeaPlusLC:LoadVarChk("HideLevelUpDisplay", "Off") -- Hide level-up display
|
|
LeaPlusLC:LoadVarChk("NoGryphons", "Off") -- Hide gryphons
|
|
LeaPlusLC:LoadVarChk("NoClassBar", "Off") -- Hide stance bar
|
|
LeaPlusLC:LoadVarChk("NoCommandBar", "Off") -- Hide order hall bar
|
|
|
|
-- System
|
|
LeaPlusLC:LoadVarChk("NoScreenGlow", "Off") -- Disable screen glow
|
|
LeaPlusLC:LoadVarChk("NoScreenEffects", "Off") -- Disable screen effects
|
|
LeaPlusLC:LoadVarChk("SetWeatherDensity", "Off") -- Set weather density
|
|
LeaPlusLC:LoadVarNum("WeatherLevel", 3, 0, 3) -- Weather density level
|
|
LeaPlusLC:LoadVarChk("MaxCameraZoom", "Off") -- Max camera zoom
|
|
|
|
LeaPlusLC:LoadVarChk("NoRestedEmotes", "Off") -- Silence rested emotes
|
|
LeaPlusLC:LoadVarChk("MuteGameSounds", "Off") -- Mute game sounds
|
|
|
|
LeaPlusLC:LoadVarChk("NoBagAutomation", "Off") -- Disable bag automation
|
|
LeaPlusLC:LoadVarChk("NoPetAutomation", "Off") -- Disable pet automation
|
|
LeaPlusLC:LoadVarChk("CharAddonList", "Off") -- Show character addons
|
|
LeaPlusLC:LoadVarChk("NoRaidRestrictions", "Off") -- Remove raid restrictions
|
|
LeaPlusLC:LoadVarChk("NoConfirmLoot", "Off") -- Disable loot warnings
|
|
LeaPlusLC:LoadVarChk("SaveProfFilters", "Off") -- Save profession filters
|
|
LeaPlusLC:LoadVarChk("FasterLooting", "Off") -- Faster auto loot
|
|
LeaPlusLC:LoadVarChk("FasterMovieSkip", "Off") -- Faster movie skip
|
|
LeaPlusLC:LoadVarChk("CombatPlates", "Off") -- Combat plates
|
|
LeaPlusLC:LoadVarChk("EasyItemDestroy", "Off") -- Easy item destroy
|
|
LeaPlusLC:LoadVarChk("LockoutSharing", "Off") -- Lockout sharing
|
|
|
|
-- Settings
|
|
LeaPlusLC:LoadVarChk("ShowMinimapIcon", "On") -- Show minimap button
|
|
LeaPlusLC:LoadVarChk("EnableHotkey", "Off") -- Enable hotkey
|
|
|
|
LeaPlusLC:LoadVarNum("PlusPanelScale", 1, 1, 2) -- Panel scale
|
|
LeaPlusLC:LoadVarNum("PlusPanelAlpha", 0, 0, 1) -- Panel alpha
|
|
|
|
-- Panel position
|
|
LeaPlusLC:LoadVarAnc("MainPanelA", "CENTER") -- Panel anchor
|
|
LeaPlusLC:LoadVarAnc("MainPanelR", "CENTER") -- Panel relative
|
|
LeaPlusLC:LoadVarNum("MainPanelX", 0, -5000, 5000) -- Panel X axis
|
|
LeaPlusLC:LoadVarNum("MainPanelY", 0, -5000, 5000) -- Panel Y axis
|
|
|
|
-- Start page
|
|
LeaPlusLC:LoadVarNum("LeaStartPage", 0, 0, LeaPlusLC["NumberOfPages"])
|
|
|
|
-- Run other startup items
|
|
LeaPlusLC:Live()
|
|
LeaPlusLC:Isolated()
|
|
LeaPlusLC:RunOnce()
|
|
LeaPlusLC:SetDim()
|
|
|
|
end
|
|
return
|
|
end
|
|
|
|
if event == "PLAYER_LOGIN" then
|
|
LeaPlusLC:Player()
|
|
collectgarbage()
|
|
return
|
|
end
|
|
|
|
-- Save locals back to globals on logout
|
|
if event == "PLAYER_LOGOUT" then
|
|
|
|
-- Run the logout function without wipe flag
|
|
LeaPlusLC:PlayerLogout(false)
|
|
|
|
-- Automation
|
|
LeaPlusDB["AutomateQuests"] = LeaPlusLC["AutomateQuests"]
|
|
LeaPlusDB["AutoQuestShift"] = LeaPlusLC["AutoQuestShift"]
|
|
LeaPlusDB["AutoQuestAvailable"] = LeaPlusLC["AutoQuestAvailable"]
|
|
LeaPlusDB["AutoQuestCompleted"] = LeaPlusLC["AutoQuestCompleted"]
|
|
LeaPlusDB["AutoQuestNoDaily"] = LeaPlusLC["AutoQuestNoDaily"]
|
|
LeaPlusDB["AutoQuestNoWeekly"] = LeaPlusLC["AutoQuestNoWeekly"]
|
|
LeaPlusDB["AutomateGossip"] = LeaPlusLC["AutomateGossip"]
|
|
LeaPlusDB["AutoAcceptSummon"] = LeaPlusLC["AutoAcceptSummon"]
|
|
LeaPlusDB["AutoAcceptRes"] = LeaPlusLC["AutoAcceptRes"]
|
|
LeaPlusDB["AutoReleasePvP"] = LeaPlusLC["AutoReleasePvP"]
|
|
|
|
LeaPlusDB["AutoSellJunk"] = LeaPlusLC["AutoSellJunk"]
|
|
LeaPlusDB["AutoRepairGear"] = LeaPlusLC["AutoRepairGear"]
|
|
LeaPlusDB["AutoRepairGuildFunds"] = LeaPlusLC["AutoRepairGuildFunds"]
|
|
|
|
-- Social
|
|
LeaPlusDB["NoDuelRequests"] = LeaPlusLC["NoDuelRequests"]
|
|
LeaPlusDB["NoPetDuels"] = LeaPlusLC["NoPetDuels"]
|
|
LeaPlusDB["NoPartyInvites"] = LeaPlusLC["NoPartyInvites"]
|
|
LeaPlusDB["NoFriendRequests"] = LeaPlusLC["NoFriendRequests"]
|
|
|
|
LeaPlusDB["AcceptPartyFriends"] = LeaPlusLC["AcceptPartyFriends"]
|
|
LeaPlusDB["SyncFromFriends"] = LeaPlusLC["SyncFromFriends"]
|
|
LeaPlusDB["AutoConfirmRole"] = LeaPlusLC["AutoConfirmRole"]
|
|
LeaPlusDB["InviteFromWhisper"] = LeaPlusLC["InviteFromWhisper"]
|
|
LeaPlusDB["InviteFriendsOnly"] = LeaPlusLC["InviteFriendsOnly"]
|
|
LeaPlusDB["InvKey"] = LeaPlusLC["InvKey"]
|
|
|
|
-- Chat
|
|
LeaPlusDB["UseEasyChatResizing"] = LeaPlusLC["UseEasyChatResizing"]
|
|
LeaPlusDB["NoCombatLogTab"] = LeaPlusLC["NoCombatLogTab"]
|
|
LeaPlusDB["NoChatButtons"] = LeaPlusLC["NoChatButtons"]
|
|
LeaPlusDB["ShowVoiceButtons"] = LeaPlusLC["ShowVoiceButtons"]
|
|
LeaPlusDB["ShowChatMenuButton"] = LeaPlusLC["ShowChatMenuButton"]
|
|
LeaPlusDB["NoSocialButton"] = LeaPlusLC["NoSocialButton"]
|
|
LeaPlusDB["UnclampChat"] = LeaPlusLC["UnclampChat"]
|
|
LeaPlusDB["MoveChatEditBoxToTop"] = LeaPlusLC["MoveChatEditBoxToTop"]
|
|
|
|
LeaPlusDB["NoStickyChat"] = LeaPlusLC["NoStickyChat"]
|
|
LeaPlusDB["NoStickyEditbox"] = LeaPlusLC["NoStickyEditbox"]
|
|
LeaPlusDB["UseArrowKeysInChat"] = LeaPlusLC["UseArrowKeysInChat"]
|
|
LeaPlusDB["NoChatFade"] = LeaPlusLC["NoChatFade"]
|
|
LeaPlusDB["UnivGroupColor"] = LeaPlusLC["UnivGroupColor"]
|
|
LeaPlusDB["RecentChatWindow"] = LeaPlusLC["RecentChatWindow"]
|
|
LeaPlusDB["RecentChatSize"] = LeaPlusLC["RecentChatSize"]
|
|
LeaPlusDB["MaxChatHstory"] = LeaPlusLC["MaxChatHstory"]
|
|
|
|
-- Text
|
|
LeaPlusDB["HideErrorMessages"] = LeaPlusLC["HideErrorMessages"]
|
|
LeaPlusDB["NoHitIndicators"] = LeaPlusLC["NoHitIndicators"]
|
|
LeaPlusDB["HideZoneText"] = LeaPlusLC["HideZoneText"]
|
|
|
|
LeaPlusDB["MailFontChange"] = LeaPlusLC["MailFontChange"]
|
|
LeaPlusDB["LeaPlusMailFontSize"] = LeaPlusLC["LeaPlusMailFontSize"]
|
|
|
|
LeaPlusDB["QuestFontChange"] = LeaPlusLC["QuestFontChange"]
|
|
LeaPlusDB["LeaPlusQuestFontSize"] = LeaPlusLC["LeaPlusQuestFontSize"]
|
|
|
|
-- Interface
|
|
LeaPlusDB["MinimapMod"] = LeaPlusLC["MinimapMod"]
|
|
LeaPlusDB["HideZoneTextBar"] = LeaPlusLC["HideZoneTextBar"]
|
|
LeaPlusDB["HideMiniZoomBtns"] = LeaPlusLC["HideMiniZoomBtns"]
|
|
LeaPlusDB["HideMiniClock"] = LeaPlusLC["HideMiniClock"]
|
|
LeaPlusDB["MinimapScale"] = LeaPlusLC["MinimapScale"]
|
|
|
|
LeaPlusDB["TipModEnable"] = LeaPlusLC["TipModEnable"]
|
|
LeaPlusDB["TipShowRank"] = LeaPlusLC["TipShowRank"]
|
|
LeaPlusDB["TipShowOtherRank"] = LeaPlusLC["TipShowOtherRank"]
|
|
LeaPlusDB["TipShowTarget"] = LeaPlusLC["TipShowTarget"]
|
|
LeaPlusDB["TipBackSimple"] = LeaPlusLC["TipBackSimple"]
|
|
LeaPlusDB["TipHideInCombat"] = LeaPlusLC["TipHideInCombat"]
|
|
LeaPlusDB["LeaPlusTipSize"] = LeaPlusLC["LeaPlusTipSize"]
|
|
LeaPlusDB["TipOffsetX"] = LeaPlusLC["TipOffsetX"]
|
|
LeaPlusDB["TipOffsetY"] = LeaPlusLC["TipOffsetY"]
|
|
LeaPlusDB["TooltipAnchorMenu"] = LeaPlusLC["TooltipAnchorMenu"]
|
|
LeaPlusDB["TipCursorX"] = LeaPlusLC["TipCursorX"]
|
|
LeaPlusDB["TipCursorY"] = LeaPlusLC["TipCursorY"]
|
|
|
|
LeaPlusDB["EnhanceDressup"] = LeaPlusLC["EnhanceDressup"]
|
|
LeaPlusDB["ShowVolume"] = LeaPlusLC["ShowVolume"]
|
|
LeaPlusDB["ShowVolumeInFrame"] = LeaPlusLC["ShowVolumeInFrame"]
|
|
|
|
LeaPlusDB["ShowCooldowns"] = LeaPlusLC["ShowCooldowns"]
|
|
LeaPlusDB["ShowCooldownID"] = LeaPlusLC["ShowCooldownID"]
|
|
LeaPlusDB["NoCooldownDuration"] = LeaPlusLC["NoCooldownDuration"]
|
|
LeaPlusDB["CooldownsOnPlayer"] = LeaPlusLC["CooldownsOnPlayer"]
|
|
LeaPlusDB["DurabilityStatus"] = LeaPlusLC["DurabilityStatus"]
|
|
LeaPlusDB["ShowPetSaveBtn"] = LeaPlusLC["ShowPetSaveBtn"]
|
|
LeaPlusDB["ShowRaidToggle"] = LeaPlusLC["ShowRaidToggle"]
|
|
LeaPlusDB["ShowBorders"] = LeaPlusLC["ShowBorders"]
|
|
LeaPlusDB["BordersTop"] = LeaPlusLC["BordersTop"]
|
|
LeaPlusDB["BordersBottom"] = LeaPlusLC["BordersBottom"]
|
|
LeaPlusDB["BordersLeft"] = LeaPlusLC["BordersLeft"]
|
|
LeaPlusDB["BordersRight"] = LeaPlusLC["BordersRight"]
|
|
LeaPlusDB["BordersAlpha"] = LeaPlusLC["BordersAlpha"]
|
|
LeaPlusDB["ShowPlayerChain"] = LeaPlusLC["ShowPlayerChain"]
|
|
LeaPlusDB["PlayerChainMenu"] = LeaPlusLC["PlayerChainMenu"]
|
|
LeaPlusDB["ShowWowheadLinks"] = LeaPlusLC["ShowWowheadLinks"]
|
|
|
|
-- Frames
|
|
LeaPlusDB["FrmEnabled"] = LeaPlusLC["FrmEnabled"]
|
|
LeaPlusDB["ManageBuffs"] = LeaPlusLC["ManageBuffs"]
|
|
LeaPlusDB["BuffFrameA"] = LeaPlusLC["BuffFrameA"]
|
|
LeaPlusDB["BuffFrameR"] = LeaPlusLC["BuffFrameR"]
|
|
LeaPlusDB["BuffFrameX"] = LeaPlusLC["BuffFrameX"]
|
|
LeaPlusDB["BuffFrameY"] = LeaPlusLC["BuffFrameY"]
|
|
LeaPlusDB["BuffFrameScale"] = LeaPlusLC["BuffFrameScale"]
|
|
|
|
LeaPlusDB["ManagePowerBar"] = LeaPlusLC["ManagePowerBar"]
|
|
LeaPlusDB["PowerBarA"] = LeaPlusLC["PowerBarA"]
|
|
LeaPlusDB["PowerBarR"] = LeaPlusLC["PowerBarR"]
|
|
LeaPlusDB["PowerBarX"] = LeaPlusLC["PowerBarX"]
|
|
LeaPlusDB["PowerBarY"] = LeaPlusLC["PowerBarY"]
|
|
LeaPlusDB["PowerBarScale"] = LeaPlusLC["PowerBarScale"]
|
|
|
|
LeaPlusDB["ManageWidget"] = LeaPlusLC["ManageWidget"]
|
|
LeaPlusDB["WidgetA"] = LeaPlusLC["WidgetA"]
|
|
LeaPlusDB["WidgetR"] = LeaPlusLC["WidgetR"]
|
|
LeaPlusDB["WidgetX"] = LeaPlusLC["WidgetX"]
|
|
LeaPlusDB["WidgetY"] = LeaPlusLC["WidgetY"]
|
|
LeaPlusDB["WidgetScale"] = LeaPlusLC["WidgetScale"]
|
|
|
|
LeaPlusDB["ManageFocus"] = LeaPlusLC["ManageFocus"]
|
|
LeaPlusDB["FocusA"] = LeaPlusLC["FocusA"]
|
|
LeaPlusDB["FocusR"] = LeaPlusLC["FocusR"]
|
|
LeaPlusDB["FocusX"] = LeaPlusLC["FocusX"]
|
|
LeaPlusDB["FocusY"] = LeaPlusLC["FocusY"]
|
|
LeaPlusDB["FocusScale"] = LeaPlusLC["FocusScale"]
|
|
|
|
LeaPlusDB["ClassColFrames"] = LeaPlusLC["ClassColFrames"]
|
|
LeaPlusDB["ClassColPlayer"] = LeaPlusLC["ClassColPlayer"]
|
|
LeaPlusDB["ClassColTarget"] = LeaPlusLC["ClassColTarget"]
|
|
|
|
LeaPlusDB["NoAlerts"] = LeaPlusLC["NoAlerts"]
|
|
LeaPlusDB["HideBodyguard"] = LeaPlusLC["HideBodyguard"]
|
|
LeaPlusDB["HideTalkingFrame"] = LeaPlusLC["HideTalkingFrame"]
|
|
LeaPlusDB["HideCleanupBtns"] = LeaPlusLC["HideCleanupBtns"]
|
|
LeaPlusDB["HideBossBanner"] = LeaPlusLC["HideBossBanner"]
|
|
LeaPlusDB["HideLevelUpDisplay"] = LeaPlusLC["HideLevelUpDisplay"]
|
|
LeaPlusDB["NoGryphons"] = LeaPlusLC["NoGryphons"]
|
|
LeaPlusDB["NoClassBar"] = LeaPlusLC["NoClassBar"]
|
|
LeaPlusDB["NoCommandBar"] = LeaPlusLC["NoCommandBar"]
|
|
|
|
-- System
|
|
LeaPlusDB["NoScreenGlow"] = LeaPlusLC["NoScreenGlow"]
|
|
LeaPlusDB["NoScreenEffects"] = LeaPlusLC["NoScreenEffects"]
|
|
LeaPlusDB["SetWeatherDensity"] = LeaPlusLC["SetWeatherDensity"]
|
|
LeaPlusDB["WeatherLevel"] = LeaPlusLC["WeatherLevel"]
|
|
LeaPlusDB["MaxCameraZoom"] = LeaPlusLC["MaxCameraZoom"]
|
|
|
|
LeaPlusDB["NoRestedEmotes"] = LeaPlusLC["NoRestedEmotes"]
|
|
LeaPlusDB["MuteGameSounds"] = LeaPlusLC["MuteGameSounds"]
|
|
|
|
LeaPlusDB["NoBagAutomation"] = LeaPlusLC["NoBagAutomation"]
|
|
LeaPlusDB["NoPetAutomation"] = LeaPlusLC["NoPetAutomation"]
|
|
LeaPlusDB["CharAddonList"] = LeaPlusLC["CharAddonList"]
|
|
LeaPlusDB["NoRaidRestrictions"] = LeaPlusLC["NoRaidRestrictions"]
|
|
LeaPlusDB["NoConfirmLoot"] = LeaPlusLC["NoConfirmLoot"]
|
|
LeaPlusDB["SaveProfFilters"] = LeaPlusLC["SaveProfFilters"]
|
|
LeaPlusDB["FasterLooting"] = LeaPlusLC["FasterLooting"]
|
|
LeaPlusDB["FasterMovieSkip"] = LeaPlusLC["FasterMovieSkip"]
|
|
LeaPlusDB["CombatPlates"] = LeaPlusLC["CombatPlates"]
|
|
LeaPlusDB["EasyItemDestroy"] = LeaPlusLC["EasyItemDestroy"]
|
|
LeaPlusDB["LockoutSharing"] = LeaPlusLC["LockoutSharing"]
|
|
|
|
-- Settings
|
|
LeaPlusDB["ShowMinimapIcon"] = LeaPlusLC["ShowMinimapIcon"]
|
|
LeaPlusDB["EnableHotkey"] = LeaPlusLC["EnableHotkey"]
|
|
|
|
LeaPlusDB["PlusPanelScale"] = LeaPlusLC["PlusPanelScale"]
|
|
LeaPlusDB["PlusPanelAlpha"] = LeaPlusLC["PlusPanelAlpha"]
|
|
|
|
-- Panel position
|
|
LeaPlusDB["MainPanelA"] = LeaPlusLC["MainPanelA"]
|
|
LeaPlusDB["MainPanelR"] = LeaPlusLC["MainPanelR"]
|
|
LeaPlusDB["MainPanelX"] = LeaPlusLC["MainPanelX"]
|
|
LeaPlusDB["MainPanelY"] = LeaPlusLC["MainPanelY"]
|
|
|
|
-- Start page
|
|
LeaPlusDB["LeaStartPage"] = LeaPlusLC["LeaStartPage"]
|
|
|
|
-- Mute game sounds (LeaPlusLC["MuteGameSounds"])
|
|
for k, v in pairs(LeaPlusLC["muteTable"]) do
|
|
LeaPlusDB[k] = LeaPlusLC[k]
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- Register event handler
|
|
LpEvt:SetScript("OnEvent", eventHandler)
|
|
|
|
----------------------------------------------------------------------
|
|
-- L70: Player logout
|
|
----------------------------------------------------------------------
|
|
|
|
-- Player Logout
|
|
function LeaPlusLC:PlayerLogout(wipe)
|
|
|
|
----------------------------------------------------------------------
|
|
-- Restore default values for options that do not require reloads
|
|
----------------------------------------------------------------------
|
|
|
|
-- Disable screen glow (LeaPlusLC["NoScreenGlow"])
|
|
if wipe then
|
|
|
|
-- Disable screen glow (LeaPlusLC["NoScreenGlow"])
|
|
SetCVar("ffxGlow", "1")
|
|
|
|
-- Disable screen effects (LeaPlusLC["NoScreenEffects"])
|
|
SetCVar("ffxDeath", "1")
|
|
SetCVar("ffxNether", "1")
|
|
|
|
-- Set weather density (LeaPlusLC["SetWeatherDensity"])
|
|
SetCVar("WeatherDensity", "3")
|
|
SetCVar("RAIDweatherDensity", "3")
|
|
|
|
-- Remove raid restrictions (LeaPlusLC["NoRaidRestrictions"])
|
|
SetAllowLowLevelRaid(false)
|
|
|
|
-- Max camera zoom (LeaPlusLC["MaxCameraZoom"])
|
|
SetCVar("cameraDistanceMaxZoomFactor", 1.9)
|
|
|
|
-- Universal group color (LeaPlusLC["UnivGroupColor"])
|
|
ChangeChatColor("RAID", 1, 0.50, 0)
|
|
ChangeChatColor("RAID_LEADER", 1, 0.28, 0.04)
|
|
ChangeChatColor("INSTANCE_CHAT", 1, 0.50, 0)
|
|
ChangeChatColor("INSTANCE_CHAT_LEADER", 1, 0.28, 0.04)
|
|
|
|
-- Mute game sounds (LeaPlusLC["MuteGameSounds"])
|
|
for k, v in pairs(LeaPlusLC["muteTable"]) do
|
|
for i, e in pairs(v) do
|
|
local file, soundID = e:match("([^,]+)%#([^,]+)")
|
|
UnmuteSoundFile(soundID)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Restore default values for options that require reloads
|
|
----------------------------------------------------------------------
|
|
|
|
-- Silence rested emotes
|
|
if LeaPlusDB["NoRestedEmotes"] == "On" then
|
|
if wipe or (not wipe and LeaPlusLC["NoRestedEmotes"] == "Off") then
|
|
SetCVar("Sound_EnableEmoteSounds", "1")
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Options panel functions
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to add textures to panels
|
|
function LeaPlusLC:CreateBar(name, parent, width, height, anchor, r, g, b, alp, tex)
|
|
local ft = parent:CreateTexture(nil, "BORDER")
|
|
ft:SetTexture(tex)
|
|
ft:SetSize(width, height)
|
|
ft:SetPoint(anchor)
|
|
ft:SetVertexColor(r ,g, b, alp)
|
|
if name == "MainTexture" then
|
|
ft:SetTexCoord(0.09, 1, 0, 1);
|
|
end
|
|
end
|
|
|
|
-- Create a configuration panel
|
|
function LeaPlusLC:CreatePanel(title, globref)
|
|
|
|
-- Create the panel
|
|
local Side = CreateFrame("Frame", nil, UIParent)
|
|
|
|
-- Make it a system frame
|
|
_G["LeaPlusGlobalPanel_" .. globref] = Side
|
|
table.insert(UISpecialFrames, "LeaPlusGlobalPanel_" .. globref)
|
|
|
|
-- Store it in the configuration panel table
|
|
tinsert(LeaConfigList, Side)
|
|
|
|
-- Set frame parameters
|
|
Side:Hide();
|
|
Side:SetSize(570, 370);
|
|
Side:SetClampedToScreen(true)
|
|
Side:SetClampRectInsets(500, -500, -300, 300)
|
|
Side:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
|
|
-- Set the background color
|
|
Side.t = Side:CreateTexture(nil, "BACKGROUND")
|
|
Side.t:SetAllPoints()
|
|
Side.t:SetColorTexture(0.05, 0.05, 0.05, 0.9)
|
|
|
|
-- Add a close Button
|
|
Side.c = CreateFrame("Button", nil, Side, "UIPanelCloseButton")
|
|
Side.c:SetSize(30, 30)
|
|
Side.c:SetPoint("TOPRIGHT", 0, 0)
|
|
Side.c:SetScript("OnClick", function() Side:Hide() end)
|
|
|
|
-- Add reset, help and back buttons
|
|
Side.r = LeaPlusLC:CreateButton("ResetButton", Side, "Reset", "TOPLEFT", 16, -292, 0, 25, true, "Click to reset the settings on this page.")
|
|
Side.h = LeaPlusLC:CreateButton("HelpButton", Side, "Help", "TOPLEFT", 76, -292, 0, 25, true, "No help is available for this page.")
|
|
Side.b = LeaPlusLC:CreateButton("BackButton", Side, "Back to Main Menu", "TOPRIGHT", -16, -292, 0, 25, true, "Click to return to the main menu.")
|
|
|
|
-- Reposition help button so it doesn't overlap reset button
|
|
Side.h:ClearAllPoints()
|
|
Side.h:SetPoint("LEFT", Side.r, "RIGHT", 10, 0)
|
|
|
|
-- Remove the click texture from the help button
|
|
Side.h:SetPushedTextOffset(0, 0)
|
|
|
|
-- Add a reload button and syncronise it with the main panel reload button
|
|
local reloadb = LeaPlusLC:CreateButton("ConfigReload", Side, "Reload", "BOTTOMRIGHT", -16, 10, 0, 25, true, LeaPlusCB["ReloadUIButton"].tiptext)
|
|
LeaPlusLC:LockItem(reloadb,true)
|
|
reloadb:SetScript("OnClick", ReloadUI)
|
|
|
|
reloadb.f = reloadb:CreateFontString(nil, 'ARTWORK', 'GameFontNormalSmall')
|
|
reloadb.f:SetHeight(32);
|
|
reloadb.f:SetPoint('RIGHT', reloadb, 'LEFT', -10, 0)
|
|
reloadb.f:SetText(LeaPlusCB["ReloadUIButton"].f:GetText())
|
|
reloadb.f:Hide()
|
|
|
|
LeaPlusCB["ReloadUIButton"]:HookScript("OnEnable", function()
|
|
LeaPlusLC:LockItem(reloadb, false)
|
|
reloadb.f:Show()
|
|
end)
|
|
|
|
LeaPlusCB["ReloadUIButton"]:HookScript("OnDisable", function()
|
|
LeaPlusLC:LockItem(reloadb, true)
|
|
reloadb.f:Hide()
|
|
end)
|
|
|
|
-- Set textures
|
|
LeaPlusLC:CreateBar("FootTexture", Side, 570, 48, "BOTTOM", 0.5, 0.5, 0.5, 1.0, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
LeaPlusLC:CreateBar("MainTexture", Side, 570, 323, "TOPRIGHT", 0.7, 0.7, 0.7, 0.7, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
|
|
-- Allow movement
|
|
Side:EnableMouse(true)
|
|
Side:SetMovable(true)
|
|
Side:RegisterForDrag("LeftButton")
|
|
Side:SetScript("OnDragStart", Side.StartMoving)
|
|
Side:SetScript("OnDragStop", function ()
|
|
Side:StopMovingOrSizing();
|
|
Side:SetUserPlaced(false);
|
|
-- Save panel position
|
|
LeaPlusLC["MainPanelA"], void, LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"] = Side:GetPoint()
|
|
end)
|
|
|
|
-- Set panel attributes when shown
|
|
Side:SetScript("OnShow", function()
|
|
Side:ClearAllPoints()
|
|
Side:SetPoint(LeaPlusLC["MainPanelA"], UIParent, LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"])
|
|
Side:SetScale(LeaPlusLC["PlusPanelScale"])
|
|
Side.t:SetAlpha(1 - LeaPlusLC["PlusPanelAlpha"])
|
|
end)
|
|
|
|
-- Add title
|
|
Side.f = Side:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
Side.f:SetPoint('TOPLEFT', 16, -16);
|
|
Side.f:SetText(L[title])
|
|
|
|
-- Add description
|
|
Side.v = Side:CreateFontString(nil, 'ARTWORK', 'GameFontHighlightSmall')
|
|
Side.v:SetHeight(32);
|
|
Side.v:SetPoint('TOPLEFT', Side.f, 'BOTTOMLEFT', 0, -8);
|
|
Side.v:SetPoint('RIGHT', Side, -32, 0)
|
|
Side.v:SetJustifyH('LEFT'); Side.v:SetJustifyV('TOP');
|
|
Side.v:SetText(L["Configuration Panel"])
|
|
|
|
-- Prevent options panel from showing while side panel is showing
|
|
LeaPlusLC["PageF"]:HookScript("OnShow", function()
|
|
if Side:IsShown() then LeaPlusLC["PageF"]:Hide(); end
|
|
end)
|
|
|
|
-- Return the frame
|
|
return Side
|
|
|
|
end
|
|
|
|
-- Define subheadings
|
|
function LeaPlusLC:MakeTx(frame, title, x, y)
|
|
local text = frame:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
text:SetPoint("TOPLEFT", x, y)
|
|
text:SetText(L[title])
|
|
return text
|
|
end
|
|
|
|
-- Define text
|
|
function LeaPlusLC:MakeWD(frame, title, x, y)
|
|
local text = frame:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
|
|
text:SetPoint("TOPLEFT", x, y)
|
|
text:SetText(L[title])
|
|
text:SetJustifyH"LEFT";
|
|
return text
|
|
end
|
|
|
|
-- Create a slider control (uses standard template)
|
|
function LeaPlusLC:MakeSL(frame, field, caption, low, high, step, x, y, form)
|
|
|
|
-- Create slider control
|
|
local Slider = CreateFrame("Slider", "LeaPlusGlobalSlider" .. field, frame, "OptionssliderTemplate")
|
|
LeaPlusCB[field] = Slider;
|
|
Slider:SetMinMaxValues(low, high)
|
|
Slider:SetValueStep(step)
|
|
Slider:EnableMouseWheel(true)
|
|
Slider:SetPoint('TOPLEFT', x,y)
|
|
Slider:SetWidth(100)
|
|
Slider:SetHeight(20)
|
|
Slider:SetHitRectInsets(0, 0, 0, 0);
|
|
Slider.tiptext = L[caption]
|
|
Slider:SetScript("OnEnter", LeaPlusLC.TipSee)
|
|
Slider:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Remove slider text
|
|
_G[Slider:GetName().."Low"]:SetText('');
|
|
_G[Slider:GetName().."High"]:SetText('');
|
|
|
|
-- Create slider label
|
|
Slider.f = Slider:CreateFontString(nil, 'BACKGROUND')
|
|
Slider.f:SetFontObject('GameFontHighlight')
|
|
Slider.f:SetPoint('LEFT', Slider, 'RIGHT', 12, 0)
|
|
Slider.f:SetFormattedText("%.2f", Slider:GetValue())
|
|
|
|
-- Process mousewheel scrolling
|
|
Slider:SetScript("OnMouseWheel", function(self, arg1)
|
|
if Slider:IsEnabled() then
|
|
local step = step * arg1
|
|
local value = self:GetValue()
|
|
if step > 0 then
|
|
self:SetValue(min(value + step, high))
|
|
else
|
|
self:SetValue(max(value + step, low))
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Process value changed
|
|
Slider:SetScript("OnValueChanged", function(self, value)
|
|
local value = floor((value - low) / step + 0.5) * step + low
|
|
Slider.f:SetFormattedText(form, value)
|
|
LeaPlusLC[field] = value
|
|
end)
|
|
|
|
-- Set slider value when shown
|
|
Slider:SetScript("OnShow", function(self)
|
|
self:SetValue(LeaPlusLC[field])
|
|
end)
|
|
|
|
end
|
|
|
|
-- Create a checkbox control (uses standard template)
|
|
function LeaPlusLC:MakeCB(parent, field, caption, x, y, reload, tip, tipstyle)
|
|
|
|
-- Create the checkbox
|
|
local Cbox = CreateFrame('CheckButton', nil, parent, "ChatConfigCheckButtonTemplate")
|
|
LeaPlusCB[field] = Cbox
|
|
Cbox:SetPoint("TOPLEFT",x, y)
|
|
Cbox:SetScript("OnEnter", LeaPlusLC.TipSee)
|
|
Cbox:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Add label and tooltip
|
|
Cbox.f = Cbox:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
|
|
Cbox.f:SetPoint('LEFT', 20, 0)
|
|
if reload then
|
|
-- Checkbox requires UI reload
|
|
Cbox.f:SetText(L[caption] .. "*")
|
|
Cbox.tiptext = L[tip] .. "|n|n* " .. L["Requires UI reload."]
|
|
else
|
|
-- Checkbox does not require UI reload
|
|
Cbox.f:SetText(L[caption])
|
|
Cbox.tiptext = L[tip]
|
|
end
|
|
|
|
-- Set label parameters
|
|
Cbox.f:SetJustifyH("LEFT")
|
|
Cbox.f:SetWordWrap(false)
|
|
|
|
-- Set maximum label width
|
|
if parent:GetParent() == LeaPlusLC["PageF"] then
|
|
-- Main panel checkbox labels
|
|
if Cbox.f:GetWidth() > 152 then
|
|
Cbox.f:SetWidth(152)
|
|
LeaPlusLC["TruncatedLabelsList"] = LeaPlusLC["TruncatedLabelsList"] or {}
|
|
LeaPlusLC["TruncatedLabelsList"][Cbox.f] = L[caption]
|
|
end
|
|
-- Set checkbox click width
|
|
if Cbox.f:GetStringWidth() > 152 then
|
|
Cbox:SetHitRectInsets(0, -142, 0, 0)
|
|
else
|
|
Cbox:SetHitRectInsets(0, -Cbox.f:GetStringWidth() + 4, 0, 0)
|
|
end
|
|
else
|
|
-- Configuration panel checkbox labels (other checkboxes either have custom functions or blank labels)
|
|
if Cbox.f:GetWidth() > 302 then
|
|
Cbox.f:SetWidth(302)
|
|
LeaPlusLC["TruncatedLabelsList"] = LeaPlusLC["TruncatedLabelsList"] or {}
|
|
LeaPlusLC["TruncatedLabelsList"][Cbox.f] = L[caption]
|
|
end
|
|
-- Set checkbox click width
|
|
if Cbox.f:GetStringWidth() > 302 then
|
|
Cbox:SetHitRectInsets(0, -292, 0, 0)
|
|
else
|
|
Cbox:SetHitRectInsets(0, -Cbox.f:GetStringWidth() + 4, 0, 0)
|
|
end
|
|
end
|
|
|
|
-- Set default checkbox state and click area
|
|
Cbox:SetScript('OnShow', function(self)
|
|
if LeaPlusLC[field] == "On" then
|
|
self:SetChecked(true)
|
|
else
|
|
self:SetChecked(false)
|
|
end
|
|
end)
|
|
|
|
-- Process clicks
|
|
Cbox:SetScript('OnClick', function()
|
|
if Cbox:GetChecked() then
|
|
LeaPlusLC[field] = "On"
|
|
else
|
|
LeaPlusLC[field] = "Off"
|
|
end
|
|
LeaPlusLC:SetDim(); -- Lock invalid options
|
|
LeaPlusLC:ReloadCheck(); -- Show reload button if needed
|
|
LeaPlusLC:Live(); -- Run live code
|
|
end)
|
|
end
|
|
|
|
-- Create an editbox (uses standard template)
|
|
function LeaPlusLC:CreateEditBox(frame, parent, width, maxchars, anchor, x, y, tab, shifttab)
|
|
|
|
-- Create editbox
|
|
local eb = CreateFrame("EditBox", nil, parent, "InputBoxTemplate")
|
|
LeaPlusCB[frame] = eb
|
|
eb:SetPoint(anchor, x, y)
|
|
eb:SetWidth(width)
|
|
eb:SetHeight(24)
|
|
eb:SetFontObject("GameFontNormal")
|
|
eb:SetTextColor(1.0, 1.0, 1.0)
|
|
eb:SetAutoFocus(false)
|
|
eb:SetMaxLetters(maxchars)
|
|
eb:SetScript("OnEscapePressed", eb.ClearFocus)
|
|
eb:SetScript("OnEnterPressed", eb.ClearFocus)
|
|
|
|
-- Add editbox border and backdrop
|
|
eb.f = CreateFrame("FRAME", nil, eb, "BackdropTemplate")
|
|
eb.f:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = false, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }})
|
|
eb.f:SetPoint("LEFT", -6, 0)
|
|
eb.f:SetWidth(eb:GetWidth()+6)
|
|
eb.f:SetHeight(eb:GetHeight())
|
|
eb.f:SetBackdropColor(1.0, 1.0, 1.0, 0.3)
|
|
|
|
-- Move onto next editbox when tab key is pressed
|
|
eb:SetScript("OnTabPressed", function(self)
|
|
self:ClearFocus()
|
|
if IsShiftKeyDown() then
|
|
LeaPlusCB[shifttab]:SetFocus()
|
|
else
|
|
LeaPlusCB[tab]:SetFocus()
|
|
end
|
|
end)
|
|
|
|
return eb
|
|
|
|
end
|
|
|
|
-- Create a standard button (using standard button template)
|
|
function LeaPlusLC:CreateButton(name, frame, label, anchor, x, y, width, height, reskin, tip)
|
|
local mbtn = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate")
|
|
LeaPlusCB[name] = mbtn
|
|
mbtn:SetSize(width, height)
|
|
mbtn:SetPoint(anchor, x, y)
|
|
mbtn:SetHitRectInsets(0, 0, 0, 0)
|
|
mbtn:SetText(L[label])
|
|
|
|
-- Create fontstring so the button can be sized correctly
|
|
mbtn.f = mbtn:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
mbtn.f:SetText(L[label])
|
|
if width > 0 then
|
|
-- Button should have static width
|
|
mbtn:SetWidth(width)
|
|
else
|
|
-- Button should have variable width
|
|
mbtn:SetWidth(mbtn.f:GetStringWidth() + 20)
|
|
end
|
|
|
|
-- Tooltip handler
|
|
mbtn.tiptext = L[tip]
|
|
mbtn:SetScript("OnEnter", LeaPlusLC.TipSee)
|
|
mbtn:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Texture the button
|
|
if reskin then
|
|
|
|
-- Set skinned button textures
|
|
mbtn:SetNormalTexture("Interface\\AddOns\\Leatrix_Plus\\Leatrix_Plus.blp")
|
|
mbtn:GetNormalTexture():SetTexCoord(0.5, 1, 0, 1)
|
|
mbtn:SetHighlightTexture("Interface\\AddOns\\Leatrix_Plus\\Leatrix_Plus.blp")
|
|
mbtn:GetHighlightTexture():SetTexCoord(0, 0.5, 0, 1)
|
|
|
|
-- Hide the default textures
|
|
mbtn:HookScript("OnShow", function() mbtn.Left:Hide(); mbtn.Middle:Hide(); mbtn.Right:Hide() end)
|
|
mbtn:HookScript("OnEnable", function() mbtn.Left:Hide(); mbtn.Middle:Hide(); mbtn.Right:Hide() end)
|
|
mbtn:HookScript("OnDisable", function() mbtn.Left:Hide(); mbtn.Middle:Hide(); mbtn.Right:Hide() end)
|
|
mbtn:HookScript("OnMouseDown", function() mbtn.Left:Hide(); mbtn.Middle:Hide(); mbtn.Right:Hide() end)
|
|
mbtn:HookScript("OnMouseUp", function() mbtn.Left:Hide(); mbtn.Middle:Hide(); mbtn.Right:Hide() end)
|
|
|
|
end
|
|
|
|
return mbtn
|
|
end
|
|
|
|
-- Create a dropdown menu (using custom function to avoid taint)
|
|
function LeaPlusLC:CreateDropDown(ddname, label, parent, width, anchor, x, y, items, tip)
|
|
|
|
-- Add the dropdown name to a table
|
|
tinsert(LeaDropList, ddname)
|
|
|
|
-- Populate variable with item list
|
|
LeaPlusLC[ddname.."Table"] = items
|
|
|
|
-- Create outer frame
|
|
local frame = CreateFrame("FRAME", nil, parent); frame:SetWidth(width); frame:SetHeight(42); frame:SetPoint("BOTTOMLEFT", parent, anchor, x, y);
|
|
|
|
-- Create dropdown inside outer frame
|
|
local dd = CreateFrame("Frame", nil, frame); dd:SetPoint("BOTTOMLEFT", -16, -8); dd:SetPoint("BOTTOMRIGHT", 15, -4); dd:SetHeight(32);
|
|
|
|
-- Create dropdown textures
|
|
local lt = dd:CreateTexture(nil, "ARTWORK"); lt:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame"); lt:SetTexCoord(0, 0.1953125, 0, 1); lt:SetPoint("TOPLEFT", dd, 0, 17); lt:SetWidth(25); lt:SetHeight(64);
|
|
local rt = dd:CreateTexture(nil, "BORDER"); rt:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame"); rt:SetTexCoord(0.8046875, 1, 0, 1); rt:SetPoint("TOPRIGHT", dd, 0, 17); rt:SetWidth(25); rt:SetHeight(64);
|
|
local mt = dd:CreateTexture(nil, "BORDER"); mt:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame"); mt:SetTexCoord(0.1953125, 0.8046875, 0, 1); mt:SetPoint("LEFT", lt, "RIGHT"); mt:SetPoint("RIGHT", rt, "LEFT"); mt:SetHeight(64);
|
|
|
|
-- Create dropdown label
|
|
local lf = dd:CreateFontString(nil, "OVERLAY", "GameFontNormal"); lf:SetPoint("TOPLEFT", frame, 0, 0); lf:SetPoint("TOPRIGHT", frame, -5, 0); lf:SetJustifyH("LEFT"); lf:SetText(L[label])
|
|
|
|
-- Create dropdown placeholder for value (set it using OnShow)
|
|
local value = dd:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
|
|
value:SetPoint("LEFT", lt, 26, 2); value:SetPoint("RIGHT", rt, -43, 0); value:SetJustifyH("LEFT")
|
|
dd:SetScript("OnShow", function() value:SetText(LeaPlusLC[ddname.."Table"][LeaPlusLC[ddname]]) end)
|
|
|
|
-- Create dropdown button (clicking it opens the dropdown list)
|
|
local dbtn = CreateFrame("Button", nil, dd)
|
|
dbtn:SetPoint("TOPRIGHT", rt, -16, -18); dbtn:SetWidth(24); dbtn:SetHeight(24)
|
|
dbtn:SetNormalTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Up"); dbtn:SetPushedTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Down"); dbtn:SetDisabledTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Disabled"); dbtn:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight"); dbtn:GetHighlightTexture():SetBlendMode("ADD")
|
|
dbtn.tiptext = tip; dbtn:SetScript("OnEnter", LeaPlusLC.ShowTooltip);
|
|
dbtn:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
-- Create dropdown list
|
|
local ddlist = CreateFrame("Frame", nil, frame, "BackdropTemplate")
|
|
LeaPlusCB["ListFrame"..ddname] = ddlist
|
|
ddlist:SetPoint("TOP",0, -42)
|
|
ddlist:SetWidth(frame:GetWidth())
|
|
ddlist:SetHeight((#items * 17) + 17 + 17)
|
|
ddlist:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background-Dark", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = false, tileSize = 0, edgeSize = 32, insets = { left = 4, right = 4, top = 4, bottom = 4}})
|
|
ddlist:Hide()
|
|
|
|
-- Hide list if parent is closed
|
|
parent:HookScript("OnHide", function() ddlist:Hide() end)
|
|
|
|
-- Create checkmark (it marks the currently selected item)
|
|
local ddlistchk = CreateFrame("FRAME", nil, ddlist)
|
|
ddlistchk:SetHeight(16); ddlistchk:SetWidth(16);
|
|
ddlistchk.t = ddlistchk:CreateTexture(nil, "ARTWORK"); ddlistchk.t:SetAllPoints(); ddlistchk.t:SetTexture("Interface\\Common\\UI-DropDownRadioChecks"); ddlistchk.t:SetTexCoord(0, 0.5, 0.5, 1.0);
|
|
|
|
-- Create dropdown list items
|
|
for k, v in pairs(items) do
|
|
|
|
local dditem = CreateFrame("Button", nil, LeaPlusCB["ListFrame"..ddname])
|
|
LeaPlusCB["Drop"..ddname..k] = dditem;
|
|
dditem:Show();
|
|
dditem:SetWidth(ddlist:GetWidth()-22)
|
|
dditem:SetHeight(20)
|
|
dditem:SetPoint("TOPLEFT", 12, -k*16)
|
|
|
|
dditem.f = dditem:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight');
|
|
dditem.f:SetPoint('LEFT', 16, 0)
|
|
dditem.f:SetText(items[k])
|
|
|
|
dditem.t = dditem:CreateTexture(nil, "BACKGROUND")
|
|
dditem.t:SetAllPoints()
|
|
dditem.t:SetColorTexture(0.3, 0.3, 0.00, 0.8)
|
|
dditem.t:Hide();
|
|
|
|
dditem:SetScript("OnEnter", function() dditem.t:Show() end)
|
|
dditem:SetScript("OnLeave", function() dditem.t:Hide() end)
|
|
dditem:SetScript("OnClick", function()
|
|
LeaPlusLC[ddname] = k
|
|
value:SetText(LeaPlusLC[ddname.."Table"][k])
|
|
ddlist:Hide(); -- Must be last in click handler as other functions hook it
|
|
end)
|
|
|
|
-- Show list when button is clicked
|
|
dbtn:SetScript("OnClick", function()
|
|
-- Show the dropdown
|
|
if ddlist:IsShown() then ddlist:Hide() else
|
|
ddlist:Show();
|
|
ddlistchk:SetPoint("TOPLEFT",10,select(5,LeaPlusCB["Drop"..ddname..LeaPlusLC[ddname]]:GetPoint()))
|
|
ddlistchk:Show();
|
|
end;
|
|
-- Hide all other dropdowns except the one we're dealing with
|
|
for void,v in pairs(LeaDropList) do
|
|
if v ~= ddname then
|
|
LeaPlusCB["ListFrame"..v]:Hide();
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Expand the clickable area of the button to include the entire menu width
|
|
dbtn:SetHitRectInsets(-width+28, 0, 0, 0);
|
|
|
|
end
|
|
|
|
return frame
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Create main options panel frame
|
|
----------------------------------------------------------------------
|
|
|
|
function LeaPlusLC:CreateMainPanel()
|
|
|
|
-- Create the panel
|
|
local PageF = CreateFrame("Frame", nil, UIParent);
|
|
|
|
-- Make it a system frame
|
|
_G["LeaPlusGlobalPanel"] = PageF
|
|
table.insert(UISpecialFrames, "LeaPlusGlobalPanel")
|
|
|
|
-- Set frame parameters
|
|
LeaPlusLC["PageF"] = PageF
|
|
PageF:SetSize(570,370)
|
|
PageF:Hide();
|
|
PageF:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
PageF:SetClampedToScreen(true)
|
|
PageF:SetClampRectInsets(500, -500, -300, 300)
|
|
PageF:EnableMouse(true)
|
|
PageF:SetMovable(true)
|
|
PageF:RegisterForDrag("LeftButton")
|
|
PageF:SetScript("OnDragStart", PageF.StartMoving)
|
|
PageF:SetScript("OnDragStop", function ()
|
|
PageF:StopMovingOrSizing();
|
|
PageF:SetUserPlaced(false);
|
|
-- Save panel position
|
|
LeaPlusLC["MainPanelA"], void, LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"] = PageF:GetPoint()
|
|
end)
|
|
|
|
-- Add background color
|
|
PageF.t = PageF:CreateTexture(nil, "BACKGROUND")
|
|
PageF.t:SetAllPoints()
|
|
PageF.t:SetColorTexture(0.05, 0.05, 0.05, 0.9)
|
|
|
|
-- Add textures
|
|
LeaPlusLC:CreateBar("FootTexture", PageF, 570, 48, "BOTTOM", 0.5, 0.5, 0.5, 1.0, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
LeaPlusLC:CreateBar("MainTexture", PageF, 440, 323, "TOPRIGHT", 0.7, 0.7, 0.7, 0.7, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
LeaPlusLC:CreateBar("MenuTexture", PageF, 130, 323, "TOPLEFT", 0.7, 0.7, 0.7, 0.7, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
|
|
-- Set panel position when shown
|
|
PageF:SetScript("OnShow", function()
|
|
PageF:ClearAllPoints()
|
|
PageF:SetPoint(LeaPlusLC["MainPanelA"], UIParent, LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"])
|
|
end)
|
|
|
|
-- Add main title (shown above menu in the corner)
|
|
PageF.mt = PageF:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
PageF.mt:SetPoint('TOPLEFT', 16, -16)
|
|
PageF.mt:SetText("Leatrix Plus")
|
|
|
|
-- Add version text (shown underneath main title)
|
|
PageF.v = PageF:CreateFontString(nil, 'ARTWORK', 'GameFontHighlightSmall')
|
|
PageF.v:SetHeight(32);
|
|
PageF.v:SetPoint('TOPLEFT', PageF.mt, 'BOTTOMLEFT', 0, -8);
|
|
PageF.v:SetPoint('RIGHT', PageF, -32, 0)
|
|
PageF.v:SetJustifyH('LEFT'); PageF.v:SetJustifyV('TOP');
|
|
PageF.v:SetNonSpaceWrap(true); PageF.v:SetText(L["Version"] .. " " .. LeaPlusLC["AddonVer"])
|
|
|
|
-- Add reload UI Button
|
|
local reloadb = LeaPlusLC:CreateButton("ReloadUIButton", PageF, "Reload", "BOTTOMRIGHT", -16, 10, 0, 25, true, "Your UI needs to be reloaded for some of the changes to take effect.|n|nYou don't have to click the reload button immediately but you do need to click it when you are done making changes and you want the changes to take effect.")
|
|
LeaPlusLC:LockItem(reloadb,true)
|
|
reloadb:SetScript("OnClick", ReloadUI)
|
|
|
|
reloadb.f = reloadb:CreateFontString(nil, 'ARTWORK', 'GameFontNormalSmall')
|
|
reloadb.f:SetHeight(32);
|
|
reloadb.f:SetPoint('RIGHT', reloadb, 'LEFT', -10, 0)
|
|
reloadb.f:SetText(L["Your UI needs to be reloaded."])
|
|
reloadb.f:Hide()
|
|
|
|
-- Add close Button
|
|
local CloseB = CreateFrame("Button", nil, PageF, "UIPanelCloseButton")
|
|
CloseB:SetSize(30, 30)
|
|
CloseB:SetPoint("TOPRIGHT", 0, 0)
|
|
CloseB:SetScript("OnClick", LeaPlusLC.HideFrames)
|
|
|
|
-- Release memory
|
|
LeaPlusLC.CreateMainPanel = nil
|
|
|
|
end
|
|
|
|
LeaPlusLC:CreateMainPanel();
|
|
|
|
----------------------------------------------------------------------
|
|
-- L80: Commands
|
|
----------------------------------------------------------------------
|
|
|
|
-- Slash command function
|
|
function LeaPlusLC:SlashFunc(str)
|
|
if str and str ~= "" then
|
|
-- Get parameters in lower case with duplicate spaces removed
|
|
local str, arg1, arg2, arg3 = strsplit(" ", string.lower(str:gsub("%s+", " ")))
|
|
-- Traverse parameters
|
|
if str == "wipe" then
|
|
-- Wipe settings
|
|
LeaPlusLC:PlayerLogout(true) -- Run logout function with wipe parameter
|
|
wipe(LeaPlusDB)
|
|
LpEvt:UnregisterAllEvents(); -- Don't save any settings
|
|
ReloadUI();
|
|
elseif str == "nosave" then
|
|
-- Prevent Leatrix Plus from overwriting LeaPlusDB at next logout
|
|
LpEvt:UnregisterEvent("PLAYER_LOGOUT")
|
|
LeaPlusLC:Print("Leatrix Plus will not overwrite LeaPlusDB at next logout.")
|
|
return
|
|
elseif str == "reset" then
|
|
-- Reset panel positions
|
|
LeaPlusLC["MainPanelA"], LeaPlusLC["MainPanelR"], LeaPlusLC["MainPanelX"], LeaPlusLC["MainPanelY"] = "CENTER", "CENTER", 0, 0
|
|
LeaPlusLC["PlusPanelScale"] = 1
|
|
LeaPlusLC["PlusPanelAlpha"] = 0
|
|
LeaPlusLC["PageF"]:SetScale(1)
|
|
LeaPlusLC["PageF"].t:SetAlpha(1 - LeaPlusLC["PlusPanelAlpha"])
|
|
-- Refresh panels
|
|
LeaPlusLC["PageF"]:ClearAllPoints()
|
|
LeaPlusLC["PageF"]:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
|
|
-- Reset currently showing configuration panel
|
|
for k, v in pairs(LeaConfigList) do
|
|
if v:IsShown() then
|
|
v:ClearAllPoints()
|
|
v:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
|
|
v:SetScale(1)
|
|
v.t:SetAlpha(1 - LeaPlusLC["PlusPanelAlpha"])
|
|
end
|
|
end
|
|
-- Refresh Leatrix Plus settings menu only
|
|
if LeaPlusLC["Page8"]:IsShown() then
|
|
LeaPlusLC["Page8"]:Hide()
|
|
LeaPlusLC["Page8"]:Show()
|
|
end
|
|
elseif str == "hk" then
|
|
-- Print lifetime honorable kills
|
|
local chagmsg = L["Lifetime honorable kills"]
|
|
local ltphk = GetStatistic(588)
|
|
if ltphk == "--" then ltphk = "0" end
|
|
chagmsg = chagmsg .. ": |cffffffff" .. ltphk
|
|
LeaPlusLC:Print(chagmsg)
|
|
return
|
|
elseif str == "taint" then
|
|
-- Set taint log level
|
|
if arg1 and arg1 ~= "" then
|
|
arg1 = tonumber(arg1)
|
|
if arg1 and arg1 >= 0 and arg1 <= 2 then
|
|
if arg1 == 0 then
|
|
-- Disable taint log
|
|
ConsoleExec("taintLog 0")
|
|
LeaPlusLC:Print("Taint level: Disabled (0).")
|
|
elseif arg1 == 1 then
|
|
-- Basic taint log
|
|
ConsoleExec("taintLog 1")
|
|
LeaPlusLC:Print("Taint level: Basic (1).")
|
|
elseif arg1 == 2 then
|
|
-- Full taint log
|
|
ConsoleExec("taintLog 2")
|
|
LeaPlusLC:Print("Taint level: Full (2).")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Invalid taint level.")
|
|
end
|
|
else
|
|
-- Show current taint level
|
|
local taintCurrent = GetCVar("taintLog")
|
|
if taintCurrent == "0" then
|
|
LeaPlusLC:Print("Taint level: Disabled (0).")
|
|
elseif taintCurrent == "1" then
|
|
LeaPlusLC:Print("Taint level: Basic (1).")
|
|
elseif taintCurrent == "2" then
|
|
LeaPlusLC:Print("Taint level: Full (2).")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "quest" then
|
|
-- Show quest completed status
|
|
if arg1 and arg1 ~= "" then
|
|
if tonumber(arg1) and tonumber(arg1) < 999999999 then
|
|
LeaPlusLC.LoadQuestEventFrame = LeaPlusLC.LoadQuestEventFrame or CreateFrame("FRAME")
|
|
LeaPlusLC.LoadQuestEventFrame:SetScript("OnEvent", function(self, event, questID, success)
|
|
if tonumber(questID) == tonumber(arg1) then
|
|
LeaPlusLC.LoadQuestEventFrame:UnregisterEvent("QUEST_DATA_LOAD_RESULT")
|
|
local tempGetQuestInfo = C_QuestLog.GetTitleForQuestID
|
|
local questCompleted = C_QuestLog.IsQuestFlaggedCompleted(arg1)
|
|
local questTitle = C_TaskQuest.GetQuestInfoByQuestID(arg1) or tempGetQuestInfo(arg1)
|
|
if questTitle then
|
|
if success then
|
|
if questCompleted then
|
|
LeaPlusLC:Print(questTitle .. " (" .. arg1 .. "):" .. "|cffffffff " .. L["Completed."])
|
|
else
|
|
LeaPlusLC:Print(questTitle .. " (" .. arg1 .. "):" .. "|cffffffff " .. L["Not completed."])
|
|
end
|
|
else
|
|
LeaPlusLC:Print(questTitle .. " (" .. arg1 .. "):" .. "|cffffffff " .. L["Error retrieving quest."])
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Invalid quest ID.")
|
|
return
|
|
end
|
|
end
|
|
end)
|
|
LeaPlusLC.LoadQuestEventFrame:RegisterEvent("QUEST_DATA_LOAD_RESULT")
|
|
C_QuestLog.RequestLoadQuestByID(arg1)
|
|
else
|
|
LeaPlusLC:Print("Invalid quest ID.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Missing quest ID.")
|
|
end
|
|
return
|
|
elseif str == "gstaff" then
|
|
-- Buy 10 x Rough Wooden Staff from Larana Drome in Scribes' Sacellum, Dalaran, Northrend (used for testing)
|
|
local npcName = UnitName("target")
|
|
local npcGuid = UnitGUID("target") or nil
|
|
local errmsg = "Requires you to be interacting with Larana Drome. She can be found at Scribes' Sacellum, Dalaran, Northrend."
|
|
if npcName and npcGuid then
|
|
local void, void, void, void, void, npcID = strsplit("-", npcGuid)
|
|
if npcID and npcID == "28723" then
|
|
for k = 1, 10 do
|
|
BuyMerchantItem(5)
|
|
end
|
|
else
|
|
LeaPlusLC:Print(errmsg)
|
|
end
|
|
else
|
|
LeaPlusLC:Print(errmsg)
|
|
end
|
|
return
|
|
elseif str == "rest" then
|
|
-- Show rested bubbles
|
|
LeaPlusLC:Print(L["Rested bubbles"] .. ": |cffffffff" .. (math.floor(20 * (GetXPExhaustion() or 0) / UnitXPMax("player") + 0.5)))
|
|
return
|
|
elseif str == "zygor" then
|
|
-- Toggle Zygor addon
|
|
LeaPlusLC:ZygorToggle()
|
|
return
|
|
elseif str == "id" then
|
|
-- Print NPC ID
|
|
local npcName = UnitName("target")
|
|
local npcGuid = UnitGUID("target") or nil
|
|
if npcName and npcGuid then
|
|
local void, void, void, void, void, npcID = strsplit("-", npcGuid)
|
|
if npcID then
|
|
LeaPlusLC:Print(npcName .. ": |cffffffff" .. npcID)
|
|
end
|
|
end
|
|
return
|
|
elseif str == "mountid" then
|
|
-- Get mount ID by mount name
|
|
if not arg1 or arg1 == "" then LeaPlusLC:Print("Missing mount name.") return end
|
|
local mounts = C_MountJournal.GetMountIDs()
|
|
local mountSuccess = false
|
|
for i = 1, #mounts do
|
|
local creatureName, spellID, icon, active, isUsable, sourceType = C_MountJournal.GetMountInfoByID(mounts[i])
|
|
if strfind(strlower(creatureName), strlower(arg1)) then
|
|
LeaPlusLC:Print(creatureName .. ": |cffffffff" .. mounts[i] .. "|r")
|
|
mountSuccess = true
|
|
end
|
|
end
|
|
if not mountSuccess then LeaPlusLC:Print("Mount not found.") end
|
|
return
|
|
elseif str == "petid" then
|
|
-- Get pet ID by pet name
|
|
if not arg1 or arg1 == "" then LeaPlusLC:Print("Missing pet name.") return end
|
|
local numPets = C_PetJournal.GetNumPets()
|
|
local petSuccess = false
|
|
for i = 1, numPets do
|
|
local petID, speciesID, isOwned, customName, level, favorite, isRevoked, name, icon, petType, creatureID, sourceText, description, isWildPet, canBattle, tradable, unique = C_PetJournal.GetPetInfoByIndex(i, false)
|
|
if strfind(strlower(name), strlower(arg1)) then
|
|
if isOwned then
|
|
LeaPlusLC:Print(name .. ": |cffffffff" .. petID .. " |cff00ff00(" .. level .. ")|r")
|
|
petSuccess = true
|
|
elseif not petSuccess then
|
|
LeaPlusLC:Print("You do not own this pet. Only owned pets can be searched.")
|
|
return
|
|
end
|
|
end
|
|
end
|
|
if not petSuccess then
|
|
LeaPlusLC:Print("Pet not found. Only owned pets that are currently showing in the journal can be searched.")
|
|
end
|
|
return
|
|
elseif str == "tooltip" then
|
|
-- Print tooltip frame name
|
|
local enumf = EnumerateFrames()
|
|
while enumf do
|
|
if (enumf:GetObjectType() == "GameTooltip" or strfind((enumf:GetName() or ""):lower(),"tip")) and enumf:IsVisible() and enumf:GetPoint() then
|
|
print(enumf:GetName())
|
|
end
|
|
enumf = EnumerateFrames(enumf)
|
|
end
|
|
collectgarbage()
|
|
return
|
|
elseif str == "soil" then
|
|
-- Enable dark soil and jelly deposit scanning
|
|
if not LeaPlusLC["DarkScriptlEnabled"] then
|
|
GameTooltip:HookScript("OnUpdate", function()
|
|
local a = _G["GameTooltipTextLeft1"]:GetText() or ""
|
|
if a == "Dark Soil" or a == "Jelly Deposit" or a == "Gersahl Shrub" then
|
|
PlaySound(8959, "Master")
|
|
end
|
|
end)
|
|
-- Add Friendly Alpaca spawn locations to Uldum map
|
|
if TomTom then
|
|
for void, v in next, ({{15,62},{24,9},{28,49},{30,29},{39,10},{42,70},{46,48},{53,19},{55,69},{63,53},{63,14},{70,39},{76,68}}) do
|
|
TomTom:AddWaypoint(1527, v[1]/100, v[2]/100, {title = "Friendly Alpaca"})
|
|
end
|
|
end
|
|
LeaPlusLC["DarkScriptlEnabled"] = true
|
|
LeaPlusLC:Print("Dark Soil scanning activated. Reload UI to exit.")
|
|
else
|
|
LeaPlusLC:Print("Dark Soil scanning is already activated. You only need to run this once. Reload UI to exit.")
|
|
end
|
|
return
|
|
elseif str == "rsnd" then
|
|
-- Restart sound system
|
|
if LeaPlusCB["StopMusicBtn"] then LeaPlusCB["StopMusicBtn"]:Click() end
|
|
Sound_GameSystem_RestartSoundSystem()
|
|
LeaPlusLC:Print("Sound system restarted.")
|
|
return
|
|
elseif str == "event" then
|
|
-- List events (used for debug)
|
|
LeaPlusLC["DbF"] = LeaPlusLC["DbF"] or CreateFrame("FRAME")
|
|
if not LeaPlusLC["DbF"]:GetScript("OnEvent") then
|
|
LeaPlusLC:Print("Tracing started.")
|
|
LeaPlusLC["DbF"]:RegisterAllEvents()
|
|
LeaPlusLC["DbF"]:SetScript("OnEvent", function(self, event)
|
|
if event == "ACTIONBAR_UPDATE_COOLDOWN"
|
|
or event == "BAG_UPDATE_COOLDOWN"
|
|
or event == "CHAT_MSG_TRADESKILLS"
|
|
or event == "COMBAT_LOG_EVENT_UNFILTERED"
|
|
or event == "SPELL_UPDATE_COOLDOWN"
|
|
or event == "SPELL_UPDATE_USABLE"
|
|
or event == "UNIT_POWER_FREQUENT"
|
|
or event == "UPDATE_INVENTORY_DURABILITY"
|
|
then return
|
|
else
|
|
print(event)
|
|
end
|
|
end)
|
|
else
|
|
LeaPlusLC["DbF"]:UnregisterAllEvents()
|
|
LeaPlusLC["DbF"]:SetScript("OnEvent", nil)
|
|
LeaPlusLC:Print("Tracing stopped.")
|
|
end
|
|
return
|
|
elseif str == "game" then
|
|
-- Show game build
|
|
local version, build, gdate, tocversion = GetBuildInfo()
|
|
LeaPlusLC:Print(L["World of Warcraft"] .. ": |cffffffff" .. version .. "." .. build .. " (" .. gdate .. ") (" .. tocversion .. ")")
|
|
return
|
|
elseif str == "config" then
|
|
-- Show maximum camera distance
|
|
LeaPlusLC:Print(L["Camera distance"] .. ": |cffffffff" .. GetCVar("cameraDistanceMaxZoomFactor"))
|
|
-- Show screen effects
|
|
LeaPlusLC:Print(L["Shaders"] .. ": |cffffffff" .. GetCVar("ffxGlow") .. ", " .. GetCVar("ffxDeath") .. ", " .. GetCVar("ffxNether"))
|
|
-- Show particle density
|
|
LeaPlusLC:Print(L["Particle density"] .. ": |cffffffff" .. GetCVar("particleDensity"))
|
|
LeaPlusLC:Print(L["Weather density"] .. ": |cffffffff" .. GetCVar("weatherDensity"))
|
|
-- Show config
|
|
LeaPlusLC:Print("SynchroniseConfig: |cffffffff" .. GetCVar("synchronizeConfig"))
|
|
-- Show raid restrictions
|
|
local unRaid = GetAllowLowLevelRaid()
|
|
if unRaid and unRaid == true then
|
|
LeaPlusLC:Print("GetAllowLowLevelRaid: |cffffffff" .. "True")
|
|
else
|
|
LeaPlusLC:Print("GetAllowLowLevelRaid: |cffffffff" .. "False")
|
|
end
|
|
-- Show achievement sharing
|
|
local achhidden = AreAccountAchievementsHidden()
|
|
if achhidden then
|
|
LeaPlusLC:Print("Account achievements are hidden.")
|
|
else
|
|
LeaPlusLC:Print("Account achievements are being shared.")
|
|
end
|
|
return
|
|
elseif str == "move" then
|
|
-- Move minimap
|
|
MinimapZoneTextButton:Hide()
|
|
MinimapBorderTop:SetTexture("")
|
|
MiniMapWorldMapButton:Hide()
|
|
MinimapBackdrop:ClearAllPoints()
|
|
MinimapBackdrop:SetPoint("CENTER", UIParent, "CENTER", -330, -75)
|
|
Minimap:SetPoint("CENTER", UIParent, "CENTER", -320, -50)
|
|
return
|
|
elseif str == "tipcol" then
|
|
-- Show default tooltip title color
|
|
if GameTooltipTextLeft1:IsShown() then
|
|
local r, g, b, a = GameTooltipTextLeft1:GetTextColor()
|
|
r = r <= 1 and r >= 0 and r or 0
|
|
g = g <= 1 and g >= 0 and g or 0
|
|
b = b <= 1 and b >= 0 and b or 0
|
|
LeaPlusLC:Print(L["Tooltip title color"] .. ": " .. strupper(string.format("%02x%02x%02x", r * 255, g * 255, b * 255) .. "."))
|
|
else
|
|
LeaPlusLC:Print("No tooltip showing.")
|
|
end
|
|
return
|
|
elseif str == "list" then
|
|
-- Enumerate frames
|
|
local frame = EnumerateFrames()
|
|
while frame do
|
|
if (frame:IsVisible() and MouseIsOver(frame)) then
|
|
LeaPlusLC:Print(frame:GetName() or string.format("[Unnamed Frame: %s]", tostring(frame)))
|
|
end
|
|
frame = EnumerateFrames(frame)
|
|
end
|
|
return
|
|
elseif str == "nohelp" then
|
|
-- Set most help plates to seen
|
|
for i = 1, 100 do
|
|
SetCVarBitfield("closedInfoFrames", i, true)
|
|
end
|
|
return
|
|
elseif str == "grid" then
|
|
-- Create grid for first use
|
|
if not LeaPlusLC.grid then
|
|
LeaPlusLC.grid = CreateFrame('FRAME')
|
|
LeaPlusLC.grid:Hide()
|
|
LeaPlusLC.grid:SetAllPoints(UIParent)
|
|
local w, h = GetScreenWidth() * UIParent:GetEffectiveScale(), GetScreenHeight() * UIParent:GetEffectiveScale()
|
|
local ratio = w / h
|
|
local sqsize = w / 20
|
|
local wline = floor(sqsize - (sqsize % 2))
|
|
local hline = floor(sqsize / ratio - ((sqsize / ratio) % 2))
|
|
-- Plot vertical lines
|
|
for i = 0, wline do
|
|
local t = LeaPlusLC.grid:CreateTexture(nil, 'BACKGROUND')
|
|
if i == wline / 2 then t:SetColorTexture(1, 0, 0, 0.5) else t:SetColorTexture(0, 0, 0, 0.5) end
|
|
t:SetPoint('TOPLEFT', LeaPlusLC.grid, 'TOPLEFT', i * w / wline - 1, 0)
|
|
t:SetPoint('BOTTOMRIGHT', LeaPlusLC.grid, 'BOTTOMLEFT', i * w / wline + 1, 0)
|
|
end
|
|
-- Plot horizontal lines
|
|
for i = 0, hline do
|
|
local t = LeaPlusLC.grid:CreateTexture(nil, 'BACKGROUND')
|
|
if i == hline / 2 then t:SetColorTexture(1, 0, 0, 0.5) else t:SetColorTexture(0, 0, 0, 0.5) end
|
|
t:SetPoint('TOPLEFT', LeaPlusLC.grid, 'TOPLEFT', 0, -i * h / hline + 1)
|
|
t:SetPoint('BOTTOMRIGHT', LeaPlusLC.grid, 'TOPRIGHT', 0, -i * h / hline - 1)
|
|
end
|
|
end
|
|
-- Show or hide grid
|
|
if LeaPlusLC.grid:IsShown() then
|
|
LeaPlusLC.grid:Hide()
|
|
else
|
|
LeaPlusLC.grid:Show()
|
|
end
|
|
return
|
|
elseif str == "chk" then
|
|
-- List truncated checkbox labels
|
|
if LeaPlusLC["TruncatedLabelsList"] then
|
|
for i, v in pairs(LeaPlusLC["TruncatedLabelsList"]) do
|
|
LeaPlusLC:Print(LeaPlusLC["TruncatedLabelsList"][i])
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Checkbox labels are Ok.")
|
|
end
|
|
return
|
|
elseif str == "cv" then
|
|
-- Print and set console variable setting
|
|
if arg1 and arg1 ~= "" then
|
|
if GetCVar(arg1) then
|
|
if arg2 and arg2 ~= "" then
|
|
if tonumber(arg2) then
|
|
SetCVar(arg1, arg2)
|
|
else
|
|
LeaPlusLC:Print("Value must be a number.")
|
|
return
|
|
end
|
|
end
|
|
LeaPlusLC:Print(arg1 .. ": |cffffffff" .. GetCVar(arg1))
|
|
else
|
|
LeaPlusLC:Print("Invalid console variable.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Missing console variable.")
|
|
end
|
|
return
|
|
elseif str == "play" then
|
|
-- Play sound ID
|
|
if arg1 and arg1 ~= "" then
|
|
if tonumber(arg1) then
|
|
-- Stop last played sound ID
|
|
if LeaPlusLC.SNDcanitHandle then
|
|
StopSound(LeaPlusLC.SNDcanitHandle)
|
|
end
|
|
-- Play sound ID
|
|
LeaPlusLC.SNDcanitPlay, LeaPlusLC.SNDcanitHandle = PlaySound(arg1, "Master", false, false)
|
|
if not LeaPlusLC.SNDcanitPlay then LeaPlusLC:Print(L["Invalid sound ID"] .. ": |cffffffff" .. arg1) end
|
|
else
|
|
LeaPlusLC:Print(L["Invalid sound ID"] .. ": |cffffffff" .. arg1)
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Missing sound ID.")
|
|
end
|
|
return
|
|
elseif str == "stop" then
|
|
-- Stop last played sound ID
|
|
if LeaPlusLC.SNDcanitHandle then
|
|
StopSound(LeaPlusLC.SNDcanitHandle)
|
|
end
|
|
return
|
|
elseif str == "team" then
|
|
-- Assign battle pet team
|
|
local p1, s1p1, s1p2, s1p3, p2, s2p1, s2p2, s2p3, p3, s3p1, s3p2, s3p3 = strsplit(",", arg1 or "", 12)
|
|
if p1 and s1p1 and s1p2 and s1p3 and p2 and s2p1 and s2p2 and s2p3 and p3 and s3p1 and s3p2 and s3p3 then
|
|
if LeaPlusLC:PlayerInCombat() then
|
|
return
|
|
else
|
|
-- Ensure all 3 slots are unlocked
|
|
for i = 1, 3 do
|
|
local void, void, void, void, isLocked = C_PetJournal.GetPetLoadOutInfo(i)
|
|
if isLocked and isLocked == true then
|
|
LeaPlusLC:Print("All 3 battle pet slots need to be unlocked.")
|
|
return
|
|
end
|
|
end
|
|
-- Assign pets
|
|
C_PetJournal.SetPetLoadOutInfo(1, p1)
|
|
C_PetJournal.SetAbility(1, 1, s1p1)
|
|
C_PetJournal.SetAbility(1, 2, s1p2)
|
|
C_PetJournal.SetAbility(1, 3, s1p3)
|
|
C_PetJournal.SetPetLoadOutInfo(2, p2)
|
|
C_PetJournal.SetAbility(2, 1, s2p1)
|
|
C_PetJournal.SetAbility(2, 2, s2p2)
|
|
C_PetJournal.SetAbility(2, 3, s2p3)
|
|
C_PetJournal.SetPetLoadOutInfo(3, p3)
|
|
C_PetJournal.SetAbility(3, 1, s3p1)
|
|
C_PetJournal.SetAbility(3, 2, s3p2)
|
|
C_PetJournal.SetAbility(3, 3, s3p3)
|
|
if PetJournal and PetJournal:IsShown() then
|
|
PetJournal_UpdatePetLoadOut()
|
|
end
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Invalid battle pet team parameter.")
|
|
end
|
|
return
|
|
elseif str == "wipecds" then
|
|
-- Wipe cooldowns
|
|
LeaPlusDB["Cooldowns"] = nil
|
|
ReloadUI()
|
|
return
|
|
elseif str == "tipchat" then
|
|
-- Print tooltip contents in chat
|
|
local numLines = GameTooltip:NumLines()
|
|
if numLines then
|
|
for i = 1, numLines do
|
|
print(_G["GameTooltipTextLeft" .. i]:GetText() or "")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "tiplang" then
|
|
-- Tooltip tag locale code constructor
|
|
local msg = ""
|
|
msg = msg .. 'if GameLocale == "' .. GameLocale .. '" then '
|
|
msg = msg .. 'ttLevel = "' .. LEVEL .. '"; '
|
|
msg = msg .. 'ttBoss = "' .. BOSS .. '"; '
|
|
msg = msg .. 'ttElite = "' .. ELITE .. '"; '
|
|
msg = msg .. 'ttRare = "' .. ITEM_QUALITY3_DESC .. '"; '
|
|
msg = msg .. 'ttRareElite = "' .. ITEM_QUALITY3_DESC .. " " .. ELITE .. '"; '
|
|
msg = msg .. 'ttRareBoss = "' .. ITEM_QUALITY3_DESC .. " " .. BOSS .. '"; '
|
|
msg = msg .. 'ttTarget = "' .. TARGET .. '"; '
|
|
msg = msg .. "end"
|
|
print(msg)
|
|
return
|
|
elseif str == "con" then
|
|
-- Show the developer console
|
|
C_Console.SetFontHeight(28)
|
|
DeveloperConsole:Toggle(true)
|
|
return
|
|
elseif str == "movlist" then
|
|
-- List playable movie IDs
|
|
local count = 0
|
|
for i = 1, 1000 do
|
|
if IsMoviePlayable(i) then
|
|
print(i)
|
|
count = count + 1
|
|
end
|
|
end
|
|
LeaPlusLC:Print("Total movies: |cffffffff" .. count)
|
|
return
|
|
elseif str == "movietime" then
|
|
-- Show movie length
|
|
if not LeaPlusLC.movieTimeLoaded then
|
|
hooksecurefunc(MovieFrame, "Show", function()
|
|
LeaPlusLC.startMovieTime = GetTime()
|
|
end)
|
|
hooksecurefunc(MovieFrame, "Hide", function()
|
|
LeaPlusLC.endMovieTime = GetTime()
|
|
local ttime = LeaPlusLC.endMovieTime - LeaPlusLC.startMovieTime
|
|
print(string.format("%0.0f", ttime))
|
|
end)
|
|
LeaPlusLC.movieTimeLoaded = true
|
|
LeaPlusLC:Print("MovieTime loaded.")
|
|
else
|
|
LeaPlusLC:Print("MovieTime is already loaded.")
|
|
end
|
|
return
|
|
elseif str == "movie" then
|
|
-- Playback movie by ID
|
|
arg1 = tonumber(arg1)
|
|
if arg1 and arg1 ~= "" then
|
|
if IsMoviePlayable(arg1) then
|
|
MovieFrame_PlayMovie(MovieFrame, arg1)
|
|
else
|
|
LeaPlusLC:Print("Movie not playable.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Missing movie ID.")
|
|
end
|
|
return
|
|
elseif str == "cin" then
|
|
-- Play opening cinematic (only works if character has never gained XP) (used for testing)
|
|
OpeningCinematic()
|
|
return
|
|
elseif str == "skit" then
|
|
-- Play a test sound kit
|
|
PlaySound("1020", "Master", false, true)
|
|
return
|
|
elseif str == "dup" then
|
|
-- Print music track duplicates
|
|
local mask, found, badidfound = false, false, false
|
|
for i, e in pairs(LeaPlusLC.ZoneList) do
|
|
if LeaPlusLC.ZoneList[e] then
|
|
for a, b in pairs(LeaPlusLC.ZoneList[e]) do
|
|
local same = {}
|
|
if b.tracks then
|
|
for k, v in pairs(b.tracks) do
|
|
-- Check for bad sound IDs
|
|
if not strfind(v, "|c") then
|
|
if not v:match("([^,]+)%#([^,]+)%#([^,]+)") then
|
|
local temFile, temSoundID = v:match("([^,]+)%#([^,]+)")
|
|
if temSoundID then
|
|
local temPlay, temHandle = PlaySound(temSoundID, "Master", false, true)
|
|
if temHandle then StopSound(temHandle) end
|
|
temPlay, temHandle = PlaySound(temSoundID, "Master", false, true)
|
|
if not temPlay and not temHandle then
|
|
print("|cffff5400" .. L["Bad ID"] .. ": |r" .. e, v)
|
|
badidfound = true
|
|
else
|
|
if temHandle then StopSound(temHandle) end
|
|
end
|
|
end
|
|
end
|
|
-- Check for duplicate IDs
|
|
if tContains(same, v) and mask == false then
|
|
mask = true
|
|
found = true
|
|
print("|cffec51ff" .. L["Dup ID"] .. ": |r" .. e, v)
|
|
end
|
|
tinsert(same, v)
|
|
mask = false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if badidfound == false then
|
|
LeaPlusLC:Print("No bad sound IDs found.")
|
|
end
|
|
if found == false then
|
|
LeaPlusLC:Print("No media duplicates found.")
|
|
end
|
|
Sound_GameSystem_RestartSoundSystem()
|
|
collectgarbage()
|
|
return
|
|
elseif str == "enigma" then
|
|
-- Enigma
|
|
if not LeaPlusLC.enimgaFrame then
|
|
local selectedBtn
|
|
local bt = {}
|
|
local eData = {
|
|
{[9]=1, [10]=1, [11]=1, [12]=1, [13]=1, [20]=1, [23]=1, [24]=1, [25]=1, [26]=1, [27]=1, [30]=1, [37]=1, [38]=1, [39]=1, [40]=1, [41]=2, "L4, U2, R4, U2, L4",},
|
|
{[9]=1, [11]=1, [12]=1, [13]=1, [16]=1, [18]=1, [20]=1, [23]=1, [24]=1, [25]=1, [27]=1, [34]=1, [41]=2, "U4, L2, D2, L2, U2",},
|
|
{[9]=1, [10]=1, [11]=1, [12]=1, [19]=1, [25]=1, [26]=1, [32]=1, [39]=1, [40]=1, [41]=2, "L2, U2, R1, U2, L3",},
|
|
{[9]=1, [10]=1, [11]=1, [18]=1, [23]=1, [24]=1, [25]=1, [30]=1, [37]=1, [38]=1, [39]=1, [40]=1, [41]=2, "L4, U2, R2, U2, L2",},
|
|
{[9]=1, [10]=1, [11]=1, [12]=1, [13]=1, [16]=1, [23]=1, [25]=1, [26]=1, [27]=1, [30]=1, [32]=1, [34]=1, [37]=1, [38]=1, [39]=1, [41]=2, "U2, L2, D2, L2, U4, R4",},
|
|
{[12]=1,[13]=1, [18]=1, [19]=1, [25]=1, [32]=1, [33]=1, [40]=1, [41]=2, "L1, U1, L1, U2, R1, U1, R1",},
|
|
{[9]=1, [11]=1, [12]=1, [13]=1, [16]=1, [18]=1, [20]=1, [23]=1, [25]=1, [27]=1, [30]=1, [31]=1, [32]=1, [34]=1, [41]=2, "U4, L2, D3, L2, U3",},
|
|
{[9]=1, [10]=1, [17]=1, [24]=1, [25]=1, [32]=1, [33]=1, [40]=1, [41]=2, "L1, U1, L1, U1, L1, U2, L1",},
|
|
{[9]=1, [16]=1, [17]=1, [18]=1, [19]=1, [20]=1, [27]=1, [34]=1, [41]=2, "U3, L4, U1",},
|
|
{[9]=1, [10]=1, [11]=1, [12]=1, [13]=1, [16]=1, [23]=1, [24]=1, [25]=1, [26]=1, [33]=1, [40]=1, [41]=2, "L1, U2, L3, U2, R4",},
|
|
{[9]=1, [10]=1, [11]=1, [12]=1, [13]=1, [16]=1, [23]=1, [30]=1, [37]=1, [38]=1, [39]=1, [40]=1, [41]=2, "L4, U4, R4",},
|
|
{[11]=1,[12]=1, [13]=1, [18]=1, [23]=1, [24]=1, [25]=1, [30]=1, [37]=1, [38]=1, [39]=1, [40]=1, [41]=2, "L4, U2, R2, U2, R2",},
|
|
{[13]=1,[20]=1, [23]=1, [24]=1, [25]=1, [26]=1, [27]=1, [30]=1, [37]=1, [38]=1, [39]=1, [40]=1, [41]=2, "L4, U2, R4, U2",},
|
|
}
|
|
-- Create frame
|
|
local eFrame = CreateFrame("Frame", nil, UIParent)
|
|
eFrame:SetPoint("TOP", 0, 0)
|
|
eFrame:SetSize(1222, 134)
|
|
eFrame.b = eFrame:CreateTexture(nil, "BACKGROUND")
|
|
eFrame.b:SetAllPoints()
|
|
eFrame.b:SetColorTexture(0, 0, 0, 1)
|
|
eFrame:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
eFrame:SetScale(0.9)
|
|
eFrame:SetToplevel(true)
|
|
eFrame:EnableMouse(true)
|
|
LeaPlusLC.enimgaFrame = eFrame
|
|
|
|
-- Right-click to exit
|
|
eFrame:SetScript("OnMouseDown", function(self, btn)
|
|
if btn == "RightButton" then
|
|
eFrame:Hide()
|
|
end
|
|
end)
|
|
|
|
-- Create title fontstring
|
|
eFrame.f = eFrame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
|
eFrame.f:SetPoint("BOTTOMLEFT", 10, 10)
|
|
eFrame.f:SetText(L["Choose an Enigma pattern"])
|
|
eFrame.f:SetFont(eFrame.f:GetFont(), 24, nil)
|
|
|
|
-- Create close fontstring
|
|
eFrame.x = eFrame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
|
eFrame.x:SetPoint("BOTTOMRIGHT", -10, 10)
|
|
eFrame.x:SetText(L["Right-click to close"])
|
|
eFrame.x:SetFont(eFrame.f:GetFont(), 24, nil)
|
|
|
|
-- Create buttons
|
|
for eBtn = 1, #eData do
|
|
local b = CreateFrame("Button", nil, eFrame)
|
|
tinsert(bt, b)
|
|
b:SetSize(94, 94)
|
|
b:SetPoint("TOPLEFT", ((eBtn - 1) % 13) * 94, -2)
|
|
|
|
-- Button highlight bar
|
|
b.line = b:CreateTexture(nil, "ARTWORK")
|
|
b.line:SetTexture("Interface\\PLAYERFRAME\\DruidLunarBarHorizontal")
|
|
b.line:SetSize(84, 6)
|
|
b.line:SetPoint("BOTTOM", 0, -4)
|
|
b.line:Hide()
|
|
|
|
-- Button textures
|
|
for row = 0, 7 - 1 do
|
|
for col = 0, 7 - 1 do
|
|
local t = b:CreateTexture(nil, "ARTWORK")
|
|
t:SetSize(12, 12)
|
|
t:SetPoint("TOPLEFT", 5 + col * 12, - 5 - row * 12)
|
|
local c = eData[eBtn][row * 7 + col + 1]
|
|
-- Do nothing if element is the solution
|
|
if c and strfind(c, ",") then c = nil end
|
|
-- Color textures
|
|
if c == 2 then
|
|
-- Starting block
|
|
t:SetColorTexture(0, 1, 0)
|
|
elseif c then
|
|
-- Path
|
|
t:SetColorTexture(1, 1, 1)
|
|
else
|
|
-- Background
|
|
t:SetColorTexture(.4, .4, .9)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Button scripts
|
|
b:SetScript("OnEnter", function()
|
|
bt[eBtn].line:Show()
|
|
end)
|
|
|
|
b:SetScript("OnLeave", function()
|
|
if b ~= selectedBtn then bt[eBtn].line:Hide() end
|
|
end)
|
|
|
|
b:SetScript("OnMouseDown", function(self, btn)
|
|
if btn == "RightButton" then
|
|
-- Right-click to exit
|
|
eFrame:Hide()
|
|
return
|
|
else
|
|
-- Deselect all buttons
|
|
for test = 1, #bt do
|
|
bt[test].line:Hide()
|
|
end
|
|
-- Select current button
|
|
bt[eBtn].line:Show()
|
|
selectedBtn = b
|
|
PlaySound(115, "Master", false, true)
|
|
-- Print button data
|
|
eFrame.f:SetText(L["Enigma"] .. " " .. eBtn .. ": |cffffffff" .. eData[eBtn][#eData[eBtn]])
|
|
end
|
|
end)
|
|
|
|
end
|
|
else
|
|
-- Toggle frame
|
|
if LeaPlusLC.enimgaFrame:IsShown() then
|
|
LeaPlusLC.enimgaFrame:Hide()
|
|
else
|
|
LeaPlusLC.enimgaFrame:Show()
|
|
end
|
|
end
|
|
return
|
|
elseif str == "showinst" then
|
|
-- List instance IDs for currently selected Encounter Journal expansion filter dropdown
|
|
for i = 1, 5000 do
|
|
local instanceID, name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = EJ_GetInstanceByIndex(i, false)
|
|
if instanceID then print(instanceID, name) end
|
|
end
|
|
for i = 1, 5000 do
|
|
local instanceID, name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = EJ_GetInstanceByIndex(i, true)
|
|
if instanceID then print(instanceID, name) end
|
|
end
|
|
return
|
|
elseif str == "marker" then
|
|
-- Prevent showing raid target markers on self
|
|
if not LeaPlusLC.MarkerFrame then
|
|
LeaPlusLC.MarkerFrame = CreateFrame("FRAME")
|
|
LeaPlusLC.MarkerFrame:RegisterEvent("RAID_TARGET_UPDATE")
|
|
end
|
|
LeaPlusLC.MarkerFrame.Update = true
|
|
if LeaPlusLC.MarkerFrame.Toggle == false then
|
|
-- Show markers
|
|
LeaPlusLC.MarkerFrame:SetScript("OnEvent", nil)
|
|
LeaPlusLC:DisplayMessage(L["Self Markers Allowed"], true)
|
|
LeaPlusLC.MarkerFrame.Toggle = true
|
|
else
|
|
-- Hide markers
|
|
SetRaidTarget("player", 0)
|
|
LeaPlusLC.MarkerFrame:SetScript("OnEvent", function()
|
|
if LeaPlusLC.MarkerFrame.Update == true then
|
|
LeaPlusLC.MarkerFrame.Update = false
|
|
SetRaidTarget("player", 0)
|
|
end
|
|
LeaPlusLC.MarkerFrame.Update = true
|
|
end)
|
|
LeaPlusLC:DisplayMessage(L["Self Markers Blocked"], true)
|
|
LeaPlusLC.MarkerFrame.Toggle = false
|
|
end
|
|
return
|
|
elseif str == "af" then
|
|
-- Automatically follow player target using ticker
|
|
if LeaPlusLC.followTick then
|
|
-- Existing ticker is active so cancel it
|
|
LeaPlusLC.followTick:Cancel()
|
|
LeaPlusLC.followTick = nil
|
|
FollowUnit("player")
|
|
LeaPlusLC:Print("AutoFollow disabled.")
|
|
else
|
|
-- No ticker is active so create one
|
|
local targetName, targetRealm = UnitName("target")
|
|
if not targetName or not UnitIsPlayer("target") or UnitIsUnit("player", "target") then
|
|
LeaPlusLC:Print("Invalid target.")
|
|
return
|
|
end
|
|
if targetRealm then targetName = targetName .. "-" .. targetRealm end
|
|
if LeaPlusLC.followTick then
|
|
LeaPlusLC.followTick:Cancel()
|
|
end
|
|
FollowUnit(targetName, true)
|
|
LeaPlusLC.followTick = C_Timer.NewTicker(1, function()
|
|
FollowUnit(targetName, true)
|
|
end)
|
|
LeaPlusLC:Print(L["AutoFollow"] .. ": |cffffffff" .. targetName .. "|r.")
|
|
end
|
|
return
|
|
elseif str == "exit" then
|
|
-- Exit a vehicle
|
|
VehicleExit()
|
|
return
|
|
elseif str == "mapid" then
|
|
-- Print map ID
|
|
if WorldMapFrame:IsShown() then
|
|
-- Show world map ID
|
|
local mapID = WorldMapFrame.mapID or nil
|
|
local artID = C_Map.GetMapArtID(mapID) or nil
|
|
local mapName = C_Map.GetMapInfo(mapID).name or nil
|
|
if mapID and artID and mapName then
|
|
LeaPlusLC:Print(mapID .. " (" .. artID .. "): " .. mapName .. " (map)")
|
|
end
|
|
else
|
|
-- Show character map ID
|
|
local mapID = C_Map.GetBestMapForUnit("player") or nil
|
|
local artID = C_Map.GetMapArtID(mapID) or nil
|
|
local mapName = C_Map.GetMapInfo(mapID).name or nil
|
|
if mapID and artID and mapName then
|
|
LeaPlusLC:Print(mapID .. " (" .. artID .. "): " .. mapName .. " (player)")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "pos" then
|
|
-- Map POI code builder
|
|
local mapID = C_Map.GetBestMapForUnit("player") or nil
|
|
local mapName = C_Map.GetMapInfo(mapID).name or nil
|
|
local mapRects = {}
|
|
local tempVec2D = CreateVector2D(0, 0)
|
|
local void
|
|
-- Get player map position
|
|
tempVec2D.x, tempVec2D.y = UnitPosition("player")
|
|
if not tempVec2D.x then return end
|
|
local mapRect = mapRects[mapID]
|
|
if not mapRect then
|
|
mapRect = {}
|
|
void, mapRect[1] = C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(0, 0))
|
|
void, mapRect[2] = C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(1, 1))
|
|
mapRect[2]:Subtract(mapRect[1])
|
|
mapRects[mapID] = mapRect
|
|
end
|
|
tempVec2D:Subtract(mapRects[mapID][1])
|
|
local pX, pY = tempVec2D.y/mapRects[mapID][2].y, tempVec2D.x/mapRects[mapID][2].x
|
|
pX = string.format("%0.1f", 100 * pX)
|
|
pY = string.format("%0.1f", 100 * pY)
|
|
if mapID and mapName and pX and pY then
|
|
ChatFrame1:Clear()
|
|
local dnType, dnTex = "Dungeon", "dnTex"
|
|
if arg1 == "raid" then dnType, dnTex = "Raid", "rdTex" end
|
|
if arg1 == "portal" then dnType = "Portal" end
|
|
print('[' .. mapID .. '] = --[[' .. mapName .. ']] {{' .. pX .. ', ' .. pY .. ', L[' .. '"Name"' .. '], L[' .. '"' .. dnType .. '"' .. '], ' .. dnTex .. '},},')
|
|
end
|
|
return
|
|
elseif str == "mapref" then
|
|
-- Print map reveal structure code
|
|
if not WorldMapFrame:IsShown() then
|
|
LeaPlusLC:Print("Open the map first!")
|
|
return
|
|
end
|
|
ChatFrame1:Clear()
|
|
local msg = ""
|
|
local mapID = WorldMapFrame.mapID
|
|
local mapName = C_Map.GetMapInfo(mapID).name
|
|
local mapArt = C_Map.GetMapArtID(mapID)
|
|
msg = msg .. "--[[" .. mapName .. "]] [" .. mapArt .. "] = {"
|
|
local exploredMapTextures = C_MapExplorationInfo.GetExploredMapTextures(mapID);
|
|
if exploredMapTextures then
|
|
for i, exploredTextureInfo in ipairs(exploredMapTextures) do
|
|
local twidth = exploredTextureInfo.textureWidth or 0
|
|
if twidth > 0 then
|
|
local theight = exploredTextureInfo.textureHeight or 0
|
|
local offsetx = exploredTextureInfo.offsetX
|
|
local offsety = exploredTextureInfo.offsetY
|
|
local filedataIDS = exploredTextureInfo.fileDataIDs
|
|
msg = msg .. "[" .. '"' .. twidth .. ":" .. theight .. ":" .. offsetx .. ":" .. offsety .. '"' .. "] = " .. '"'
|
|
for fileData = 1, #filedataIDS do
|
|
msg = msg .. filedataIDS[fileData]
|
|
if fileData < #filedataIDS then
|
|
msg = msg .. ", "
|
|
else
|
|
msg = msg .. '",'
|
|
if i < #exploredMapTextures then
|
|
msg = msg .. " "
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
msg = msg .. "},"
|
|
print(msg)
|
|
end
|
|
return
|
|
elseif str == "mk" then
|
|
-- Print a map key
|
|
if not arg1 then LeaPlusLC:Print("Key missing!") return end
|
|
if not tonumber(arg1) then LeaPlusLC:Print("Must be a number!") return end
|
|
local key = arg1
|
|
ChatFrame1:Clear()
|
|
print('"' .. mod(floor(key / 2^36), 2^12) .. ":" .. mod(floor(key / 2^24), 2^12) .. ":" .. mod(floor(key / 2^12), 2^12) .. ":" .. mod(key, 2^12) .. '"')
|
|
return
|
|
elseif str == "map" then
|
|
-- Set map by ID
|
|
if not arg1 or not tonumber(arg1) or not C_Map.GetMapInfo(arg1) then
|
|
LeaPlusLC:Print("Invalid map ID.")
|
|
else
|
|
WorldMapFrame:SetMapID(arg1)
|
|
end
|
|
return
|
|
elseif str == "cls" then
|
|
-- Clear chat frame
|
|
ChatFrame1:Clear()
|
|
return
|
|
elseif str == "al" then
|
|
-- Enable auto loot
|
|
SetCVar("autoLootDefault", "1")
|
|
LeaPlusLC:Print("Auto loot is now enabled.")
|
|
return
|
|
elseif str == "realm" then
|
|
-- Show list of connected realms
|
|
local titleRealm = GetRealmName()
|
|
local userRealm = GetNormalizedRealmName()
|
|
local connectedServers = GetAutoCompleteRealms()
|
|
if titleRealm and userRealm and connectedServers then
|
|
LeaPlusLC:Print(L["Connections for"] .. "|cffffffff " .. titleRealm)
|
|
if #connectedServers > 0 then
|
|
local count = 1
|
|
for i = 1, #connectedServers do
|
|
if userRealm ~= connectedServers[i] then
|
|
LeaPlusLC:Print(count .. ". " .. connectedServers[i])
|
|
count = count + 1
|
|
end
|
|
end
|
|
else
|
|
LeaPlusLC:Print("None")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "fon" then
|
|
-- Activate addon message parsing for AutoFollow
|
|
if C_ChatInfo.IsAddonMessagePrefixRegistered("Leatrix_Plus") then return end
|
|
C_ChatInfo.RegisterAddonMessagePrefix("Leatrix_Plus")
|
|
local fEvent = LeaPlusLC.FollowEvent or CreateFrame("FRAME")
|
|
fEvent:RegisterEvent("CHAT_MSG_ADDON")
|
|
fEvent:SetScript("OnEvent", function(self, event, arg1, message, void, sender)
|
|
if arg1 == "Leatrix_Plus" then
|
|
if message == "followme" then
|
|
sender = strsplit("-", sender, 2)
|
|
if not CheckInteractDistance(sender, 4) then
|
|
-- Sender is out of range
|
|
C_ChatInfo.SendAddonMessage("Leatrix_Plus", "outofrange", "WHISPER", sender)
|
|
return
|
|
end
|
|
if LeaPlusLC.AddonFollowTick then
|
|
-- Sender is already following so stop following
|
|
C_ChatInfo.SendAddonMessage("Leatrix_Plus", "stopfollowing", "WHISPER", sender)
|
|
LeaPlusLC.AddonFollowTick:Cancel()
|
|
LeaPlusLC.AddonFollowTick = nil
|
|
FollowUnit("player")
|
|
return
|
|
else
|
|
-- Sender is not already following so start following
|
|
C_ChatInfo.SendAddonMessage("Leatrix_Plus", "following", "WHISPER", sender)
|
|
FollowUnit(sender, true)
|
|
LeaPlusLC.AddonFollowTick = C_Timer.NewTicker(1, function()
|
|
FollowUnit(sender, true)
|
|
end)
|
|
return
|
|
end
|
|
elseif message == "following" then
|
|
LeaPlusLC:Print(sender .. " is following you.")
|
|
elseif message == "stopfollowing" then
|
|
LeaPlusLC:Print(sender .. " is no longer following you.")
|
|
elseif message == "outofrange" then
|
|
LeaPlusLC:Print(sender .. " is out of range.")
|
|
end
|
|
end
|
|
end)
|
|
LeaPlusLC:Print("Listening mode activated.")
|
|
return
|
|
elseif str == "fme" then
|
|
-- Addon message follow command
|
|
if not C_ChatInfo.IsAddonMessagePrefixRegistered("Leatrix_Plus") then
|
|
LeaPlusLC:Print("Listening mode is not activated.")
|
|
return
|
|
end
|
|
if not arg1 then
|
|
LeaPlusLC:Print("Invalid target.")
|
|
elseif not UnitInParty(arg1) and not UnitInRaid(arg1) then
|
|
LeaPlusLC:Print("Not in your party or raid.")
|
|
else
|
|
C_ChatInfo.SendAddonMessage("Leatrix_Plus", "followme", "WHISPER", arg1)
|
|
end
|
|
return
|
|
elseif str == "fmestop" then
|
|
-- Stop following
|
|
if LeaPlusLC.AddonFollowTick then
|
|
LeaPlusLC.AddonFollowTick:Cancel()
|
|
LeaPlusLC.AddonFollowTick = nil
|
|
FollowUnit("player")
|
|
LeaPlusLC:Print("You have stopped following.")
|
|
return
|
|
else
|
|
LeaPlusLC:Print("Nobody has commanded you to follow them.")
|
|
end
|
|
return
|
|
elseif str == "fonhelp" then
|
|
-- Show fon help
|
|
LeaPlusLC:Print("Both players need to enter /ltp fon to activate listening mode.")
|
|
LeaPlusLC:Print("To command a listening player to follow you, enter /ltp fme <char name>. The character needs to be in your party or raid. Enter the same command again to command the player to stop following you.")
|
|
LeaPlusLC:Print("To stop following a player who has commanded you to follow them, enter /ltp fmestop.")
|
|
LeaPlusLC:Print("To disable listening mode, reload your UI with /reload.")
|
|
LeaPlusLC:Print("Don't follow each other at the same time or you might crash your game client.")
|
|
return
|
|
elseif str == "deletelooms" then
|
|
-- Delete heirlooms from bags
|
|
for bag = 0, 4 do
|
|
for slot = 1, GetContainerNumSlots(bag) do
|
|
local name = GetContainerItemLink(bag, slot)
|
|
if name and string.find(name, "00ccff") then
|
|
print(name)
|
|
PickupContainerItem(bag, slot)
|
|
DeleteCursorItem()
|
|
end
|
|
end
|
|
end
|
|
return
|
|
elseif str == "help" then
|
|
-- Help panel
|
|
if not LeaPlusLC.HelpFrame then
|
|
local frame = CreateFrame("FRAME", nil, UIParent)
|
|
frame:SetSize(570, 380); frame:SetFrameStrata("FULLSCREEN_DIALOG"); frame:SetFrameLevel(100)
|
|
frame.tex = frame:CreateTexture(nil, "BACKGROUND"); frame.tex:SetAllPoints(); frame.tex:SetColorTexture(0.05, 0.05, 0.05, 0.9)
|
|
frame.close = CreateFrame("Button", nil, frame, "UIPanelCloseButton"); frame.close:SetSize(30, 30); frame.close:SetPoint("TOPRIGHT", 0, 0); frame.close:SetScript("OnClick", function() frame:Hide() end)
|
|
frame:ClearAllPoints(); frame:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
|
|
frame:SetClampedToScreen(true)
|
|
frame:SetClampRectInsets(450, -450, -300, 300)
|
|
frame:EnableMouse(true)
|
|
frame:SetMovable(true)
|
|
frame:RegisterForDrag("LeftButton")
|
|
frame:SetScript("OnDragStart", frame.StartMoving)
|
|
frame:SetScript("OnDragStop", function() frame:StopMovingOrSizing() frame:SetUserPlaced(false) end)
|
|
frame:Hide()
|
|
LeaPlusLC:CreateBar("HelpPanelMainTexture", frame, 570, 380, "TOPRIGHT", 0.7, 0.7, 0.7, 0.7, "Interface\\ACHIEVEMENTFRAME\\UI-GuildAchievement-Parchment-Horizontal-Desaturated.png")
|
|
-- Panel contents
|
|
local col1, col2, color1 = 10, 120, "|cffffffaa"
|
|
LeaPlusLC:MakeTx(frame, "Leatrix Plus Help", col1, -10)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp|r", col1, -30)
|
|
LeaPlusLC:MakeWD(frame, "Toggle opttions panel.", col2, -30)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp reset", col1, -50)
|
|
LeaPlusLC:MakeWD(frame, "Reset addon panel position and scale.", col2, -50)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp wipe", col1, -70)
|
|
LeaPlusLC:MakeWD(frame, "Wipe all addon settings (reloads UI).", col2, -70)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp realm", col1, -90)
|
|
LeaPlusLC:MakeWD(frame, "Show realms connected to yours.", col2, -90)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp rest", col1, -110)
|
|
LeaPlusLC:MakeWD(frame, "Show number of rested XP bubbles remaining.", col2, -110)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp quest <id>", col1, -130)
|
|
LeaPlusLC:MakeWD(frame, "Show quest completion status for <quest id>.", col2, -130)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp hk", col1, -150)
|
|
LeaPlusLC:MakeWD(frame, "Show your lifetime honorable kills.", col2, -150)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp grid", col1, -170)
|
|
LeaPlusLC:MakeWD(frame, "Toggle a frame alignment grid.", col2, -170)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp id", col1, -190)
|
|
LeaPlusLC:MakeWD(frame, "Show the unit ID of the currently targeted NPC.", col2, -190)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp zygor", col1, -210)
|
|
LeaPlusLC:MakeWD(frame, "Toggle the Zygor addon (reloads UI).", col2, -210)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp movie <id>", col1, -230)
|
|
LeaPlusLC:MakeWD(frame, "Play a movie by its ID.", col2, -230)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp enigma", col1, -250)
|
|
LeaPlusLC:MakeWD(frame, "Toggle the Enigmatic quest solver.", col2, -250)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp marker", col1, -270)
|
|
LeaPlusLC:MakeWD(frame, "Block target markers (toggle) (requires assistant or leader in raid).", col2, -270)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp rsnd", col1, -290)
|
|
LeaPlusLC:MakeWD(frame, "Restart the sound system.", col2, -290)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp ra", col1, -310)
|
|
LeaPlusLC:MakeWD(frame, "Announce target in General chat channel (useful for rares).", col2, -310)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/ltp con", col1, -330)
|
|
LeaPlusLC:MakeWD(frame, "Launch the developer console with a large font.", col2, -330)
|
|
LeaPlusLC:MakeWD(frame, color1 .. "/rl", col1, -350)
|
|
LeaPlusLC:MakeWD(frame, "Reload the UI.", col2, -350)
|
|
LeaPlusLC.HelpFrame = frame
|
|
_G["LeaPlusGlobalHelpPanel"] = frame
|
|
table.insert(UISpecialFrames, "LeaPlusGlobalHelpPanel")
|
|
end
|
|
if LeaPlusLC.HelpFrame:IsShown() then LeaPlusLC.HelpFrame:Hide() else LeaPlusLC.HelpFrame:Show() end
|
|
return
|
|
elseif str == "who" then
|
|
-- Print out who list URLs
|
|
ChatFrame1:Clear()
|
|
local realmName = gsub(GetRealmName(), " ", "-")
|
|
for i = 1,C_FriendList.GetNumWhoResults() do
|
|
local p = C_FriendList.GetWhoInfo(i)
|
|
if not string.find(p.fullName, "-") then
|
|
print("https://worldofwarcraft.com/en-gb/character/eu/" .. realmName .. "/" .. p.fullName .. "/collections/pets")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "ra" then
|
|
-- Announce target name, health percentage, coordinates and map pin link in General chat channel
|
|
local genChannel
|
|
if GameLocale == "deDE" then genChannel = "Allgemein"
|
|
elseif GameLocale == "esMX" then genChannel = "General"
|
|
elseif GameLocale == "esES" then genChannel = "General"
|
|
elseif GameLocale == "frFR" then genChannel = "Général"
|
|
elseif GameLocale == "itIT" then genChannel = "Generale"
|
|
elseif GameLocale == "ptBR" then genChannel = "Geral"
|
|
elseif GameLocale == "ruRU" then genChannel = "Общий"
|
|
elseif GameLocale == "koKR" then genChannel = "공개"
|
|
elseif GameLocale == "zhCN" then genChannel = "综合"
|
|
elseif GameLocale == "zhTW" then genChannel = "綜合"
|
|
else genChannel = "General"
|
|
end
|
|
if genChannel then
|
|
local index = GetChannelName(genChannel)
|
|
if index and index > 0 then
|
|
local mapID = C_Map.GetBestMapForUnit("player")
|
|
if C_Map.CanSetUserWaypointOnMap(mapID) then
|
|
local pos = C_Map.GetPlayerMapPosition(mapID, "player")
|
|
if pos.x and pos.x ~= "0" and pos.y and pos.y ~= "0" then
|
|
local mapPoint = UiMapPoint.CreateFromVector2D(mapID, pos)
|
|
if mapPoint then
|
|
local uHealth = UnitHealth("target")
|
|
local uHealthMax = UnitHealthMax("target")
|
|
-- Store original pin if there is one
|
|
local currentPin = C_Map.GetUserWaypointHyperlink()
|
|
-- Set map pin and get the link
|
|
C_Map.SetUserWaypoint(mapPoint)
|
|
local myPin = C_Map.GetUserWaypointHyperlink()
|
|
-- Put original pin back if there was one
|
|
if currentPin then
|
|
C_Timer.After(0.1, function()
|
|
local oldPin = C_Map.GetUserWaypointFromHyperlink(currentPin)
|
|
C_Map.SetUserWaypoint(oldPin)
|
|
end)
|
|
end
|
|
-- Announce in chat
|
|
if uHealth and uHealth > 0 and uHealthMax and uHealthMax > 0 and myPin then
|
|
-- Get unit classification (elite, rare, rare elite or boss)
|
|
local unitType, unitTag = UnitClassification("target"), ""
|
|
if unitType then
|
|
if unitType == "rare" or unitType == "rareelite" then unitTag = "(" .. L["Rare"] .. ") " elseif unitType == "worldboss" then unitTag = "(" .. L["Boss"] .. ") " end
|
|
end
|
|
SendChatMessage(format("%%t " .. unitTag .. "(%d%%)%s", uHealth / uHealthMax * 100, " " .. string.format("%.0f", pos.x * 100) .. ":" .. string.format("%.0f", pos.y * 100)) .. " " .. myPin .. " " .. L["by Leatrix Plus"], "CHANNEL", nil, index)
|
|
-- SendChatMessage(format("%%t " .. unitTag .. "(%d%%)%s", uHealth / uHealthMax * 100, " " .. string.format("%.0f", pos.x * 100) .. ":" .. string.format("%.0f", pos.y * 100)) .. " " .. myPin .. " " .. L["by Leatrix Plus"], "WHISPER", nil, GetUnitName("player")) -- Debug
|
|
C_Map.ClearUserWaypoint()
|
|
else
|
|
LeaPlusLC:Print("Invalid target.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Cannot announce in this zone.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Cannot announce in this zone.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Cannot announce in this zone.")
|
|
end
|
|
else
|
|
LeaPlusLC:Print("Cannot find General chat channel.")
|
|
end
|
|
end
|
|
return
|
|
elseif str == "camp" then
|
|
-- Camp
|
|
local origCampMsg = _G.IDLE_MESSAGE
|
|
if not LeaPlusLC.NoCampFrame then
|
|
local frame = CreateFrame("FRAME", nil, UIParent)
|
|
LeaPlusLC.NoCampFrame = frame
|
|
end
|
|
if LeaPlusLC.NoCampFrame:IsEventRegistered("PLAYER_CAMPING") then
|
|
LeaPlusLC.NoCampFrame:UnregisterEvent("PLAYER_CAMPING")
|
|
_G.IDLE_MESSAGE = origCampMsg
|
|
LeaPlusLC:Print("Camping enabled. You will camp.")
|
|
else
|
|
LeaPlusLC.NoCampFrame:RegisterEvent("PLAYER_CAMPING")
|
|
_G.IDLE_MESSAGE = nil
|
|
LeaPlusLC:Print("Camping disabled. You won't camp.")
|
|
end
|
|
LeaPlusLC.NoCampFrame:SetScript("OnEvent", function()
|
|
local p = StaticPopup_Visible("CAMP")
|
|
_G[p .. "Button1"]:Click()
|
|
end)
|
|
return
|
|
|
|
elseif str == "ach" then
|
|
-- Set Instance Achievement Tracker window properties
|
|
if AchievementTracker then
|
|
AchievementTracker:SetScale(1.4)
|
|
AchievementTracker:SetClampRectInsets(500, -500, -10, 300)
|
|
table.insert(UISpecialFrames, "AchievementTracker")
|
|
LeaPlusLC:Print("IAT scale set and window can now be closed with escape.")
|
|
end
|
|
return
|
|
elseif str == "blanchy" then
|
|
-- Sound alert when Dead Blanchy emotes nearby
|
|
LeaPlusLC.BlanchyFrame = LeaPlusLC.BlanchyFrame or CreateFrame("FRAME")
|
|
if LeaPlusLC.BlanchyFrame:IsEventRegistered("CHAT_MSG_MONSTER_EMOTE") then
|
|
C_Map.ClearUserWaypoint()
|
|
LeaPlusLC.BlanchyFrame:UnregisterEvent("CHAT_MSG_MONSTER_EMOTE")
|
|
LeaPlusLC:Print("Dead Blanchy alert disabled.")
|
|
else
|
|
C_Map.SetUserWaypoint(UiMapPoint.CreateFromVector2D(1525, CreateVector2D(63.1/100, 43.0/100)))
|
|
LeaPlusLC.BlanchyFrame:RegisterEvent("CHAT_MSG_MONSTER_EMOTE")
|
|
LeaPlusLC:Print("Dead Blanchy alert active. Spawn point has been pinned to the Revendreth map. An alert will sound 20 times when Blanchy emotes nearby.")
|
|
end
|
|
LeaPlusLC.BlanchyFrame:SetScript("OnEvent", function(self, event, void, pname)
|
|
if pname == L["Dead Blanchy"] then
|
|
C_Timer.NewTicker(1, function() PlaySound(8959, "Master") end, 20)
|
|
end
|
|
end)
|
|
return
|
|
elseif str == "perf" then
|
|
-- Average FPS during combat
|
|
local fTab = {}
|
|
if not LeaPlusLC.perf then
|
|
LeaPlusLC.perf = CreateFrame("FRAME")
|
|
end
|
|
local fFrm = LeaPlusLC.perf
|
|
local k, startTime = 0, 0
|
|
if fFrm:IsEventRegistered("PLAYER_REGEN_DISABLED") then
|
|
fFrm:UnregisterAllEvents()
|
|
fFrm:SetScript("OnUpdate", nil)
|
|
LeaPlusLC:Print("PERF unloaded.")
|
|
else
|
|
fFrm:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
fFrm:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
LeaPlusLC:Print("Waiting for combat to start...")
|
|
end
|
|
fFrm:SetScript("OnEvent", function(self, event)
|
|
if event == "PLAYER_REGEN_DISABLED" then
|
|
LeaPlusLC:Print("Monitoring FPS during combat...")
|
|
fFrm:SetScript("OnUpdate", function()
|
|
k = k + 1
|
|
fTab[k] = GetFramerate()
|
|
end)
|
|
startTime = GetTime()
|
|
else
|
|
fFrm:SetScript("OnUpdate", nil)
|
|
local tSum = 0
|
|
for i = 1, #fTab do
|
|
tSum = tSum + fTab[i]
|
|
end
|
|
local timeTaken = string.format("%.0f", GetTime() - startTime)
|
|
if tSum > 0 then
|
|
LeaPlusLC:Print("Average FPS for " .. timeTaken .. " seconds of combat: " .. string.format("%.0f", tSum / #fTab))
|
|
end
|
|
end
|
|
end)
|
|
return
|
|
elseif str == "admin" then
|
|
-- Preset profile (used for testing)
|
|
LpEvt:UnregisterAllEvents() -- Prevent changes
|
|
wipe(LeaPlusDB) -- Wipe settings
|
|
LeaPlusLC:PlayerLogout(true) -- Reset permanent settings
|
|
-- Automation
|
|
LeaPlusDB["AutomateQuests"] = "On" -- Automate quests
|
|
LeaPlusDB["AutoQuestShift"] = "Off" -- Automate quests requires shift
|
|
LeaPlusDB["AutoQuestAvailable"] = "On" -- Accept available quests
|
|
LeaPlusDB["AutoQuestCompleted"] = "On" -- Turn-in completed quests
|
|
LeaPlusDB["AutoQuestNoDaily"] = "Off" -- Don't accept daily quests
|
|
LeaPlusDB["AutoQuestNoWeekly"] = "Off" -- Don't accept weekly quests
|
|
LeaPlusDB["AutomateGossip"] = "On" -- Automate gossip
|
|
LeaPlusDB["AutoAcceptSummon"] = "On" -- Accept summon
|
|
LeaPlusDB["AutoAcceptRes"] = "On" -- Accept resurrection
|
|
LeaPlusDB["AutoReleasePvP"] = "On" -- Release in PvP
|
|
LeaPlusDB["AutoSellJunk"] = "On" -- Sell junk automatically
|
|
LeaPlusDB["AutoRepairGear"] = "On" -- Repair automatically
|
|
|
|
-- Social
|
|
LeaPlusDB["NoDuelRequests"] = "On" -- Block duels
|
|
LeaPlusDB["NoPetDuels"] = "On" -- Block pet battle duels
|
|
LeaPlusDB["NoPartyInvites"] = "Off" -- Block party invites
|
|
LeaPlusDB["NoFriendRequests"] = "Off" -- Block friend requests
|
|
LeaPlusDB["AcceptPartyFriends"] = "On" -- Party from friends
|
|
LeaPlusDB["SyncFromFriends"] = "On" -- Sync from friends
|
|
LeaPlusDB["AutoConfirmRole"] = "On" -- Queue from friends
|
|
LeaPlusDB["InviteFromWhisper"] = "On" -- Invite from whispers
|
|
LeaPlusDB["InviteFriendsOnly"] = "On" -- Restrict invites to friends
|
|
|
|
-- Chat
|
|
LeaPlusDB["UseEasyChatResizing"] = "On" -- Use easy resizing
|
|
LeaPlusDB["NoCombatLogTab"] = "On" -- Hide the combat log
|
|
LeaPlusDB["NoChatButtons"] = "On" -- Hide chat buttons
|
|
LeaPlusDB["ShowVoiceButtons"] = "On" -- Show voice buttons
|
|
LeaPlusDB["ShowChatMenuButton"] = "Off" -- Show chat menu button
|
|
LeaPlusDB["NoSocialButton"] = "On" -- Hide social button
|
|
LeaPlusDB["UnclampChat"] = "On" -- Unclamp chat frame
|
|
LeaPlusDB["MoveChatEditBoxToTop"] = "On" -- Move editbox to top
|
|
LeaPlusDB["NoStickyChat"] = "On" -- Disable sticky chat
|
|
LeaPlusDB["NoStickyEditbox"] = "On" -- Disable sticky editbox
|
|
LeaPlusDB["UseArrowKeysInChat"] = "On" -- Use arrow keys in chat
|
|
LeaPlusDB["NoChatFade"] = "On" -- Disable chat fade
|
|
LeaPlusDB["UnivGroupColor"] = "On" -- Universal group color
|
|
LeaPlusDB["RecentChatWindow"] = "On" -- Recent chat window
|
|
LeaPlusDB["RecentChatSize"] = 170 -- Recent chat size
|
|
LeaPlusDB["MaxChatHstory"] = "Off" -- Increase chat history
|
|
|
|
-- Text
|
|
LeaPlusDB["HideErrorMessages"] = "On" -- Hide error messages
|
|
LeaPlusDB["NoHitIndicators"] = "On" -- Hide portrait text
|
|
LeaPlusDB["MailFontChange"] = "On" -- Resize mail text
|
|
LeaPlusDB["LeaPlusMailFontSize"] = 22 -- Mail font size
|
|
LeaPlusDB["QuestFontChange"] = "On" -- Resize quest text
|
|
LeaPlusDB["LeaPlusQuestFontSize"] = 18 -- Quest font size
|
|
|
|
-- Interface
|
|
LeaPlusDB["MinimapMod"] = "On" -- Enhance minimap
|
|
LeaPlusDB["HideZoneTextBar"] = "On" -- Hide zone text bar
|
|
LeaPlusDB["MinimapScale"] = 1.30 -- Minimap scale slider
|
|
LeaPlusDB["TipModEnable"] = "On" -- Enhance tooltip
|
|
LeaPlusDB["TipBackSimple"] = "On" -- Color backdrops
|
|
LeaPlusDB["LeaPlusTipSize"] = 1.25 -- Tooltip scale slider
|
|
LeaPlusDB["TooltipAnchorMenu"] = 2 -- Tooltip anchor
|
|
LeaPlusDB["TipCursorX"] = 0 -- X offset
|
|
LeaPlusDB["TipCursorY"] = 0 -- Y offset
|
|
LeaPlusDB["EnhanceDressup"] = "On" -- Enhance dressup
|
|
LeaPlusDB["ShowVolume"] = "On" -- Show volume slider
|
|
LeaPlusDB["ShowCooldowns"] = "On" -- Show cooldowns
|
|
LeaPlusDB["DurabilityStatus"] = "On" -- Show durability status
|
|
LeaPlusDB["ShowPetSaveBtn"] = "On" -- Show pet save button
|
|
LeaPlusDB["ShowRaidToggle"] = "On" -- Show raid toggle button
|
|
LeaPlusDB["ShowBorders"] = "On" -- Show borders
|
|
LeaPlusDB["ShowPlayerChain"] = "On" -- Show player chain
|
|
LeaPlusDB["PlayerChainMenu"] = 3 -- Player chain style
|
|
LeaPlusDB["ShowWowheadLinks"] = "On" -- Show Wowhead links
|
|
|
|
-- Interface: Manage frames
|
|
LeaPlusDB["FrmEnabled"] = "On"
|
|
|
|
LeaPlusDB["Frames"] = {}
|
|
LeaPlusDB["Frames"]["PlayerFrame"] = {}
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["Point"] = "TOPLEFT"
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["Relative"] = "TOPLEFT"
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["XOffset"] = -35
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["YOffset"] = -14
|
|
LeaPlusDB["Frames"]["PlayerFrame"]["Scale"] = 1.20
|
|
|
|
LeaPlusDB["Frames"]["TargetFrame"] = {}
|
|
LeaPlusDB["Frames"]["TargetFrame"]["Point"] = "TOPLEFT"
|
|
LeaPlusDB["Frames"]["TargetFrame"]["Relative"] = "TOPLEFT"
|
|
LeaPlusDB["Frames"]["TargetFrame"]["XOffset"] = 190
|
|
LeaPlusDB["Frames"]["TargetFrame"]["YOffset"] = -14
|
|
LeaPlusDB["Frames"]["TargetFrame"]["Scale"] = 1.20
|
|
|
|
LeaPlusDB["Frames"]["GhostFrame"] = {}
|
|
LeaPlusDB["Frames"]["GhostFrame"]["Point"] = "CENTER"
|
|
LeaPlusDB["Frames"]["GhostFrame"]["Relative"] = "CENTER"
|
|
LeaPlusDB["Frames"]["GhostFrame"]["XOffset"] = 3
|
|
LeaPlusDB["Frames"]["GhostFrame"]["YOffset"] = -142
|
|
|
|
LeaPlusDB["Frames"]["MirrorTimer1"] = {}
|
|
LeaPlusDB["Frames"]["MirrorTimer1"]["Point"] = "TOP"
|
|
LeaPlusDB["Frames"]["MirrorTimer1"]["Relative"] = "TOP"
|
|
LeaPlusDB["Frames"]["MirrorTimer1"]["XOffset"] = 0
|
|
LeaPlusDB["Frames"]["MirrorTimer1"]["YOffset"] = -120
|
|
|
|
LeaPlusDB["ManageBuffs"] = "On" -- Manage buffs
|
|
LeaPlusDB["BuffFrameA"] = "TOPRIGHT" -- Manage buffs anchor
|
|
LeaPlusDB["BuffFrameR"] = "TOPRIGHT" -- Manage buffs relative
|
|
LeaPlusDB["BuffFrameX"] = -271 -- Manage buffs position X
|
|
LeaPlusDB["BuffFrameY"] = 0 -- Manage buffs position Y
|
|
LeaPlusDB["BuffFrameScale"] = 0.8 -- Manage buffs scale
|
|
|
|
LeaPlusDB["ManagePowerBar"] = "On" -- Manage power bar
|
|
LeaPlusDB["PowerBarA"] = "CENTER" -- Manage power bar anchor
|
|
LeaPlusDB["PowerBarR"] = "CENTER" -- Manage power bar relative
|
|
LeaPlusDB["PowerBarX"] = 0 -- Manage power bar position X
|
|
LeaPlusDB["PowerBarY"] = -160 -- Manage power bar position Y
|
|
LeaPlusDB["PowerBarScale"] = 1.25 -- Manage power bar scale
|
|
|
|
LeaPlusDB["ManageWidget"] = "On" -- Manage widget
|
|
LeaPlusDB["WidgetA"] = "TOP" -- Manage widget anchor
|
|
LeaPlusDB["WidgetR"] = "TOP" -- Manage widget relative
|
|
LeaPlusDB["WidgetX"] = 0 -- Manage widget position X
|
|
LeaPlusDB["WidgetY"] = -432 -- Manage widget position Y
|
|
LeaPlusDB["WidgetScale"] = 1.25 -- Manage widget scale
|
|
|
|
LeaPlusDB["ManageFocus"] = "On" -- Manage focus
|
|
LeaPlusDB["FocusA"] = "TOPLEFT" -- Manage focus anchor
|
|
LeaPlusDB["FocusR"] = "TOPLEFT" -- Manage focus relative
|
|
LeaPlusDB["FocusX"] = 250 -- Manage focus position X
|
|
LeaPlusDB["FocusY"] = -240 -- Manage focus position Y
|
|
LeaPlusDB["FocusScale"] = 1.00 -- Manage focus scale
|
|
|
|
LeaPlusDB["ClassColFrames"] = "On" -- Class colored frames
|
|
|
|
LeaPlusDB["NoAlerts"] = "On" -- Hide alerts
|
|
LeaPlusDB["HideBodyguard"] = "On" -- Hide bodyguard window
|
|
LeaPlusDB["HideTalkingFrame"] = "On" -- Hide talking frame
|
|
LeaPlusDB["HideCleanupBtns"] = "On" -- Hide cleanup buttons
|
|
LeaPlusDB["HideBossBanner"] = "On" -- Hide boss banner
|
|
LeaPlusDB["HideLevelUpDisplay"] = "On" -- Hide level-up display
|
|
LeaPlusDB["NoGryphons"] = "On" -- Hide gryphons
|
|
LeaPlusDB["NoClassBar"] = "On" -- Hide stance bar
|
|
LeaPlusDB["NoCommandBar"] = "On" -- Hide order hall bar
|
|
|
|
-- System
|
|
LeaPlusDB["NoScreenGlow"] = "On" -- Disable screen glow
|
|
LeaPlusDB["NoScreenEffects"] = "On" -- Disable screen effects
|
|
LeaPlusDB["SetWeatherDensity"] = "On" -- Set weather density
|
|
LeaPlusDB["WeatherLevel"] = 0 -- Weather density level
|
|
LeaPlusDB["MaxCameraZoom"] = "On" -- Max camera zoom
|
|
LeaPlusDB["NoRestedEmotes"] = "On" -- Silence rested emotes
|
|
LeaPlusDB["MuteGameSounds"] = "On" -- Mute game sounds
|
|
|
|
LeaPlusDB["NoBagAutomation"] = "On" -- Disable bag automation
|
|
LeaPlusDB["NoPetAutomation"] = "On" -- Disable pet automation
|
|
LeaPlusDB["CharAddonList"] = "On" -- Show character addons
|
|
LeaPlusDB["NoRaidRestrictions"] = "On" -- Remove raid restrictions
|
|
LeaPlusDB["NoConfirmLoot"] = "On" -- Disable loot warnings
|
|
LeaPlusDB["SaveProfFilters"] = "On" -- Save profession filters
|
|
LeaPlusDB["FasterLooting"] = "On" -- Faster auto loot
|
|
LeaPlusDB["FasterMovieSkip"] = "On" -- Faster movie skip
|
|
LeaPlusDB["CombatPlates"] = "On" -- Combat plates
|
|
LeaPlusDB["EasyItemDestroy"] = "On" -- Easy item destroy
|
|
LeaPlusDB["LockoutSharing"] = "On" -- Lockout sharing
|
|
|
|
-- Settings
|
|
LeaPlusDB["EnableHotkey"] = "On" -- Enable hotkey
|
|
|
|
-- Function to assign cooldowns
|
|
local function setIcon(pclass, pspec, sp1, pt1, sp2, pt2, sp3, pt3, sp4, pt4, sp5, pt5)
|
|
-- Set spell ID
|
|
if sp1 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R1Idn"] = "" else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R1Idn"] = sp1 end
|
|
if sp2 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R2Idn"] = "" else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R2Idn"] = sp2 end
|
|
if sp3 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R3Idn"] = "" else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R3Idn"] = sp3 end
|
|
if sp4 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R4Idn"] = "" else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R4Idn"] = sp4 end
|
|
if sp5 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R5Idn"] = "" else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R5Idn"] = sp5 end
|
|
-- Set pet checkbox
|
|
if pt1 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R1Pet"] = false else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R1Pet"] = true end
|
|
if pt2 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R2Pet"] = false else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R2Pet"] = true end
|
|
if pt3 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R3Pet"] = false else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R3Pet"] = true end
|
|
if pt4 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R4Pet"] = false else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R4Pet"] = true end
|
|
if pt5 == 0 then LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R5Pet"] = false else LeaPlusDB["Cooldowns"][pclass]["S" .. pspec .. "R5Pet"] = true end
|
|
end
|
|
|
|
-- Create main table
|
|
LeaPlusDB["Cooldowns"] = {}
|
|
|
|
-- Create class tables
|
|
for index = 1, GetNumClasses() do
|
|
local classDisplayName, classTag, classID = GetClassInfo(index)
|
|
LeaPlusDB["Cooldowns"][classTag] = {}
|
|
end
|
|
|
|
-- Assign cooldowns
|
|
setIcon("WARRIOR", 1, --[[Arms]] --[[1]] 32216, 0, --[[2]] 209574, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Victory Rush, Shattered Defences
|
|
setIcon("WARRIOR", 2, --[[Fury]] --[[1]] 32216, 0, --[[2]] 184362, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Victory Rush, Enrage
|
|
setIcon("WARRIOR", 3, --[[Protection]] --[[1]] 32216, 0, --[[2]] 190456, 0, --[[3]] 132404, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Victory Rush, Ignore Pain, Shield Block
|
|
|
|
setIcon("PALADIN", 1, --[[Holy]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 203539, 0, --[[5]] 203538, 0) -- nil, nil, nil, Wisdom, Kings
|
|
setIcon("PALADIN", 2, --[[Protection]] --[[1]] 132403, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Shield of the Righteous, nil, nil, nil, nil
|
|
setIcon("PALADIN", 3, --[[Retribution]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 203539, 0, --[[5]] 203538, 0) -- nil, nil, nil, Wisdom, Kings
|
|
|
|
setIcon("SHAMAN", 1, --[[Elemental]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 215864, 0, --[[5]] 546, 0) -- nil, nil, nil, Rainfall, Water Walking
|
|
setIcon("SHAMAN", 2, --[[Enhancement]] --[[1]] 194084, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 215864, 0, --[[5]] 546, 0) -- Flametongue, nil, nil, Rainfall, Water Walking
|
|
setIcon("SHAMAN", 3, --[[Resto]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 215864, 0, --[[5]] 546, 0) -- nil, nil, nil, Rainfall, Water Walking
|
|
|
|
setIcon("ROGUE", 1, --[[Assassination]] --[[1]] 1784, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 2823, 0, --[[5]] 3408, 0) -- Stealth, nil, nil, Deadly Poison, Crippling Poison
|
|
setIcon("ROGUE", 2, --[[Outlaw]] --[[1]] 1784, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 2823, 0, --[[5]] 3408, 0) -- Stealth, nil, nil, Deadly Poison, Crippling Poison
|
|
setIcon("ROGUE", 3, --[[Subtetly]] --[[1]] 1784, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 2823, 0, --[[5]] 3408, 0) -- Stealth, nil, nil, Deadly Poison, Crippling Poison
|
|
|
|
setIcon("DRUID", 1, --[[Balance]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("DRUID", 2, --[[Feral]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("DRUID", 3, --[[Guardian]] --[[1]] 192081, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Ironfur
|
|
setIcon("DRUID", 4, --[[Resto]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
|
|
setIcon("MONK", 1, --[[Brewmaster]] --[[1]] 125359, 0, --[[2]] 115307, 0, --[[3]] 124274, 0, --[[4]] 124273, 0, --[[5]] 116781, 0) -- Tiger Power, Shuffle, Moderate Stagger, Heavy Stagger, Legacy of the White Tiger
|
|
setIcon("MONK", 2, --[[Mistweaver]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("MONK", 3, --[[Windwalker]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
|
|
setIcon("MAGE", 1, --[[Arcane]] --[[1]] 235450, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 1459, 0) -- Prismatic Barrier, nil, nil, nil, Arcane Intellect
|
|
setIcon("MAGE", 2, --[[Fire]] --[[1]] 235313, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 1459, 0) -- Blazing Barrier, nil, nil, nil, Arcane Intellect
|
|
setIcon("MAGE", 3, --[[Frost]] --[[1]] 11426, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 1459, 0) -- Ice Barrier, nil, nil, nil, Arcane Intellect
|
|
|
|
setIcon("WARLOCK", 1, --[[Affliction]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("WARLOCK", 2, --[[Demonology]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("WARLOCK", 3, --[[Destruction]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
|
|
setIcon("PRIEST", 1, --[[Discipline]] --[[1]] 17, 0, --[[2]] 194384, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Power Word: Shield
|
|
setIcon("PRIEST", 2, --[[Holy]] --[[1]] 17, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Power Word: Shield
|
|
setIcon("PRIEST", 3, --[[Shadow]] --[[1]] 17, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0) -- Power Word: Shield
|
|
|
|
setIcon("HUNTER", 1, --[[Beast Mastery]] --[[1]] 136, 1, --[[2]] 118455, 1, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 5384, 0) -- Mend Pet, nil, nil, nil, Feign Death
|
|
setIcon("HUNTER", 2, --[[Marksmanship]] --[[1]] 136, 1, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 5384, 0) -- Mend Pet, nil, nil, nil, Feign Death
|
|
setIcon("HUNTER", 3, --[[Survival]] --[[1]] 136, 1, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 5384, 0) -- Mend Pet, nil, nil, nil, Feign Death
|
|
|
|
setIcon("DEATHKNIGHT", 1, --[[Blood]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 195181, 0) -- nil, nil, nil, nil, Bone Shield
|
|
setIcon("DEATHKNIGHT", 2, --[[Frost]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("DEATHKNIGHT", 3, --[[Unholy]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
|
|
setIcon("DEMONHUNTER", 1, --[[Havoc]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 0, 0)
|
|
setIcon("DEMONHUNTER", 2, --[[Vengeance]] --[[1]] 0, 0, --[[2]] 0, 0, --[[3]] 0, 0, --[[4]] 0, 0, --[[5]] 203819, 0) -- nil, nil, nil, nil, Demon Spikes
|
|
|
|
-- Mute game sounds (LeaPlusLC["MuteGameSounds"])
|
|
for k, v in pairs(LeaPlusLC["muteTable"]) do
|
|
LeaPlusDB[k] = "On"
|
|
end
|
|
LeaPlusDB["MuteReady"] = "Off" -- Mute ready check
|
|
|
|
-- Reload
|
|
ReloadUI()
|
|
else
|
|
LeaPlusLC:Print("Invalid parameter.")
|
|
end
|
|
return
|
|
else
|
|
-- Prevent options panel from showing if a game options panel is showing
|
|
if InterfaceOptionsFrame:IsShown() or VideoOptionsFrame:IsShown() or ChatConfigFrame:IsShown() then return end
|
|
-- Prevent options panel from showing if Blizzard Store is showing
|
|
if StoreFrame and StoreFrame:GetAttribute("isshown") then return end
|
|
-- Toggle the options panel if game options panel is not showing
|
|
if LeaPlusLC:IsPlusShowing() then
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC:HideConfigPanels()
|
|
else
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC["PageF"]:Show()
|
|
end
|
|
LeaPlusLC["Page"..LeaPlusLC["LeaStartPage"]]:Show()
|
|
end
|
|
end
|
|
|
|
-- Slash command for global function
|
|
_G.SLASH_Leatrix_Plus1 = "/ltp"
|
|
_G.SLASH_Leatrix_Plus2 = "/leaplus"
|
|
SlashCmdList["Leatrix_Plus"] = function(self)
|
|
-- Run slash command function
|
|
LeaPlusLC:SlashFunc(self)
|
|
-- Redirect tainted variables
|
|
RunScript('ACTIVE_CHAT_EDIT_BOX = ACTIVE_CHAT_EDIT_BOX')
|
|
RunScript('LAST_ACTIVE_CHAT_EDIT_BOX = LAST_ACTIVE_CHAT_EDIT_BOX')
|
|
end
|
|
|
|
-- Slash command for UI reload
|
|
_G.SLASH_LEATRIX_PLUS_RL1 = "/rl"
|
|
SlashCmdList["LEATRIX_PLUS_RL"] = function()
|
|
ReloadUI()
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- L90: Create options panel pages (no content yet)
|
|
----------------------------------------------------------------------
|
|
|
|
-- Function to add menu button
|
|
function LeaPlusLC:MakeMN(name, text, parent, anchor, x, y, width, height)
|
|
|
|
local mbtn = CreateFrame("Button", nil, parent)
|
|
LeaPlusLC[name] = mbtn
|
|
mbtn:Show();
|
|
mbtn:SetSize(width, height)
|
|
mbtn:SetAlpha(1.0)
|
|
mbtn:SetPoint(anchor, x, y)
|
|
|
|
mbtn.t = mbtn:CreateTexture(nil, "BACKGROUND")
|
|
mbtn.t:SetAllPoints()
|
|
mbtn.t:SetColorTexture(0.3, 0.3, 0.00, 0.8)
|
|
mbtn.t:SetAlpha(0.7)
|
|
mbtn.t:Hide()
|
|
|
|
mbtn.s = mbtn:CreateTexture(nil, "BACKGROUND")
|
|
mbtn.s:SetAllPoints()
|
|
mbtn.s:SetColorTexture(0.3, 0.3, 0.00, 0.8)
|
|
mbtn.s:Hide()
|
|
|
|
mbtn.f = mbtn:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
|
|
mbtn.f:SetPoint('LEFT', 16, 0)
|
|
mbtn.f:SetText(L[text])
|
|
|
|
mbtn:SetScript("OnEnter", function()
|
|
mbtn.t:Show()
|
|
end)
|
|
|
|
mbtn:SetScript("OnLeave", function()
|
|
mbtn.t:Hide()
|
|
end)
|
|
|
|
return mbtn, mbtn.s
|
|
|
|
end
|
|
|
|
-- Function to create individual options panel pages
|
|
function LeaPlusLC:MakePage(name, title, menu, menuname, menuparent, menuanchor, menux, menuy, menuwidth, menuheight)
|
|
|
|
-- Create frame
|
|
local oPage = CreateFrame("Frame", nil, LeaPlusLC["PageF"])
|
|
LeaPlusLC[name] = oPage
|
|
oPage:SetAllPoints(LeaPlusLC["PageF"])
|
|
oPage:Hide()
|
|
|
|
-- Add page title
|
|
oPage.s = oPage:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge')
|
|
oPage.s:SetPoint('TOPLEFT', 146, -16)
|
|
oPage.s:SetText(L[title])
|
|
|
|
-- Add menu item if needed
|
|
if menu then
|
|
LeaPlusLC[menu], LeaPlusLC[menu .. ".s"] = LeaPlusLC:MakeMN(menu, menuname, menuparent, menuanchor, menux, menuy, menuwidth, menuheight)
|
|
LeaPlusLC[name]:SetScript("OnShow", function() LeaPlusLC[menu .. ".s"]:Show(); end)
|
|
LeaPlusLC[name]:SetScript("OnHide", function() LeaPlusLC[menu .. ".s"]:Hide(); end)
|
|
end
|
|
|
|
return oPage
|
|
|
|
end
|
|
|
|
-- Create options pages
|
|
LeaPlusLC["Page0"] = LeaPlusLC:MakePage("Page0", "Home" , "LeaPlusNav0", "Home" , LeaPlusLC["PageF"], "TOPLEFT", 16, -72, 112, 20)
|
|
LeaPlusLC["Page1"] = LeaPlusLC:MakePage("Page1", "Automation" , "LeaPlusNav1", "Automation" , LeaPlusLC["PageF"], "TOPLEFT", 16, -112, 112, 20)
|
|
LeaPlusLC["Page2"] = LeaPlusLC:MakePage("Page2", "Social" , "LeaPlusNav2", "Social" , LeaPlusLC["PageF"], "TOPLEFT", 16, -132, 112, 20)
|
|
LeaPlusLC["Page3"] = LeaPlusLC:MakePage("Page3", "Chat" , "LeaPlusNav3", "Chat" , LeaPlusLC["PageF"], "TOPLEFT", 16, -152, 112, 20)
|
|
LeaPlusLC["Page4"] = LeaPlusLC:MakePage("Page4", "Text" , "LeaPlusNav4", "Text" , LeaPlusLC["PageF"], "TOPLEFT", 16, -172, 112, 20)
|
|
LeaPlusLC["Page5"] = LeaPlusLC:MakePage("Page5", "Interface" , "LeaPlusNav5", "Interface" , LeaPlusLC["PageF"], "TOPLEFT", 16, -192, 112, 20)
|
|
LeaPlusLC["Page6"] = LeaPlusLC:MakePage("Page6", "Frames" , "LeaPlusNav6", "Frames" , LeaPlusLC["PageF"], "TOPLEFT", 16, -212, 112, 20)
|
|
LeaPlusLC["Page7"] = LeaPlusLC:MakePage("Page7", "System" , "LeaPlusNav7", "System" , LeaPlusLC["PageF"], "TOPLEFT", 16, -232, 112, 20)
|
|
LeaPlusLC["Page8"] = LeaPlusLC:MakePage("Page8", "Settings" , "LeaPlusNav8", "Settings" , LeaPlusLC["PageF"], "TOPLEFT", 16, -272, 112, 20)
|
|
LeaPlusLC["Page9"] = LeaPlusLC:MakePage("Page9", "Media" , "LeaPlusNav9", "Media" , LeaPlusLC["PageF"], "TOPLEFT", 16, -292, 112, 20)
|
|
|
|
-- Page navigation mechanism
|
|
for i = 0, LeaPlusLC["NumberOfPages"] do
|
|
LeaPlusLC["LeaPlusNav"..i]:SetScript("OnClick", function()
|
|
LeaPlusLC:HideFrames()
|
|
LeaPlusLC["PageF"]:Show()
|
|
LeaPlusLC["Page"..i]:Show()
|
|
LeaPlusLC["LeaStartPage"] = i
|
|
end)
|
|
end
|
|
|
|
-- Use a variable to contain the page number (makes it easier to move options around)
|
|
local pg;
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC0: Welcome
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page0"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Welcome to Leatrix Plus.", 146, -72)
|
|
LeaPlusLC:MakeWD(LeaPlusLC[pg], "To begin, choose an options page.", 146, -92)
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Support", 146, -132);
|
|
LeaPlusLC:MakeWD(LeaPlusLC[pg], "curseforge.com/wow/addons/leatrix-plus", 146, -152)
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC1: Automation
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page1"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Character" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutomateQuests" , "Automate quests" , 146, -92, false, "If checked, quests will be selected, accepted and turned-in automatically.|n|nQuests which have a gold, currency or crafting reagent requirement will not be turned-in automatically.|n|nYou can hold the shift key down when you talk to a quest giver to override this setting.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutomateGossip" , "Automate gossip" , 146, -112, false, "If checked, you can hold down the alt key while opening a gossip window to automatically select a single gossip option.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoAcceptSummon" , "Accept summon" , 146, -132, false, "If checked, summon requests will be accepted automatically unless you are in combat.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoAcceptRes" , "Accept resurrection" , 146, -152, false, "If checked, resurrection requests will be accepted automatically as long as the player resurrecting you is not in combat.|n|nResurrection requests from a Brazier of Awakening or a Failure Detection Pylon will not be accepted automatically.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoReleasePvP" , "Release in PvP" , 146, -172, false, "If checked, you will release automatically after you die in Ashran, Tol Barad (PvP), Wintergrasp or any battleground.|n|nYou will not release automatically if you have the ability to self-resurrect (soulstone, reincarnation, etc).")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Vendors" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoSellJunk" , "Sell junk automatically" , 340, -92, false, "If checked, all grey items in your bags will be sold automatically when you visit a merchant.|n|nYou can hold the shift key down when you talk to a merchant to override this setting.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoRepairGear" , "Repair automatically" , 340, -112, false, "If checked, your gear will be repaired automatically when you visit a suitable merchant.|n|nYou can hold the shift key down when you talk to a merchant to override this setting.")
|
|
|
|
LeaPlusLC:CfgBtn("AutomateQuestsBtn", LeaPlusCB["AutomateQuests"])
|
|
LeaPlusLC:CfgBtn("AutoRepairBtn", LeaPlusCB["AutoRepairGear"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC2: Social
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page2"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Blocks" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoDuelRequests" , "Block duels" , 146, -92, false, "If checked, duel requests will be blocked unless the player requesting the duel is in your friends list or guild.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoPetDuels" , "Block pet battle duels" , 146, -112, false, "If checked, pet battle duel requests will be blocked unless the player requesting the duel is in your friends list or guild.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoPartyInvites" , "Block party invites" , 146, -132, false, "If checked, party invitations will be blocked unless the player inviting you is in your friends list or guild.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoFriendRequests" , "Block friend requests" , 146, -152, false, "If checked, BattleTag and Real ID friend requests will be automatically declined.|n|nEnabling this option will automatically decline any pending requests.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Groups" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AcceptPartyFriends" , "Party from friends" , 340, -92, false, "If checked, party invitations from friends or guild members will be automatically accepted unless you are queued in Dungeon Finder.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "SyncFromFriends" , "Sync from friends" , 340, -112, false, "If checked, party sync requests from friends or guild members will be automatically accepted.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "AutoConfirmRole" , "Queue from friends" , 340, -132, false, "If checked, requests initiated by your party leader to join the Dungeon Finder queue will be automatically accepted if the party leader is in your friends list or guild.|n|nThis option requires that you have selected a role for your character in the Dungeon Finder window.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "InviteFromWhisper" , "Invite from whispers" , 340, -152, false, L["If checked, a group invite will be sent to anyone who whispers you with a set keyword as long as you are ungrouped, group leader or raid assistant and not queued for a dungeon or raid.|n|nFriends who message the keyword using Battle.net will not be sent a group invite if they are appearing offline. They need to either change their online status or use character whispers."] .. "|n|n" .. L["Keyword"] .. ": |cffffffff" .. "dummy" .. "|r")
|
|
|
|
LeaPlusLC:CfgBtn("InvWhisperBtn", LeaPlusCB["InviteFromWhisper"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC3: Chat
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page3"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Chat Frame" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "UseEasyChatResizing" , "Use easy resizing" , 146, -92, true, "If checked, dragging the General chat tab while the chat frame is locked will expand the chat frame upwards.|n|n\If the chat frame is unlocked, dragging the General chat tab will move the chat frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoCombatLogTab" , "Hide the combat log" , 146, -112, true, "If checked, the combat log will be hidden.|n|nThe combat log must be docked in order for this option to work.|n|nIf the combat log is undocked, you can dock it by dragging the tab (and reloading your UI) or by resetting the chat windows (from the chat menu).")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoChatButtons" , "Hide chat buttons" , 146, -132, true, "If checked, chat frame buttons will be hidden.|n|nClicking chat tabs will automatically show the latest messages.|n|nUse the mouse wheel to scroll through the chat history. Hold down SHIFT for page jump or CTRL to jump to the top or bottom of the chat history.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoSocialButton" , "Hide social button" , 146, -152, true, "If checked, the social button and quick-join notification will be hidden.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "UnclampChat" , "Unclamp chat frame" , 146, -172, true, "If checked, you will be able to drag the chat frame to the edge of the screen.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MoveChatEditBoxToTop" , "Move editbox to top" , 146, -192, true, "If checked, the editbox will be moved to the top of the chat frame.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Mechanics" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoStickyChat" , "Disable sticky chat" , 340, -92, true, "If checked, sticky chat will be disabled.|n|nNote that this does not apply to temporary chat windows.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoStickyEditbox" , "Disable sticky editbox" , 340, -112, true, "If checked, the editbox will close when it loses focus.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "UseArrowKeysInChat" , "Use arrow keys in chat" , 340, -132, true, "If checked, you can press the arrow keys to move the insertion point left and right in the chat frame.|n|nIf unchecked, the arrow keys will use the default keybind setting.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoChatFade" , "Disable chat fade" , 340, -152, true, "If checked, chat text will not fade out after a time period.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "UnivGroupColor" , "Universal group color" , 340, -172, false, "If checked, raid chat and instance chat will both be colored blue (to match the default party chat color).")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "RecentChatWindow" , "Recent chat window" , 340, -192, true, "If checked, you can hold down the control key and click a chat tab to view recent chat in a copy-friendly window.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MaxChatHstory" , "Increase chat history" , 340, -212, true, "If checked, your chat history will increase to 4096 lines. If unchecked, the default will be used (128 lines).|n|nEnabling this option may prevent some chat text from showing during login.")
|
|
|
|
LeaPlusLC:CfgBtn("NoChatButtonsBtn", LeaPlusCB["NoChatButtons"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC4: Text
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page4"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Visibility" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideErrorMessages" , "Hide error messages" , 146, -92, true, "If checked, most error messages (such as 'Not enough rage') will not be shown. Some important errors are excluded.|n|nIf you have the minimap button enabled, you can hold down the control key and right-click it to toggle error messages without affecting this setting.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoHitIndicators" , "Hide portrait numbers" , 146, -112, true, "If checked, damage and healing numbers in the player and pet portrait frames will be hidden.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideZoneText" , "Hide zone text" , 146, -132, true, "If checked, zone text will not be shown (eg. 'Ironforge').")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Text Size" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MailFontChange" , "Resize mail text" , 340, -92, true, "If checked, you will be able to change the font size of standard mail text.|n|nThis does not affect mail created using templates (such as auction house invoices).")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "QuestFontChange" , "Resize quest text" , 340, -112, true, "If checked, you will be able to change the font size of quest text.|n|nEnabling this option will also change the text size of other frames which inherit the same font (such as the Dungeon Finder frame).")
|
|
|
|
LeaPlusLC:CfgBtn("MailTextBtn", LeaPlusCB["MailFontChange"])
|
|
LeaPlusLC:CfgBtn("QuestTextBtn", LeaPlusCB["QuestFontChange"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC5: Interface
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page5"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Enhancements" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MinimapMod" , "Enhance minimap" , 146, -92, true, "If checked, you will be able to customise the minimap.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "TipModEnable" , "Enhance tooltip" , 146, -112, true, "If checked, the tooltip will be color coded and you will be able to modify the tooltip layout and scale.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "EnhanceDressup" , "Enhance dressup" , 146, -132, true, "If checked, gear toggle buttons will be added to the dressup frame and model positioning controls will be removed.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Extras" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowVolume" , "Show volume slider" , 340, -92, true, "If checked, a master volume slider will be shown on the character sheet.|n|nThe volume slider can be placed in either of two locations on the character sheet. To toggle between them, hold the shift key down and right-click the slider.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowCooldowns" , "Show cooldowns" , 340, -112, true, "If checked, you will be able to place up to five beneficial cooldown icons above the target frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "DurabilityStatus" , "Show durability status" , 340, -132, true, "If checked, a button will be added to the character sheet which will show your equipped item durability when you hover the pointer over it.|n|nIn addition, an overall percentage will be shown in the chat frame when you die.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowPetSaveBtn" , "Show pet save button" , 340, -152, true, "If checked, you will be able to save your current battle pet team (including abilities) to a single command.|n|nA button will be added to the Pet Journal. Clicking the button will toggle showing the assignment command for your current team. Pressing CTRL/C will copy the command to memory.|n|nYou can then paste the command (with CTRL/V) into the chat window or a macro to instantly assign your team.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowRaidToggle" , "Show raid button" , 340, -172, true, "If checked, the button to toggle the raid container frame will be shown just above the raid management frame (left side of the screen) instead of in the raid management frame itself.|n|nThis allows you to toggle the raid container frame without needing to open the raid management frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowBorders" , "Show borders" , 340, -192, true, "If checked, you will be able to show customisable borders around the edges of the screen.|n|nThe borders are placed on top of the game world but under the UI so you can place UI elements over them.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowPlayerChain" , "Show player chain" , 340, -212, true, "If checked, you will be able to show a rare, elite or rare elite chain around the player frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowWowheadLinks" , "Show Wowhead links" , 340, -232, true, "If checked, Wowhead links will be shown in the world map frame and the achievements frame.")
|
|
|
|
LeaPlusLC:CfgBtn("ModMinimapBtn", LeaPlusCB["MinimapMod"])
|
|
LeaPlusLC:CfgBtn("MoveTooltipButton", LeaPlusCB["TipModEnable"])
|
|
LeaPlusLC:CfgBtn("CooldownsButton", LeaPlusCB["ShowCooldowns"])
|
|
LeaPlusLC:CfgBtn("ModBordersBtn", LeaPlusCB["ShowBorders"])
|
|
LeaPlusLC:CfgBtn("ModPlayerChain", LeaPlusCB["ShowPlayerChain"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC6: Frames
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page6"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Features" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "FrmEnabled" , "Manage frames" , 146, -92, true, "If checked, you will be able to change the position and scale of the player frame, target frame, ghost frame and timer bar.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ManageBuffs" , "Manage buffs" , 146, -112, true, "If checked, you will be able to change the position and scale of the buffs frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ManagePowerBar" , "Manage power bar" , 146, -132, true, "If checked, you will be able to change the position and scale of the player alternative power bar.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ManageWidget" , "Manage widget" , 146, -152, true, "If checked, you will be able to change the position and scale of the widget frame.|n|nThe widget frame is commonly used for showing PvP scores and tracking objectives.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ManageFocus" , "Manage focus" , 146, -172, true, "If checked, you will be able to change the position and scale of the focus frame.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ClassColFrames" , "Class colored frames" , 146, -192, true, "If checked, class coloring will be used in the player frame, target frame and focus frame.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Visibility" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoAlerts" , "Hide alerts" , 340, -92, true, "If checked, alert frames will not be shown.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideBodyguard" , "Hide bodyguard gossip" , 340, -112, true, "If checked, the gossip window will not be shown when you talk to an active garrison bodyguard.|n|nYou can hold the shift key down when you talk to a bodyguard to override this setting.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideTalkingFrame" , "Hide talking frame" , 340, -132, true, "If checked, the talking frame will not be shown.|n|nThe talking frame normally appears in the lower portion of the screen when certain NPCs communicate with you.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideCleanupBtns" , "Hide clean-up buttons" , 340, -152, true, "If checked, the backpack clean-up button and the bank frame clean-up button will not be shown.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideBossBanner" , "Hide boss banner" , 340, -172, true, "If checked, the boss banner will not be shown.|n|nThe boss banner appears when a boss is defeated. It shows the name of the boss and the loot that was distributed.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "HideLevelUpDisplay" , "Hide level-up display" , 340, -192, true, "If checked, the level-up display will not be shown.|n|nThe level-up display shows encounter objectives, level-ups, pet battle rewards, etc.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoGryphons" , "Hide gryphons" , 340, -212, true, "If checked, the main bar gryphons will not be shown.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoClassBar" , "Hide stance bar" , 340, -232, true, "If checked, the stance bar will not be shown.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoCommandBar" , "Hide order hall bar" , 340, -252, true, "If checked, the order hall command bar will not be shown.")
|
|
|
|
LeaPlusLC:CfgBtn("MoveFramesButton", LeaPlusCB["FrmEnabled"])
|
|
LeaPlusLC:CfgBtn("ManageBuffsButton", LeaPlusCB["ManageBuffs"])
|
|
LeaPlusLC:CfgBtn("ManagePowerBarButton", LeaPlusCB["ManagePowerBar"])
|
|
LeaPlusLC:CfgBtn("ManageWidgetButton", LeaPlusCB["ManageWidget"])
|
|
LeaPlusLC:CfgBtn("ManageFocusButton", LeaPlusCB["ManageFocus"])
|
|
LeaPlusLC:CfgBtn("ClassColFramesBtn", LeaPlusCB["ClassColFrames"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC7: System
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page7"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Graphics and Sound" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoScreenGlow" , "Disable screen glow" , 146, -92, false, "If checked, the screen glow will be disabled.|n|nEnabling this option will also disable the drunken haze effect.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoScreenEffects" , "Disable screen effects" , 146, -112, false, "If checked, the netherworld effect will be disabled.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "SetWeatherDensity" , "Set weather density" , 146, -132, false, "If checked, you will be able to set the density of weather effects.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MaxCameraZoom" , "Max camera zoom" , 146, -152, false, "If checked, you will be able to zoom out to a greater distance.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoRestedEmotes" , "Silence rested emotes" , 146, -172, true, "If checked, emote sounds will be silenced while your character is:|n|n- resting|n- in a pet battle|n- at the Halfhill Market|n- at the Grim Guzzler|n|nEmote sounds will be enabled when none of the above apply.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "MuteGameSounds" , "Mute game sounds" , 146, -192, false, "If checked, you will be able to mute a selection of game sounds.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Game Options" , 340, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoBagAutomation" , "Disable bag automation" , 340, -92, true, "If checked, your bags will not be opened or closed automatically when you interact with a merchant, bank or mailbox.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoPetAutomation" , "Disable pet automation" , 340, -112, true, "If checked, battle pets which are automatically summoned will be dismissed within a few seconds.|n|nThis includes dragging a pet onto the first team slot in the pet journal and entering a battle pet team save command.|n|nNote that pets which are automatically summoned during combat will be dismissed when combat ends.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "CharAddonList" , "Show character addons" , 340, -132, true, "If checked, the addon list (accessible from the game menu) will show character based addons by default.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoRaidRestrictions" , "Remove raid restrictions" , 340, -152, false, "If checked, converting a party group to a raid group will succeed even if there are low level characters in the group.|n|nEveryone in the group needs to have Leatrix Plus installed with this option enabled.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoConfirmLoot" , "Disable loot warnings" , 340, -172, false, "If checked, confirmations will no longer appear when you choose a loot roll option or attempt to sell or mail a tradable item.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "SaveProfFilters" , "Save profession filters" , 340, -192, true, "If checked, profession filter settings will be saved for the remainder of your login session.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "FasterLooting" , "Faster auto loot" , 340, -212, true, "If checked, the amount of time it takes to auto loot creatures will be significantly reduced.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "FasterMovieSkip" , "Faster movie skip" , 340, -232, true, "If checked, you will be able to cancel cinematics without being prompted for confirmation.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "CombatPlates" , "Combat plates" , 340, -252, true, "If checked, enemy nameplates will be shown during combat and hidden when combat ends.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "EasyItemDestroy" , "Easy item destroy" , 340, -272, true, "If checked, you will no longer need to type delete when destroying a superior quality item.|n|nIn addition, item links will be shown in all item destroy confirmation windows.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "LockoutSharing" , "Lockout sharing" , 340, -292, true, "If checked, the 'Display only character achievements to others' setting in the game options panel ('Social' menu) will be permanently checked and locked.")
|
|
|
|
LeaPlusLC:CfgBtn("SetWeatherDensityBtn", LeaPlusCB["SetWeatherDensity"])
|
|
LeaPlusLC:CfgBtn("MuteGameSoundsBtn", LeaPlusCB["MuteGameSounds"])
|
|
|
|
----------------------------------------------------------------------
|
|
-- LC8: Settings
|
|
----------------------------------------------------------------------
|
|
|
|
pg = "Page8"
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Addon" , 146, -72)
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowMinimapIcon" , "Show minimap button" , 146, -92, false, "If checked, a minimap button will be available.|n|nClick - Toggle options panel.|n|nSHIFT/Left-click - Toggle music.|n|nSHIFT/Right-click - Toggle stopwatch.|n|nCTRL/Left-click - Toggle minimap target tracking.|n|nCTRL/Right-click - Toggle errors (if enabled).|n|nCTRL/SHIFT/Left-click - Toggle Zygor (if installed).|n|nCTRL/SHIFT/Right-click - Toggle windowed mode.")
|
|
LeaPlusLC:MakeCB(LeaPlusLC[pg], "EnableHotkey" , "Enable hotkey" , 146, -112, true, "If checked, you can open Leatrix Plus by pressing CTRL/Z.")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Scale", 340, -72)
|
|
LeaPlusLC:MakeSL(LeaPlusLC[pg], "PlusPanelScale", "Drag to set the scale of the Leatrix Plus panel.", 1, 2, 0.1, 340, -92, "%.1f")
|
|
|
|
LeaPlusLC:MakeTx(LeaPlusLC[pg], "Transparency", 340, -132)
|
|
LeaPlusLC:MakeSL(LeaPlusLC[pg], "PlusPanelAlpha", "Drag to set the transparency of the Leatrix Plus panel.", 0, 1, 0.1, 340, -152, "%.1f")
|
|
|
|
LeaPlusLC:ShowMemoryUsage(LeaPlusLC[pg], "TOPLEFT", 146, -262)
|
|
|