diff --git a/MikScrollingBattleText/Fonts/BlackCastleMF.ttf b/MikScrollingBattleText/Fonts/BlackCastleMF.ttf
new file mode 100644
index 0000000..b3489ef
Binary files /dev/null and b/MikScrollingBattleText/Fonts/BlackCastleMF.ttf differ
diff --git a/MikScrollingBattleText/Fonts/FuturaBold.ttf b/MikScrollingBattleText/Fonts/FuturaBold.ttf
new file mode 100644
index 0000000..576fc07
Binary files /dev/null and b/MikScrollingBattleText/Fonts/FuturaBold.ttf differ
diff --git a/MikScrollingBattleText/Fonts/exocet.ttf b/MikScrollingBattleText/Fonts/exocet.ttf
new file mode 100644
index 0000000..dcd7a49
Binary files /dev/null and b/MikScrollingBattleText/Fonts/exocet.ttf differ
diff --git a/MikScrollingBattleText/Fonts/mailrays.TTF b/MikScrollingBattleText/Fonts/mailrays.TTF
new file mode 100644
index 0000000..9403154
Binary files /dev/null and b/MikScrollingBattleText/Fonts/mailrays.TTF differ
diff --git a/MikScrollingBattleText/Fonts/pepsi.ttf b/MikScrollingBattleText/Fonts/pepsi.ttf
new file mode 100644
index 0000000..e30291b
Binary files /dev/null and b/MikScrollingBattleText/Fonts/pepsi.ttf differ
diff --git a/MikScrollingBattleText/Libs/AceLibrary/AceLibrary.lua b/MikScrollingBattleText/Libs/AceLibrary/AceLibrary.lua
new file mode 100644
index 0000000..ede12fd
--- /dev/null
+++ b/MikScrollingBattleText/Libs/AceLibrary/AceLibrary.lua
@@ -0,0 +1,711 @@
+--[[
+Name: AceLibrary
+Revision: $Rev: 11109 $
+Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
+Inspired By: Iriel (iriel@vigilance-committee.org)
+ Tekkub (tekkub@gmail.com)
+ Revision: $Rev: 11109 $
+Website: http://www.wowace.com/
+Documentation: http://www.wowace.com/index.php/AceLibrary
+SVN: http://svn.wowace.com/root/trunk/Ace2/AceLibrary
+Description: Versioning library to handle other library instances, upgrading,
+ and proper access.
+ It also provides a base for libraries to work off of, providing
+ proper error tools. It is handy because all the errors occur in the
+ file that called it, not in the library file itself.
+Dependencies: None
+]]
+
+local ACELIBRARY_MAJOR = "AceLibrary"
+local ACELIBRARY_MINOR = "$Revision: 11109 $"
+
+-- CHANGE DEBUG TO ``false`` ON RELEASE -------------------
+local DEBUG = true
+-- CHANGE DEBUG TO ``false`` ON RELEASE -------------------
+
+local _G = getfenv(0)
+local previous = _G[ACELIBRARY_MAJOR]
+if previous and not previous:IsNewVersion(ACELIBRARY_MAJOR, ACELIBRARY_MINOR) then return end
+
+-- @table AceLibrary
+-- @brief System to handle all versioning of libraries.
+local AceLibrary = {}
+local AceLibrary_mt = {}
+setmetatable(AceLibrary, AceLibrary_mt)
+
+local tmp
+local function error(self, message, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ if type(self) ~= "table" then
+ _G.error(string.format("Bad argument #1 to `error' (table expected, got %s)", type(self)), 2)
+ end
+ if not tmp then
+ tmp = {}
+ else
+ for k in pairs(tmp) do tmp[k] = nil end
+ table.setn(tmp, 0)
+ end
+
+ tmp.n = 0
+ table.insert(tmp, a1)
+ table.insert(tmp, a2)
+ table.insert(tmp, a3)
+ table.insert(tmp, a4)
+ table.insert(tmp, a5)
+ table.insert(tmp, a6)
+ table.insert(tmp, a7)
+ table.insert(tmp, a8)
+ table.insert(tmp, a9)
+ table.insert(tmp, a10)
+ table.insert(tmp, a11)
+ table.insert(tmp, a12)
+ table.insert(tmp, a13)
+ table.insert(tmp, a14)
+ table.insert(tmp, a15)
+ table.insert(tmp, a16)
+ table.insert(tmp, a17)
+ table.insert(tmp, a18)
+ table.insert(tmp, a19)
+ table.insert(tmp, a20)
+
+ local stack = debugstack()
+ if not message then
+ local _,_,second = string.find(stack, "\n(.-)\n")
+ message = "error raised! " .. second
+ else
+ for i = 1,table.getn(tmp) do
+ tmp[i] = tostring(tmp[i])
+ end
+ for i = 1,10 do
+ table.insert(tmp, "nil")
+ end
+ message = string.format(message, unpack(tmp))
+ end
+
+ if getmetatable(self) and getmetatable(self).__tostring then
+ message = string.format("%s: %s", tostring(self), message)
+ elseif type(rawget(self, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self:GetLibraryVersion()) then
+ message = string.format("%s: %s", self:GetLibraryVersion(), message)
+ elseif type(rawget(self, 'class')) == "table" and type(rawget(self.class, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self.class:GetLibraryVersion()) then
+ message = string.format("%s: %s", self.class:GetLibraryVersion(), message)
+ end
+
+ local first = string.gsub(stack, "\n.*", "")
+ local file = string.gsub(first, ".*\\(.*).lua:%d+: .*", "%1")
+ file = string.gsub(file, "([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
+
+ local i = 0
+ for s in string.gfind(stack, "\n([^\n]*)") do
+ i = i + 1
+ if not string.find(s, file .. "%.lua:%d+:") then
+ file = string.gsub(s, "^.*\\(.*).lua:%d+: .*", "%1")
+ file = string.gsub(file, "([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
+ break
+ end
+ end
+ local j = 0
+ for s in string.gfind(stack, "\n([^\n]*)") do
+ j = j + 1
+ if j > i and not string.find(s, file .. "%.lua:%d+:") then
+ _G.error(message, j + 1)
+ return
+ end
+ end
+ _G.error(message, 2)
+ return
+end
+
+local function assert(self, condition, message, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ if not condition then
+ if not message then
+ local stack = debugstack()
+ local _,_,second = string.find(stack, "\n(.-)\n")
+ message = "assertion failed! " .. second
+ end
+ error(self, message, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ return
+ end
+ return condition
+end
+
+local function argCheck(self, arg, num, kind, kind2, kind3, kind4, kind5)
+ if type(num) ~= "number" then
+ error(self, "Bad argument #3 to `argCheck' (number expected, got %s)", type(num))
+ elseif type(kind) ~= "string" then
+ error(self, "Bad argument #4 to `argCheck' (string expected, got %s)", type(kind))
+ end
+ local errored = false
+ arg = type(arg)
+ if arg ~= kind and arg ~= kind2 and arg ~= kind3 and arg ~= kind4 and arg ~= kind5 then
+ local _,_,func = string.find(debugstack(), "`argCheck'.-([`<].-['>])")
+ if not func then
+ _,_,func = string.find(debugstack(), "([`<].-['>])")
+ end
+ if kind5 then
+ error(self, "Bad argument #%s to %s (%s, %s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, kind5, arg)
+ elseif kind4 then
+ error(self, "Bad argument #%s to %s (%s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, arg)
+ elseif kind3 then
+ error(self, "Bad argument #%s to %s (%s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, arg)
+ elseif kind2 then
+ error(self, "Bad argument #%s to %s (%s or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, arg)
+ else
+ error(self, "Bad argument #%s to %s (%s expected, got %s)", tonumber(num) or 0/0, func, kind, arg)
+ end
+ end
+end
+
+local function pcall(self, func, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 = _G.pcall(func, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ if not a1 then
+ error(self, string.gsub(a2, ".-%.lua:%d-: ", ""))
+ else
+ return a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20
+ end
+end
+
+local recurse = {}
+local function addToPositions(t, major)
+ if not AceLibrary.positions[t] or AceLibrary.positions[t] == major then
+ rawset(t, recurse, true)
+ AceLibrary.positions[t] = major
+ for k,v in pairs(t) do
+ if type(v) == "table" and not rawget(v, recurse) then
+ addToPositions(v, major)
+ end
+ if type(k) == "table" and not rawget(k, recurse) then
+ addToPositions(k, major)
+ end
+ end
+ local mt = getmetatable(t)
+ if mt and not rawget(mt, recurse) then
+ addToPositions(mt, major)
+ end
+ rawset(t, recurse, nil)
+ end
+end
+
+local function svnRevisionToNumber(text)
+ if type(text) == "string" then
+ if string.find(text, "^%$Revision: (%d+) %$$") then
+ return tonumber((string.gsub(text, "^%$Revision: (%d+) %$$", "%1")))
+ elseif string.find(text, "^%$Rev: (%d+) %$$") then
+ return tonumber((string.gsub(text, "^%$Rev: (%d+) %$$", "%1")))
+ elseif string.find(text, "^%$LastChangedRevision: (%d+) %$$") then
+ return tonumber((string.gsub(text, "^%$LastChangedRevision: (%d+) %$$", "%1")))
+ end
+ elseif type(text) == "number" then
+ return text
+ end
+ return nil
+end
+
+local crawlReplace
+do
+ local recurse = {}
+ local function func(t, to, from)
+ if recurse[t] then
+ return
+ end
+ recurse[t] = true
+ local mt = getmetatable(t)
+ setmetatable(t, nil)
+ rawset(t, to, rawget(t, from))
+ rawset(t, from, nil)
+ for k,v in pairs(t) do
+ if v == from then
+ t[k] = to
+ elseif type(v) == "table" then
+ if not recurse[v] then
+ func(v, to, from)
+ end
+ end
+
+ if type(k) == "table" then
+ if not recurse[k] then
+ func(k, to, from)
+ end
+ end
+ end
+ setmetatable(t, mt)
+ if mt then
+ if mt == from then
+ setmetatable(t, to)
+ elseif not recurse[mt] then
+ func(mt, to, from)
+ end
+ end
+ end
+ function crawlReplace(t, to, from)
+ func(t, to, from)
+ for k in pairs(recurse) do
+ recurse[k] = nil
+ end
+ end
+end
+
+-- @function destroyTable
+-- @brief remove all the contents of a table
+-- @param t table to destroy
+local function destroyTable(t)
+ setmetatable(t, nil)
+ for k,v in pairs(t) do t[k] = nil end
+ table.setn(t, 0)
+end
+
+local function isFrame(frame)
+ return type(frame) == "table" and type(rawget(frame, 0)) == "userdata" and type(rawget(frame, 'IsFrameType')) == "function" and getmetatable(frame) and type(rawget(getmetatable(frame), '__index')) == "function"
+end
+
+local new, del
+do
+ local tables = setmetatable({}, {__mode = "k"})
+
+ function new()
+ local t = next(tables)
+ if t then
+ tables[t] = nil
+ return t
+ else
+ return {}
+ end
+ end
+
+ function del(t, depth)
+ if depth and depth > 0 then
+ for k,v in pairs(t) do
+ if type(v) == "table" and not isFrame(v) then
+ del(v, depth - 1)
+ end
+ end
+ end
+ destroyTable(t)
+ tables[t] = true
+ end
+end
+
+-- @function copyTable
+-- @brief Create a shallow copy of a table and return it.
+-- @param from The table to copy from
+-- @return A shallow copy of the table
+local function copyTable(from)
+ local to = new()
+ for k,v in pairs(from) do to[k] = v end
+ table.setn(to, table.getn(from))
+ setmetatable(to, getmetatable(from))
+ return to
+end
+
+-- @function deepTransfer
+-- @brief Fully transfer all data, keeping proper previous table
+-- backreferences stable.
+-- @param to The table with which data is to be injected into
+-- @param from The table whose data will be injected into the first
+-- @param saveFields If available, a shallow copy of the basic data is saved
+-- in here.
+-- @param list The account of table references
+-- @param list2 The current status on which tables have been traversed.
+local deepTransfer
+do
+ -- @function examine
+ -- @brief Take account of all the table references to be shared
+ -- between the to and from tables.
+ -- @param to The table with which data is to be injected into
+ -- @param from The table whose data will be injected into the first
+ -- @param list An account of the table references
+ local function examine(to, from, list, major)
+ list[from] = to
+ for k,v in pairs(from) do
+ if rawget(to, k) and type(from[k]) == "table" and type(to[k]) == "table" and not list[from[k]] then
+ if from[k] == to[k] then
+ list[from[k]] = to[k]
+ elseif AceLibrary.positions[from[v]] ~= major and AceLibrary.positions[from[v]] then
+ list[from[k]] = from[k]
+ elseif not list[from[k]] then
+ examine(to[k], from[k], list, major)
+ end
+ end
+ end
+ return list
+ end
+
+ function deepTransfer(to, from, saveFields, major, list, list2)
+ setmetatable(to, nil)
+ local createdList
+ if not list then
+ createdList = true
+ list = new()
+ list2 = new()
+ examine(to, from, list, major)
+ end
+ list2[to] = to
+ for k,v in pairs(to) do
+ if type(rawget(from, k)) ~= "table" or type(v) ~= "table" or isFrame(v) then
+ if saveFields then
+ saveFields[k] = v
+ end
+ to[k] = nil
+ elseif v ~= _G then
+ if saveFields then
+ saveFields[k] = copyTable(v)
+ end
+ end
+ end
+ for k in pairs(from) do
+ if rawget(to, k) and to[k] ~= from[k] and AceLibrary.positions[to[k]] == major and from[k] ~= _G then
+ if not list2[to[k]] then
+ deepTransfer(to[k], from[k], nil, major, list, list2)
+ end
+ to[k] = list[to[k]] or list2[to[k]]
+ else
+ rawset(to, k, from[k])
+ end
+ end
+ table.setn(to, table.getn(from))
+ setmetatable(to, getmetatable(from))
+ local mt = getmetatable(to)
+ if mt then
+ if list[mt] then
+ setmetatable(to, list[mt])
+ elseif mt.__index and list[mt.__index] then
+ mt.__index = list[mt.__index]
+ end
+ end
+ destroyTable(from)
+ if createdList then
+ del(list)
+ del(list2)
+ end
+ end
+end
+
+-- @method IsNewVersion
+-- @brief Obtain whether the supplied version would be an upgrade to the
+-- current version. This allows for bypass code in library
+-- declaration.
+-- @param major A string representing the major version
+-- @param minor An integer or an svn revision string representing the minor version
+-- @return whether the supplied version would be newer than what is
+-- currently available.
+function AceLibrary:IsNewVersion(major, minor)
+ argCheck(self, major, 2, "string")
+ if type(minor) == "string" then
+ local m = svnRevisionToNumber(minor)
+ if m then
+ minor = m
+ else
+ _G.error(string.format("Bad argument #3 to `IsNewVersion'. Must be a number or SVN revision string. %q is not appropriate", minor), 2)
+ end
+ end
+ argCheck(self, minor, 3, "number")
+ local data = self.libs[major]
+ if not data then
+ return true
+ end
+ return data.minor < minor
+end
+
+-- @method HasInstance
+-- @brief Returns whether an instance exists. This allows for optional support of a library.
+-- @param major A string representing the major version.
+-- @param minor (optional) An integer or an svn revision string representing the minor version.
+-- @return Whether an instance exists.
+function AceLibrary:HasInstance(major, minor)
+ argCheck(self, major, 2, "string")
+ if minor then
+ if type(minor) == "string" then
+ local m = svnRevisionToNumber(minor)
+ if m then
+ minor = m
+ else
+ _G.error(string.format("Bad argument #3 to `HasInstance'. Must be a number or SVN revision string. %q is not appropriate", minor), 2)
+ end
+ end
+ argCheck(self, minor, 3, "number")
+ if not self.libs[major] then
+ return
+ end
+ return self.libs[major].minor == minor
+ end
+ return self.libs[major] and true
+end
+
+-- @method GetInstance
+-- @brief Returns the library with the given major/minor version.
+-- @param major A string representing the major version.
+-- @param minor (optional) An integer or an svn revision string representing the minor version.
+-- @return The library with the given major/minor version.
+function AceLibrary:GetInstance(major, minor)
+ argCheck(self, major, 2, "string")
+
+ local data = self.libs[major]
+ if not data then
+ _G.error(string.format("Cannot find a library instance of %s.", major), 2)
+ return
+ end
+ if minor then
+ if type(minor) == "string" then
+ local m = svnRevisionToNumber(minor)
+ if m then
+ minor = m
+ else
+ _G.error(string.format("Bad argument #3 to `GetInstance'. Must be a number or SVN revision string. %q is not appropriate", minor), 2)
+ end
+ end
+ argCheck(self, minor, 2, "number")
+ if data.minor ~= minor then
+ _G.error(string.format("Cannot find a library instance of %s, minor version %d.", major, minor), 2)
+ return
+ end
+ end
+ return data.instance
+end
+
+-- Syntax sugar. AceLibrary("FooBar-1.0")
+AceLibrary_mt.__call = AceLibrary.GetInstance
+
+local donothing
+
+local AceEvent
+
+-- @method Register
+-- @brief Registers a new version of a given library.
+-- @param newInstance the library to register
+-- @param major the major version of the library
+-- @param minor the minor version of the library
+-- @param activateFunc (optional) A function to be called when the library is
+-- fully activated. Takes the arguments
+-- (newInstance [, oldInstance, oldDeactivateFunc]). If
+-- oldInstance is given, you should probably call
+-- oldDeactivateFunc(oldInstance).
+-- @param deactivateFunc (optional) A function to be called by a newer library's
+-- activateFunc.
+-- @param externalFunc (optional) A function to be called whenever a new
+-- library is registered.
+function AceLibrary:Register(newInstance, major, minor, activateFunc, deactivateFunc, externalFunc)
+ argCheck(self, newInstance, 2, "table")
+ argCheck(self, major, 3, "string")
+ if type(minor) == "string" then
+ local m = svnRevisionToNumber(minor)
+ if m then
+ minor = m
+ else
+ _G.error(string.format("Bad argument #4 to `Register'. Must be a number or SVN revision string. %q is not appropriate", minor), 2)
+ end
+ end
+ argCheck(self, minor, 4, "number")
+ if math.floor(minor) ~= minor or minor < 0 then
+ error(self, "Bad argument #4 to `Register' (integer >= 0 expected, got %s)", minor)
+ end
+ argCheck(self, activateFunc, 5, "function", "nil")
+ argCheck(self, deactivateFunc, 6, "function", "nil")
+ argCheck(self, externalFunc, 7, "function", "nil")
+ if not deactivateFunc then
+ if not donothing then
+ donothing = function() end
+ end
+ deactivateFunc = donothing
+ end
+ local data = self.libs[major]
+ if not data then
+ -- This is new
+ local instance = copyTable(newInstance)
+ crawlReplace(instance, instance, newInstance)
+ destroyTable(newInstance)
+ if AceLibrary == newInstance then
+ self = instance
+ AceLibrary = instance
+ end
+ self.libs[major] = {
+ instance = instance,
+ minor = minor,
+ deactivateFunc = deactivateFunc,
+ externalFunc = externalFunc,
+ }
+ rawset(instance, 'GetLibraryVersion', function(self)
+ return major, minor
+ end)
+ if not rawget(instance, 'error') then
+ rawset(instance, 'error', error)
+ end
+ if not rawget(instance, 'assert') then
+ rawset(instance, 'assert', assert)
+ end
+ if not rawget(instance, 'argCheck') then
+ rawset(instance, 'argCheck', argCheck)
+ end
+ if not rawget(instance, 'pcall') then
+ rawset(instance, 'pcall', pcall)
+ end
+ addToPositions(instance, major)
+ if activateFunc then
+ activateFunc(instance, nil, nil) -- no old version, so explicit nil
+ end
+
+ if externalFunc then
+ for k,data in pairs(self.libs) do
+ if k ~= major then
+ externalFunc(instance, k, data.instance)
+ end
+ end
+ end
+
+ for k,data in pairs(self.libs) do
+ if k ~= major and data.externalFunc then
+ data.externalFunc(data.instance, major, instance)
+ end
+ end
+ if major == "AceEvent-2.0" then
+ AceEvent = instance
+ end
+ if AceEvent then
+ AceEvent.TriggerEvent(self, "AceLibrary_Register", major, instance)
+ end
+
+ return instance
+ end
+ local instance = data.instance
+ if minor <= data.minor then
+ if DEBUG then
+ -- This one is already obsolete, raise an error.
+ error(string.format("Obsolete library registered. %s is already registered at version %d. You are trying to register version %d. Hint: if not AceLibrary:IsNewVersion(%q, %d) then return end", major, data.minor, minor, major, minor), 2)
+ return
+ end
+ return instance
+ end
+ -- This is an update
+ local oldInstance = new()
+
+ addToPositions(newInstance, major)
+ local isAceLibrary = (AceLibrary == newInstance)
+ local old_error, old_assert, old_argCheck, old_pcall
+ if isAceLibrary then
+ self = instance
+ AceLibrary = instance
+
+ old_error = instance.error
+ old_assert = instance.assert
+ old_argCheck = instance.argCheck
+ old_pcall = instance.pcall
+
+ self.error = error
+ self.assert = assert
+ self.argCheck = argCheck
+ self.pcall = pcall
+ end
+ deepTransfer(instance, newInstance, oldInstance, major)
+ crawlReplace(instance, instance, newInstance)
+ local oldDeactivateFunc = data.deactivateFunc
+ data.minor = minor
+ data.deactivateFunc = deactivateFunc
+ data.externalFunc = externalFunc
+ rawset(instance, 'GetLibraryVersion', function(self)
+ return major, minor
+ end)
+ if not rawget(instance, 'error') then
+ rawset(instance, 'error', error)
+ end
+ if not rawget(instance, 'assert') then
+ rawset(instance, 'assert', assert)
+ end
+ if not rawget(instance, 'argCheck') then
+ rawset(instance, 'argCheck', argCheck)
+ end
+ if not rawget(instance, 'pcall') then
+ rawset(instance, 'pcall', pcall)
+ end
+ if isAceLibrary then
+ for _,v in pairs(self.libs) do
+ local i = type(v) == "table" and v.instance
+ if type(i) == "table" then
+ if not rawget(i, 'error') or i.error == old_error then
+ rawset(i, 'error', error)
+ end
+ if not rawget(i, 'assert') or i.assert == old_assert then
+ rawset(i, 'assert', assert)
+ end
+ if not rawget(i, 'argCheck') or i.argCheck == old_argCheck then
+ rawset(i, 'argCheck', argCheck)
+ end
+ if not rawget(i, 'pcall') or i.pcall == old_pcall then
+ rawset(i, 'pcall', pcall)
+ end
+ end
+ end
+ end
+ if activateFunc then
+ activateFunc(instance, oldInstance, oldDeactivateFunc)
+ else
+ oldDeactivateFunc(oldInstance)
+ end
+ del(oldInstance)
+
+ if externalFunc then
+ for k,data in pairs(self.libs) do
+ if k ~= major then
+ externalFunc(instance, k, data.instance)
+ end
+ end
+ end
+
+ return instance
+end
+
+local iter
+function AceLibrary:IterateLibraries()
+ if not iter then
+ local function iter(t, k)
+ k = next(t, k)
+ if not k then
+ return nil
+ else
+ return k, t[k].instance
+ end
+ end
+ end
+ return iter, self.libs, nil
+end
+
+-- @function Activate
+-- @brief The activateFunc for AceLibrary itself. Called when
+-- AceLibrary properly registers.
+-- @param self Reference to AceLibrary
+-- @param oldLib (optional) Reference to an old version of AceLibrary
+-- @param oldDeactivate (optional) Function to deactivate the old lib
+local function activate(self, oldLib, oldDeactivate)
+ if not self.libs then
+ if oldLib then
+ self.libs = oldLib.libs
+ end
+ if not self.libs then
+ self.libs = {}
+ end
+ end
+ if not self.positions then
+ if oldLib then
+ self.positions = oldLib.positions
+ end
+ if not self.positions then
+ self.positions = setmetatable({}, { __mode = "k" })
+ end
+ end
+
+ -- Expose the library in the global environment
+ _G[ACELIBRARY_MAJOR] = self
+
+ if oldDeactivate then
+ oldDeactivate(oldLib)
+ end
+end
+
+if not previous then
+ previous = AceLibrary
+end
+if not previous.libs then
+ previous.libs = {}
+end
+AceLibrary.libs = previous.libs
+if not previous.positions then
+ previous.positions = setmetatable({}, { __mode = "k" })
+end
+AceLibrary.positions = previous.positions
+AceLibrary:Register(AceLibrary, ACELIBRARY_MAJOR, ACELIBRARY_MINOR, activate)
diff --git a/MikScrollingBattleText/Libs/AceLocale-2.2/AceLocale-2.2.lua b/MikScrollingBattleText/Libs/AceLocale-2.2/AceLocale-2.2.lua
new file mode 100644
index 0000000..c18076a
--- /dev/null
+++ b/MikScrollingBattleText/Libs/AceLocale-2.2/AceLocale-2.2.lua
@@ -0,0 +1,537 @@
+--[[
+Name: AceLocale-2.2
+Revision: $Rev: 15291 $
+Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
+Inspired By: Ace 1.x by Turan (turan@gryphon.com)
+Website: http://www.wowace.com/
+Documentation: http://www.wowace.com/index.php/AceLocale-2.2
+SVN: http://svn.wowace.com/root/trunk/Ace2/AceLocale-2.2
+Description: Localization library for addons to use to handle proper
+ localization and internationalization.
+Dependencies: AceLibrary
+]]
+
+local MAJOR_VERSION = "AceLocale-2.2"
+local MINOR_VERSION = "$Revision: 15291 $"
+
+if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary.") end
+if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
+
+local AceLocale = {}
+
+local DEFAULT_LOCALE = "enUS"
+local _G = getfenv(0)
+
+local BASE_TRANSLATIONS, DEBUGGING, TRANSLATIONS, BASE_LOCALE, TRANSLATION_TABLES, REVERSE_TRANSLATIONS, STRICTNESS, DYNAMIC_LOCALES, CURRENT_LOCALE, NAME
+
+local rawget = rawget
+local rawset = rawset
+local type = type
+
+local newRegistries = {}
+local scheduleClear
+
+local lastSelf
+local __index = function(self, key)
+ lastSelf = self
+ local value = (rawget(self, TRANSLATIONS) or AceLocale.prototype)[key]
+ rawset(self, key, value)
+ return value
+end
+
+local __newindex = function(self, k, v)
+ if type(v) ~= "function" and type(k) ~= "table" then
+ AceLocale.error(self, "Cannot change the values of an AceLocale instance.")
+ end
+ rawset(self, k, v)
+end
+
+local __tostring = function(self)
+ if type(rawget(self, 'GetLibraryVersion')) == "function" then
+ return self:GetLibraryVersion()
+ else
+ return "AceLocale(" .. self[NAME] .. ")"
+ end
+end
+
+local function clearCache(self)
+ if not rawget(self, BASE_TRANSLATIONS) then
+ return
+ end
+
+ local cache = self[BASE_TRANSLATIONS]
+ rawset(self, REVERSE_TRANSLATIONS, nil)
+
+ for k in pairs(self) do
+ if rawget(cache, k) ~= nil then
+ self[k] = nil
+ end
+ end
+ rawset(self, 'tmp', true)
+ self.tmp = nil
+end
+
+local function refixInstance(instance)
+ if getmetatable(instance) then
+ setmetatable(instance, nil)
+ end
+ local translations = instance[TRANSLATIONS]
+ if translations then
+ if getmetatable(translations) then
+ setmetatable(translations, nil)
+ end
+ local baseTranslations = instance[BASE_TRANSLATIONS]
+ if getmetatable(baseTranslations) then
+ setmetatable(baseTranslations, nil)
+ end
+ if translations == baseTranslations or instance[STRICTNESS] then
+ setmetatable(instance, {
+ __index = __index,
+ __newindex = __newindex,
+ __tostring = __tostring
+ })
+
+ setmetatable(translations, {
+ __index = AceLocale.prototype
+ })
+ else
+ setmetatable(instance, {
+ __index = __index,
+ __newindex = __newindex,
+ __tostring = __tostring
+ })
+
+ setmetatable(translations, {
+ __index = baseTranslations,
+ })
+
+ setmetatable(baseTranslations, {
+ __index = AceLocale.prototype,
+ })
+ end
+ else
+ setmetatable(instance, {
+ __index = __index,
+ __newindex = __newindex,
+ __tostring = __tostring,
+ })
+ end
+ clearCache(instance)
+ newRegistries[instance] = true
+ scheduleClear()
+ return instance
+end
+
+function AceLocale:new(name)
+ self:argCheck(name, 2, "string")
+
+ if self.registry[name] and type(rawget(self.registry[name], 'GetLibraryVersion')) ~= "function" then
+ return self.registry[name]
+ end
+
+ AceLocale.registry[name] = refixInstance({
+ [STRICTNESS] = false,
+ [NAME] = name,
+ })
+ newRegistries[AceLocale.registry[name]] = true
+ return AceLocale.registry[name]
+end
+
+AceLocale.prototype = { class = AceLocale }
+
+function AceLocale.prototype:EnableDebugging()
+ if rawget(self, BASE_TRANSLATIONS) then
+ AceLocale.error(self, "Cannot enable debugging after a translation has been registered.")
+ end
+ rawset(self, DEBUGGING, true)
+end
+
+function AceLocale.prototype:EnableDynamicLocales(override)
+ AceLocale.argCheck(self, override, 2, "boolean", "nil")
+ if not override and rawget(self, BASE_TRANSLATIONS) then
+ AceLocale.error(self, "Cannot enable dynamic locales after a translation has been registered.")
+ end
+ if not rawget(self, DYNAMIC_LOCALES) then
+ rawset(self, DYNAMIC_LOCALES, true)
+ if rawget(self, BASE_LOCALE) then
+ if not rawget(self, TRANSLATION_TABLES) then
+ rawset(self, TRANSLATION_TABLES, {})
+ end
+ self[TRANSLATION_TABLES][self[BASE_LOCALE]] = self[BASE_TRANSLATIONS]
+ self[TRANSLATION_TABLES][self[CURRENT_LOCALE]] = self[TRANSLATIONS]
+ end
+ end
+end
+
+function AceLocale.prototype:RegisterTranslations(locale, func)
+ AceLocale.argCheck(self, locale, 2, "string")
+ AceLocale.argCheck(self, func, 3, "function")
+
+ if locale == rawget(self, BASE_LOCALE) then
+ AceLocale.error(self, "Cannot provide the same locale more than once. %q provided twice.", locale)
+ end
+
+ if rawget(self, BASE_TRANSLATIONS) and GetLocale() ~= locale then
+ if rawget(self, DEBUGGING) or rawget(self, DYNAMIC_LOCALES) then
+ if not rawget(self, TRANSLATION_TABLES) then
+ rawset(self, TRANSLATION_TABLES, {})
+ end
+ if self[TRANSLATION_TABLES][locale] then
+ AceLocale.error(self, "Cannot provide the same locale more than once. %q provided twice.", locale)
+ end
+ local t = func()
+ func = nil
+ if type(t) ~= "table" then
+ AceLocale.error(self, "Bad argument #3 to `RegisterTranslations'. function did not return a table. (expected table, got %s)", type(t))
+ end
+ self[TRANSLATION_TABLES][locale] = t
+ t = nil
+ end
+ func = nil
+ return
+ end
+ local t = func()
+ func = nil
+ if type(t) ~= "table" then
+ AceLocale.error(self, "Bad argument #3 to `RegisterTranslations'. function did not return a table. (expected table, got %s)", type(t))
+ end
+
+ rawset(self, TRANSLATIONS, t)
+ if not rawget(self, BASE_TRANSLATIONS) then
+ rawset(self, BASE_TRANSLATIONS, t)
+ rawset(self, BASE_LOCALE, locale)
+ for key,value in pairs(t) do
+ if value == true then
+ t[key] = key
+ end
+ end
+ else
+ for key, value in pairs(self[TRANSLATIONS]) do
+ if not rawget(self[BASE_TRANSLATIONS], key) then
+ AceLocale.error(self, "Improper translation exists. %q is likely misspelled for locale %s.", key, locale)
+ end
+ if value == true then
+ AceLocale.error(self, "Can only accept true as a value on the base locale. %q is the base locale, %q is not.", rawget(self, BASE_LOCALE), locale)
+ end
+ end
+ end
+ rawset(self, CURRENT_LOCALE, locale)
+ refixInstance(self)
+ if rawget(self, DEBUGGING) or rawget(self, DYNAMIC_LOCALES) then
+ if not rawget(self, TRANSLATION_TABLES) then
+ rawset(self, TRANSLATION_TABLES, {})
+ end
+ self[TRANSLATION_TABLES][locale] = t
+ end
+ t = nil
+end
+
+function AceLocale.prototype:SetLocale(locale)
+ AceLocale.argCheck(self, locale, 2, "string", "boolean")
+ if not rawget(self, DYNAMIC_LOCALES) then
+ AceLocale.error(self, "Cannot call `SetLocale' without first calling `EnableDynamicLocales'.")
+ end
+ if not rawget(self, TRANSLATION_TABLES) then
+ AceLocale.error(self, "Cannot call `SetLocale' without first calling `RegisterTranslations'.")
+ end
+ if locale == true then
+ locale = GetLocale()
+ if not self[TRANSLATION_TABLES][locale] then
+ locale = self[BASE_LOCALE]
+ end
+ end
+
+ if self[CURRENT_LOCALE] == locale then
+ return
+ end
+
+ if not self[TRANSLATION_TABLES][locale] then
+ AceLocale.error(self, "Locale %q not registered.", locale)
+ end
+
+ self[TRANSLATIONS] = self[TRANSLATION_TABLES][locale]
+ self[CURRENT_LOCALE] = locale
+ refixInstance(self)
+end
+
+function AceLocale.prototype:GetLocale()
+ if not rawget(self, TRANSLATION_TABLES) then
+ AceLocale.error(self, "Cannot call `GetLocale' without first calling `RegisterTranslations'.")
+ end
+ return self[CURRENT_LOCALE]
+end
+
+local function iter(t, position)
+ return (next(t, position))
+end
+
+function AceLocale.prototype:IterateAvailableLocales()
+ if not rawget(self, DYNAMIC_LOCALES) then
+ AceLocale.error(self, "Cannot call `IterateAvailableLocales' without first calling `EnableDynamicLocales'.")
+ end
+ if not rawget(self, TRANSLATION_TABLES) then
+ AceLocale.error(self, "Cannot call `IterateAvailableLocales' without first calling `RegisterTranslations'.")
+ end
+ return iter, self[TRANSLATION_TABLES], nil
+end
+
+function AceLocale.prototype:HasLocale(locale)
+ if not rawget(self, DYNAMIC_LOCALES) then
+ AceLocale.error(self, "Cannot call `HasLocale' without first calling `EnableDynamicLocales'.")
+ end
+ AceLocale.argCheck(self, locale, 2, "string")
+ return rawget(self, TRANSLATION_TABLES) and self[TRANSLATION_TABLES][locale] ~= nil
+end
+
+function AceLocale.prototype:SetStrictness(strict)
+ AceLocale.argCheck(self, strict, 2, "boolean")
+ local mt = getmetatable(self)
+ if not mt then
+ AceLocale.error(self, "Cannot call `SetStrictness' without a metatable.")
+ end
+ if not rawget(self, TRANSLATIONS) then
+ AceLocale.error(self, "No translations registered.")
+ end
+ rawset(self, STRICTNESS, strict)
+ refixInstance(self)
+end
+
+local function initReverse(self)
+ rawset(self, REVERSE_TRANSLATIONS, {})
+ local alpha = self[TRANSLATIONS]
+ local bravo = self[REVERSE_TRANSLATIONS]
+ for base, localized in pairs(alpha) do
+ bravo[localized] = base
+ end
+end
+
+function AceLocale.prototype:GetTranslation(text)
+ AceLocale.argCheck(self, text, 1, "string", "number")
+ if not rawget(self, TRANSLATIONS) then
+ AceLocale.error(self, "No translations registered")
+ end
+ return self[text]
+end
+
+function AceLocale.prototype:GetStrictTranslation(text)
+ AceLocale.argCheck(self, text, 1, "string", "number")
+ local x = rawget(self, TRANSLATIONS)
+ if not x then
+ AceLocale.error(self, "No translations registered")
+ end
+ local value = rawget(x, text)
+ if value == nil then
+ AceLocale.error(self, "Translation %q does not exist for locale %s", text, self[CURRENT_LOCALE])
+ end
+ return value
+end
+
+function AceLocale.prototype:GetReverseTranslation(text)
+ local x = rawget(self, REVERSE_TRANSLATIONS)
+ if not x then
+ if not rawget(self, TRANSLATIONS) then
+ AceLocale.error(self, "No translations registered")
+ end
+ initReverse(self)
+ x = self[REVERSE_TRANSLATIONS]
+ end
+ local translation = x[text]
+ if not translation then
+ AceLocale.error(self, "Reverse translation for %q does not exist", text)
+ end
+ return translation
+end
+
+function AceLocale.prototype:GetIterator()
+ local x = rawget(self, TRANSLATIONS)
+ if not x then
+ AceLocale.error(self, "No translations registered")
+ end
+ return next, x, nil
+end
+
+function AceLocale.prototype:GetReverseIterator()
+ local x = rawget(self, REVERSE_TRANSLATIONS)
+ if not x then
+ if not rawget(self, TRANSLATIONS) then
+ AceLocale.error(self, "No translations registered")
+ end
+ initReverse(self)
+ x = self[REVERSE_TRANSLATIONS]
+ end
+ return next, x, nil
+end
+
+function AceLocale.prototype:HasTranslation(text)
+ AceLocale.argCheck(self, text, 1, "string", "number")
+ local x = rawget(self, TRANSLATIONS)
+ if not x then
+ AceLocale.error(self, "No translations registered")
+ end
+ return rawget(x, text) and true
+end
+
+function AceLocale.prototype:HasReverseTranslation(text)
+ local x = rawget(self, REVERSE_TRANSLATIONS)
+ if not x then
+ if not rawget(self, TRANSLATIONS) then
+ AceLocale.error(self, "No translations registered")
+ end
+ initReverse(self)
+ x = self[REVERSE_TRANSLATIONS]
+ end
+ return x[text] and true
+end
+
+function AceLocale.prototype:Debug()
+ if not rawget(self, DEBUGGING) then
+ return
+ end
+ local words = {}
+ local locales = {"enUS", "deDE", "frFR", "koKR", "zhCN", "zhTW", "esES"}
+ local localizations = {}
+ DEFAULT_CHAT_FRAME:AddMessage("--- AceLocale Debug ---")
+ for _,locale in ipairs(locales) do
+ if not self[TRANSLATION_TABLES][locale] then
+ DEFAULT_CHAT_FRAME:AddMessage(string.format("Locale %q not found", locale))
+ else
+ localizations[locale] = self[TRANSLATION_TABLES][locale]
+ end
+ end
+ local localeDebug = {}
+ for locale, localization in pairs(localizations) do
+ localeDebug[locale] = {}
+ for word in pairs(localization) do
+ if type(localization[word]) == "table" then
+ if type(words[word]) ~= "table" then
+ words[word] = {}
+ end
+ for bit in pairs(localization[word]) do
+ if type(localization[word][bit]) == "string" then
+ words[word][bit] = true
+ end
+ end
+ elseif type(localization[word]) == "string" then
+ words[word] = true
+ end
+ end
+ end
+ for word in pairs(words) do
+ if type(words[word]) == "table" then
+ for bit in pairs(words[word]) do
+ for locale, localization in pairs(localizations) do
+ if not rawget(localization, word) or not localization[word][bit] then
+ localeDebug[locale][word .. "::" .. bit] = true
+ end
+ end
+ end
+ else
+ for locale, localization in pairs(localizations) do
+ if not rawget(localization, word) then
+ localeDebug[locale][word] = true
+ end
+ end
+ end
+ end
+ for locale, t in pairs(localeDebug) do
+ if not next(t) then
+ DEFAULT_CHAT_FRAME:AddMessage(string.format("Locale %q complete", locale))
+ else
+ DEFAULT_CHAT_FRAME:AddMessage(string.format("Locale %q missing:", locale))
+ for word in pairs(t) do
+ DEFAULT_CHAT_FRAME:AddMessage(string.format(" %q", word))
+ end
+ end
+ end
+ DEFAULT_CHAT_FRAME:AddMessage("--- End AceLocale Debug ---")
+end
+
+setmetatable(AceLocale.prototype, {
+ __index = function(self, k)
+ if type(k) ~= "table" and k ~= 0 and k ~= "GetLibraryVersion" and k ~= "error" and k ~= "assert" and k ~= "argCheck" and k ~= "pcall" then -- HACK: remove "GetLibraryVersion" and such later.
+ AceLocale.error(lastSelf or self, "Translation %q does not exist.", k)
+ end
+ return nil
+ end
+})
+
+local function activate(self, oldLib, oldDeactivate)
+ AceLocale = self
+
+ self.frame = oldLib and oldLib.frame or CreateFrame("Frame")
+ self.registry = oldLib and oldLib.registry or {}
+ self.BASE_TRANSLATIONS = oldLib and oldLib.BASE_TRANSLATIONS or {}
+ self.DEBUGGING = oldLib and oldLib.DEBUGGING or {}
+ self.TRANSLATIONS = oldLib and oldLib.TRANSLATIONS or {}
+ self.BASE_LOCALE = oldLib and oldLib.BASE_LOCALE or {}
+ self.TRANSLATION_TABLES = oldLib and oldLib.TRANSLATION_TABLES or {}
+ self.REVERSE_TRANSLATIONS = oldLib and oldLib.REVERSE_TRANSLATIONS or {}
+ self.STRICTNESS = oldLib and oldLib.STRICTNESS or {}
+ self.NAME = oldLib and oldLib.NAME or {}
+ self.DYNAMIC_LOCALES = oldLib and oldLib.DYNAMIC_LOCALES or {}
+ self.CURRENT_LOCALE = oldLib and oldLib.CURRENT_LOCALE or {}
+
+ BASE_TRANSLATIONS = self.BASE_TRANSLATIONS
+ DEBUGGING = self.DEBUGGING
+ TRANSLATIONS = self.TRANSLATIONS
+ BASE_LOCALE = self.BASE_LOCALE
+ TRANSLATION_TABLES = self.TRANSLATION_TABLES
+ REVERSE_TRANSLATIONS = self.REVERSE_TRANSLATIONS
+ STRICTNESS = self.STRICTNESS
+ NAME = self.NAME
+ DYNAMIC_LOCALES = self.DYNAMIC_LOCALES
+ CURRENT_LOCALE = self.CURRENT_LOCALE
+
+
+ local GetTime = GetTime
+ local timeUntilClear = GetTime() + 5
+ scheduleClear = function()
+ if next(newRegistries) then
+ self.frame:Show()
+ timeUntilClear = GetTime() + 5
+ end
+ end
+
+ if not self.registry then
+ self.registry = {}
+ else
+ for name, instance in pairs(self.registry) do
+ local name = name
+ local mt = getmetatable(instance)
+ setmetatable(instance, nil)
+ instance[NAME] = name
+ local strict
+ if instance[STRICTNESS] ~= nil then
+ strict = instance[STRICTNESS]
+ elseif instance[TRANSLATIONS] ~= instance[BASE_TRANSLATIONS] then
+ if getmetatable(instance[TRANSLATIONS]).__index == oldLib.prototype then
+ strict = true
+ end
+ end
+ instance[STRICTNESS] = strict and true or false
+ refixInstance(instance)
+ end
+ end
+
+ self.frame:SetScript("OnEvent", scheduleClear)
+ self.frame:SetScript("OnUpdate", function() -- (this, elapsed)
+ if timeUntilClear - GetTime() <= 0 then
+ self.frame:Hide()
+ for k in pairs(newRegistries) do
+ clearCache(k)
+ newRegistries[k] = nil
+ k = nil
+ end
+ end
+ end)
+ self.frame:UnregisterAllEvents()
+ self.frame:RegisterEvent("ADDON_LOADED")
+ self.frame:RegisterEvent("PLAYER_ENTERING_WORLD")
+ self.frame:Show()
+
+ if oldDeactivate then
+ oldDeactivate(oldLib)
+ end
+end
+
+AceLibrary:Register(AceLocale, MAJOR_VERSION, MINOR_VERSION, activate)
diff --git a/MikScrollingBattleText/Libs/BabbleSpell-2.2/Babble-Spell-2.2.lua b/MikScrollingBattleText/Libs/BabbleSpell-2.2/Babble-Spell-2.2.lua
new file mode 100644
index 0000000..7d9d2ca
--- /dev/null
+++ b/MikScrollingBattleText/Libs/BabbleSpell-2.2/Babble-Spell-2.2.lua
@@ -0,0 +1,4134 @@
+--[[
+Name: Babble-Spell-2.2
+Revision: $Rev: 15059 $
+Author(s): ckknight (ckknight@gmail.com)
+Website: http://ckknight.wowinterface.com/
+Documentation: http://wiki.wowace.com/index.php/Babble-Spell-2.2
+SVN: http://svn.wowace.com/root/trunk/Babble-2.2/Babble-Spell-2.2
+Description: A library to provide localizations for spells.
+Dependencies: AceLibrary, AceLocale-2.2
+]]
+
+local MAJOR_VERSION = "Babble-Spell-2.2"
+local MINOR_VERSION = tonumber(string.sub("$Revision: 15059 $", 12, -3))
+
+if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end
+if not AceLibrary:HasInstance("AceLocale-2.2") then error(MAJOR_VERSION .. " requires AceLocale-2.2") end
+
+local _, x = AceLibrary("AceLocale-2.2"):GetLibraryVersion()
+MINOR_VERSION = MINOR_VERSION * 100000 + x
+
+if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
+
+local BabbleSpell = AceLibrary("AceLocale-2.2"):new(MAJOR_VERSION)
+
+-- uncomment below for debug information
+-- BabbleSpell:EnableDebugging()
+
+BabbleSpell:RegisterTranslations("enUS", function()
+ return {
+ ["Abolish Disease"] = true,
+ ["Abolish Poison Effect"] = true,
+ ["Abolish Poison"] = true,
+ ["Activate MG Turret"] = true,
+ ["Adrenaline Rush"] = true,
+ ["Aftermath"] = true,
+ ["Aggression"] = true,
+ ["Aimed Shot"] = true,
+ ["Alchemy"] = true,
+ ["Ambush"] = true,
+ ["Amplify Curse"] = true,
+ ["Amplify Magic"] = true,
+ ["Ancestral Fortitude"] = true,
+ ["Ancestral Healing"] = true,
+ ["Ancestral Knowledge"] = true,
+ ["Ancestral Spirit"] = true,
+ ["Anger Management"] = true,
+ ["Anticipation"] = true,
+ ["Aquatic Form"] = true,
+ ["Arcane Brilliance"] = true,
+ ["Arcane Concentration"] = true,
+ ["Arcane Explosion"] = true,
+ ["Arcane Focus"] = true,
+ ["Arcane Instability"] = true,
+ ["Arcane Intellect"] = true,
+ ["Arcane Meditation"] = true,
+ ["Arcane Mind"] = true,
+ ["Arcane Missiles"] = true,
+ ["Arcane Power"] = true,
+ ["Arcane Resistance"] = true,
+ ["Arcane Shot"] = true,
+ ["Arcane Subtlety"] = true,
+ ["Arctic Reach"] = true,
+ ["Armorsmith"] = true,
+ ["Aspect of the Beast"] = true,
+ ["Aspect of the Cheetah"] = true,
+ ["Aspect of the Hawk"] = true,
+ ["Aspect of the Monkey"] = true,
+ ["Aspect of the Pack"] = true,
+ ["Aspect of the Wild"] = true,
+ ["Astral Recall"] = true,
+ ["Attack"] = true,
+ ["Attacking"] = true,
+ ["Auto Shot"] = true,
+ ["Axe Specialization"] = true,
+ ["Backstab"] = true,
+ ["Bane"] = true,
+ ["Banish"] = true,
+ ["Barkskin Effect"] = true,
+ ["Barkskin"] = true,
+ ["Barrage"] = true,
+ ["Bash"] = true,
+ ["Basic Campfire"] = true,
+ ["Battle Shout"] = true,
+ ["Battle Stance Passive"] = true,
+ ["Battle Stance"] = true,
+ ["Bear Form"] = true,
+ ["Beast Lore"] = true,
+ ["Beast Slaying"] = true,
+ ["Beast Training"] = true,
+ ["Benediction"] = true,
+ ["Berserker Rage"] = true,
+ ["Berserker Stance Passive"] = true,
+ ["Berserker Stance"] = true,
+ ["Berserking"] = true,
+ ["Bestial Discipline"] = true,
+ ["Bestial Swiftness"] = true,
+ ["Bestial Wrath"] = true,
+ ["Bite"] = true,
+ ["Black Arrow"] = true,
+ ["Blackout"] = true,
+ ["Blacksmithing"] = true,
+ ["Blade Flurry"] = true,
+ ["Blast Wave"] = true,
+ ["Blessed Recovery"] = true,
+ ["Blessing of Freedom"] = true,
+ ["Blessing of Kings"] = true,
+ ["Blessing of Light"] = true,
+ ["Blessing of Might"] = true,
+ ["Blessing of Protection"] = true,
+ ["Blessing of Sacrifice"] = true,
+ ["Blessing of Salvation"] = true,
+ ["Blessing of Sanctuary"] = true,
+ ["Blessing of Wisdom"] = true,
+ ["Blind"] = true,
+ ["Blinding Powder"] = true,
+ ["Blink"] = true,
+ ["Blizzard"] = true,
+ ["Block"] = true,
+ ["Blood Craze"] = true,
+ ["Blood Frenzy"] = true,
+ ["Blood Fury"] = true,
+ ["Blood Pact"] = true,
+ ["Bloodrage"] = true,
+ ["Bloodthirst"] = true,
+ ["Booming Voice"] = true,
+ ["Bow Specialization"] = true,
+ ["Bows"] = true,
+ ["Bright Campfire"] = true,
+ ["Brutal Impact"] = true,
+ ["Burning Soul"] = true,
+ ["Call Pet"] = true,
+ ["Call of Flame"] = true,
+ ["Call of Thunder"] = true,
+ ["Camouflage"] = true,
+ ["Cannibalize"] = true,
+ ["Cat Form"] = true,
+ ["Cataclysm"] = true,
+ ["Chain Heal"] = true,
+ ["Chain Lightning"] = true,
+ ["Challenging Roar"] = true,
+ ["Challenging Shout"] = true,
+ ["Charge Rage Bonus Effect"] = true,
+ ["Charge"] = true,
+ ["Charge Stun"] = true,
+ ["Cheap Shot"] = true,
+ ["Chilled"] = true,
+ ["Claw"] = true,
+ ["Cleanse"] = true,
+ ["Clearcasting"] = true,
+ ["Cleave"] = true,
+ ["Clever Traps"] = true,
+ ["Closing"] = true,
+ ["Cloth"] = true,
+ ["Coarse Sharpening Stone"] = true,
+ ["Cobra Reflexes"] = true,
+ ["Cold Blood"] = true,
+ ["Cold Snap"] = true,
+ ["Combat Endurance"] = true,
+ ["Combustion"] = true,
+ ["Command"] = true,
+ ["Concentration Aura"] = true,
+ ["Concussion Blow"] = true,
+ ["Concussion"] = true,
+ ["Concussive Shot"] = true,
+ ["Cone of Cold"] = true,
+ ["Conflagrate"] = true,
+ ["Conjure Food"] = true,
+ ["Conjure Mana Agate"] = true,
+ ["Conjure Mana Citrine"] = true,
+ ["Conjure Mana Jade"] = true,
+ ["Conjure Mana Ruby"] = true,
+ ["Conjure Water"] = true,
+ ["Consecrated Sharpening Stone"] = true,
+ ["Consecration"] = true,
+ ["Consume Shadows"] = true,
+ ["Convection"] = true,
+ ["Conviction"] = true,
+ ["Cooking"] = true,
+ ["Corruption"] = true,
+ ["Counterattack"] = true,
+ ["Counterspell"] = true,
+ ["Counterspell - Silenced"] = true,
+ ["Cower"] = true,
+ ["Create Firestone"] = true,
+ ["Create Firestone (Major)"] = true,
+ ["Create Firestone (Greater)"] = true,
+ ["Create Firestone (Lesser)"] = true,
+ ["Create Healthstone"] = true,
+ ["Create Healthstone (Major)"] = true,
+ ["Create Healthstone (Greater)"] = true,
+ ["Create Healthstone (Lesser)"] = true,
+ ["Create Healthstone (Minor)"] = true,
+ ["Create Soulstone"] = true,
+ ["Create Soulstone (Major)"] = true,
+ ["Create Soulstone (Greater)"] = true,
+ ["Create Soulstone (Lesser)"] = true,
+ ["Create Soulstone (Minor)"] = true,
+ ["Create Spellstone"] = true,
+ ["Create Spellstone (Major)"] = true,
+ ["Create Spellstone (Greater)"] = true,
+ ["Crippling Poison II"] = true,
+ ["Crippling Poison"] = true,
+ ["Critical Mass"] = true,
+ ["Crossbows"] = true,
+ ["Cruelty"] = true,
+ ["Cultivation"] = true,
+ ["Cure Disease"] = true,
+ ["Cure Poison"] = true,
+ ["Curse of Agony"] = true,
+ ["Curse of Doom Effect"] = true,
+ ["Curse of Doom"] = true,
+ ["Curse of Exhaustion"] = true,
+ ["Curse of Idiocy"] = true,
+ ["Curse of Recklessness"] = true,
+ ["Curse of Shadow"] = true,
+ ["Curse of Tongues"] = true,
+ ["Curse of Weakness"] = true,
+ ["Curse of the Elements"] = true,
+ ["Dagger Specialization"] = true,
+ ["Daggers"] = true,
+ ["Dampen Magic"] = true,
+ ["Dark Pact"] = true,
+ ["Darkness"] = true,
+ ["Dash"] = true,
+ ["Deadly Poison II"] = true,
+ ["Deadly Poison III"] = true,
+ ["Deadly Poison IV"] = true,
+ ["Deadly Poison V"] = true,
+ ["Deadly Poison"] = true,
+ ["Death Coil"] = true,
+ ["Death Wish"] = true,
+ ["Deep Wounds"] = true,
+ ["Defense"] = true,
+ ["Defensive Stance Passive"] = true,
+ ["Defensive Stance"] = true,
+ ["Defensive State 2"] = true,
+ ["Defensive State"] = true,
+ ["Defiance"] = true,
+ ["Deflection"] = true,
+ ["Demon Armor"] = true,
+ ["Demon Skin"] = true,
+ ["Demonic Embrace"] = true,
+ ["Demonic Sacrifice"] = true,
+ ["Demoralizing Roar"] = true,
+ ["Demoralizing Shout"] = true,
+ ["Dense Sharpening Stone"] = true,
+ ["Desperate Prayer"] = true,
+ ["Destructive Reach"] = true,
+ ["Detect Greater Invisibility"] = true,
+ ["Detect Invisibility"] = true,
+ ["Detect Lesser Invisibility"] = true,
+ ["Detect Magic"] = true,
+ ["Detect Traps"] = true,
+ ["Detect"] = true,
+ ["Deterrence"] = true,
+ ["Devastation"] = true,
+ ["Devotion Aura"] = true,
+ ["Devour Magic Effect"] = true,
+ ["Devour Magic"] = true,
+ ["Devouring Plague"] = true,
+ ["Diplomacy"] = true,
+ ["Dire Bear Form"] = true,
+ ["Disarm Trap"] = true,
+ ["Disarm"] = true,
+ ["Disease Cleansing Totem"] = true,
+ ["Disenchant"] = true,
+ ["Disengage"] = true,
+ ["Dismiss Pet"] = true,
+ ["Dispel Magic"] = true,
+ ["Distract"] = true,
+ ["Distracting Shot"] = true,
+ ["Dive"] = true,
+ ["Divine Favor"] = true,
+ ["Divine Fury"] = true,
+ ["Divine Intellect"] = true,
+ ["Divine Intervention"] = true,
+ ["Divine Protection"] = true,
+ ["Divine Shield"] = true,
+ ["Divine Spirit"] = true,
+ ["Divine Strength"] = true,
+ ["Dodge"] = true,
+ ["Dragonscale Leatherworking"] = true,
+ ["Drain Life"] = true,
+ ["Drain Mana"] = true,
+ ["Drain Soul"] = true,
+ ["Drink"] = true,
+ ["Dual Wield Specialization"] = true,
+ ["Dual Wield"] = true,
+ ["Duel"] = true,
+ ["Eagle Eye"] = true,
+ ["Earth Shock"] = true,
+ ["Earthbind Totem"] = true,
+ ["Efficiency"] = true,
+ ["Elemental Focus"] = true,
+ ["Elemental Fury"] = true,
+ ["Elemental Leatherworking"] = true,
+ ["Elemental Mastery"] = true,
+ ["Elemental Sharpening Stone"] = true,
+ ["Elune's Grace"] = true,
+ ["Elusiveness"] = true,
+ ["Emberstorm"] = true,
+ ["Enamored Water Spirit"] = true,
+ ["Enchanting"] = true,
+ ["Endurance Training"] = true,
+ ["Endurance"] = true,
+ ["Engineering Specialization"] = true,
+ ["Engineering"] = true,
+ ["Enrage"] = true,
+ ["Enriched Manna Biscuit"] = true,
+ ["Enslave Demon"] = true,
+ ["Entangling Roots"] = true,
+ ["Entrapment"] = true,
+ ["Escape Artist"] = true,
+ ["Evasion"] = true,
+ ["Eventide"] = true,
+ ["Eviscerate"] = true,
+ ["Evocation"] = true,
+ ["Execute"] = true,
+ ["Exorcism"] = true,
+ ["Expansive Mind"] = true,
+ ["Explosive Trap Effect"] = true,
+ ["Explosive Trap"] = true,
+ ["Expose Armor"] = true,
+ ["Eye for an Eye"] = true,
+ ["Eye of Kilrogg"] = true,
+ ["Eyes of the Beast"] = true,
+ ["Fade"] = true,
+ ["Faerie Fire"] = true,
+ ["Faerie Fire (Feral)"] = true,
+ ["Far Sight"] = true,
+ ["Fear Ward"] = true,
+ ["Fear"] = true,
+ ["Feed Pet"] = true,
+ ["Feedback"] = true,
+ ["Feign Death"] = true,
+ ["Feint"] = true,
+ ["Fel Concentration"] = true,
+ ["Fel Domination"] = true,
+ ["Fel Intellect"] = true,
+ ["Fel Stamina"] = true,
+ ["Felfire"] = true,
+ ["Feline Grace"] = true,
+ ["Feline Swiftness"] = true,
+ ["Feral Aggression"] = true,
+ ["Feral Charge"] = true,
+ ["Feral Instinct"] = true,
+ ["Ferocious Bite"] = true,
+ ["Ferocity"] = true,
+ ["Fetish"] = true,
+ ["Find Herbs"] = true,
+ ["Find Minerals"] = true,
+ ["Find Treasure"] = true,
+ ["Fire Blast"] = true,
+ ["Fire Nova Totem"] = true,
+ ["Fire Power"] = true,
+ ["Fire Resistance Aura"] = true,
+ ["Fire Resistance Totem"] = true,
+ ["Fire Resistance"] = true,
+ ["Fire Shield"] = true,
+ ["Fire Vulnerability"] = true,
+ ["Fire Ward"] = true,
+ ["Fireball"] = true,
+ ["Firebolt"] = true,
+ ["First Aid"] = true,
+ ["Fishing Poles"] = true,
+ ["Fishing"] = true,
+ ["Fist Weapon Specialization"] = true,
+ ["Fist Weapons"] = true,
+ ["Flame Shock"] = true,
+ ["Flame Throwing"] = true,
+ ["Flamestrike"] = true,
+ ["Flamethrower"] = true,
+ ["Flametongue Totem"] = true,
+ ["Flametongue Weapon"] = true,
+ ["Flare"] = true,
+ ["Flash Heal"] = true,
+ ["Flash of Light"] = true,
+ ["Flurry"] = true,
+ ["Focused Casting"] = true,
+ ["Food"] = true,
+ ["Forbearance"] = true,
+ ["Force of Will"] = true,
+ ["Freezing Trap Effect"] = true,
+ ["Freezing Trap"] = true,
+ ["Frenzied Regeneration"] = true,
+ ["Frenzy"] = true,
+ ["Frost Armor"] = true,
+ ["Frost Channeling"] = true,
+ ["Frost Nova"] = true,
+ ["Frost Resistance Aura"] = true,
+ ["Frost Resistance Totem"] = true,
+ ["Frost Resistance"] = true,
+ ["Frost Shock"] = true,
+ ["Frost Trap"] = true,
+ ["Frost Trap Aura"] = true,
+ ["Frost Ward"] = true,
+ ["Frostbite"] = true,
+ ["Frostbolt"] = true,
+ ["Frostbrand Weapon"] = true,
+ ["Furious Howl"] = true,
+ ["Furor"] = true,
+ ["Garrote"] = true,
+ ["Generic"] = true,
+ ["Ghost Wolf"] = true,
+ ["Ghostly Strike"] = true,
+ ["Gift of Nature"] = true,
+ ["Gift of the Wild"] = true,
+ ["Gouge"] = true,
+ ["Grace of Air Totem"] = true,
+ ["Great Stamina"] = true,
+ ["Greater Blessing of Kings"] = true,
+ ["Greater Blessing of Light"] = true,
+ ["Greater Blessing of Might"] = true,
+ ["Greater Blessing of Salvation"] = true,
+ ["Greater Blessing of Sanctuary"] = true,
+ ["Greater Blessing of Wisdom"] = true,
+ ["Greater Heal"] = true,
+ ["Grim Reach"] = true,
+ ["Grounding Totem"] = true,
+ ["Grovel"] = true,
+ ["Growl"] = true,
+ ["Guardian's Favor"] = true,
+ ["Gun Specialization"] = true,
+ ["Guns"] = true,
+ ["Hammer of Justice"] = true,
+ ["Hand of Justice"] = true,
+ ["Hammer of Wrath"] = true,
+ ["Hamstring"] = true,
+ ["Harass"] = true,
+ ["Hardiness"] = true,
+ ["Hawk Eye"] = true,
+ ["Heal"] = true,
+ ["Healing Focus"] = true,
+ ["Healing Light"] = true,
+ ["Healing Stream Totem"] = true,
+ ["Healing Touch"] = true,
+ ["Healing Wave"] = true,
+ ["Healing Way"] = true,
+ ["Health Funnel"] = true,
+ ["Heart of the Wild"] = true,
+ ["Heavy Sharpening Stone"] = true,
+ ["Hellfire Effect"] = true,
+ ["Hellfire"] = true,
+ ["Hemorrhage"] = true,
+ ["Herb Gathering"] = true,
+ ["Herbalism"] = true,
+ ["Heroic Strike"] = true,
+ ["Hex of Weakness"] = true,
+ ["Hibernate"] = true,
+ ["Holy Fire"] = true,
+ ["Holy Light"] = true,
+ ["Holy Nova"] = true,
+ ["Holy Power"] = true,
+ ["Holy Reach"] = true,
+ ["Holy Shield"] = true,
+ ["Holy Shock"] = true,
+ ["Holy Specialization"] = true,
+ ["Holy Wrath"] = true,
+ ["Honorless Target"] = true,
+ ["Horse Riding"] = true,
+ ["Howl of Terror"] = true,
+ ["Humanoid Slaying"] = true,
+ ["Hunter's Mark"] = true,
+ ["Hurricane"] = true,
+ ["Ice Armor"] = true,
+ ["Ice Barrier"] = true,
+ ["Ice Block"] = true,
+ ["Ice Shards"] = true,
+ ["Ignite"] = true,
+ ["Illumination"] = true,
+ ["Immolate"] = true,
+ ["Immolation Trap Effect"] = true,
+ ["Immolation Trap"] = true,
+ ["Impact"] = true,
+ ["Impale"] = true,
+ ["Improved Ambush"] = true,
+ ["Improved Arcane Explosion"] = true,
+ ["Improved Arcane Missiles"] = true,
+ ["Improved Arcane Shot"] = true,
+ ["Improved Aspect of the Hawk"] = true,
+ ["Improved Aspect of the Monkey"] = true,
+ ["Improved Backstab"] = true,
+ ["Improved Battle Shout"] = true,
+ ["Improved Berserker Rage"] = true,
+ ["Improved Blessing of Might"] = true,
+ ["Improved Blessing of Wisdom"] = true,
+ ["Improved Blizzard"] = true,
+ ["Improved Bloodrage"] = true,
+ ["Improved Chain Heal"] = true,
+ ["Improved Chain Lightning"] = true,
+ ["Improved Challenging Shout"] = true,
+ ["Improved Charge"] = true,
+ ["Improved Cheap Shot"] = true,
+ ["Improved Cleave"] = true,
+ ["Improved Concentration Aura"] = true,
+ ["Improved Concussive Shot"] = true,
+ ["Improved Cone of Cold"] = true,
+ ["Improved Corruption"] = true,
+ ["Improved Counterspell"] = true,
+ ["Improved Curse of Agony"] = true,
+ ["Improved Curse of Exhaustion"] = true,
+ ["Improved Curse of Weakness"] = true,
+ ["Improved Dampen Magic"] = true,
+ ["Improved Deadly Poison"] = true,
+ ["Improved Demoralizing Shout"] = true,
+ ["Improved Devotion Aura"] = true,
+ ["Improved Disarm"] = true,
+ ["Improved Distract"] = true,
+ ["Improved Drain Life"] = true,
+ ["Improved Drain Mana"] = true,
+ ["Improved Drain Soul"] = true,
+ ["Improved Enrage"] = true,
+ ["Improved Enslave Demon"] = true,
+ ["Improved Entangling Roots"] = true,
+ ["Improved Evasion"] = true,
+ ["Improved Eviscerate"] = true,
+ ["Improved Execute"] = true,
+ ["Improved Expose Armor"] = true,
+ ["Improved Eyes of the Beast"] = true,
+ ["Improved Fade"] = true,
+ ["Improved Feign Death"] = true,
+ ["Improved Fire Blast"] = true,
+ ["Improved Fire Nova Totem"] = true,
+ ["Improved Fire Ward"] = true,
+ ["Improved Fireball"] = true,
+ ["Improved Firebolt"] = true,
+ ["Improved Firestone"] = true,
+ ["Improved Flamestrike"] = true,
+ ["Improved Flametongue Weapon"] = true,
+ ["Improved Flash of Light"] = true,
+ ["Improved Frost Nova"] = true,
+ ["Improved Frost Ward"] = true,
+ ["Improved Frostbolt"] = true,
+ ["Improved Frostbrand Weapon"] = true,
+ ["Improved Garrote"] = true,
+ ["Improved Ghost Wolf"] = true,
+ ["Improved Gouge"] = true,
+ ["Improved Grace of Air Totem"] = true,
+ ["Improved Grounding Totem"] = true,
+ ["Improved Hammer of Justice"] = true,
+ ["Improved Hamstring"] = true,
+ ["Improved Healing Stream Totem"] = true,
+ ["Improved Healing Touch"] = true,
+ ["Improved Healing Wave"] = true,
+ ["Improved Healing"] = true,
+ ["Improved Health Funnel"] = true,
+ ["Improved Healthstone"] = true,
+ ["Improved Heroic Strike"] = true,
+ ["Improved Hunter's Mark"] = true,
+ ["Improved Immolate"] = true,
+ ["Improved Imp"] = true,
+ ["Improved Inner Fire"] = true,
+ ["Improved Instant Poison"] = true,
+ ["Improved Intercept"] = true,
+ ["Improved Intimidating Shout"] = true,
+ ["Improved Judgement"] = true,
+ ["Improved Kick"] = true,
+ ["Improved Kidney Shot"] = true,
+ ["Improved Lash of Pain"] = true,
+ ["Improved Lay on Hands"] = true,
+ ["Improved Lesser Healing Wave"] = true,
+ ["Improved Life Tap"] = true,
+ ["Improved Lightning Bolt"] = true,
+ ["Improved Lightning Shield"] = true,
+ ["Improved Magma Totem"] = true,
+ ["Improved Mana Burn"] = true,
+ ["Improved Mana Shield"] = true,
+ ["Improved Mana Spring Totem"] = true,
+ ["Improved Mark of the Wild"] = true,
+ ["Improved Mend Pet"] = true,
+ ["Improved Mind Blast"] = true,
+ ["Improved Moonfire"] = true,
+ ["Improved Nature's Grasp"] = true,
+ ["Improved Overpower"] = true,
+ ["Improved Power Word: Fortitude"] = true,
+ ["Improved Power Word: Shield"] = true,
+ ["Improved Prayer of Healing"] = true,
+ ["Improved Psychic Scream"] = true,
+ ["Improved Pummel"] = true,
+ ["Improved Regrowth"] = true,
+ ["Improved Reincarnation"] = true,
+ ["Improved Rejuvenation"] = true,
+ ["Improved Rend"] = true,
+ ["Improved Renew"] = true,
+ ["Improved Retribution Aura"] = true,
+ ["Improved Revenge"] = true,
+ ["Improved Revive Pet"] = true,
+ ["Improved Righteous Fury"] = true,
+ ["Improved Rockbiter Weapon"] = true,
+ ["Improved Rupture"] = true,
+ ["Improved Sap"] = true,
+ ["Improved Scorch"] = true,
+ ["Improved Scorpid Sting"] = true,
+ ["Improved Seal of Righteousness"] = true,
+ ["Improved Seal of the Crusader"] = true,
+ ["Improved Searing Pain"] = true,
+ ["Improved Searing Totem"] = true,
+ ["Improved Serpent Sting"] = true,
+ ["Improved Shadow Bolt"] = true,
+ ["Improved Shadow Word: Pain"] = true,
+ ["Improved Shield Bash"] = true,
+ ["Improved Shield Block"] = true,
+ ["Improved Shield Wall"] = true,
+ ["Improved Shred"] = true,
+ ["Improved Sinister Strike"] = true,
+ ["Improved Slam"] = true,
+ ["Improved Slice and Dice"] = true,
+ ["Improved Spellstone"] = true,
+ ["Improved Sprint"] = true,
+ ["Improved Starfire"] = true,
+ ["Improved Stoneclaw Totem"] = true,
+ ["Improved Stoneskin Totem"] = true,
+ ["Improved Strength of Earth Totem"] = true,
+ ["Improved Succubus"] = true,
+ ["Improved Sunder Armor"] = true,
+ ["Improved Taunt"] = true,
+ ["Improved Thorns"] = true,
+ ["Improved Thunder Clap"] = true,
+ ["Improved Tranquility"] = true,
+ ["Improved Vampiric Embrace"] = true,
+ ["Improved Vanish"] = true,
+ ["Improved Voidwalker"] = true,
+ ["Improved Windfury Weapon"] = true,
+ ["Improved Wing Clip"] = true,
+ ["Improved Wrath"] = true,
+ ["Incinerate"] = true,
+ ["Inferno"] = true,
+ ["Initiative"] = true,
+ ["Inner Fire"] = true,
+ ["Inner Focus"] = true,
+ ["Innervate"] = true,
+ ["Insect Swarm"] = true,
+ ["Inspiration"] = true,
+ ["Instant Poison II"] = true,
+ ["Instant Poison III"] = true,
+ ["Instant Poison IV"] = true,
+ ["Instant Poison V"] = true,
+ ["Instant Poison VI"] = true,
+ ["Instant Poison"] = true,
+ ["Intensity"] = true,
+ ["Intercept"] = true,
+ ["Intercept Stun"] = true,
+ ["Intimidating Shout"] = true,
+ ["Intimidation"] = true,
+ ["Iron Will"] = true,
+ ["Judgement of Command"] = true,
+ ["Judgement of Justice"] = true,
+ ["Judgement of Light"] = true,
+ ["Judgement of Righteousness"] = true,
+ ["Judgement of Wisdom"] = true,
+ ["Judgement of the Crusader"] = true,
+ ["Judgement"] = true,
+ ["Kick"] = true,
+ ["Kick - Silenced"] = true,
+ ["Kidney Shot"] = true,
+ ["Killer Instinct"] = true,
+ ["Kodo Riding"] = true,
+ ["Lash of Pain"] = true,
+ ["Last Stand"] = true,
+ ["Lasting Judgement"] = true,
+ ["Lay on Hands"] = true,
+ ["Leader of the Pack"] = true,
+ ["Leather"] = true,
+ ["Leatherworking"] = true,
+ ["Lesser Heal"] = true,
+ ["Lesser Healing Wave"] = true,
+ ["Lesser Invisibility"] = true,
+ ["Lethal Shots"] = true,
+ ["Lethality"] = true,
+ ["Levitate"] = true,
+ ["Libram"] = true,
+ ["Life Tap"] = true,
+ ["Lightning Bolt"] = true,
+ ["Lightning Breath"] = true,
+ ["Lightning Mastery"] = true,
+ ["Lightning Reflexes"] = true,
+ ["Lightning Shield"] = true,
+ ["Lightwell Renew"] = true,
+ ["Lightwell"] = true,
+ ["Lockpicking"] = true,
+ ["Long Daze"] = true,
+ ["Mace Specialization"] = true,
+ ["Mace Stun Effect"] = true,
+ ["Mage Armor"] = true,
+ ["Magma Totem"] = true,
+ ["Mail"] = true,
+ ["Malice"] = true,
+ ["Mana Burn"] = true,
+ ["Mana Shield"] = true,
+ ["Mana Spring Totem"] = true,
+ ["Mana Tide Totem"] = true,
+ ["Mangle"] = true,
+ ["Mark of the Wild"] = true,
+ ["Martyrdom"] = true,
+ ["Master Demonologist"] = true,
+ ["Master Summoner"] = true,
+ ["Master of Deception"] = true,
+ ["Maul"] = true,
+ ["Mechanostrider Piloting"] = true,
+ ["Meditation"] = true,
+ ["Melee Specialization"] = true,
+ ["Mend Pet"] = true,
+ ["Mental Agility"] = true,
+ ["Mental Strength"] = true,
+ ["Mind Blast"] = true,
+ ["Mind Control"] = true,
+ ["Mind Flay"] = true,
+ ["Mind Soothe"] = true,
+ ["Mind Vision"] = true,
+ ["Mind-numbing Poison II"] = true,
+ ["Mind-numbing Poison III"] = true,
+ ["Mind-numbing Poison"] = true,
+ ["Mining"] = true,
+ ["Mocking Blow"] = true,
+ ["Mongoose Bite"] = true,
+ ["Monster Slaying"] = true,
+ ["Moonfire"] = true,
+ ["Moonfury"] = true,
+ ["Moonglow"] = true,
+ ["Moonkin Aura"] = true,
+ ["Moonkin Form"] = true,
+ ["Mortal Shots"] = true,
+ ["Mortal Strike"] = true,
+ ["Multi-Shot"] = true,
+ ["Murder"] = true,
+ ["Natural Armor"] = true,
+ ["Natural Shapeshifter"] = true,
+ ["Natural Weapons"] = true,
+ ["Nature Resistance Totem"] = true,
+ ["Nature Resistance"] = true,
+ ["Nature's Focus"] = true,
+ ["Nature's Grace"] = true,
+ ["Nature's Grasp"] = true,
+ ["Nature's Reach"] = true,
+ ["Nature's Swiftness"] = true,
+ ["Nightfall"] = true,
+ ["Omen of Clarity"] = true,
+ ["One-Handed Axes"] = true,
+ ["One-Handed Maces"] = true,
+ ["One-Handed Swords"] = true,
+ ["One-Handed Weapon Specialization"] = true,
+ ["Opening - No Text"] = true,
+ ["Opening"] = true,
+ ["Opportunity"] = true,
+ ["Overpower"] = true,
+ ["Paranoia"] = true,
+ ["Parry"] = true,
+ ["Pathfinding"] = true,
+ ["Perception"] = true,
+ ["Permafrost"] = true,
+ ["Pet Aggression"] = true,
+ ["Pet Hardiness"] = true,
+ ["Pet Recovery"] = true,
+ ["Pet Resistance"] = true,
+ ["Phase Shift"] = true,
+ ["Pick Lock"] = true,
+ ["Pick Pocket"] = true,
+ ["Piercing Howl"] = true,
+ ["Piercing Ice"] = true,
+ ["Plate Mail"] = true,
+ ["Poison Cleansing Totem"] = true,
+ ["Poisons"] = true,
+ ["Polearm Specialization"] = true,
+ ["Polearms"] = true,
+ ["Polymorph"] = true,
+ ["Polymorph: Pig"] = true,
+ ["Polymorph: Turtle"] = true,
+ ["Portal: Darnassus"] = true,
+ ["Portal: Ironforge"] = true,
+ ["Portal: Orgrimmar"] = true,
+ ["Portal: Stormwind"] = true,
+ ["Portal: Thunder Bluff"] = true,
+ ["Portal: Undercity"] = true,
+ ["Pounce Bleed"] = true,
+ ["Pounce"] = true,
+ ["Power Infusion"] = true,
+ ["Power Word: Fortitude"] = true,
+ ["Power Word: Shield"] = true,
+ ["Prayer of Fortitude"] = true,
+ ["Prayer of Healing"] = true,
+ ["Prayer of Shadow Protection"] = true,
+ ["Prayer of Spirit"] = true,
+ ["Precision"] = true,
+ ["Predatory Strikes"] = true,
+ ["Premeditation"] = true,
+ ["Preparation"] = true,
+ ["Presence of Mind"] = true,
+ ["Primal Fury"] = true,
+ ["Prowl"] = true,
+ ["Psychic Scream"] = true,
+ ["Pummel"] = true,
+ ["Purge"] = true,
+ ["Purification"] = true,
+ ["Purify"] = true,
+ ["Pursuit of Justice"] = true,
+ ["Pyroblast"] = true,
+ ["Pyroclasm"] = true,
+ ["Quick Shots"] = true,
+ ["Quickness"] = true,
+ ["Rain of Fire"] = true,
+ ["Rake"] = true,
+ ["Ram Riding"] = true,
+ ["Ranged Weapon Specialization"] = true,
+ ["Rapid Concealment"] = true,
+ ["Rapid Fire"] = true,
+ ["Raptor Riding"] = true,
+ ["Raptor Strike"] = true,
+ ["Ravage"] = true,
+ ["Readiness"] = true,
+ ["Rebirth"] = true,
+ ["Reckless Charge"] = true,
+ ["Recklessness"] = true,
+ ["Reckoning"] = true,
+ ["Redemption"] = true,
+ ["Redoubt"] = true,
+ ["Reflection"] = true,
+ ["Regeneration"] = true,
+ ["Regrowth"] = true,
+ ["Reincarnation"] = true,
+ ["Rejuvenation"] = true,
+ ["Relentless Strikes"] = true,
+ ["Remorseless"] = true,
+ ["Remorseless Attacks"] = true,
+ ["Remove Curse"] = true,
+ ["Remove Insignia"] = true,
+ ["Remove Lesser Curse"] = true,
+ ["Rend"] = true,
+ ["Renew"] = true,
+ ["Repentance"] = true,
+ ["Resurrection"] = true,
+ ["Retaliation"] = true,
+ ["Retribution Aura"] = true,
+ ["Revenge Stun"] = true,
+ ["Revenge"] = true,
+ ["Reverberation"] = true,
+ ["Revive Pet"] = true,
+ ["Righteous Fury"] = true,
+ ["Rip"] = true,
+ ["Riposte"] = true,
+ ["Ritual of Doom Effect"] = true,
+ ["Ritual of Doom"] = true,
+ ["Ritual of Summoning"] = true,
+ ["Rockbiter Weapon"] = true,
+ ["Rogue Passive"] = true,
+ ["Rough Sharpening Stone"] = true,
+ ["Ruin"] = true,
+ ["Rupture"] = true,
+ ["Ruthlessness"] = true,
+ ["Sacrifice"] = true,
+ ["Safe Fall"] = true,
+ ["Sanctity Aura"] = true,
+ ["Sap"] = true,
+ ["Savage Fury"] = true,
+ ["Savage Strikes"] = true,
+ ["Scare Beast"] = true,
+ ["Scatter Shot"] = true,
+ ["Scorch"] = true,
+ ["Scorpid Poison"] = true,
+ ["Scorpid Sting"] = true,
+ ["Screech"] = true,
+ ["Seal Fate"] = true,
+ ["Seal of Command"] = true,
+ ["Seal of Justice"] = true,
+ ["Seal of Light"] = true,
+ ["Seal of Righteousness"] = true,
+ ["Seal of Wisdom"] = true,
+ ["Seal of the Crusader"] = true,
+ ["Searing Light"] = true,
+ ["Searing Pain"] = true,
+ ["Searing Totem"] = true,
+ ["Seduction"] = true,
+ ["Sense Demons"] = true,
+ ["Sense Undead"] = true,
+ ["Sentry Totem"] = true,
+ ["Serpent Sting"] = true,
+ ["Setup"] = true,
+ ["Shackle Undead"] = true,
+ ["Shadow Affinity"] = true,
+ ["Shadow Bolt"] = true,
+ ["Shadow Focus"] = true,
+ ["Shadow Mastery"] = true,
+ ["Shadow Protection"] = true,
+ ["Shadow Reach"] = true,
+ ["Shadow Resistance Aura"] = true,
+ ["Shadow Resistance"] = true,
+ ["Shadow Trance"] = true,
+ ["Shadow Vulnerability"] = true,
+ ["Shadow Ward"] = true,
+ ["Shadow Weaving"] = true,
+ ["Shadow Word: Pain"] = true,
+ ["Shadowburn"] = true,
+ ["Shadowform"] = true,
+ ["Shadowguard"] = true,
+ ["Shadowmeld Passive"] = true,
+ ["Shadowmeld"] = true,
+ ["Sharpened Claws"] = true,
+ ["Shatter"] = true,
+ ["Sheep"] = true,
+ ["Shell Shield"] = true,
+ ["Shield Bash"] = true,
+ ["Shield Bash - Silenced"] = true,
+ ["Shield Block"] = true,
+ ["Shield Slam"] = true,
+ ["Shield Specialization"] = true,
+ ["Shield Wall"] = true,
+ ["Shield"] = true,
+ ["Shoot Bow"] = true,
+ ["Shoot Crossbow"] = true,
+ ["Shoot Gun"] = true,
+ ["Shoot"] = true,
+ ["Shred"] = true,
+ ["Silence"] = true,
+ ["Silent Resolve"] = true,
+ ["Sinister Strike"] = true,
+ ["Siphon Life"] = true,
+ ["Skinning"] = true,
+ ["Slam"] = true,
+ ["Sleep"] = true,
+ ["Slice and Dice"] = true,
+ ["Slow Fall"] = true,
+ ["Smelting"] = true,
+ ["Smite"] = true,
+ ["Solid Sharpening Stone"] = true,
+ ["Soothe Animal"] = true,
+ ["Soothing Kiss"] = true,
+ ["Soul Fire"] = true,
+ ["Soul Link"] = true,
+ ["Soul Siphon"] = true,
+ ["Soulstone Resurrection"] = true,
+ ["Spell Lock"] = true,
+ ["Spell Warding"] = true,
+ ["Spirit Bond"] = true,
+ ["Spirit Tap"] = true,
+ ["Spirit of Redemption"] = true,
+ ["Spiritual Focus"] = true,
+ ["Spiritual Guidance"] = true,
+ ["Spiritual Healing"] = true,
+ ["Sprint"] = true,
+ ["Starfire"] = true,
+ ["Starfire Stun"] = true,
+ ["Starshards"] = true,
+ ["Staves"] = true,
+ ["Stealth"] = true,
+ ["Stoneclaw Totem"] = true,
+ ["Stoneform"] = true,
+ ["Stoneskin Totem"] = true,
+ ["Stormstrike"] = true,
+ ["Strength of Earth Totem"] = true,
+ ["Stuck"] = true,
+ ["Subtlety"] = true,
+ ["Suffering"] = true,
+ ["Summon Charger"] = true,
+ ["Summon Dreadsteed"] = true,
+ ["Summon Felhunter"] = true,
+ ["Summon Felsteed"] = true,
+ ["Summon Imp"] = true,
+ ["Summon Succubus"] = true,
+ ["Summon Voidwalker"] = true,
+ ["Summon Warhorse"] = true,
+ ["Sunder Armor"] = true,
+ ["Suppression"] = true,
+ ["Surefooted"] = true,
+ ["Survivalist"] = true,
+ ["Sweeping Strikes"] = true,
+ ["Swiftmend"] = true,
+ ["Swipe"] = true,
+ ["Sword Specialization"] = true,
+ ["Tactical Mastery"] = true,
+ ["Tainted Blood"] = true,
+ ["Tailoring"] = true,
+ ["Tame Beast"] = true,
+ ["Tamed Pet Passive"] = true,
+ ["Taunt"] = true,
+ ["Teleport: Darnassus"] = true,
+ ["Teleport: Ironforge"] = true,
+ ["Teleport: Moonglade"] = true,
+ ["Teleport: Orgrimmar"] = true,
+ ["Teleport: Stormwind"] = true,
+ ["Teleport: Thunder Bluff"] = true,
+ ["Teleport: Undercity"] = true,
+ ["The Human Spirit"] = true,
+ ["Thick Hide"] = true,
+ ["Thorns"] = true,
+ ["Throw"] = true,
+ ["Throwing Specialization"] = true,
+ ["Throwing Weapon Specialization"] = true,
+ ["Thrown"] = true,
+ ["Thunder Clap"] = true,
+ ["Thundering Strikes"] = true,
+ ["Thunderstomp"] = true,
+ ["Tidal Focus"] = true,
+ ["Tidal Mastery"] = true,
+ ["Tiger Riding"] = true,
+ ["Tiger's Fury"] = true,
+ ["Torment"] = true,
+ ["Totem"] = true,
+ ["Totemic Focus"] = true,
+ ["Touch of Weakness"] = true,
+ ["Toughness"] = true,
+ ["Track Beasts"] = true,
+ ["Track Demons"] = true,
+ ["Track Dragonkin"] = true,
+ ["Track Elementals"] = true,
+ ["Track Giants"] = true,
+ ["Track Hidden"] = true,
+ ["Track Humanoids"] = true,
+ ["Track Undead"] = true,
+ ["Tranquil Air Totem"] = true,
+ ["Tranquil Spirit"] = true,
+ ["Tranquility"] = true,
+ ["Tranquilizing Shot"] = true,
+ ["Trap Mastery"] = true,
+ ["Travel Form"] = true,
+ ["Tremor Totem"] = true,
+ ["Tribal Leatherworking"] = true,
+ ["Trueshot Aura"] = true,
+ ["Turn Undead"] = true,
+ ["Two-Handed Axes and Maces"] = true,
+ ["Two-Handed Axes"] = true,
+ ["Two-Handed Maces"] = true,
+ ["Two-Handed Swords"] = true,
+ ["Two-Handed Weapon Specialization"] = true,
+ ["Unarmed"] = true,
+ ["Unbreakable Will"] = true,
+ ["Unbridled Wrath Effect"] = true,
+ ["Unbridled Wrath"] = true,
+ ["Undead Horsemanship"] = true,
+ ["Underwater Breathing"] = true,
+ ["Unending Breath"] = true,
+ ["Unholy Power"] = true,
+ ["Unleashed Fury"] = true,
+ ["Unyielding Faith"] = true,
+ ["Vampiric Embrace"] = true,
+ ["Vanish"] = true,
+ ["Vanished"] = true,
+ ["Vengeance"] = true,
+ ["Vigor"] = true,
+ ["Vile Poisons"] = true,
+ ["Vindication"] = true,
+ ["Viper Sting"] = true,
+ ["Volley"] = true,
+ ["Wand Specialization"] = true,
+ ["Wands"] = true,
+ ["War Stomp"] = true,
+ ["Water Breathing"] = true,
+ ["Water Walking"] = true,
+ ["Weakened Soul"] = true,
+ ["Weaponsmith"] = true,
+ ["Whirlwind"] = true,
+ ["Will of the Forsaken"] = true,
+ ["Windfury Totem"] = true,
+ ["Windfury Weapon"] = true,
+ ["Windwall Totem"] = true,
+ ["Wing Clip"] = true,
+ ["Winter's Chill"] = true,
+ ["Wisp Spirit"] = true,
+ ["Wolf Riding"] = true,
+ ["Wound Poison II"] = true,
+ ["Wound Poison III"] = true,
+ ["Wound Poison IV"] = true,
+ ["Wound Poison"] = true,
+ ["Wrath"] = true,
+ ["Wyvern Sting"] = true,
+ }
+end)
+
+BabbleSpell:RegisterTranslations("deDE", function()
+ return {
+ ["Abolish Disease"] = "Krankheit aufheben",
+ ["Abolish Poison Effect"] = "Vergiftung aufheben - Effekt",
+ ["Abolish Poison"] = "Vergiftung aufheben",
+ ["Activate MG Turret"] = "MG-Turm aktivieren",
+ ["Adrenaline Rush"] = "Adrenalinrausch",
+ ["Aftermath"] = "Nachwirkung",
+ ["Aggression"] = "Aggression",
+ ["Aimed Shot"] = "Gezielter Schuss",
+ ["Alchemy"] = "Alchimie",
+ ["Ambush"] = "Hinterhalt",
+ ["Amplify Curse"] = "Fluch verst\195\164rken",
+ ["Amplify Magic"] = "Magie verst\195\164rken",
+ ["Ancestral Fortitude"] = "Seelenstrke der Ahnen",
+ ["Ancestral Healing"] = "Heilung der Ahnen",
+ ["Ancestral Knowledge"] = "Wissen der Ahnen",
+ ["Ancestral Spirit"] = "Geist der Ahnen",
+ ["Anger Management"] = "Aggressionskontrolle",
+ ["Anticipation"] = "Vorahnung",
+ ["Aquatic Form"] = "Wassergestalt",
+ ["Arcane Brilliance"] = "Arkane Brillanz",
+ ["Arcane Concentration"] = "Arkane Konzentration",
+ ["Arcane Explosion"] = "Arkane Explosion",
+ ["Arcane Focus"] = "Arkaner Fokus",
+ ["Arcane Instability"] = "Arkane Instabilit\195\164t",
+ ["Arcane Intellect"] = "Arkane Intelligenz",
+ ["Arcane Meditation"] = "Arkane Meditation",
+ ["Arcane Mind"] = "Arkaner Geist",
+ ["Arcane Missiles"] = "Arkane Geschosse",
+ ["Arcane Power"] = "Arkane Macht",
+ ["Arcane Resistance"] = "Arkanwiderstand",
+ ["Arcane Shot"] = "Arkaner Schuss",
+ ["Arcane Subtlety"] = "Arkanes Feingef\195\188hl",
+ ["Arctic Reach"] = "Arktische Reichweite",
+ ["Armorsmith"] = "R\195\188stungsschmied",
+ ["Aspect of the Beast"] = "Aspekt des Wildtiers",
+ ["Aspect of the Cheetah"] = "Aspekt des Geparden",
+ ["Aspect of the Hawk"] = "Aspekt des Falken",
+ ["Aspect of the Monkey"] = "Aspekt des Affen",
+ ["Aspect of the Pack"] = "Aspekt des Rudels",
+ ["Aspect of the Wild"] = "Aspekt der Wildnis",
+ ["Astral Recall"] = "Astraler R\195\188ckruf",
+ ["Attack"] = "Angreifen",
+ ["Attacking"] = "Angreifen",
+ ["Auto Shot"] = "Autom. Schuss",
+ ["Axe Specialization"] = "Axt-Spezialisierung",
+ ["Backstab"] = "Meucheln",
+ ["Bane"] = "Dunkle Macht",
+ ["Banish"] = "Verbannen",
+ ["Barkskin Effect"] = "Baumrindeneffekt",
+ ["Barkskin"] = "Baumrinde",
+ ["Barrage"] = "Sperrfeuer",
+ ["Bash"] = "Hieb",
+ ["Basic Campfire"] = "Einfaches Lagerfeuer",
+ ["Battle Shout"] = "Schlachtruf",
+ ["Battle Stance Passive"] = "Kampfhaltung Passiv",
+ ["Battle Stance"] = "Kampfhaltung",
+ ["Bear Form"] = "B\195\164rengestalt",
+ ["Beast Lore"] = "Wildtierkunde",
+ ["Beast Slaying"] = "Wildtierschl\195\164chter",
+ ["Beast Training"] = "Wildtierausbildung",
+ ["Benediction"] = "Segnung",
+ ["Berserker Rage"] = "Berserkerwut",
+ ["Berserker Stance Passive"] = "Berserkerhaltung - Passiv",
+ ["Berserker Stance"] = "Berserkerhaltung",
+ ["Berserking"] = "Berserker",
+ ["Bestial Discipline"] = "Wildtierdisziplin",
+ ["Bestial Swiftness"] = "Erh\195\182hte Tiergeschwindigkeit",
+ ["Bestial Wrath"] = "Zorn des Wildtiers",
+ ["Bite"] = "Bei\195\159en",
+ ["Black Arrow"] = "Schwarzer Pfeil",
+ ["Blackout"] = "Verdunkelung",
+ ["Blacksmithing"] = "Schmiedekunst",
+ ["Blade Flurry"] = "Klingenwirbel",
+ ["Blast Wave"] = "Druckwelle",
+ ["Blessed Recovery"] = "Gesegnete Erholung",
+ ["Blessing of Freedom"] = "Segen der Freiheit",
+ ["Blessing of Kings"] = "Segen der K\195\182nige",
+ ["Blessing of Light"] = "Segen des Lichts",
+ ["Blessing of Might"] = "Segen der Macht",
+ ["Blessing of Protection"] = "Segen des Schutzes",
+ ["Blessing of Sacrifice"] = "Segen der Opferung",
+ ["Blessing of Salvation"] = "Segen der Rettung",
+ ["Blessing of Sanctuary"] = "Segen des Refugiums",
+ ["Blessing of Wisdom"] = "Segen der Weisheit",
+ ["Blind"] = "Blenden",
+ ["Blinding Powder"] = "Blendungspulver",
+ ["Blink"] = "Blinzeln",
+ ["Blizzard"] = "Blizzard",
+ ["Block"] = "Blocken",
+ ["Blood Craze"] = "Blutwahnsinn",
+ ["Blood Frenzy"] = "Blutraserei",
+ ["Blood Fury"] = "Kochendes Blut",
+ ["Blood Pact"] = "Blutpakt",
+ ["Bloodrage"] = "Blutrausch",
+ ["Bloodthirst"] = "Blutdurst",
+ ["Booming Voice"] = "Donnernde Stimme",
+ ["Bow Specialization"] = "Bogenspezialisierung",
+ ["Bows"] = "Bogen",
+ ["Bright Campfire"] = "Helles Lagerfeuer",
+ ["Brutal Impact"] = "Brutaler Hieb",
+ ["Burning Soul"] = "Brennende Seele",
+ ["Call Pet"] = "Tier rufen",
+ ["Call of Flame"] = "Ruf der Flamme",
+ ["Call of Thunder"] = "Ruf des Donners",
+ ["Camouflage"] = "Tarnung",
+ ["Cannibalize"] = "Kannibalismus",
+ ["Cat Form"] = "Katzengestalt",
+ ["Cataclysm"] = "Katastrophe",
+ ["Chain Heal"] = "Kettenheilung",
+ ["Chain Lightning"] = "Kettenblitzschlag",
+ ["Challenging Roar"] = "Herausforderndes Gebr\195\188ll",
+ ["Challenging Shout"] = "Herausforderungsruf",
+ ["Charge Rage Bonus Effect"] = "Wut-Aufladung-Bonus-Effekt",
+ ["Charge"] = "Sturmangriff",
+ ["Charge Stun"] = "Sturmangriffsbetubung",
+ ["Cheap Shot"] = "Fieser Trick",
+ ["Chilled"] = "K\195\164lte",
+ ["Claw"] = "Klaue",
+ ["Cleanse"] = "Reinigung des Glaubens",
+ ["Clearcasting"] = "Freizaubern",
+ ["Cleave"] = "Spalten",
+ ["Clever Traps"] = "Falleneffizienz",
+ ["Closing"] = "Schlie\195\159en",
+ ["Cloth"] = "Stoff",
+ ["Cobra Reflexes"] = "Kobrareflexe",
+ ["Cold Blood"] = "Kaltbl\195\188tigkeit",
+ ["Cold Snap"] = "K\195\164lteeinbruch",
+ ["Combat Endurance"] = "Durchhalteverm\195\182gen des K\195\164mpfers",
+ ["Combustion"] = "Verbrennung",
+ ["Command"] = "Befehlsgewalt",
+ ["Concentration Aura"] = "Aura der Konzentration",
+ ["Concussion Blow"] = "Ersch\195\188tternder Schlag",
+ ["Concussion"] = "Ersch\195\188tterung",
+ ["Concussive Shot"] = "Ersch\195\188tternder Schuss",
+ ["Cone of Cold"] = "K\195\164ltekegel",
+ ["Conflagrate"] = "Feuersbrunst",
+ ["Conjure Food"] = "Essen herbeizaubern",
+ ["Conjure Mana Agate"] = "Mana-Achat herbeizaubern",
+ ["Conjure Mana Citrine"] = "Mana-Citrin herbeizaubern",
+ ["Conjure Mana Jade"] = "Mana-Jadestein herbeizaubern",
+ ["Conjure Mana Ruby"] = "Mana-Rubin herbeizaubern",
+ ["Conjure Water"] = "Wasser herbeizaubern",
+ ["Consecration"] = "Weihe",
+ ["Consume Shadows"] = "Schatten verzehren",
+ ["Convection"] = "Konvektion",
+ ["Conviction"] = "\195\156berzeugung",
+ ["Cooking"] = "Kochkunst",
+ ["Corruption"] = "Verderbnis",
+ ["Counterattack"] = "Gegenangriff",
+ ["Counterspell"] = "Gegenzauber",
+ ["Counterspell - Silenced"] = "Gegenzauber - zum Schweigen gebracht",
+ ["Cower"] = "Ducken",
+ ["Create Firestone"] = "Feuerstein herstellen",
+ ["Create Firestone (Major)"] = "Feuerstein herstellen (Gro\195\159er)",
+ ["Create Firestone (Greater)"] = "Feuerstein herstellen (Gr\195\182\sser)",
+ ["Create Firestone (Lesser)"] = "Feuerstein herstellen (Kleiner)",
+ ["Create Healthstone"] = "Gesundheitsstein herstellen",
+ ["Create Healthstone (Major)"] = "Gesundheitsstein herstellen (Gro\195\159er)",
+ ["Create Healthstone (Greater)"] = "Gesundheitsstein herstellen (Gr\195\182\sser)",
+ ["Create Healthstone (Lesser)"] = "Gesundheitsstein herstellen (Kleiner)",
+ ["Create Healthstone (Minor)"] = "Gesundheitsstein herstellen (Klein)",
+ ["Create Soulstone"] = "Seelenstein herstellen",
+ ["Create Soulstone (Major)"] = "Seelenstein herstellen (Gro\195\159er)",
+ ["Create Soulstone (Greater)"] = "Seelenstein herstellen (Gr\195\182\sser)",
+ ["Create Soulstone (Lesser)"] = "Seelenstein herstellen (Kleiner)",
+ ["Create Soulstone (Minor)"] = "Seelenstein herstellen (Klein)",
+ ["Create Spellstone"] = "Zauberstein herstellen",
+ ["Create Spellstone (Major)"] = "Zauberstein herstellen (Gro\195\159er)",
+ ["Create Spellstone (Greater)"] = "Zauberstein herstellen (Gr\195\182\sser)",
+ ["Crippling Poison II"] = "Verkr\195\188ppelndes Gift II",
+ ["Crippling Poison"] = "Verkr\195\188ppelndes Gift",
+ ["Critical Mass"] = "Kritische Masse",
+ ["Crossbows"] = "Armbr\195\188ste",
+ ["Cruelty"] = "Grausamkeit",
+ ["Cultivation"] = "Gr\195\188ner Daumen",
+ ["Cure Disease"] = "Krankheit heilen",
+ ["Cure Poison"] = "Vergiftung heilen",
+ ["Curse of Agony"] = "Fluch der Pein",
+ ["Curse of Doom Effect"] = "Fluch der Verdammnis'-Effekt",
+ ["Curse of Doom"] = "Fluch der Verdammnis",
+ ["Curse of Exhaustion"] = "Fluch der Ersch\195\182pfung",
+ ["Curse of Idiocy"] = "Fluch der Torheit",
+ ["Curse of Recklessness"] = "Fluch der Tollk\195\188hnheit",
+ ["Curse of Shadow"] = "Fluch der Schatten",
+ ["Curse of Tongues"] = "Fluch der Sprachen",
+ ["Curse of Weakness"] = "Fluch der Schw\195\164che",
+ ["Curse of the Elements"] = "Fluch der Elemente",
+ ["Dagger Specialization"] = "Dolch-Spezialisierung",
+ ["Daggers"] = "Dolche",
+ ["Dampen Magic"] = "Magie d\195\164mpfen",
+ ["Dark Pact"] = "Dunkler Pakt",
+ ["Darkness"] = "Dunkelheit",
+ ["Dash"] = "Spurt",
+ ["Deadly Poison II"] = "T\195\182dliches Gift II",
+ ["Deadly Poison III"] = "T\195\182dliches Gift III",
+ ["Deadly Poison IV"] = "T\195\182dliches Gift IV",
+ ["Deadly Poison V"] = "T\195\182dliches Gift V",
+ ["Deadly Poison"] = "T\195\182dliches Gift",
+ ["Death Coil"] = "Todesmantel",
+ ["Death Wish"] = "Todeswunsch",
+ ["Deep Wounds"] = "Tiefe Wunden",
+ ["Defense"] = "Verteidigung",
+ ["Defensive Stance Passive"] = "Verteidigungshaltung - Passiv",
+ ["Defensive Stance"] = "Verteidigungshaltung",
+ ["Defensive State 2"] = "Verteidigungsstatus 2",
+ ["Defensive State"] = "Verteidigungsstatus",
+ ["Defiance"] = "Trotz",
+ ["Deflection"] = "Abwehr",
+ ["Demon Armor"] = "D\195\164monenr\195\188stung",
+ ["Demon Skin"] = "D\195\164monenhaut",
+ ["Demonic Embrace"] = "D\195\164monische Umarmung",
+ ["Demonic Sacrifice"] = "D\195\164monische Opferung",
+ ["Demoralizing Roar"] = "Demoralisierendes Gebr\195\188ll",
+ ["Demoralizing Shout"] = "Demoralisierungsruf",
+ ["Desperate Prayer"] = "Verzweifeltes Gebet",
+ ["Destructive Reach"] = "Zerst\195\182rerische Reichweite",
+ ["Detect Greater Invisibility"] = "Gro\195\159e Unsichtbarkeit entdecken",
+ ["Detect Invisibility"] = "Unsichtbarkeit entdecken",
+ ["Detect Lesser Invisibility"] = "Geringe Unsichtbarkeit entdecken",
+ ["Detect Magic"] = "Magie entdecken",
+ ["Detect Traps"] = "Fallen entdecken",
+ ["Detect"] = "Entdecken",
+ ["Deterrence"] = "Abschreckung",
+ ["Devastation"] = "Verw\195\188stung",
+ ["Devotion Aura"] = "Aura der Hingabe",
+ ["Devour Magic Effect"] = "Magie verschlingen' - Effekt",
+ ["Devour Magic"] = "Magie verschlingen",
+ ["Devouring Plague"] = "Verschlingende Seuche",
+ ["Diplomacy"] = "Diplomatie",
+ ["Dire Bear Form"] = "Terrorb\195\164rengestalt",
+ ["Disarm Trap"] = "Falle entsch\195\164rfen",
+ ["Disarm"] = "Entwaffnen",
+ ["Disease Cleansing Totem"] = "Totem der Krankheitsreinigung",
+ ["Disenchant"] = "Entzaubern",
+ ["Disengage"] = "R\195\188ckzug",
+ ["Dismiss Pet"] = "Tier freigeben",
+ ["Dispel Magic"] = "Magiebannung",
+ ["Distract"] = "Ablenken",
+ ["Distracting Shot"] = "Ablenkender Schuss",
+ ["Dive"] = "Sturzflug",
+ ["Divine Favor"] = "G\195\182ttliche Gunst",
+ ["Divine Fury"] = "G\195\182ttlicher Furor",
+ ["Divine Intellect"] = "G\195\182ttliche Weisheit",
+ ["Divine Intervention"] = "G\195\182ttliches Eingreifen",
+ ["Divine Protection"] = "G\195\182ttlicher Schutz",
+ ["Divine Shield"] = "Gottesschild",
+ ["Divine Spirit"] = "G\195\182ttlicher Willen",
+ ["Divine Strength"] = "G\195\182ttliche St\195\164rke",
+ ["Dodge"] = "Ausweichen",
+ ["Dragonscale Leatherworking"] = "Drachenschuppenlederverarbeitung",
+ ["Drain Life"] = "Blutsauger",
+ ["Drain Mana"] = "Mana entziehen",
+ ["Drain Soul"] = "Seelendieb",
+ ["Drink"] = "Trinken",
+ ["Dual Wield Specialization"] = "Beidh\195\164ndigkeits-Spezialisierung",
+ ["Dual Wield"] = "Beidh\195\164ndigkeit",
+ ["Duel"] = "Duell",
+ ["Eagle Eye"] = "Adlerauge",
+ ["Earth Shock"] = "Erdschock",
+ ["Earthbind Totem"] = "Totem der Erdbindung",
+ ["Efficiency"] = "Effizienz",
+ ["Elemental Focus"] = "Elementarfokus",
+ ["Elemental Fury"] = "Elementarfuror",
+ ["Elemental Leatherworking"] = "Elementarlederverarbeitung",
+ ["Elemental Mastery"] = "Elementarbeherrschung",
+ ["Elune's Grace"] = "Elunes Anmut",
+ ["Elusiveness"] = "Fl\195\188chtigkeit",
+ ["Emberstorm"] = "Glutsturm",
+ ["Enamored Water Spirit"] = "Entzckter Wassergeist",
+ ["Enchanting"] = "Verzauberkunst",
+ ["Endurance Training"] = "Belastbarkeit-Ausbildung",
+ ["Endurance"] = "Durchhalteverm\195\182gen",
+ ["Engineering Specialization"] = "Technologist",
+ ["Engineering"] = "Ingenieurskunst",
+ ["Enrage"] = "Wutanfall",
+ ["Enriched Manna Biscuit"] = "Angereicherter Manakeks",
+ ["Enslave Demon"] = "D\195\164monensklave",
+ ["Entangling Roots"] = "Wucherwurzeln",
+ ["Entrapment"] = "Einfangen",
+ ["Escape Artist"] = "Entfesselungsk\195\188nstler",
+ ["Evasion"] = "Entrinnen",
+ ["Eventide"] = "Abendzeit",
+ ["Eviscerate"] = "Ausweiden",
+ ["Evocation"] = "Hervorrufung",
+ ["Execute"] = "Hinrichten",
+ ["Exorcism"] = "Exorzismus",
+ ["Expansive Mind"] = "Wacher Geist",
+ ["Explosive Trap Effect"] = "Sprengfalle'-Effekt",
+ ["Explosive Trap"] = "Sprengfalle",
+ ["Expose Armor"] = "R\195\188stung schw\195\164chen",
+ ["Eye for an Eye"] = "Auge um Auge",
+ ["Eye of Kilrogg"] = "Auge von Kilrogg",
+ ["Eyes of the Beast"] = "Augen des Wildtiers",
+ ["Fade"] = "Verblassen",
+ ["Faerie Fire"] = "Feenfeuer",
+ ["Faerie Fire (Feral)"] = "Feenfeuer (Tiergestalt)",
+ ["Far Sight"] = "Fernsicht",
+ ["Fear Ward"] = "Furchtzauberschutz",
+ ["Fear"] = "Furcht",
+ ["Feed Pet"] = "Tier f\195\188ttern",
+ ["Feedback"] = "R\195\188ckkopplung",
+ ["Feign Death"] = "Totstellen",
+ ["Feint"] = "Finte",
+ ["Fel Concentration"] = "Teufelskonzentration",
+ ["Fel Domination"] = "Teufelsbeherrschung",
+ ["Fel Intellect"] = "Teufelsintelligenz",
+ ["Fel Stamina"] = "Teufelsausdauer",
+ ["Felfire"] = "Teufelsfeuer",
+ ["Feline Grace"] = "Katzenhafte Anmut",
+ ["Feline Swiftness"] = "Katzenhafte Schnelligkeit",
+ ["Feral Aggression"] = "Wilde Aggression",
+ ["Feral Charge"] = "Wilde Attacke",
+ ["Feral Instinct"] = "Instinkt der Wildnis",
+ ["Ferocious Bite"] = "Wilder Biss",
+ ["Ferocity"] = "Wildheit",
+ ["Fetish"] = "Fetisch",
+ ["Find Herbs"] = "Kr\195\164utersuche",
+ ["Find Minerals"] = "Mineraliensuche",
+ ["Find Treasure"] = "Schatzsucher",
+ ["Fire Blast"] = "Feuerschlag",
+ ["Fire Nova Totem"] = "Totem der Feuernova",
+ ["Fire Power"] = "Feuermacht",
+ ["Fire Resistance Aura"] = "Aura des Feuerwiderstands",
+ ["Fire Resistance Totem"] = "Totem des Feuerwiderstands",
+ ["Fire Resistance"] = "Feuerwiderstand",
+ ["Fire Shield"] = "Feuerschild",
+ ["Fire Vulnerability"] = "Feuerverwundbarkeit",
+ ["Fire Ward"] = "Feuerzauberschutz",
+ ["Fireball"] = "Feuerball",
+ ["Firebolt"] = "Feuerblitz",
+ ["First Aid"] = "Erste Hilfe",
+ ["Fishing Poles"] = "Angeln",
+ ["Fishing"] = "Angeln",
+ ["Fist Weapon Specialization"] = "Faustwaffen-Spezialisierung",
+ ["Fist Weapons"] = "Faustwaffen",
+ ["Flame Shock"] = "Flammenschock",
+ ["Flame Throwing"] = "Flammenwerfen",
+ ["Flamestrike"] = "Flammensto\195\159",
+ ["Flamethrower"] = "Flammenwerfer",
+ ["Flametongue Totem"] = "Totem der Flammenzunge",
+ ["Flametongue Weapon"] = "Waffe der Flammenzunge",
+ ["Flare"] = "Leuchtfeuer",
+ ["Flash Heal"] = "Blitzheilung",
+ ["Flash of Light"] = "Lichtblitz",
+ ["Flurry"] = "Schlaghagel",
+ ["Focused Casting"] = "Fokussiertes Zauberwirken",
+ ["Food"] = "Essen",
+ ["Forbearance"] = "Vorahnung",
+ ["Force of Will"] = "Macht des Willens",
+ ["Freezing Trap Effect"] = "Eisk?tefalle",
+ ["Freezing Trap"] = "Eisk\195\164ltefalle",
+ ["Frenzied Regeneration"] = "Rasende Regeneration",
+ ["Frenzy"] = "Raserei",
+ ["Frost Armor"] = "Frostr\195\188stung",
+ ["Frost Channeling"] = "Frost-Kanalisierung",
+ ["Frost Nova"] = "Frostnova",
+ ["Frost Resistance Aura"] = "Aura des Frostwiderstands",
+ ["Frost Resistance Totem"] = "Totem des Frostwiderstands",
+ ["Frost Resistance"] = "Frostwiderstand",
+ ["Frost Shock"] = "Frostschock",
+ ["Frost Trap"] = "Frostfalle",
+ ["Frost Trap Aura"] = "Frostfalle-Aura",
+ ["Frost Ward"] = "Frostzauberschutz",
+ ["Frostbite"] = "Erfrierung",
+ ["Frostbolt"] = "Frostblitz",
+ ["Frostbrand Weapon"] = "Waffe des Frostbrands",
+ ["Furious Howl"] = "Wutgeheul",
+ ["Furor"] = "Furor",
+ ["Garrote"] = "Erdrosseln",
+ ["Generic"] = "Allgemein",
+ ["Ghost Wolf"] = "Geisterwolf",
+ ["Ghostly Strike"] = "Geisterhafter Sto\195\159",
+ ["Gift of Nature"] = "Geschenk der Natur",
+ ["Gift of the Wild"] = "Gabe der Wildnis",
+ ["Gouge"] = "Solarplexus",
+ ["Grace of Air Totem"] = "Totem der luftgleichen Anmut",
+ ["Great Stamina"] = "Gro\195\159e Ausdauer",
+ ["Greater Blessing of Kings"] = "Gro\195\159er Segen der K\195\182nige",
+ ["Greater Blessing of Light"] = "Gro\195\159er Segen des Lichts",
+ ["Greater Blessing of Might"] = "Gro\195\159er Segen der Macht",
+ ["Greater Blessing of Salvation"] = "Gro\195\159er Segen der Rettung",
+ ["Greater Blessing of Sanctuary"] = "Gro\195\159er Segen des Refugiums",
+ ["Greater Blessing of Wisdom"] = "Gro\195\159er Segen der Weisheit",
+ ["Greater Heal"] = "Gro\195\159e Heilung",
+ ["Grim Reach"] = "Grimmige Reichweite",
+ ["Grounding Totem"] = "Totem der Erdung",
+ ["Grovel"] = "Kriechen",
+ ["Growl"] = "Knurren",
+ ["Guardian's Favor"] = "Gunst des H\195\188ters",
+ ["Gun Specialization"] = "Schusswaffenspezialisierung",
+ ["Guns"] = "Schusswaffen",
+ ["Hammer of Justice"] = "Hammer der Gerechtigkeit",
+ ["Hammer of Wrath"] = "Hammer des Zorns",
+ ["Hamstring"] = "Kniesehne",
+ ["Harass"] = "Bel\195\164stigen",
+ ["Hardiness"] = "Z\195\164higkeit",
+ ["Hawk Eye"] = "Falkenauge",
+ ["Heal"] = "Heilen",
+ ["Healing Focus"] = "Heilfokus",
+ ["Healing Light"] = "Heilendes Licht",
+ ["Healing Stream Totem"] = "Totem des heilenden Flusses",
+ ["Healing Touch"] = "Heilende Ber\195\188hrung",
+ ["Healing Wave"] = "Welle der Heilung",
+-- ["Healing Way"] = true,
+ ["Health Funnel"] = "Lebenslinie",
+ ["Heart of the Wild"] = "Herz der Wildnis",
+ ["Hellfire Effect"] = "H\195\182llenfeuer - Effekt",
+ ["Hellfire"] = "H\195\182llenfeuer",
+ ["Hemorrhage"] = "Blutsturz",
+ ["Herbalism"] = "Kr\195\164utersammeln",
+ ["Heroic Strike"] = "Heldenhafter Sto\195\159",
+ ["Hex of Weakness"] = "Verhexung der Schw\195\164che",
+ ["Hibernate"] = "Winterschlaf",
+ ["Holy Fire"] = "Heiliges Feuer",
+ ["Holy Light"] = "Heiliges Licht",
+ ["Holy Nova"] = "Heilige Nova",
+ ["Holy Power"] = "Heilige Macht",
+ ["Holy Reach"] = "Heilige Reichweite",
+ ["Holy Shield"] = "Heiliger Schild",
+ ["Holy Shock"] = "Heiliger Schock",
+ ["Holy Specialization"] = "Macht des Glaubens",
+ ["Holy Wrath"] = "Heiliger Zorn",
+ ["Honorless Target"] = "Ehrenloses Ziel",
+ ["Horse Riding"] = "Pferdreiten",
+ ["Howl of Terror"] = "Schreckgeheul",
+ ["Humanoid Slaying"] = "Humanoident\195\182ten",
+ ["Hunter's Mark"] = "Mal des J\195\164gers",
+ ["Hurricane"] = "Hurrikan",
+ ["Ice Armor"] = "Eisr\195\188stung",
+ ["Ice Barrier"] = "Eis-Barriere",
+ ["Ice Block"] = "Eisblock",
+ ["Ice Shards"] = "Eissplitter",
+ ["Ignite"] = "Entz\195\188nden",
+ ["Illumination"] = "Illumination",
+ ["Immolate"] = "Feuerbrand",
+ ["Immolation Trap Effect"] = "Feuerbrandfalle",
+ ["Immolation Trap"] = "Feuerbrandfalle",
+ ["Impact"] = "Einschlag",
+ ["Impale"] = "Durchbohren",
+ ["Improved Ambush"] = "Verbesserter Hinterhalt",
+ ["Improved Arcane Explosion"] = "Verbesserte Arkane Explosion",
+ ["Improved Arcane Missiles"] = "Verbesserte arkane Geschosse",
+ ["Improved Arcane Shot"] = "Verbesserter Arkaner Schuss",
+ ["Improved Aspect of the Hawk"] = "Verbesserter Aspekt des Falken",
+ ["Improved Aspect of the Monkey"] = "Verbesserter Aspekt des Affen",
+ ["Improved Backstab"] = "Verbessertes Meucheln",
+ ["Improved Battle Shout"] = "Verbesserter Schlachtruf",
+ ["Improved Berserker Rage"] = "Verbesserte Berserkerwut",
+ ["Improved Blessing of Might"] = "Verbesserter Segen der Macht",
+ ["Improved Blessing of Wisdom"] = "Verbesserter Segen der Weisheit",
+ ["Improved Blizzard"] = "Verbesserter Blizzard",
+ ["Improved Bloodrage"] = "Verbesserter Blutrausch",
+ ["Improved Chain Heal"] = "Verbesserte Kettenheilung",
+ ["Improved Chain Lightning"] = "Verbesserter Kettenblitzschlag",
+ ["Improved Challenging Shout"] = "Verbesserter Herausforderungsruf",
+ ["Improved Charge"] = "Verbesserter Sturmangriff",
+ ["Improved Cheap Shot"] = "Verbesserter Fieser Trick",
+ ["Improved Cleave"] = "Verbessertes Spalten",
+ ["Improved Concentration Aura"] = "Verbesserte Aura der Konzentration",
+ ["Improved Concussive Shot"] = "Verbesserter Ersch\195\188tternder Schuss",
+ ["Improved Cone of Cold"] = "Verbesserter K\195\164ltekegel",
+ ["Improved Corruption"] = "Verbesserte Verderbnis",
+ ["Improved Counterspell"] = "Verbesserter Gegenzauber",
+ ["Improved Curse of Agony"] = "Verbesserter Fluch der Pein",
+ ["Improved Curse of Exhaustion"] = "Verbesserter Fluch der Ersch\195\182pfung",
+ ["Improved Curse of Weakness"] = "Verbesserter Fluch der Schw\195\164che",
+ ["Improved Dampen Magic"] = "Verbesserter Magied\195\164mpfer",
+ ["Improved Deadly Poison"] = "Verbessertes t\195\182dliches Gift",
+ ["Improved Demoralizing Shout"] = "Verbesserter Demoralisierender Ruf",
+ ["Improved Devotion Aura"] = "Verbesserte Aura der Hingabe",
+ ["Improved Disarm"] = "Verbessertes Entwaffnen",
+ ["Improved Distract"] = "Verbessertes Ablenken",
+ ["Improved Drain Life"] = "Verbesserter Blutsauger",
+ ["Improved Drain Mana"] = "Verbessertes Mana entziehen",
+ ["Improved Drain Soul"] = "Verbesserter Seelendieb",
+ ["Improved Enrage"] = "Verbesserter Wutanfall",
+ ["Improved Enslave Demon"] = "Verbesserter D\195\164monensklave",
+ ["Improved Entangling Roots"] = "Verbesserte Wucherwurzeln",
+ ["Improved Evasion"] = "Verbessertes Entrinnen",
+ ["Improved Eviscerate"] = "Verbessertes Ausweiden",
+ ["Improved Execute"] = "Verbessertes Hinrichten",
+ ["Improved Expose Armor"] = "Verbessertes R\195\188stung schw\195\164chen",
+ ["Improved Eyes of the Beast"] = "Verbesserte Augen des Wildtiers",
+ ["Improved Fade"] = "Verbessertes Verblassen",
+ ["Improved Feign Death"] = "Verbessertes Totstellen",
+ ["Improved Fire Blast"] = "Verbesserter Feuerschlag",
+ ["Improved Fire Nova Totem"] = "Verbessertes Totem der Feuernova",
+ ["Improved Fire Ward"] = "Verbesserter Feuerzauberschutz",
+ ["Improved Fireball"] = "Verbesserter Feuerball",
+ ["Improved Firebolt"] = "Verbesserter Feuerblitz",
+ ["Improved Firestone"] = "Verbesserter Feuerstein",
+ ["Improved Flamestrike"] = "Verbesserter Flammensto\195\159",
+ ["Improved Flametongue Weapon"] = "Verbesserte Waffe der Flammenzunge",
+ ["Improved Flash of Light"] = "Verbesserter Lichtblitz",
+ ["Improved Frost Nova"] = "Verbesserte Frostnova",
+ ["Improved Frost Ward"] = "Verbesserter Frostzauberschutz",
+ ["Improved Frostbolt"] = "Verbesserter Frostblitz",
+ ["Improved Frostbrand Weapon"] = "Verbesserte Waffe des Frostbrands",
+ ["Improved Garrote"] = "Verbessertes Erdrosseln",
+ ["Improved Ghost Wolf"] = "Verbesserter Geisterwolf",
+ ["Improved Gouge"] = "Verbesserter Solarplexus",
+ ["Improved Grace of Air Totem"] = "Verbessertes Totem der luftgleichen Anmut",
+ ["Improved Grounding Totem"] = "Verbessertes Totem der Erdung",
+ ["Improved Hammer of Justice"] = "Verbesserter Hammer der Gerechtigkeit",
+ ["Improved Hamstring"] = "Verbesserte Kniesehne",
+ ["Improved Healing Stream Totem"] = "Verbessertes Totem des heilenden Flusses",
+ ["Improved Healing Touch"] = "Verbesserte Heilende Ber\195\188hrung",
+ ["Improved Healing Wave"] = "Verbesserte Welle der Heilung",
+ ["Improved Healing"] = "Verbesserte Heilung",
+ ["Improved Health Funnel"] = "Verbesserte Lebenslinie",
+ ["Improved Healthstone"] = "Verbesserter Gesundheitsstein",
+ ["Improved Heroic Strike"] = "Verbesserter Heldenhafter Sto\195\159",
+ ["Improved Hunter's Mark"] = "Verbessertes Mal des J\195\164gers",
+ ["Improved Immolate"] = "Verbesserter Feuerbrand",
+ ["Improved Imp"] = "Verbesserter Wichtel",
+ ["Improved Inner Fire"] = "Verbessertes Inneres Feuer",
+ ["Improved Instant Poison"] = "Verbessertes sofort wirkendes Gift",
+ ["Improved Intercept"] = "Verbessertes Abfangen",
+ ["Improved Intimidating Shout"] = "Verbesserter Drohruf",
+ ["Improved Judgement"] = "Verbessertes Richturteil",
+ ["Improved Kick"] = "Verbesserter Tritt",
+ ["Improved Kidney Shot"] = "Verbesserter Nierenhieb",
+ ["Improved Lash of Pain"] = "Verbesserte Schmerzenspeitsche",
+ ["Improved Lay on Hands"] = "Verbesserte Handauflegung",
+ ["Improved Lesser Healing Wave"] = "Verbesserte Geringe Welle der Heilung",
+ ["Improved Life Tap"] = "Verbesserter Aderlass",
+ ["Improved Lightning Bolt"] = "Verbesserter Blitzschlag",
+ ["Improved Lightning Shield"] = "Verbesserter Blitzschlag-Schild",
+ ["Improved Magma Totem"] = "Verbessertes Totem der gl\195\188henden Magma",
+ ["Improved Mana Burn"] = "Verbesserter Manabrand",
+ ["Improved Mana Shield"] = "Verbesserter Manaschild",
+ ["Improved Mana Spring Totem"] = "Verbessertes Totem der Manaquelle",
+ ["Improved Mark of the Wild"] = "Verbessertes Mal der Wildnis",
+ ["Improved Mend Pet"] = "Verbessertes Tier heilen",
+ ["Improved Mind Blast"] = "Verbesserter Gedankenschlag",
+ ["Improved Moonfire"] = "Verbessertes Mondfeuer",
+ ["Improved Nature's Grasp"] = "Verbesserter Griff der Natur",
+ ["Improved Overpower"] = "Verbessertes \195\156berw\195\164ltigen",
+ ["Improved Power Word: Fortitude"] = "Verbessertes Machtwort: Seelenst\195\164rke",
+ ["Improved Power Word: Shield"] = "Verbessertes Machtwort: Schild",
+ ["Improved Prayer of Healing"] = "Verbessertes Gebet der Heilung",
+ ["Improved Psychic Scream"] = "Verbesserter Psychischer Schrei",
+ ["Improved Pummel"] = "Verbessertes Zuschlagen",
+ ["Improved Regrowth"] = "Verbessertes Nachwachsen",
+ ["Improved Reincarnation"] = "Verbesserte Reinkarnation",
+ ["Improved Rejuvenation"] = "Verbesserte Verj\195\188ngung",
+ ["Improved Rend"] = "Verbessertes Verwunden",
+ ["Improved Renew"] = "Verbesserte Erneuerung",
+ ["Improved Retribution Aura"] = "Verbesserte Aura der Vergeltung",
+ ["Improved Revenge"] = "Verbesserte Rache",
+ ["Improved Revive Pet"] = "Verbessertes Tier wiederbeleben",
+ ["Improved Righteous Fury"] = "Verbesserter Zorn der Gerechtigkeit",
+ ["Improved Rockbiter Weapon"] = "Verbesserte Felsbei\195\159erwaffe",
+ ["Improved Rupture"] = "Verbesserte Blutung",
+ ["Improved Sap"] = "Verbesserte Kopfnuss",
+ ["Improved Scorch"] = "Verbessertes Versengen",
+ ["Improved Scorpid Sting"] = "Verbesserter Skorpidstich",
+ ["Improved Seal of Righteousness"] = "Verbessertes Siegel der Rechtschaffenheit",
+ ["Improved Seal of the Crusader"] = "Verbessertes Siegel des Kreuzfahrers",
+ ["Improved Searing Pain"] = "Verbesserter Sengender Schmerz",
+ ["Improved Searing Totem"] = "Verbessertes Totem der Verbrennung",
+ ["Improved Serpent Sting"] = "Verbesserter Schlangenbiss",
+ ["Improved Shadow Bolt"] = "Verbesserter Schattenblitz",
+ ["Improved Shadow Word: Pain"] = "Verbessertes Schattenwort: Schmerz",
+ ["Improved Shield Bash"] = "Verbesserter Schildhieb",
+ ["Improved Shield Block"] = "Verbesserter Schildblock",
+ ["Improved Shield Wall"] = "Verbesserter Schildwall",
+ ["Improved Shred"] = "Verbessertes Schreddern",
+ ["Improved Sinister Strike"] = "Verbesserter Finsterer Sto\195\159",
+ ["Improved Slam"] = "Verbessertes Zerschmettern",
+ ["Improved Slice and Dice"] = "Verbessertes Zerh\195\164ckseln",
+ ["Improved Spellstone"] = "Verbesserter Zauberstein",
+ ["Improved Sprint"] = "Verbessertes Sprinten",
+ ["Improved Starfire"] = "Verbessertes Sternenfeuer",
+ ["Improved Stoneclaw Totem"] = "Verbessertes Totem der Steinklaue",
+ ["Improved Stoneskin Totem"] = "Verbessertes Totem der Steinhaut",
+ ["Improved Strength of Earth Totem"] = "Verbessertes Totem der Erdst\195\164rke",
+ ["Improved Succubus"] = "Verbesserter Sukkubus",
+ ["Improved Sunder Armor"] = "Verbessertes R\195\188stung zerrei\195\159en",
+ ["Improved Taunt"] = "Verbesserter Spott",
+ ["Improved Thorns"] = "Verbesserte Dornen",
+ ["Improved Thunder Clap"] = "Verbesserter Donnerknall",
+ ["Improved Tranquility"] = "Verbesserte Gelassenheit",
+ ["Improved Vampiric Embrace"] = "Verbesserte Vampirumarmung",
+ ["Improved Vanish"] = "Verbessertes Verschwinden",
+ ["Improved Voidwalker"] = "Verbesserter Leerwandler",
+ ["Improved Windfury Weapon"] = "Verbesserte Waffe des Windfurors",
+ ["Improved Wing Clip"] = "Verbessertes Zurechtstutzen",
+ ["Improved Wrath"] = "Verbesserter Zorn",
+ ["Incinerate"] = "Verbrennen",
+ ["Inferno"] = "Inferno",
+ ["Initiative"] = "Initiative",
+ ["Inner Fire"] = "Inneres Feuer",
+ ["Inner Focus"] = "Innerer Fokus",
+ ["Innervate"] = "Anregen",
+ ["Insect Swarm"] = "Insektenschwarm",
+ ["Inspiration"] = "Inspiration",
+ ["Instant Poison II"] = "Sofort wirkendes Gift II",
+ ["Instant Poison III"] = "Sofort wirkendes Gift III",
+ ["Instant Poison IV"] = "Sofort wirkendes Gift IV",
+ ["Instant Poison V"] = "Sofort wirkendes Gift V",
+ ["Instant Poison VI"] = "Sofort wirkendes Gift VI",
+ ["Instant Poison"] = "Sofort wirkendes Gift",
+ ["Intensity"] = "Intensit\195\164t",
+ ["Intercept"] = "Abfangen",
+ ["Intercept Stun"] = "Betubung abfangen",
+ ["Intimidating Shout"] = "Drohruf",
+ ["Intimidation"] = "Einsch\195\188chterung",
+ ["Iron Will"] = "Eiserner Wille",
+ ["Judgement of Command"] = "Richturteil des Befehls",
+ ["Judgement of Justice"] = "Richturteil der Gerechtigkeit",
+ ["Judgement of Light"] = "Richturteil des Lichts",
+ ["Judgement of Righteousness"] = "Richturteil der Rechtschaffenheit",
+ ["Judgement of Wisdom"] = "Richturteil der Weisheit",
+ ["Judgement of the Crusader"] = "Richturteil des Kreuzfahrers",
+ ["Judgement"] = "Richturteil",
+ ["Kick"] = "Tritt",
+ ["Kick - Silenced"] = "Tritt - zum Schweigen gebracht",
+ ["Kidney Shot"] = "Nierenhieb",
+ ["Killer Instinct"] = "T\195\182tungstrieb",
+ ["Kodo Riding"] = "Kodoreiten",
+ ["Lash of Pain"] = "Schmerzenspeitsche",
+ ["Last Stand"] = "Letztes Gefecht",
+ ["Lasting Judgement"] = "Dauerhaftes Richturteil",
+ ["Lay on Hands"] = "Handauflegung",
+ ["Leader of the Pack"] = "Rudelf\195\188hrer",
+ ["Leather"] = "Leder",
+ ["Leatherworking"] = "Lederverarbeitung",
+ ["Lesser Heal"] = "Geringes Heilen",
+ ["Lesser Healing Wave"] = "Geringe Welle der Heilung",
+ ["Lesser Invisibility"] = "Geringe Unsichtbarkeit",
+ ["Lethal Shots"] = "T\195\182dliche Sch\195\188sse",
+ ["Lethality"] = "T\195\182dlichkeit",
+ ["Levitate"] = "Levitieren",
+ ["Libram"] = "Buchband",
+ ["Life Tap"] = "Aderlass",
+ ["Lightning Bolt"] = "Blitzschlag",
+ ["Lightning Breath"] = "Blitzschlagatem",
+ ["Lightning Mastery"] = "Blitzschlagbeherrschung",
+ ["Lightning Reflexes"] = "Blitzartige Reflexe",
+ ["Lightning Shield"] = "Blitzschlagschild",
+ ["Lightwell Renew"] = "Erneuerung des Lichtbrunnens",
+ ["Lightwell"] = "Brunnen des Lichts",
+ ["Lockpicking"] = "Schlossknacken",
+ ["Long Daze"] = "Lange Benommenheit",
+ ["Mace Specialization"] = "Streitkolben-Spezialisierung",
+ ["Mace Stun Effect"] = "Streitkolbenbet\195\164ubung-Effekt",
+ ["Mage Armor"] = "Magische R\195\188stung",
+ ["Magma Totem"] = "Totem der gl\195\188henden Magma",
+ ["Mail"] = "Panzer",
+ ["Malice"] = "T\195\188cke",
+ ["Mana Burn"] = "Manabrand",
+ ["Mana Shield"] = "Manaschild",
+ ["Mana Spring Totem"] = "Totem der Manaquelle",
+ ["Mana Tide Totem"] = "Totem der Manaflut",
+ ["Mangle"] = "Fleddern",
+ ["Mark of the Wild"] = "Mal der Wildnis",
+ ["Martyrdom"] = "M\195\164rtyrertum",
+ ["Master Demonologist"] = "Meister der D\195\164monologie",
+ ["Master Summoner"] = "Meister der Beschw\195\182rung",
+ ["Master of Deception"] = "Meister der T\195\164uschung",
+ ["Maul"] = "Zermalmen",
+ ["Mechanostrider Piloting"] = "Roboschreiter-Lenken",
+ ["Meditation"] = "Meditation",
+ ["Melee Specialization"] = "Nahkampf-Spezialisierung",
+ ["Mend Pet"] = "Tier heilen",
+ ["Mental Agility"] = "Mentale Beweglichkeit",
+ ["Mental Strength"] = "Mentale St\195\164rke",
+ ["Mind Blast"] = "Gedankenschlag",
+ ["Mind Control"] = "Gedankenkontrolle",
+ ["Mind Flay"] = "Gedankenschinden",
+ ["Mind Soothe"] = "Gedankenbes\195\164nftigung",
+ ["Mind Vision"] = "Gedankensicht",
+ ["Mind-numbing Poison II"] = "Gedankenbenebelndes Gift II",
+ ["Mind-numbing Poison III"] = "Gedankenbenebelndes Gift III",
+ ["Mind-numbing Poison"] = "Gedankenbenebelndes Gift",
+ ["Mining"] = "Bergbau",
+ ["Mocking Blow"] = "Sp\195\182ttischer Schlag",
+ ["Mongoose Bite"] = "Mungobiss",
+ ["Monster Slaying"] = "Monstert\195\182ten",
+ ["Moonfire"] = "Mondfeuer",
+ ["Moonfury"] = "Mondfuror",
+ ["Moonglow"] = "Mondschein",
+ ["Moonkin Aura"] = "Aura des Moonkin",
+ ["Moonkin Form"] = "Moonkingestalt",
+ ["Mortal Shots"] = "Todbringende Sch\195\188sse",
+ ["Mortal Strike"] = "T\195\182dlicher Sto\195\159",
+ ["Multi-Shot"] = "Mehrfachschuss",
+ ["Murder"] = "Mord",
+ ["Natural Armor"] = "Nat\195\188rliche R\195\188stung",
+ ["Natural Shapeshifter"] = "Schnellwandlung",
+ ["Natural Weapons"] = "Waffenbalance",
+ ["Nature Resistance Totem"] = "Totem des Naturwiderstands",
+ ["Nature Resistance"] = "Naturwiderstand",
+ ["Nature's Focus"] = "Naturfokus",
+ ["Nature's Grace"] = "Anmut der Natur",
+ ["Nature's Grasp"] = "Griff der Natur",
+ ["Nature's Reach"] = "Reichweite der Natur",
+ ["Nature's Swiftness"] = "Schnelligkeit der Natur",
+ ["Nightfall"] = "Einbruch der Nacht",
+ ["Omen of Clarity"] = "Omen der Klarsicht",
+ ["One-Handed Axes"] = "Einhand\195\164xte",
+ ["One-Handed Maces"] = "Einhandstreitkolben",
+ ["One-Handed Swords"] = "Einhandschwerter",
+ ["One-Handed Weapon Specialization"] = "Einhandwaffen-Spezialisierung",
+ ["Opening - No Text"] = "\195\150ffnen - Kein Text",
+ ["Opening"] = "\195\150ffnen",
+ ["Opportunity"] = "G\195\188nstige Gelegenheit",
+ ["Overpower"] = "\195\156berw\195\164ltigen",
+ ["Paranoia"] = "Paranoia",
+ ["Parry"] = "Parieren",
+ ["Pathfinding"] = "Orientierung",
+ ["Perception"] = "Wachsamkeit",
+ ["Permafrost"] = "Dauerfrost",
+ ["Pet Aggression"] = "Tieraggression",
+ ["Pet Hardiness"] = "Tier-Widerstandskraft",
+ ["Pet Recovery"] = "Tiererholung",
+ ["Pet Resistance"] = "Tier-Widerstand",
+ ["Phase Shift"] = "Phasenverschiebung",
+ ["Pick Lock"] = "Schloss knacken",
+ ["Pick Pocket"] = "Taschendiebstahl",
+ ["Piercing Howl"] = "Durchdringendes Heulen",
+ ["Piercing Ice"] = "Stechendes Eis",
+ ["Plate Mail"] = "Plattenpanzer",
+ ["Poison Cleansing Totem"] = "Totem der Giftreinigung",
+ ["Poisons"] = "Gifte",
+ ["Polearm Specialization"] = "Stangenwaffen-Spezialisierung",
+ ["Polearms"] = "Stangenwaffen",
+ ["Polymorph"] = "Verwandlung",
+ ["Polymorph: Pig"] = "Verwandlung: Schwein",
+ ["Polymorph: Turtle"] = "Verwandlung: Schildkr\195\182te",
+ ["Portal: Darnassus"] = "Portal: Darnassus",
+ ["Portal: Ironforge"] = "Portal: Ironforge",
+ ["Portal: Orgrimmar"] = "Portal: Orgrimmar",
+ ["Portal: Stormwind"] = "Portal: Stormwind",
+ ["Portal: Thunder Bluff"] = "Portal: Thunder Bluff",
+ ["Portal: Undercity"] = "Portal: Undercity",
+ ["Pounce Bleed"] = "Anspringblutung",
+ ["Pounce"] = "Anspringen",
+ ["Power Infusion"] = "Seele der Macht",
+ ["Power Word: Fortitude"] = "Machtwort: Seelenst\195\164rke",
+ ["Power Word: Shield"] = "Machtwort: Schild",
+ ["Prayer of Fortitude"] = "Gebet der Seelenst\195\164rke",
+ ["Prayer of Healing"] = "Gebet der Heilung",
+ ["Prayer of Shadow Protection"] = "Gebet des Schattenschutzes",
+ ["Prayer of Spirit"] = "Gebet der Willenskraft",
+ ["Precision"] = "Pr\195\164zision",
+ ["Predatory Strikes"] = "Raubtierschl\195\164ge",
+ ["Premeditation"] = "Konzentration",
+ ["Preparation"] = "Vorbereitung",
+ ["Presence of Mind"] = "Geistesgegenwart",
+ ["Primal Fury"] = "Urfuror",
+ ["Prowl"] = "Schleichen",
+ ["Psychic Scream"] = "Psychischer Schrei",
+ ["Pummel"] = "Zuschlagen",
+ ["Purge"] = "Reinigen",
+ ["Purification"] = "L\195\164uterung",
+ ["Purify"] = "L\195\164utern",
+ ["Pursuit of Justice"] = "Streben nach Gerechtigkeit",
+ ["Pyroblast"] = "Pyroschlag",
+ ["Pyroclasm"] = "Feuerschwall",
+ ["Quick Shots"] = "Schnelle Schüsse",
+ ["Quickness"] = "Schnelligkeit",
+ ["Rain of Fire"] = "Feuerregen",
+ ["Rake"] = "Krallenhieb",
+ ["Ram Riding"] = "Widderreiten",
+ ["Ranged Weapon Specialization"] = "Distanzwaffen-Spezialisierung",
+ ["Rapid Concealment"] = "Schnelles Verstecken",
+ ["Rapid Fire"] = "Schnellfeuer",
+ ["Raptor Riding"] = "Raptorreiten",
+ ["Raptor Strike"] = "Raptorsto\195\159",
+ ["Ravage"] = "Verheeren",
+ ["Readiness"] = "Bereitschaft",
+ ["Rebirth"] = "Wiedergeburt",
+ ["Reckless Charge"] = "Tollk?nes St?men",
+ ["Recklessness"] = "Tollk\195\188hnheit",
+ ["Reckoning"] = "Abrechnung",
+ ["Redemption"] = "Erl\195\182sung",
+ ["Redoubt"] = "Verschanzen",
+ ["Reflection"] = "Reflexion",
+ ["Regeneration"] = "Regeneration",
+ ["Regrowth"] = "Nachwachsen",
+ ["Reincarnation"] = "Reinkarnation",
+ ["Rejuvenation"] = "Verj\195\188ngung",
+ ["Relentless Strikes"] = "Unerbittliche St\195\182\195\159e",
+ ["Remorseless"] = "Gnadenlos",
+ ["Remorseless Attacks"] = "Gnadenlose Angriffe",
+ ["Remove Curse"] = "Fluch aufheben",
+ ["Remove Insignia"] = "Abzeichen entfernen",
+ ["Remove Lesser Curse"] = "Geringen Fluch aufheben",
+ ["Rend"] = "Verwunden",
+ ["Renew"] = "Erneuerung",
+ ["Repentance"] = "Bu\195\159e",
+ ["Resurrection"] = "Auferstehung",
+ ["Retaliation"] = "Gegenschlag",
+ ["Retribution Aura"] = "Aura der Vergeltung",
+ ["Revenge Stun"] = "Rachebet\195\164ubung",
+ ["Revenge"] = "Rache",
+ ["Reverberation"] = "Nachklingen",
+ ["Revive Pet"] = "Tier wiederbeleben",
+ ["Righteous Fury"] = "Zorn der Gerechtigkeit",
+ ["Rip"] = "Zerfetzen",
+ ["Riposte"] = "Riposte",
+ ["Ritual of Doom Effect"] = "Ritual der Verdammnis'-Effekt",
+ ["Ritual of Doom"] = "Ritual der Verdammnis",
+ ["Ritual of Summoning"] = "Ritual der Beschw\195\182rung",
+ ["Rockbiter Weapon"] = "Felsbei\195\159erwaffe",
+ ["Rogue Passive"] = "Schurke Passiv",
+ ["Ruin"] = "Verderben",
+ ["Rupture"] = "Blutung",
+ ["Ruthlessness"] = "Skrupellosigkeit",
+ ["Sacrifice"] = "Opferung",
+ ["Safe Fall"] = "Sicheres Fallen",
+ ["Sanctity Aura"] = "Aura der Heiligkeit",
+ ["Sap"] = "Kopfnuss",
+ ["Savage Fury"] = "Ungez\195\164hmte Wut",
+ ["Savage Strikes"] = "Wilde Schl\195\164ge",
+ ["Scare Beast"] = "Wildtier \195\164ngstigen",
+ ["Scatter Shot"] = "Streuschuss",
+ ["Scorch"] = "Versengen",
+ ["Scorpid Poison"] = "Skorpidgift",
+ ["Scorpid Sting"] = "Skorpidstich",
+ ["Screech"] = "Schrei",
+ ["Seal Fate"] = "Schicksal besiegeln",
+ ["Seal of Command"] = "Siegel des Befehls",
+ ["Seal of Justice"] = "Siegel der Gerechtigkeit",
+ ["Seal of Light"] = "Siegel des Lichts",
+ ["Seal of Righteousness"] = "Siegel der Rechtschaffenheit",
+ ["Seal of Wisdom"] = "Siegel der Weisheit",
+ ["Seal of the Crusader"] = "Siegel des Kreuzfahrers",
+ ["Searing Light"] = "Sengendes Licht",
+ ["Searing Pain"] = "Sengender Schmerz",
+ ["Searing Totem"] = "Totem der Verbrennung",
+ ["Seduction"] = "Verf\195\188hrung",
+ ["Sense Demons"] = "D\195\164monen sp\195\188ren",
+ ["Sense Undead"] = "Untote sp\195\188ren",
+ ["Sentry Totem"] = "Totem des Wachens",
+ ["Serpent Sting"] = "Schlangenbiss",
+ ["Setup"] = "Reinlegen",
+ ["Shackle Undead"] = "Untote fesseln",
+ ["Shadow Affinity"] = "Schattenaffinit\195\164t",
+ ["Shadow Bolt"] = "Schattenblitz",
+ ["Shadow Focus"] = "Schattenfokus",
+ ["Shadow Mastery"] = "Schattenbeherrschung",
+ ["Shadow Protection"] = "Schattenschutz",
+ ["Shadow Reach"] = "Schattenreichweite",
+ ["Shadow Resistance Aura"] = "Aura des Schattenwiderstands",
+ ["Shadow Resistance"] = "Schattenwiderstand",
+ ["Shadow Trance"] = "Schattentrance",
+ ["Shadow Vulnerability"] = "Schattenverwundbarkeit",
+ ["Shadow Ward"] = "Schattenzauberschutz",
+ ["Shadow Weaving"] = "Schattenwirken",
+ ["Shadow Word: Pain"] = "Schattenwort: Schmerz",
+ ["Shadowburn"] = "Schattenbrand",
+ ["Shadowform"] = "Schattengestalt",
+ ["Shadowguard"] = "Schattenschild",
+ ["Shadowmeld Passive"] = "Schattenmimik Passiv",
+ ["Shadowmeld"] = "Schattenhaftigkeit",
+ ["Sharpened Claws"] = "Gesch\195\164rfte Klauen",
+ ["Shatter"] = "Zertr\195\188mmern",
+ ["Shell Shield"] = "Panzerschild",
+ ["Shield Bash"] = "Schildhieb",
+ ["Shield Bash - Silenced"] = "Schildhieb - zum Schweigen gebracht",
+ ["Shield Block"] = "Schildblock",
+ ["Shield Slam"] = "Schildschlag",
+ ["Shield Specialization"] = "Schild-Spezialisierung",
+ ["Shield Wall"] = "Schildwall",
+ ["Shield"] = "Schild",
+ ["Shoot Bow"] = "Bogenschuss",
+ ["Shoot Crossbow"] = "Armbrust abschie\195\159en",
+ ["Shoot Gun"] = "Schusswaffe abfeuern",
+ ["Shoot"] = "Schie\195\159en",
+ ["Shred"] = "Schreddern",
+ ["Silence"] = "Stille",
+ ["Silent Resolve"] = "Schweigsame Entschlossenheit",
+ ["Sinister Strike"] = "Finsterer Sto\195\159",
+ ["Siphon Life"] = "Lebensentzug",
+ ["Skinning"] = "K\195\188rschnerei",
+ ["Slam"] = "Zerschmettern",
+ ["Sleep"] = "Schlaf",
+ ["Slice and Dice"] = "Zerh\195\164ckseln",
+ ["Slow Fall"] = "Langsamer Fall",
+ ["Smelting"] = "Verh\195\188ttung",
+ ["Smite"] = "G\195\182ttliche Pein",
+ ["Soothe Animal"] = "Tier bes\195\164nftigen",
+ ["Soothing Kiss"] = "Bes\195\164nftigender Kuss",
+ ["Soul Fire"] = "Seelenfeuer",
+ ["Soul Link"] = "Seelenverbindung",
+ ["Soul Siphon"] = "Seelen-Siphon",
+ ["Soulstone Resurrection"] = "Seelenstein-Auferstehung",
+ ["Spell Lock"] = "Zaubersperre",
+ ["Spell Warding"] = "Zauberschutz",
+ ["Spirit Bond"] = "Geistbande",
+ ["Spirit Tap"] = "Willensentzug",
+ ["Spirit of Redemption"] = "Geist der Erl\195\182sung",
+ ["Spiritual Focus"] = "Spiritueller Fokus",
+ ["Spiritual Guidance"] = "Geistige F\195\188hrung",
+ ["Spiritual Healing"] = "Spirituelle Heilung",
+ ["Sprint"] = "Sprinten",
+ ["Starfire"] = "Sternenfeuer",
+ ["Starfire Stun"] = "Sternenfeuer-Betubung",
+ ["Starshards"] = "Sternensplitter",
+ ["Staves"] = "St\195\164be",
+ ["Stealth"] = "Verstohlenheit",
+ ["Stoneclaw Totem"] = "Totem der Steinklaue",
+ ["Stoneform"] = "Steingestalt",
+ ["Stoneskin Totem"] = "Totem der Steinhaut",
+ ["Stormstrike"] = "Sturmschlag",
+ ["Strength of Earth Totem"] = "Totem der Erdst\195\164rke",
+ ["Stuck"] = "Feststecken",
+ ["Subtlety"] = "Feingef\195\188hl",
+ ["Suffering"] = "Leiden",
+ ["Summon Charger"] = "Streitross beschw\195\182ren",
+ ["Summon Dreadsteed"] = "Schreckensross herbeirufen",
+ ["Summon Felhunter"] = "Teufelsj\195\164ger beschw\195\182ren",
+ ["Summon Felsteed"] = "Teufelsross beschw\195\182ren",
+ ["Summon Imp"] = "Wichtel beschw\195\182ren",
+ ["Summon Succubus"] = "Sukkubus beschw\195\182ren",
+ ["Summon Voidwalker"] = "Leerwandler beschw\195\182ren",
+ ["Summon Warhorse"] = "Schlachtross beschw\195\182ren",
+ ["Sunder Armor"] = "R\195\188stung zerrei\195\159en",
+ ["Suppression"] = "Unterdr\195\188ckung",
+ ["Surefooted"] = "Sicherer Stand",
+ ["Survivalist"] = "\195\156berlebensk\195\188nstler",
+ ["Sweeping Strikes"] = "Weitreichende St\195\182\195\159e",
+-- ["Swiftmend"] = true,
+ ["Swipe"] = "Prankenhieb",
+ ["Sword Specialization"] = "Schwert-Spezialisierung",
+ ["Tactical Mastery"] = "Taktiker",
+ ["Tainted Blood"] = "Besudeltes Blut",
+ ["Tailoring"] = "Schneiderei",
+ ["Tame Beast"] = "Wildtier z\195\164hmen",
+ ["Tamed Pet Passive"] = "Gez\195\164hmtes Tier - Passiv",
+ ["Taunt"] = "Spott",
+ ["Teleport: Darnassus"] = "Teleportieren: Darnassus",
+ ["Teleport: Ironforge"] = "Teleportieren: Ironforge",
+ ["Teleport: Moonglade"] = "Teleportieren: Moonglade",
+ ["Teleport: Orgrimmar"] = "Teleportieren: Orgrimmar",
+ ["Teleport: Stormwind"] = "Teleportieren: Stormwind",
+ ["Teleport: Thunder Bluff"] = "Teleportieren: Thunder Bluff",
+ ["Teleport: Undercity"] = "Teleportieren: Undercity",
+ ["The Human Spirit"] = "Unbeugsamkeit",
+ ["Thick Hide"] = "Dickes Fell",
+ ["Thorns"] = "Dornen",
+ ["Throw"] = "Werfen",
+ ["Throwing Specialization"] = "Wurfwaffen-Spezialisierung",
+ ["Throwing Weapon Specialization"] = "Wurfwaffen-Spezialisierung",
+ ["Thrown"] = "Wurfwaffe",
+ ["Thunder Clap"] = "Donnerknall",
+ ["Thundering Strikes"] = "Donnernde St\195\182\195\159e",
+ ["Thunderstomp"] = "Donnerstampfer",
+ ["Tidal Focus"] = "Gezeitenfokus",
+ ["Tidal Mastery"] = "Gezeitenbeherrschung",
+ ["Tiger Riding"] = "Tigerreiten",
+ ["Tiger's Fury"] = "Tigerfuror",
+ ["Torment"] = "Qual",
+ ["Totem"] = "Totem",
+ ["Totemic Focus"] = "Totemfokus",
+ ["Touch of Weakness"] = "Ber\195\188hrung der Schw\195\164che",
+ ["Toughness"] = "Z\195\164higkeit",
+ ["Track Beasts"] = "Wildtiere aufsp\195\188ren",
+ ["Track Demons"] = "D\195\164monen aufsp\195\188ren",
+ ["Track Dragonkin"] = "Drachkin aufsp\195\188ren",
+ ["Track Elementals"] = "Elementare aufsp\195\188ren",
+ ["Track Giants"] = "Riesen aufsp\195\188ren",
+ ["Track Hidden"] = "Verborgenes aufsp\195\188ren",
+ ["Track Humanoids"] = "Humanoide aufsp\195\188ren",
+ ["Track Undead"] = "Untote aufsp\195\188ren",
+ ["Tranquil Air Totem"] = "Totem der beruhigenden Winde",
+ ["Tranquil Spirit"] = "Gelassener Geist",
+ ["Tranquility"] = "Gelassenheit",
+ ["Tranquilizing Shot"] = "Einlullender Schuss",
+ ["Trap Mastery"] = "Fallenbeherrschung",
+ ["Travel Form"] = "Reisegestalt",
+ ["Tremor Totem"] = "Totem des Erdsto\195\159es",
+ ["Tribal Leatherworking"] = "Stammeslederverarbeitung",
+ ["Trueshot Aura"] = "Aura des Volltreffers",
+ ["Turn Undead"] = "Untote vertreiben",
+ ["Two-Handed Axes and Maces"] = "Zweihand\195\164xte und -Streitkolben",
+ ["Two-Handed Axes"] = "Zweihand\195\164xte",
+ ["Two-Handed Maces"] = "Zweihandstreitkolben",
+ ["Two-Handed Swords"] = "Zweihandschwerter",
+ ["Two-Handed Weapon Specialization"] = "Zweihandwaffen-Spezialisierung",
+ ["Unarmed"] = "Unbewaffnet",
+ ["Unbreakable Will"] = "Unbezwingbarer Wille",
+ ["Unbridled Wrath Effect"] = "Entfesselter Zorn'-Effekt",
+ ["Unbridled Wrath"] = "Entfesselter Zorn",
+ ["Undead Horsemanship"] = "Untotenreitkunst",
+ ["Underwater Breathing"] = "Unterwasseratmung",
+ ["Unending Breath"] = "Unendlicher Atem",
+ ["Unholy Power"] = "Unheilige Macht",
+ ["Unleashed Fury"] = "Entfesselter Zorn",
+ ["Unyielding Faith"] = "Unumst\195\182\195\159licher Glaube",
+ ["Vampiric Embrace"] = "Vampirumarmung",
+ ["Vanish"] = "Verschwinden",
+ ["Vanished"] = "Verschwunden",
+ ["Vengeance"] = "Rache",
+ ["Vigor"] = "Lebenskraft",
+ ["Vile Poisons"] = "\195\156ble Gifte",
+ ["Vindication"] = "Rechtschaffene Schw\195\164chung",
+ ["Viper Sting"] = "Vipernbiss",
+ ["Volley"] = "Salve",
+ ["Wand Specialization"] = "Zauberstab-Spezialisierung",
+ ["Wands"] = "Zauberst\195\164be",
+ ["War Stomp"] = "Kriegsdonner",
+ ["Water Breathing"] = "Wasseratmung",
+ ["Water Walking"] = "Wasserwandeln",
+ ["Weakened Soul"] = "Geschwächte Seele",
+ ["Weaponsmith"] = "Waffenschmied",
+ ["Whirlwind"] = "Wirbelwind",
+ ["Will of the Forsaken"] = "Wille der Verlassenen",
+ ["Windfury Totem"] = "Totem des Windzorns",
+ ["Windfury Weapon"] = "Waffe des Windfurors",
+ ["Windwall Totem"] = "Totem der Windmauer",
+ ["Wing Clip"] = "Zurechtstutzen",
+ ["Winter's Chill"] = "Winterk\195\164lte",
+ ["Wisp Spirit"] = "Irrwisch-Geist",
+ ["Wolf Riding"] = "Wolfreiten",
+ ["Wound Poison II"] = "Wundgift II",
+ ["Wound Poison III"] = "Wundgift III",
+ ["Wound Poison IV"] = "Wundgift IV",
+ ["Wound Poison"] = "Wundgift",
+ ["Wrath"] = "Zorn",
+ ["Wyvern Sting"] = "Stich des Fl\195\188geldrachen"
+ }
+end)
+
+BabbleSpell:RegisterTranslations("frFR", function()
+ return {
+ ["Abolish Disease"] = "Abolir maladie",
+ ["Abolish Poison Effect"] = "Effet Abolir le poison",
+ ["Abolish Poison"] = "Abolir le poison",
+ ["Activate MG Turret"] = "Activation de la tourelle de mitrailleuse",
+ ["Adrenaline Rush"] = "Pouss\195\169e d'adr\195\169naline",
+ ["Aftermath"] = "Cons\195\169quences",
+ ["Aggression"] = "Agressivit\195\169",
+ ["Aimed Shot"] = "Vis\195\169e",
+ ["Alchemy"] = "Alchimie",
+ ["Ambush"] = "Embuscade",
+ ["Amplify Curse"] = "Mal\195\169diction amplifi\195\169e",
+ ["Amplify Magic"] = "Amplification de la magie",
+ ["Ancestral Fortitude"] = "Robustesse des anciens",
+ ["Ancestral Healing"] = "Gu\195\169rison des anciens",
+ ["Ancestral Knowledge"] = "Connaissance ancestrale",
+ ["Ancestral Spirit"] = "Esprit ancestral",
+ ["Anger Management"] = "Ma\195\174trise de la Rage",
+ ["Anticipation"] = "Anticipation",
+ ["Aquatic Form"] = "Forme aquatique",
+ ["Arcane Brilliance"] = "Illumination des arcanes",
+ ["Arcane Concentration"] = "Concentration des arcanes",
+ ["Arcane Explosion"] = "Explosion des arcanes",
+ ["Arcane Focus"] = "Focalisation des arcanes",
+ ["Arcane Instability"] = "Instabilit\195\169 des arcanes",
+ ["Arcane Intellect"] = "Intelligence des arcanes",
+ ["Arcane Meditation"] = "M\195\169ditation des arcanes",
+ ["Arcane Mind"] = "Esprit des arcanes",
+ ["Arcane Missiles"] = "Projectiles des arcanes",
+ ["Arcane Power"] = "Pouvoir des arcanes",
+ ["Arcane Resistance"] = "R\195\169sistance aux Arcanes",
+ ["Arcane Shot"] = "Tir des arcanes",
+ ["Arcane Subtlety"] = "Subtilit\195\169 des arcanes",
+ ["Arctic Reach"] = "Allonge arctique",
+ ["Armorsmith"] = "Fabricant d'armures",
+ ["Aspect of the Beast"] = "Aspect de la b\195\170te",
+ ["Aspect of the Cheetah"] = "Aspect du gu\195\169pard",
+ ["Aspect of the Hawk"] = "Aspect du faucon",
+ ["Aspect of the Monkey"] = "Aspect du singe",
+ ["Aspect of the Pack"] = "Aspect de la meute",
+ ["Aspect of the Wild"] = "Aspect de la nature",
+ ["Astral Recall"] = "Rappel astral",
+ ["Attack"] = "Attaque",
+ ["Attacking"] = "Attaque",
+ ["Auto Shot"] = "Tir automatique",
+ ["Axe Specialization"] = "Sp\195\169cialisation Hache",
+ ["Backstab"] = "Attaque sournoise",
+ ["Bane"] = "Fl\195\169au",
+ ["Banish"] = "Bannir",
+ ["Barkskin Effect"] = "Effet Ecorce",
+ ["Barkskin"] = "Ecorce",
+ ["Barrage"] = "Barrage",
+ ["Bash"] = "Sonner",
+ ["Basic Campfire"] = "Feu de camp basique",
+ ["Battle Shout"] = "Cri de guerre",
+ ["Battle Stance Passive"] = "Posture de combat",
+ ["Battle Stance"] = "Posture de combat",
+ ["Bear Form"] = "Forme d'ours",
+ ["Beast Lore"] = "Connaissance des b\195\170tes",
+ ["Beast Slaying"] = "Tueur de b\195\170tes",
+ ["Beast Training"] = "Apprivoisement",
+ ["Benediction"] = "B\195\169n\195\169diction",
+ ["Berserker Rage"] = "Rage berserker",
+ ["Berserker Stance Passive"] = "Posture berserker",
+ ["Berserker Stance"] = "Posture berserker",
+ ["Berserking"] = "Berserker",
+ ["Bestial Discipline"] = "Discipline bestiale",
+ ["Bestial Swiftness"] = "Rapidit\195\169 bestiale",
+ ["Bestial Wrath"] = "Courroux bestial",
+ ["Bite"] = "Morsure",
+ ["Black Arrow"] = "Fl\195\168che noire",
+ ["Blackout"] = "Aveuglement",
+ ["Blacksmithing"] = "Forge",
+ ["Blade Flurry"] = "D\195\169luge de lames",
+ ["Blast Wave"] = "Vague explosive",
+ ["Blessed Recovery"] = "R\195\169tablissement b\195\169ni",
+ ["Blessing of Freedom"] = "B\195\169n\195\169diction de libert\195\169",
+ ["Blessing of Kings"] = "B\195\169n\195\169diction des rois",
+ ["Blessing of Light"] = "B\195\169n\195\169diction de lumi\195\168re",
+ ["Blessing of Might"] = "B\195\169n\195\169diction de puissance",
+ ["Blessing of Protection"] = "B\195\169n\195\169diction de protection",
+ ["Blessing of Sacrifice"] = "B\195\169n\195\169diction de sacrifice",
+ ["Blessing of Salvation"] = "B\195\169n\195\169diction de salut",
+ ["Blessing of Sanctuary"] = "B\195\169n\195\169diction du sanctuaire",
+ ["Blessing of Wisdom"] = "B\195\169n\195\169diction de sagesse",
+ ["Blind"] = "C\195\169cit\195\169",
+ ["Blinding Powder"] = "Poudre aveuglante",
+ ["Blink"] = "Transfert",
+ ["Blizzard"] = "Blizzard",
+ ["Block"] = "Bloquer",
+ ["Blood Craze"] = "Folie sanguinaire",
+ ["Blood Frenzy"] = "Fr\195\169n\195\169sie sanglante",
+ ["Blood Fury"] = "Fureur sanguinaire",
+ ["Blood Pact"] = "Pacte de sang",
+ ["Bloodrage"] = "Rage sanguinaire",
+ ["Bloodthirst"] = "Sanguinaire",
+ ["Booming Voice"] = "Voix tonitruante",
+ ["Bow Specialization"] = "Sp\195\169cialisation Arc",
+ ["Bows"] = "Arcs",
+ ["Bright Campfire"] = "Feu de camp \195\169clatant",
+ ["Brutal Impact"] = "Impact brutal",
+ ["Burning Soul"] = "Ame ardente",
+ ["Call Pet"] = "Appel du familier",
+ ["Call of Flame"] = "Appel des flammes",
+ ["Call of Thunder"] = "Appel de la foudre",
+ ["Camouflage"] = "Dissimulation",
+ ["Cannibalize"] = "Cannibalisme",
+ ["Cat Form"] = "Forme de f\195\169lin",
+ ["Cataclysm"] = "Cataclysme",
+ ["Chain Heal"] = "Salve de gu\195\169rison",
+ ["Chain Lightning"] = "Cha\195\174ne d'\195\169clairs",
+ ["Challenging Roar"] = "Rugissement provocateur",
+ ["Challenging Shout"] = "Cri de d\195\169fi",
+ ["Charge Rage Bonus Effect"] = "Effet Bonus de Rage de la Charge",
+ ["Charge"] = "Charge",
+ ["Charge Stun"] = "Charge \195\169tourdissante",
+ ["Cheap Shot"] = "Coup bas",
+ ["Chilled"] = "Transi",
+ ["Claw"] = "Griffe",
+ ["Cleanse"] = "Epuration",
+ ["Clearcasting"] = "Id\195\169es claires",
+ ["Cleave"] = "Encha\195\174nement",
+ ["Clever Traps"] = "Pi\195\168ges astucieux",
+ ["Closing"] = "Fermeture",
+ ["Cloth"] = "Tissu",
+ ["Cobra Reflexes"] = "R\195\169flexes du cobra",
+ ["Cold Blood"] = "Sang froid",
+ ["Cold Snap"] = "Morsure de glace",
+ ["Combat Endurance"] = "Endurance de combat",
+ ["Combustion"] = "Combustion",
+ ["Command"] = "Commande",
+ ["Concentration Aura"] = "Aura de concentration",
+ ["Concussion Blow"] = "Bourrasque",
+ ["Concussion"] = "Commotion",
+ ["Concussive Shot"] = "Trait de choc",
+ ["Cone of Cold"] = "C\195\180ne de froid",
+ ["Conflagrate"] = "Conflagration",
+ ["Conjure Food"] = "Invocation de nourriture",
+ ["Conjure Mana Agate"] = "Invocation d'une agate de mana",
+ ["Conjure Mana Citrine"] = "Invocation d'une citrine de mana",
+ ["Conjure Mana Jade"] = "Invocation d'une jade de mana",
+ ["Conjure Mana Ruby"] = "Invocation d'un rubis de mana",
+ ["Conjure Water"] = "Invocation d'eau",
+ ["Consecration"] = "Cons\195\169cration",
+ ["Consume Shadows"] = "Consumer les ombres",
+ ["Convection"] = "Convection",
+ ["Conviction"] = "Conviction",
+ ["Cooking"] = "Cuisine",
+ ["Corruption"] = "Corruption",
+ ["Counterattack"] = "Contre-attaque",
+ ["Counterspell"] = "Contresort",
+ ["Counterspell - Silenced"] = "Contresort - Silencieux",
+ ["Cower"] = "D\195\169robade",
+ ["Create Firestone"] = "Cr\195\169ation de Pierre de feu",
+ ["Create Healthstone"] = "Cr\195\169ation de Pierre de soins",
+ ["Create Soulstone"] = "Cr\195\169ation de Pierre d'\195\162me",
+ ["Create Spellstone"] = "Cr\195\169ation de Pierre de sort",
+ ["Crippling Poison II"] = "Poison affaiblissant II",
+ ["Crippling Poison"] = "Poison affaiblissant",
+ ["Critical Mass"] = "Masse critique",
+ ["Crossbows"] = "Arbal\195\168tes",
+ ["Cruelty"] = "Cruaut\195\169",
+ ["Cultivation"] = "Culture",
+ ["Cure Disease"] = "Gu\195\169rison des maladies",
+ ["Cure Poison"] = "Gu\195\169rison du poison",
+ ["Curse of Agony"] = "Mal\195\169diction d'agonie",
+ ["Curse of Doom Effect"] = "Effet Mal\195\169diction funeste",
+ ["Curse of Doom"] = "Mal\195\169diction funeste",
+ ["Curse of Exhaustion"] = "Mal\195\169diction de fatigue",
+ ["Curse of Idiocy"] = "Mal\195\169diction d'idiotie",
+ ["Curse of Recklessness"] = "Mal\195\169diction de t\195\169m\195\169rit\195\169",
+ ["Curse of Shadow"] = "Mal\195\169diction de l'ombre",
+ ["Curse of Tongues"] = "Mal\195\169diction des langages",
+ ["Curse of Weakness"] = "Mal\195\169diction de faiblesse",
+ ["Curse of the Elements"] = "Mal\195\169diction des \195\169l\195\169ments",
+ ["Dagger Specialization"] = "Sp\195\169cialisation Dague",
+ ["Daggers"] = "Dagues",
+ ["Dampen Magic"] = "Att\195\169nuation de la magie",
+ ["Dark Pact"] = "Pacte noir",
+ ["Darkness"] = "T\195\169n\195\168bres",
+ ["Dash"] = "C\195\169l\195\169rit\195\169",
+ ["Deadly Poison II"] = "Poison mortel II",
+ ["Deadly Poison III"] = "Poison mortel III",
+ ["Deadly Poison IV"] = "Poison mortel IV",
+ ["Deadly Poison V"] = "Poison mortel V",
+ ["Deadly Poison"] = "Poison mortel",
+ ["Death Coil"] = "Voile mortel",
+ ["Death Wish"] = "Souhait mortel",
+ ["Deep Wounds"] = "Blessure profonde",
+ ["Defense"] = "D\195\169fense",
+ ["Defensive Stance Passive"] = "Posture d\195\169fensive",
+ ["Defensive Stance"] = "Posture d\195\169fensive",
+ ["Defensive State 2"] = "Posture d\195\169fensive 2",
+ ["Defensive State"] = "Posture d\195\169fensive",
+ ["Defiance"] = "D\195\169fi",
+ ["Deflection"] = "D\195\169viation",
+ ["Demon Armor"] = "Armure d\195\169moniaque",
+ ["Demon Skin"] = "Peau de d\195\169mon",
+ ["Demonic Embrace"] = "Baiser d\195\169moniaque",
+ ["Demonic Sacrifice"] = "Sacrifice d\195\169moniaque",
+ ["Demoralizing Roar"] = "Rugissement d\195\169moralisant",
+ ["Demoralizing Shout"] = "Cri d\195\169moralisant",
+ ["Desperate Prayer"] = "Pri\195\168re du d\195\169sespoir",
+ ["Destructive Reach"] = "Allonge de destruction",
+ ["Detect Greater Invisibility"] = "D\195\169tection de l'invisibilit\195\169 sup\195\169rieure",
+ ["Detect Invisibility"] = "D\195\169tection de l'invisibilit\195\169",
+ ["Detect Lesser Invisibility"] = "D\195\169tection de l'invisibilit\195\169 inf\195\169rieure",
+ ["Detect Magic"] = "D\195\169tection de la magie",
+ ["Detect Traps"] = "D\195\169tection des pi\195\168ges",
+ ["Detect"] = "D\195\169tection",
+ ["Deterrence"] = "Dissuasion",
+ ["Devastation"] = "D\195\169vastation",
+ ["Devotion Aura"] = "Aura de d\195\169votion",
+ ["Devour Magic Effect"] = "Effet festin magique",
+ ["Devour Magic"] = "Festin magique",
+ ["Devouring Plague"] = "Peste d\195\169vorante",
+ ["Diplomacy"] = "Diplomatie",
+ ["Dire Bear Form"] = "Forme d'ours redoutable",
+ ["Disarm Trap"] = "D\195\169sarmement de pi\195\168ge",
+ ["Disarm"] = "D\195\169sarmement",
+ ["Disease Cleansing Totem"] = "Totem de Purification des maladies",
+ ["Disenchant"] = "D\195\169senchanter",
+ ["Disengage"] = "D\195\169sengagement",
+ ["Dismiss Pet"] = "Renvoyer le familier",
+ ["Dispel Magic"] = "Dissipation de la magie",
+ ["Distract"] = "Distraction",
+ ["Distracting Shot"] = "Trait provocateur",
+ ["Dive"] = "Plongeon",
+ ["Divine Favor"] = "Faveur divine",
+ ["Divine Fury"] = "Fureur divine",
+ ["Divine Intellect"] = "Intelligence divine",
+ ["Divine Intervention"] = "Intervention divine",
+ ["Divine Protection"] = "Protection divine",
+ ["Divine Shield"] = "Bouclier divin",
+ ["Divine Spirit"] = "Esprit divin",
+ ["Divine Strength"] = "Force divine",
+ ["Dodge"] = "Esquiver",
+ ["Dragonscale Leatherworking"] = "Travail du cuir d'\195\169cailles de dragon",
+ ["Drain Life"] = "Drain de vie",
+ ["Drain Mana"] = "Drain de mana",
+ ["Drain Soul"] = "Siphon d'\195\162me",
+ ["Drink"] = "Boisson",
+ ["Dual Wield Specialization"] = "Sp\195\169cialisation Ambidextrie",
+ ["Dual Wield"] = "Ambidextrie",
+ ["Duel"] = "Duel",
+ ["Eagle Eye"] = "Oeil d'aigle",
+ ["Earth Shock"] = "Horion de terre",
+ ["Earthbind Totem"] = "Totem de lien terrestre",
+ ["Efficiency"] = "Efficacit\195\169",
+ ["Elemental Focus"] = "Focalisation \195\169l\195\169mentaire",
+ ["Elemental Fury"] = "Fureur \195\169l\195\169mentaire",
+ ["Elemental Leatherworking"] = "Travail du cuir \195\169l\195\169mentaire",
+ ["Elemental Mastery"] = "Ma\195\174trise \195\169l\195\169mentaire",
+ ["Elune's Grace"] = "Gr\195\162ce d'Elune",
+ ["Elusiveness"] = "Insaisissable",
+ ["Emberstorm"] = "Temp\195\170te ardente",
+ ["Enamored Water Spirit"] = "Esprit de l'eau amoureux",
+ ["Enchanting"] = "Enchantement",
+ ["Endurance Training"] = "Entra\195\174nement \195\160 l'Endurance",
+ ["Endurance"] = "Endurance",
+ ["Engineering Specialization"] = "Sp\195\169cialisation",
+ ["Engineering"] = "Ing\195\169nieur",
+ ["Enrage"] = "Enrager",
+ ["Enriched Manna Biscuit"] = "Biscuit enrichi en manne",
+ ["Enslave Demon"] = "Asservir d\195\169mon",
+ ["Entangling Roots"] = "Sarments",
+ ["Entrapment"] = "Pi\195\168ge",
+ ["Escape Artist"] = "Ma\195\174tre de l'\195\169vasion",
+ ["Evasion"] = "Evasion",
+ ["Eventide"] = "Tomb\195\169e du jour",
+ ["Eviscerate"] = "Evisc\195\169ration",
+ ["Evocation"] = "Evocation",
+ ["Execute"] = "Ex\195\169cution",
+ ["Exorcism"] = "Exorcisme",
+ ["Expansive Mind"] = "Pens\195\169e expansive",
+ ["Explosive Trap Effect"] = "Effet Pi\195\168ge explosif",
+ ["Explosive Trap"] = "Pi\195\168ge explosif",
+ ["Expose Armor"] = "Exposer l'armure",
+ ["Eye for an Eye"] = "Oeil pour oeil",
+ ["Eye of Kilrogg"] = "Oeil de Kilrogg",
+ ["Eyes of the Beast"] = "Oeil de la b\195\170te",
+ ["Fade"] = "Oubli",
+ ["Faerie Fire"] = "Lucioles",
+ ["Faerie Fire (Feral)"] = "Lucioles (farouche)",
+ ["Far Sight"] = "Double vue",
+ ["Fear Ward"] = "Gardien de peur",
+ ["Fear"] = "Peur",
+ ["Feed Pet"] = "Nourrir le familier",
+ ["Feedback"] = "R\195\169action",
+ ["Feign Death"] = "Feindre la mort",
+ ["Feint"] = "Feinte",
+ ["Fel Concentration"] = "Concentration corrompue",
+ ["Fel Domination"] = "Domination corrompue",
+ ["Fel Intellect"] = "Intelligence corrompue",
+ ["Fel Stamina"] = "Endurance corrompue",
+ ["Felfire"] = "Gangrefeu",
+ ["Feline Grace"] = "Gr\195\162ce f\195\169line",
+ ["Feline Swiftness"] = "C\195\169l\195\169rit\195\169 f\195\169line",
+ ["Feral Aggression"] = "Agressivit\195\169 farouche",
+ ["Feral Charge"] = "Charge farouche",
+ ["Feral Instinct"] = "Instinct farouche",
+ ["Ferocious Bite"] = "Morsure f\195\169roce",
+ ["Ferocity"] = "Ferocit\195\169",
+ ["Fetish"] = "F\195\169tiche",
+ ["Find Herbs"] = "D\195\169couverte d'herbes",
+ ["Find Minerals"] = "D\195\169couverte de gisements",
+ ["Find Treasure"] = "D\195\169couverte de tr\195\169sors",
+ ["Fire Blast"] = "Trait de feu",
+ ["Fire Nova Totem"] = "Totem Nova de feu",
+ ["Fire Power"] = "Puissance du feu",
+ ["Fire Resistance Aura"] = "Aura de r\195\169sistance au Feu",
+ ["Fire Resistance Totem"] = "Totem de r\195\169sistance au feu",
+ ["Fire Resistance"] = "R\195\169sistance au Feu",
+ ["Fire Shield"] = "Bouclier de feu",
+ ["Fire Vulnerability"] = "Vuln\195\169rabilit\195\169 au Feu",
+ ["Fire Ward"] = "Gardien de feu",
+ ["Fireball"] = "Boule de feu",
+ ["Firebolt"] = "Eclair de feu",
+ ["First Aid"] = "Secourisme",
+ ["Fishing Poles"] = "Cannes \195\160 p\195\170che",
+ ["Fishing"] = "P\195\170che",
+ ["Fist Weapon Specialization"] = "Sp\195\169cialisation Arme de pugilat",
+ ["Fist Weapons"] = "Armes de pugilat",
+ ["Flame Shock"] = "Horion de flammes",
+ ["Flame Throwing"] = "Jet de flammes",
+ ["Flamestrike"] = "Choc de flammes",
+ ["Flamethrower"] = "Lance-flammes",
+ ["Flametongue Totem"] = "Totem Langue de feu",
+ ["Flametongue Weapon"] = "Arme Langue de feu",
+ ["Flare"] = "Fus\195\169e \195\169clairante",
+ ["Flash Heal"] = "Soins rapides",
+ ["Flash of Light"] = "Eclair lumineux",
+ ["Flurry"] = "Rafale",
+ ["Focused Casting"] = "Incantation focalis\195\169e",
+ ["Food"] = "Nourriture",
+ ["Forbearance"] = "Longanimit\195\169",
+ ["Force of Will"] = "Force de volont\195\169",
+ ["Freezing Trap Effect"] = "Effet Pi?e givrant",
+ ["Freezing Trap"] = "Pi\195\168ge givrant",
+ ["Frenzied Regeneration"] = "R\195\169g\195\169n\195\169ration fr\195\169n\195\169tique",
+ ["Frenzy"] = "Fr\195\169n\195\169sie",
+ ["Frost Armor"] = "Armure de givre",
+ ["Frost Channeling"] = "Canalisation du givre",
+ ["Frost Nova"] = "Nova de givre",
+ ["Frost Resistance Aura"] = "Aura de r\195\169sistance au Givre",
+ ["Frost Resistance Totem"] = "Totem de r\195\169sistance au Givre",
+ ["Frost Resistance"] = "R\195\169sistance au Givre",
+ ["Frost Shock"] = "Horion de givre",
+ ["Frost Trap"] = "Pi\195\168ge de givre",
+ ["Frost Trap Aura"] = "Effet Pi\195\168ge de givre",
+ ["Frost Ward"] = "Gardien de givre",
+ ["Frostbite"] = "Morsure du givre",
+ ["Frostbolt"] = "Eclair de givre",
+ ["Frostbrand Weapon"] = "Arme de givre",
+ ["Furious Howl"] = "Hurlement furieux",
+ ["Furor"] = "Fureur",
+ ["Garrote"] = "Garrot",
+ ["Generic"] = "G\195\169n\195\169rique",
+ ["Ghost Wolf"] = "Loup fant\195\180me",
+ ["Ghostly Strike"] = "Frappe fantomatique",
+ ["Gift of Nature"] = "Don de la Nature",
+ ["Gift of the Wild"] = "Don du fauve",
+ ["Gouge"] = "Suriner",
+ ["Grace of Air Totem"] = "Totem de Gr\195\162ce a\195\169rienne",
+ ["Great Stamina"] = "Endurance sup\195\169rieure",
+ ["Greater Blessing of Kings"] = "B\195\169n\195\169diction des rois sup\195\169rieure",
+ ["Greater Blessing of Light"] = "B\195\169n\195\169diction de lumi\195\168re sup\195\169rieure",
+ ["Greater Blessing of Might"] = "B\195\169n\195\169diction de puissance sup\195\169rieure",
+ ["Greater Blessing of Salvation"] = "B\195\169n\195\169diction de salut sup\195\169rieure",
+ ["Greater Blessing of Sanctuary"] = "B\195\169n\195\169diction du sanctuaire sup\195\169rieure",
+ ["Greater Blessing of Wisdom"] = "B\195\169n\195\169diction de sagesse sup\195\169rieure",
+ ["Greater Heal"] = "Soins sup\195\169rieurs",
+ ["Grim Reach"] = "Allonge sinistre",
+ ["Grounding Totem"] = "Totem de Gl\195\168be",
+ ["Grovel"] = "Ramper",
+ ["Growl"] = "Grondement",
+ ["Guardian's Favor"] = "Faveur du Gardien",
+ ["Gun Specialization"] = "Sp\195\169cialisation Armes \195\160 feu",
+ ["Guns"] = "Armes \195\160 feu",
+ ["Hammer of Justice"] = "Marteau de la justice",
+ ["Hand of Justice"] = "Main de justice",
+ ["Hammer of Wrath"] = "Marteau de courroux",
+ ["Hamstring"] = "Brise-genou",
+ ["Harass"] = "Harc\195\168lement",
+ ["Hardiness"] = "Solidit\195\169",
+ ["Hawk Eye"] = "Oeil de faucon",
+ ["Heal"] = "Soins",
+ ["Healing Focus"] = "Focalisation des soins",
+ ["Healing Light"] = "Lumi\195\168re gu\195\169risseuse",
+ ["Healing Stream Totem"] = "Totem gu\195\169risseur",
+ ["Healing Touch"] = "Toucher gu\195\169risseur",
+ ["Healing Wave"] = "Vague de soins",
+ ["Healing Way"] = "Flots de soins",
+ ["Health Funnel"] = "Captation de vie",
+ ["Heart of the Wild"] = "C\197\147ur de fauve",
+ ["Hellfire Effect"] = "Effet Flammes infernales",
+ ["Hellfire"] = "Flammes infernales",
+ ["Hemorrhage"] = "H\195\169morragie",
+ ["Herb Gathering"] = "Cueillette",
+ ["Herbalism"] = "Herboristerie",
+ ["Heroic Strike"] = "Frappe h\195\169ro\195\175que",
+ ["Hex of Weakness"] = "Mal\195\169fice de faiblesse",
+ ["Hibernate"] = "Hibernation",
+ ["Holy Fire"] = "Flammes sacr\195\169es",
+ ["Holy Light"] = "Lumi\195\168re sacr\195\169e",
+ ["Holy Nova"] = "Nova sacr\195\169e",
+ ["Holy Power"] = "Puissance sacr\195\169e",
+ ["Holy Reach"] = "Allonge du Sacr\195\169",
+ ["Holy Shield"] = "Bouclier sacr\195\169",
+ ["Holy Shock"] = "Horion sacr\195\169",
+ ["Holy Specialization"] = "Sp\195\169cialisation",
+ ["Holy Wrath"] = "Col\195\168re divine",
+ ["Honorless Target"] = "Cible sans honneur",
+ ["Horse Riding"] = "Equitation",
+ ["Howl of Terror"] = "Hurlement de terreur",
+ ["Humanoid Slaying"] = "Tueur d'humano\195\175des",
+ ["Hunter's Mark"] = "Marque du chasseur",
+ ["Hurricane"] = "Ouragan",
+ ["Ice Armor"] = "Armure de glace",
+ ["Ice Barrier"] = "Barri\195\168re de glace",
+ ["Ice Block"] = "Parade de glace",
+ ["Ice Shards"] = "Eclats de glace",
+ ["Ignite"] = "Enflammer",
+ ["Illumination"] = "Illumination",
+ ["Immolate"] = "Immolation",
+ ["Immolation Trap Effect"] = "Effet Pi\195\168ge immolation",
+ ["Immolation Trap"] = "Pi\195\168ge d'Immolation",
+ ["Impact"] = "Impact",
+ ["Impale"] = "Empaler",
+ ["Improved Ambush"] = "Embuscade am\195\169lior\195\169e",
+ ["Improved Arcane Explosion"] = "Explosion des arcanes am\195\169lior\195\169e",
+ ["Improved Arcane Missiles"] = "Projectiles des arcanes am\195\169lior\195\169s",
+ ["Improved Arcane Shot"] = "Tir des arcanes am\195\169lior\195\169",
+ ["Improved Aspect of the Hawk"] = "Aspect du faucon am\195\169lior\195\169",
+ ["Improved Aspect of the Monkey"] = "Aspect du singe am\195\169lior\195\169",
+ ["Improved Backstab"] = "Attaque sournoise am\195\169lior\195\169e",
+ ["Improved Battle Shout"] = "Cri de guerre am\195\169lior\195\169",
+ ["Improved Berserker Rage"] = "Rage berserker am\195\169lior\195\169e",
+ ["Improved Blessing of Might"] = "B\195\169n\195\169diction de puissance am\195\169lior\195\169e",
+ ["Improved Blessing of Wisdom"] = "B\195\169n\195\169diction de sagesse am\195\169lior\195\169e",
+ ["Improved Blizzard"] = "Blizzard am\195\169lior\195\169",
+ ["Improved Bloodrage"] = "Rage sanguinaire am\195\169lior\195\169e",
+ ["Improved Chain Heal"] = "Salve de gu\195\169rison am\195\169lior\195\169e",
+ ["Improved Chain Lightning"] = "Cha\195\174ne d'\195\169clairs am\195\169lior\195\169e",
+ ["Improved Challenging Shout"] = "Cri de d\195\169fi am\195\169lior\195\169",
+ ["Improved Charge"] = "Charge am\195\169lior\195\169e",
+ ["Improved Cheap Shot"] = "Coup bas am\195\169lior\195\169",
+ ["Improved Cleave"] = "Encha\195\174nement am\195\169lior\195\169",
+ ["Improved Concentration Aura"] = "Aura de concentration am\195\169lior\195\169e",
+ ["Improved Concussive Shot"] = "Trait de choc am\195\169lior\195\169",
+ ["Improved Cone of Cold"] = "C\195\180ne de froid am\195\169lior\195\169",
+ ["Improved Corruption"] = "Corruption am\195\169lior\195\169e",
+ ["Improved Counterspell"] = "Contresort am\195\169lior\195\169",
+ ["Improved Curse of Agony"] = "Mal\195\169diction d'agonie am\195\169lior\195\169e",
+ ["Improved Curse of Exhaustion"] = "Mal\195\169diction de fatigue am\195\169lior\195\169e",
+ ["Improved Curse of Weakness"] = "Mal\195\169diction de faiblesse am\195\169lior\195\169e",
+ ["Improved Dampen Magic"] = "Att\195\169nuation de la magie am\195\169lior\195\169e",
+ ["Improved Deadly Poison"] = "Poison mortel am\195\169lior\195\169",
+ ["Improved Demoralizing Shout"] = "Cri d\195\169moralisant am\195\169lior\195\169",
+ ["Improved Devotion Aura"] = "Aura de d\195\169votion am\195\169lior\195\169e",
+ ["Improved Disarm"] = "D\195\169sarmement am\195\169lior\195\169",
+ ["Improved Distract"] = "Distraction am\195\169lior\195\169e",
+ ["Improved Drain Life"] = "Drain de vie am\195\169lior\195\169",
+ ["Improved Drain Mana"] = "Drain de mana am\195\169lior\195\169",
+ ["Improved Drain Soul"] = "Siphon d'\195\162me am\195\169lior\195\169",
+ ["Improved Enrage"] = "Enrager am\195\169lior\195\169",
+ ["Improved Enslave Demon"] = "Asservir d\195\169mon am\195\169lior\195\169",
+ ["Improved Entangling Roots"] = "Sarments am\195\169lior\195\169s",
+ ["Improved Evasion"] = "Evasion am\195\169lior\195\169e",
+ ["Improved Eviscerate"] = "Evisc\195\169ration am\195\169lior\195\169e",
+ ["Improved Execute"] = "Ex\195\169cution am\195\169lior\195\169e",
+ ["Improved Expose Armor"] = "Exposer l'armure am\195\169lior\195\169",
+ ["Improved Eyes of the Beast"] = "Oeil de la b\195\170te am\195\169lior\195\169",
+ ["Improved Fade"] = "Oubli am\195\169lior\195\169",
+ ["Improved Feign Death"] = "Feindre la mort am\195\169lior\195\169",
+ ["Improved Fire Blast"] = "Trait de feu am\195\169lior\195\169",
+ ["Improved Fire Nova Totem"] = "Totem Nova de feu am\195\169lior\195\169",
+ ["Improved Fire Ward"] = "Gardien de feu am\195\169lior\195\169",
+ ["Improved Fireball"] = "Boule de feu am\195\169lior\195\169e",
+ ["Improved Firebolt"] = "Eclair de feu am\195\169lior\195\169",
+ ["Improved Firestone"] = "Pierre de feu am\195\169lior\195\169e",
+ ["Improved Flamestrike"] = "Choc de flammes am\195\169lior\195\169",
+ ["Improved Flametongue Weapon"] = "Arme Langue de feu am\195\169lior\195\169e",
+ ["Improved Flash of Light"] = "Eclair lumineux am\195\169lior\195\169",
+ ["Improved Frost Nova"] = "Nova de givre am\195\169lior\195\169e",
+ ["Improved Frost Ward"] = "Gardien de givre am\195\169lior\195\169",
+ ["Improved Frostbolt"] = "Eclair de givre am\195\169lior\195\169",
+ ["Improved Frostbrand Weapon"] = "Arme de givre am\195\169lior\195\169e",
+ ["Improved Garrote"] = "Garrot am\195\169lior\195\169",
+ ["Improved Ghost Wolf"] = "Loup fant\195\180me am\195\169lior\195\169",
+ ["Improved Gouge"] = "Suriner am\195\169lior\195\169",
+ ["Improved Grace of Air Totem"] = "Totem de Gr\195\162ce a\195\169rienne am\195\169lior\195\169",
+ ["Improved Grounding Totem"] = "Totem de Gl\195\168be am\195\169lior\195\169",
+ ["Improved Hammer of Justice"] = "Marteau de la justice am\195\169lior\195\169",
+ ["Improved Hamstring"] = "Brise-genou am\195\169lior\195\169",
+ ["Improved Healing Stream Totem"] = "Totem gu\195\169risseur am\195\169lior\195\169",
+ ["Improved Healing Touch"] = "Toucher gu\195\169risseur am\195\169lior\195\169",
+ ["Improved Healing Wave"] = "Vague de soins am\195\169lior\195\169e",
+ ["Improved Healing"] = "Soin am\195\169lior\195\169",
+ ["Improved Health Funnel"] = "Captation de vie am\195\169lior\195\169e",
+ ["Improved Healthstone"] = "Pierre de soins am\195\169lior\195\169e",
+ ["Improved Heroic Strike"] = "Frappe h\195\169ro\195\175que am\195\169lior\195\169e",
+ ["Improved Hunter's Mark"] = "Marque du chasseur am\195\169lior\195\169e",
+ ["Improved Immolate"] = "Immolation am\195\169lior\195\169e",
+ ["Improved Imp"] = "Diablotin am\195\169lior\195\169",
+ ["Improved Inner Fire"] = "Feu int\195\169rieur am\195\169lior\195\169",
+ ["Improved Instant Poison"] = "Poison instantan\195\169 am\195\169lior\195\169",
+ ["Improved Intercept"] = "Interception am\195\169lior\195\169e",
+ ["Improved Intimidating Shout"] = "Cri d\226\128\153intimidation am\195\169lior\195\169",
+ ["Improved Judgement"] = "Jugement am\195\169lior\195\169",
+ ["Improved Kick"] = "Coup de pied am\195\169lior\195\169",
+ ["Improved Kidney Shot"] = "Aiguillon perfide am\195\169lior\195\169",
+ ["Improved Lash of Pain"] = "Fouet de la douleur am\195\169lior\195\169",
+ ["Improved Lay on Hands"] = "Imposition des mains am\195\169lior\195\169e",
+ ["Improved Lesser Healing Wave"] = "Vague de soins inf\195\169rieurs am\195\169lior\195\169e",
+ ["Improved Life Tap"] = "Connexion am\195\169lior\195\169e",
+ ["Improved Lightning Bolt"] = "Eclair am\195\169lior\195\169",
+ ["Improved Lightning Shield"] = "Bouclier de foudre am\195\169lior\195\169",
+ ["Improved Magma Totem"] = "Totem de Magma am\195\169lior\195\169",
+ ["Improved Mana Burn"] = "Br\195\187lure de mana am\195\169lior\195\169e",
+ ["Improved Mana Shield"] = "Bouclier de mana am\195\169lior\195\169",
+ ["Improved Mana Spring Totem"] = "Totem Fontaine de mana am\195\169lior\195\169",
+ ["Improved Mark of the Wild"] = "Marque du fauve am\195\169lior\195\169e",
+ ["Improved Mend Pet"] = "Gu\195\169rison du familier am\195\169lior\195\169e",
+ ["Improved Mind Blast"] = "Attaque mentale am\195\169lior\195\169e",
+ ["Improved Moonfire"] = "Eclat lunaire am\195\169lior\195\169",
+ ["Improved Nature's Grasp"] = "Emprise de la nature am\195\169lior\195\169e",
+ ["Improved Overpower"] = "Fulgurance am\195\169lior\195\169e",
+ ["Improved Power Word: Fortitude"] = "Mot de pouvoir : Robustesse am\195\169lior\195\169",
+ ["Improved Power Word: Shield"] = "Mot de pouvoir : Bouclier am\195\169lior\195\169",
+ ["Improved Prayer of Healing"] = "Pri\195\168re de soins am\195\169lior\195\169e",
+ ["Improved Psychic Scream"] = "Cri psychique am\195\169lior\195\169",
+ ["Improved Pummel"] = "Vol\195\169e de coups am\195\169lior\195\169e",
+ ["Improved Regrowth"] = "R\195\169tablissement am\195\169lior\195\169",
+ ["Improved Reincarnation"] = "R\195\169incarnation am\195\169lior\195\169e",
+ ["Improved Rejuvenation"] = "R\195\169cup\195\169ration am\195\169lior\195\169e",
+ ["Improved Rend"] = "Pourfendre am\195\169lior\195\169",
+ ["Improved Renew"] = "R\195\169novation am\195\169lior\195\169e",
+ ["Improved Retribution Aura"] = "Aura de vindicte am\195\169lior\195\169e",
+ ["Improved Revenge"] = "Vengeance am\195\169lior\195\169e",
+ ["Improved Revive Pet"] = "Ressusciter le familier am\195\169lior\195\169",
+ ["Improved Righteous Fury"] = "Fureur vertueuse am\195\169lior\195\169e",
+ ["Improved Rockbiter Weapon"] = "Arme Croque-roc am\195\169lior\195\169e",
+ ["Improved Rupture"] = "Rupture am\195\169lior\195\169e",
+ ["Improved Sap"] = "Assommer am\195\169lior\195\169",
+ ["Improved Scorch"] = "Br\195\187lure am\195\169lior\195\169e",
+ ["Improved Scorpid Sting"] = "Piq\195\187re de scorpide am\195\169lior\195\169e",
+ ["Improved Seal of Righteousness"] = "Sceau de pi\195\169t\195\169 am\195\169lior\195\169",
+ ["Improved Seal of the Crusader"] = "Sceau du Crois\195\169 am\195\169lior\195\169",
+ ["Improved Searing Pain"] = "Douleur br\195\187lante am\195\169lior\195\169e",
+ ["Improved Searing Totem"] = "Totem incendiaire am\195\169lior\195\169",
+ ["Improved Serpent Sting"] = "Morsure de serpent am\195\169lior\195\169e",
+ ["Improved Shadow Bolt"] = "Trait de l'ombre am\195\169lior\195\169",
+ ["Improved Shadow Word: Pain"] = "Mot de l'ombre : Douleur am\195\169lior\195\169",
+ ["Improved Shield Bash"] = "Coup de bouclier am\195\169lior\195\169",
+ ["Improved Shield Block"] = "Ma\195\174trise du blocage am\195\169lior\195\169e",
+ ["Improved Shield Wall"] = "Mur protecteur am\195\169lior\195\169",
+ ["Improved Shred"] = "Lambeau am\195\169lior\195\169",
+ ["Improved Sinister Strike"] = "Attaque pernicieuse am\195\169lior\195\169e",
+ ["Improved Slam"] = "Heurtoir am\195\169lior\195\169",
+ ["Improved Slice and Dice"] = "D\195\169biter am\195\169lior\195\169",
+ ["Improved Spellstone"] = "Pierre de sort am\195\169lior\195\169e",
+ ["Improved Sprint"] = "Sprint am\195\169lior\195\169",
+ ["Improved Starfire"] = "Feu stellaire am\195\169lior\195\169",
+ ["Improved Stoneclaw Totem"] = "Totem de Griffes de pierre am\195\169lior\195\169",
+ ["Improved Stoneskin Totem"] = "Totem de Peau de pierre am\195\169lior\195\169",
+ ["Improved Strength of Earth Totem"] = "Totem de Force de la Terre am\195\169lior\195\169",
+ ["Improved Succubus"] = "Succube am\195\169lior\195\169e",
+ ["Improved Sunder Armor"] = "Fracasser armure am\195\169lior\195\169",
+ ["Improved Taunt"] = "Provocation am\195\169lior\195\169e",
+ ["Improved Thorns"] = "Epines am\195\169lior\195\169es",
+ ["Improved Thunder Clap"] = "Coup de tonnerre am\195\169lior\195\169",
+ ["Improved Tranquility"] = "Tranquillit\195\169 am\195\169lior\195\169e",
+ ["Improved Vampiric Embrace"] = "Etreinte vampirique am\195\169lior\195\169e",
+ ["Improved Vanish"] = "Disparition am\195\169lior\195\169e",
+ ["Improved Voidwalker"] = "Marcheur du Vide am\195\169lior\195\169",
+ ["Improved Windfury Weapon"] = "Arme Furie-des-vents am\195\169lior\195\169e",
+ ["Improved Wing Clip"] = "Coupure d'ailes am\195\169lior\195\169e",
+ ["Improved Wrath"] = "Col\195\168re am\195\169lior\195\169e",
+ ["Incinerate"] = "Incin\195\169rer",
+ ["Inferno"] = "Inferno",
+ ["Initiative"] = "Initiative",
+ ["Inner Fire"] = "Feu int\195\169rieur",
+ ["Inner Focus"] = "Focalisation am\195\169lior\195\169e",
+ ["Innervate"] = "Innervation",
+ ["Insect Swarm"] = "Essaim d'insectes",
+ ["Inspiration"] = "Inspiration",
+ ["Instant Poison II"] = "Poison instantan\195\169 II",
+ ["Instant Poison III"] = "Poison instantan\195\169 III",
+ ["Instant Poison IV"] = "Poison instantan\195\169 IV",
+ ["Instant Poison V"] = "Poison instantan\195\169 V",
+ ["Instant Poison VI"] = "Poison instantan\195\169 VI",
+ ["Instant Poison"] = "Poison instantan\195\169",
+ ["Intensity"] = "Intensit\195\169",
+ ["Intercept"] = "Interception",
+ ["Intercept Stun"] = "Interception étourdissante",
+ ["Intimidating Shout"] = "Cri d\226\128\153intimidation",
+ ["Intimidation"] = "Intimidation",
+ ["Iron Will"] = "Volont\195\169 de fer",
+ ["Judgement of Command"] = "Jugement d'autorit\195\169",
+ ["Judgement of Justice"] = "Jugement de justice",
+ ["Judgement of Light"] = "Jugement de lumi\195\168re",
+ ["Judgement of Righteousness"] = "Jugement de pi\195\169t\195\169",
+ ["Judgement of Wisdom"] = "Jugement de sagesse",
+ ["Judgement of the Crusader"] = "Jugement du Crois\195\169",
+ ["Judgement"] = "Jugement",
+ ["Kick"] = "Coup de pied",
+ ["Kick - Silenced"] = "Coup de pied - Silencieux",
+ ["Kidney Shot"] = "Aiguillon perfide",
+ ["Killer Instinct"] = "Instinct du tueur",
+ ["Kodo Riding"] = "Monte de kodo",
+ ["Lash of Pain"] = "Fouet de la douleur",
+ ["Last Stand"] = "Dernier rempart",
+ ["Lasting Judgement"] = "Jugement durable",
+ ["Lay on Hands"] = "Imposition des mains",
+ ["Leader of the Pack"] = "Chef de la meute",
+ ["Leather"] = "Cuir",
+ ["Leatherworking"] = "Travail du cuir",
+ ["Lesser Heal"] = "Soins inf\195\169rieurs",
+ ["Lesser Healing Wave"] = "Vague de soins inf\195\169rieurs",
+ ["Lesser Invisibility"] = "Invisibilit\195\169 inf\195\169rieure",
+ ["Lethal Shots"] = "Coups fatals",
+ ["Lethality"] = "Mortalit\195\169",
+ ["Levitate"] = "L\195\169vitation",
+ ["Libram"] = "Libram",
+ ["Life Tap"] = "Connexion",
+ ["Lightning Bolt"] = "Eclair",
+ ["Lightning Breath"] = "Souffle de foudre",
+ ["Lightning Mastery"] = "Ma\195\174trise de la foudre",
+ ["Lightning Reflexes"] = "R\195\169flexes \195\169clairs",
+ ["Lightning Shield"] = "Bouclier de foudre",
+ ["Lightwell Renew"] = "R\195\169novation du Puits de lumi\195\168re",
+ ["Lightwell"] = "Puits de lumi\195\168re",
+ ["Lockpicking"] = "Crochetage",
+ ["Long Daze"] = "H\195\169b\195\169tement prolong\195\169",
+ ["Mace Specialization"] = "Sp\195\169cialisation Masse",
+ ["Mace Stun Effect"] = "Effet \195\169tourdissant de la masse",
+ ["Mage Armor"] = "Armure du mage",
+ ["Magma Totem"] = "Totem de Magma",
+ ["Mail"] = "Mailles",
+ ["Malice"] = "Malice",
+ ["Mana Burn"] = "Br\195\187lure de mana",
+ ["Mana Shield"] = "Bouclier de mana",
+ ["Mana Spring Totem"] = "Totem Fontaine de mana",
+ ["Mana Tide Totem"] = "Totem de Vague de mana",
+ ["Mangle"] = "Mutilation",
+ ["Mark of the Wild"] = "Marque du fauve",
+ ["Martyrdom"] = "Martyre",
+ ["Master Demonologist"] = "Ma\195\174tre d\195\169monologue",
+ ["Master Summoner"] = "Ma\195\174tre invocateur",
+ ["Master of Deception"] = "Ma\195\174tre des illusions",
+ ["Maul"] = "Mutiler",
+ ["Mechanostrider Piloting"] = "Pilotage de m\195\169canotrotteur",
+ ["Meditation"] = "M\195\169ditation",
+ ["Melee Specialization"] = "Sp\195\169cialisation M\195\170l\195\169e",
+ ["Mend Pet"] = "Gu\195\169rison du familier",
+ ["Mental Agility"] = "Sagacit\195\169",
+ ["Mental Strength"] = "Force mentale",
+ ["Mind Blast"] = "Attaque mentale",
+ ["Mind Control"] = "Contr\195\180le mental",
+ ["Mind Flay"] = "Fouet mental",
+ ["Mind Soothe"] = "Apaisement",
+ ["Mind Vision"] = "Vision t\195\169l\195\169pathique",
+ ["Mind-numbing Poison II"] = "Poison de distraction mentale II",
+ ["Mind-numbing Poison III"] = "Poison de distraction mentale III",
+ ["Mind-numbing Poison"] = "Poison de distraction mentale",
+ ["Mining"] = "Minage",
+ ["Mocking Blow"] = "Coup railleur",
+ ["Mongoose Bite"] = "Morsure de la mangouste",
+ ["Monster Slaying"] = "Tueur de monstres",
+ ["Moonfire"] = "Eclat lunaire",
+ ["Moonfury"] = "Fureur lunaire",
+ ["Moonglow"] = "Lueur de la lune",
+ ["Moonkin Aura"] = "Aura de s\195\169l\195\169nien",
+ ["Moonkin Form"] = "Forme de s\195\169l\195\169nien",
+ ["Mortal Shots"] = "Coups mortels",
+ ["Mortal Strike"] = "Frappe mortelle",
+ ["Multi-Shot"] = "Fl\195\168ches multiples",
+ ["Murder"] = "Meurtre",
+ ["Natural Armor"] = "Armure naturelle",
+ ["Natural Shapeshifter"] = "Changeforme naturel",
+ ["Natural Weapons"] = "Armes naturelles",
+ ["Nature Resistance Totem"] = "Totem de r\195\169sistance \195\160 la Nature",
+ ["Nature Resistance"] = "R\195\169sistance \195\160 la Nature",
+ ["Nature's Focus"] = "Focalisation de la nature",
+ ["Nature's Grace"] = "Gr\195\162ce de la nature",
+ ["Nature's Grasp"] = "Emprise de la nature",
+ ["Nature's Reach"] = "Allonge de la Nature",
+ ["Nature's Swiftness"] = "Rapidit\195\169 de la nature",
+ ["Nightfall"] = "Cr\195\169puscule",
+ ["Omen of Clarity"] = "Augure de clart\195\169",
+ ["One-Handed Axes"] = "Haches",
+ ["One-Handed Maces"] = "Masses",
+ ["One-Handed Swords"] = "Ep\195\169es",
+ ["One-Handed Weapon Specialization"] = "Sp\195\169cialisation Arme 1M",
+ ["Opening - No Text"] = "Ouverture - pas de texte",
+ ["Opening"] = "Ouverture",
+ ["Opportunity"] = "Opportunit\195\169",
+ ["Overpower"] = "Fulgurance",
+ ["Paranoia"] = "Parano\195\175a",
+ ["Parry"] = "Parade",
+ ["Pathfinding"] = "Science des chemins",
+ ["Perception"] = "Perception",
+ ["Permafrost"] = "Gel prolong\195\169",
+ ["Pet Aggression"] = "Agressivit\195\169 du familier",
+ ["Pet Hardiness"] = "Robustesse du familier",
+ ["Pet Recovery"] = "R\195\169tablissement du familier",
+ ["Pet Resistance"] = "R\195\169sistance du familier",
+ ["Phase Shift"] = "Changement de phase",
+ ["Pick Lock"] = "Crochetage",
+ ["Pick Pocket"] = "Vol \195\160 la tire",
+ ["Piercing Howl"] = "Hurlement per\195\167ant",
+ ["Piercing Ice"] = "Glace per\195\167ante",
+ ["Plate Mail"] = "Armure en plaques",
+ ["Poison Cleansing Totem"] = "Totem de Purification du poison",
+ ["Poisons"] = "Poisons",
+ ["Polearm Specialization"] = "Sp\195\169cialisation Arme d'hast",
+ ["Polearms"] = "Armes d'hast",
+ ["Polymorph"] = "M\195\169tamorphose",
+ ["Polymorph: Pig"] = "M\195\169tamorphose: cochon",
+ ["Polymorph: Turtle"] = "M\195\169tamorphose: Tortue", -- all other polymorph spells don't have a capital letter before the animal name, to test
+ ["Portal: Darnassus"] = "Portail : Darnassus",
+ ["Portal: Ironforge"] = "Portail : Ironforge",
+ ["Portal: Orgrimmar"] = "Portail : Orgrimmar",
+ ["Portal: Stormwind"] = "Portail : Stormwind",
+ ["Portal: Thunder Bluff"] = "Portail : Thunder Bluff",
+ ["Portal: Undercity"] = "Portail : Undercity",
+ ["Pounce Bleed"] = "Traquenard sanglant",
+ ["Pounce"] = "Traquenard",
+ ["Power Infusion"] = "Infusion de puissance",
+ ["Power Word: Fortitude"] = "Mot de pouvoir : Robustesse",
+ ["Power Word: Shield"] = "Mot de pouvoir : Bouclier",
+ ["Prayer of Fortitude"] = "Pri\195\168re de robustesse",
+ ["Prayer of Healing"] = "Pri\195\168re de soins",
+ ["Prayer of Shadow Protection"] = "Pri\195\168re de protection contre l'Ombre",
+ ["Prayer of Spirit"] = "Pri\195\168re d'Esprit",
+ ["Precision"] = "Pr\195\169cision",
+ ["Predatory Strikes"] = "Frappes de pr\195\169dateur",
+ ["Premeditation"] = "Pr\195\169m\195\169ditation",
+ ["Preparation"] = "Pr\195\169paration",
+ ["Presence of Mind"] = "Pr\195\169sence spirituelle",
+ ["Primal Fury"] = "Fureur primitive",
+ ["Prowl"] = "R\195\180der",
+ ["Psychic Scream"] = "Cri psychique",
+ ["Pummel"] = "Vol\195\169e de coups",
+ ["Purge"] = "Expiation",
+ ["Purification"] = "Purification",
+ ["Purify"] = "Purification",
+ ["Pursuit of Justice"] = "Poursuite de la justice",
+ ["Pyroblast"] = "Explosion pyrotechnique",
+ ["Pyroclasm"] = "Pyroclasme",
+ ["Quick Shots"] = "Tir rapide",
+ ["Quickness"] = "Rapidit\195\169",
+ ["Rain of Fire"] = "Pluie de feu",
+ ["Rake"] = "Griffure",
+ ["Ram Riding"] = "Monte de b\195\169lier",
+ ["Ranged Weapon Specialization"] = "Sp\195\169cialisation Armes \195\160 distance",
+ ["Rapid Concealment"] = "Dissimulation rapide",
+ ["Rapid Fire"] = "Tir rapide",
+ ["Raptor Riding"] = "Monte de raptor",
+ ["Raptor Strike"] = "Attaque du raptor",
+ ["Ravage"] = "Ravage",
+ ["Readiness"] = "Promptitude",
+ ["Rebirth"] = "Renaissance",
+ ["Reckless Charge"] = "Charge furieuse",
+ ["Recklessness"] = "T\195\169m\195\169rit\195\169",
+ ["Reckoning"] = "R\195\169tribution",
+ ["Redemption"] = "R\195\169demption",
+ ["Redoubt"] = "Redoute",
+ ["Reflection"] = "Renvoi",
+ ["Regeneration"] = "R\195\169g\195\169n\195\169ration",
+ ["Regrowth"] = "R\195\169tablissement",
+ ["Reincarnation"] = "R\195\169incarnation",
+ ["Rejuvenation"] = "R\195\169cup\195\169ration",
+ ["Relentless Strikes"] = "Frappes implacables",
+ ["Remorseless"] = "Impitoyable",
+ ["Remorseless Attacks"] = "Attaques impitoyables",
+ ["Remove Curse"] = "D\195\169livrance de la mal\195\169diction",
+ ["Remove Insignia"] = "Enlever l'insigne",
+ ["Remove Lesser Curse"] = "D\195\169livrance de la mal\195\169diction mineure",
+ ["Rend"] = "Pourfendre",
+ ["Renew"] = "R\195\169novation",
+ ["Repentance"] = "Repentir",
+ ["Resurrection"] = "R\195\169surrection",
+ ["Retaliation"] = "Repr\195\169sailles",
+ ["Retribution Aura"] = "Aura de vindicte",
+ ["Revenge Stun"] = "Etourdissement vengeur",
+ ["Revenge"] = "Vengeance",
+ ["Reverberation"] = "R\195\169verb\195\169ration",
+ ["Revive Pet"] = "Ressusciter le familier",
+ ["Righteous Fury"] = "Fureur vertueuse",
+ ["Rip"] = "D\195\169chirure",
+ ["Riposte"] = "Riposte",
+ ["Ritual of Doom Effect"] = "Effet Rituel de mal\195\169diction",
+ ["Ritual of Doom"] = "Rituel de mal\195\169diction",
+ ["Ritual of Summoning"] = "Rituel d'invocation",
+ ["Rockbiter Weapon"] = "Arme Croque-roc",
+ ["Rogue Passive"] = "Voleur",
+ ["Ruin"] = "Ruine",
+ ["Rupture"] = "Rupture",
+ ["Ruthlessness"] = "N\195\169m\195\169sis",
+ ["Sacrifice"] = "Sacrifice",
+ ["Safe Fall"] = "Chute amortie",
+ ["Sanctity Aura"] = "Aura de saintet\195\169",
+ ["Sap"] = "Assommer",
+ ["Savage Fury"] = "Furie sauvage",
+ ["Savage Strikes"] = "Frappes sauvages",
+ ["Scare Beast"] = "Effrayer une b\195\170te",
+ ["Scatter Shot"] = "Fl\195\168che de dispersion",
+ ["Scorch"] = "Br\195\187lure",
+ ["Scorpid Poison"] = "Poison de scorpide",
+ ["Scorpid Sting"] = "Piq\195\187re de scorpide",
+ ["Screech"] = "Hurlement",
+ ["Seal Fate"] = "Scelle le destin",
+ ["Seal of Command"] = "Sceau d'autorit\195\169",
+ ["Seal of Justice"] = "Sceau de justice",
+ ["Seal of Light"] = "Sceau de lumi\195\168re",
+ ["Seal of Righteousness"] = "Sceau de pi\195\169t\195\169",
+ ["Seal of Wisdom"] = "Sceau de sagesse",
+ ["Seal of the Crusader"] = "Sceau du Crois\195\169",
+ ["Searing Light"] = "Lumi\195\168re incendiaire",
+ ["Searing Pain"] = "Douleur br\195\187lante",
+ ["Searing Totem"] = "Totem incendiaire",
+ ["Seduction"] = "S\195\169duction",
+ ["Sense Demons"] = "D\195\169tection des d\195\169mons",
+ ["Sense Undead"] = "D\195\169tection des morts-vivants",
+ ["Sentry Totem"] = "Totem Sentinelle",
+ ["Serpent Sting"] = "Morsure de serpent",
+ ["Setup"] = "Pr\195\169paratifs",
+ ["Shackle Undead"] = "Entraves des morts-vivants",
+ ["Shadow Affinity"] = "Affinit\195\169 avec l'ombre",
+ ["Shadow Bolt"] = "Trait de l'ombre",
+ ["Shadow Focus"] = "Focalisation de l'ombre",
+ ["Shadow Mastery"] = "Ma\195\174trise de l'ombre",
+ ["Shadow Protection"] = "Protection contre l'Ombre",
+ ["Shadow Reach"] = "Allonge de l'Ombre",
+ ["Shadow Resistance Aura"] = "Aura de r\195\169sistance \195\160 l'Ombre",
+ ["Shadow Resistance"] = "R\195\169sistance \195\160 l'Ombre",
+ ["Shadow Trance"] = "Transe de l'ombre",
+ ["Shadow Vulnerability"] = "Vuln\195\169rabilit\195\169 \195\160 l'ombre",
+ ["Shadow Ward"] = "Gardien de l'ombre",
+ ["Shadow Weaving"] = "Tissage de l'ombre",
+ ["Shadow Word: Pain"] = "Mot de l'ombre\194\160: Douleur",
+ ["Shadowburn"] = "Br\195\187lure de l'ombre",
+ ["Shadowform"] = "Forme d'Ombre",
+ ["Shadowguard"] = "Garde de l'ombre",
+ ["Shadowmeld Passive"] = "Camouflage dans l'ombre",
+ ["Shadowmeld"] = "Camouflage dans l'ombre",
+ ["Sharpened Claws"] = "Griffes aiguis\195\169es",
+ ["Shatter"] = "Fracasser",
+ ["Shell Shield"] = "Carapace bouclier",
+ ["Shield Bash"] = "Coup de bouclier",
+ ["Shield Bash - Silenced"] = "Coup de bouclier - silencieux", -- seems to be the only "- Silenced" not having a Cap letter, will try to test!
+ ["Shield Block"] = "Ma\195\174trise du blocage",
+ ["Shield Slam"] = "Heurt de bouclier",
+ ["Shield Specialization"] = "Sp\195\169cialisation Bouclier",
+ ["Shield Wall"] = "Mur protecteur",
+ ["Shield"] = "Bouclier",
+ ["Shoot Bow"] = "Tir \195\160 l'arc",
+ ["Shoot Crossbow"] = "Tir \195\160 l\226\128\153arbal\195\168te",
+ ["Shoot Gun"] = "Tir avec une arme \195\160 feu",
+ ["Shoot"] = "Tir",
+ ["Shred"] = "Lambeau",
+ ["Silence"] = "Silence",
+ ["Silent Resolve"] = "R\195\169solution silencieuse",
+ ["Sinister Strike"] = "Attaque pernicieuse",
+ ["Siphon Life"] = "Siphon de vie",
+ ["Skinning"] = "D\195\169pe\195\167age",
+ ["Slam"] = "Heurtoir",
+ ["Sleep"] = "Sommeil",
+ ["Slice and Dice"] = "D\195\169biter",
+ ["Slow Fall"] = "Chute lente",
+ ["Smelting"] = "Fondre",
+ ["Smite"] = "Ch\195\162timent",
+ ["Soothe Animal"] = "Apaiser les animaux",
+ ["Soothing Kiss"] = "Baiser apaisant",
+ ["Soul Fire"] = "Feu de l'\195\162me",
+ ["Soul Link"] = "Lien spirituel",
+ ["Soul Siphon"] = "Siphon d'\195\162me",
+ ["Soulstone Resurrection"] = "R\195\169surrection de Pierre d'\195\162me",
+ ["Spell Lock"] = "Verrou magique",
+ ["Spell Warding"] = "Protection contre les sorts",
+ ["Spirit Bond"] = "Engagement spirituel",
+ ["Spirit Tap"] = "Connexion spirituelle",
+ ["Spirit of Redemption"] = "Esprit de r\195\169demption",
+ ["Spiritual Focus"] = "Focalisation spirituelle",
+ ["Spiritual Guidance"] = "Direction spirituelle",
+ ["Spiritual Healing"] = "Soins spirituels",
+ ["Sprint"] = "Sprint",
+ ["Starfire"] = "Feu stellaire",
+ ["Starfire Stun"] = "Feu stellaire \195\169tourdissant",
+ ["Starshards"] = "Eclats stellaires",
+ ["Staves"] = "B\195\162tons",
+ ["Stealth"] = "Camouflage",
+ ["Stoneclaw Totem"] = "Totem de Griffes de pierre",
+ ["Stoneform"] = "Forme de pierre",
+ ["Stoneskin Totem"] = "Totem de Peau de pierre",
+ ["Stormstrike"] = "Courroux naturel",
+ ["Strength of Earth Totem"] = "Totem de Force de la Terre",
+ ["Stuck"] = "Bloqu\195\169",
+ ["Subtlety"] = "Discr\195\169tion",
+ ["Suffering"] = "Souffrance",
+ ["Summon Charger"] = "Invocation de destrier",
+ ["Summon Dreadsteed"] = "Invocation d'un Destrier de l'Effroi",
+ ["Summon Felhunter"] = "Invocation d'un chasseur corrompu",
+ ["Summon Felsteed"] = "Invocation d'un palefroi corrompu",
+ ["Summon Imp"] = "Invocation d'un diablotin",
+ ["Summon Succubus"] = "Invocation d'une succube",
+ ["Summon Voidwalker"] = "Invocation d'un marcheur du Vide",
+ ["Summon Warhorse"] = "Invocation d'un cheval de guerre",
+ ["Sunder Armor"] = "Fracasser armure",
+ ["Suppression"] = "Suppression",
+ ["Surefooted"] = "Pied s\195\187r",
+ ["Survivalist"] = "Survivant",
+ ["Sweeping Strikes"] = "Attaques circulaires",
+ ["Swiftmend"] = "Prompte guérison",
+ ["Swipe"] = "Balayage",
+ ["Sword Specialization"] = "Sp\195\169cialisation Ep\195\169e",
+ ["Tactical Mastery"] = "Ma\195\174trise tactique",
+ ["Tailoring"] = "Couture",
+ ["Tainted Blood"] = "Corruption sanguine",
+ ["Tame Beast"] = "Dompte une b\195\170te",
+ ["Tamed Pet Passive"] = "Familier dompt\195\169",
+ ["Taunt"] = "Provocation",
+ ["Teleport: Darnassus"] = "T\195\169l\195\169portation : Darnassus",
+ ["Teleport: Ironforge"] = "T\195\169l\195\169portation : Ironforge",
+ ["Teleport: Moonglade"] = "T\195\169l\195\169portation : Reflet-de-Lune",
+ ["Teleport: Orgrimmar"] = "T\195\169l\195\169portation : Orgrimmar",
+ ["Teleport: Stormwind"] = "T\195\169l\195\169portation : Stormwind",
+ ["Teleport: Thunder Bluff"] = "T\195\169l\195\169portation : Thunder Bluff",
+ ["Teleport: Undercity"] = "T\195\169l\195\169portation : Undercity",
+ ["The Human Spirit"] = "L'esprit humain",
+ ["Thick Hide"] = "Peau \195\169paisse",
+ ["Thorns"] = "Epines",
+ ["Throw"] = "Lancer",
+ ["Throwing Specialization"] = "Sp\195\169cialisation Armes de jet",
+ ["Throwing Weapon Specialization"] = "Sp\195\169cialisation Armes de jet",
+ ["Thrown"] = "Armes de jet",
+ ["Thunder Clap"] = "Coup de tonnerre",
+ ["Thundering Strikes"] = "Frappe foudroyante",
+ ["Thunderstomp"] = "Grondeterre",
+ ["Tidal Focus"] = "Focalisation des flots",
+ ["Tidal Mastery"] = "Ma\195\174trise des flots",
+ ["Tiger Riding"] = "Monte de tigre",
+ ["Tiger's Fury"] = "Fureur du tigre",
+ ["Torment"] = "Tourment",
+ ["Totem"] = "Totem",
+ ["Totemic Focus"] = "Focalisation tot\195\169mique",
+ ["Touch of Weakness"] = "Toucher de faiblesse",
+ ["Toughness"] = "R\195\169sistance",
+ ["Track Beasts"] = "Pistage des b\195\170tes",
+ ["Track Demons"] = "Pistage des d\195\169mons",
+ ["Track Dragonkin"] = "Pistage des draconiens",
+ ["Track Elementals"] = "Pistage des \195\169l\195\169mentaires",
+ ["Track Giants"] = "Pistage des g\195\169ants",
+ ["Track Hidden"] = "Pistage des camoufl\195\169s",
+ ["Track Humanoids"] = "Pistage des humano\195\175des",
+ ["Track Undead"] = "Pistage des morts-vivants",
+ ["Tranquil Air Totem"] = "Totem de Tranquillit\195\169 de l'air",
+ ["Tranquil Spirit"] = "Tranquillit\195\169 de l'esprit",
+ ["Tranquility"] = "Tranquillit\195\169",
+ ["Tranquilizing Shot"] = "Tir tranquillisant",
+ ["Trap Mastery"] = "Ma\195\174trise des pi\195\168ges",
+ ["Travel Form"] = "Forme de voyage",
+ ["Tremor Totem"] = "Totem de S\195\169isme",
+ ["Tribal Leatherworking"] = "Travail du cuir tribal",
+ ["Trueshot Aura"] = "Aura de pr\195\169cision",
+ ["Turn Undead"] = "Renvoi des morts-vivants",
+ ["Two-Handed Axes and Maces"] = "Haches et masses \195\160 deux mains",
+ ["Two-Handed Axes"] = "Haches \195\160 deux mains",
+ ["Two-Handed Maces"] = "Masses \195\160 deux mains",
+ ["Two-Handed Swords"] = "Ep\195\169es \195\160 deux mains",
+ ["Two-Handed Weapon Specialization"] = "Sp\195\169cialisation Arme 2M",
+ ["Unarmed"] = "Mains nues",
+ ["Unbreakable Will"] = "Volont\195\169 inflexible",
+ ["Unbridled Wrath Effect"] = "Effet Col\195\168re d\195\169cha\195\174n\195\169e",
+ ["Unbridled Wrath"] = "Col\195\168re d\195\169cha\195\174n\195\169e",
+ ["Undead Horsemanship"] = "Monte de cheval squelette",
+ ["Underwater Breathing"] = "Respiration aquatique",
+ ["Unending Breath"] = "Respiration interminable",
+ ["Unholy Power"] = "Puissance impie",
+ ["Unleashed Fury"] = "Fureur lib\195\169r\195\169e",
+ ["Unyielding Faith"] = "Foi inflexible",
+ ["Vampiric Embrace"] = "Etreinte vampirique",
+ ["Vanish"] = "Disparition",
+ ["Vanished"] = "Invisible",
+ ["Vengeance"] = "Vengeance",
+ ["Vigor"] = "Vigueur",
+ ["Vile Poisons"] = "Poisons abominables",
+ ["Vindication"] = "Justification",
+ ["Viper Sting"] = "Morsure de vip\195\168re",
+ ["Volley"] = "Salve",
+ ["Wand Specialization"] = "Sp\195\169cialisation Baguette",
+ ["Wands"] = "Baguettes",
+ ["War Stomp"] = "Choc martial",
+ ["Water Breathing"] = "Respiration aquatique",
+ ["Water Walking"] = "Marcher sur l\226\128\153eau",
+ ["Weakened Soul"] = "Ame affaiblie",
+ ["Weaponsmith"] = "Fabricant d'armes",
+ ["Whirlwind"] = "Tourbillon",
+ ["Will of the Forsaken"] = "Volont\195\169 des R\195\169prouv\195\169s",
+ ["Windfury Totem"] = "Totem Furie-des-vents",
+ ["Windfury Weapon"] = "Arme Furie-des-vents",
+ ["Windwall Totem"] = "Totem de Mur des vents",
+ ["Wing Clip"] = "Coupure d'ailes",
+ ["Winter's Chill"] = "Froid hivernal",
+ ["Wisp Spirit"] = "Esprit feu follet",
+ ["Wolf Riding"] = "Monte de loup",
+ ["Wound Poison II"] = "Poison douloureux II",
+ ["Wound Poison III"] = "Poison douloureux III",
+ ["Wound Poison IV"] = "Poison douloureux IV",
+ ["Wound Poison"] = "Poison douloureux",
+ ["Wrath"] = "Col\195\168re",
+ ["Wyvern Sting"] = "Piq\195\187re de wyverne"
+ }
+end)
+
+local spellIcons = {
+ ["Abolish Disease"] = "Spell_Nature_NullifyDisease",
+ ["Abolish Poison Effect"] = "Spell_Nature_NullifyPoison_02",
+ ["Abolish Poison"] = "Spell_Nature_NullifyPoison_02",
+ ["Activate MG Turret"] = "INV_Weapon_Rifle_10",
+ ["Adrenaline Rush"] = "Spell_Shadow_ShadowWordDominate",
+ ["Aftermath"] = "Spell_Fire_Fire",
+ ["Aggression"] = "Ability_Racial_Avatar",
+ ["Aimed Shot"] = "INV_Spear_07",
+ ["Alchemy"] = "Trade_Alchemy",
+ ["Ambush"] = "Ability_Rogue_Ambush",
+ ["Amplify Curse"] = "Spell_Shadow_Contagion",
+ ["Amplify Magic"] = "Spell_Holy_FlashHeal",
+ ["Ancestral Healing"] = "Spell_Nature_UndyingStrength",
+ ["Ancestral Knowledge"] = "Spell_Shadow_GrimWard",
+ ["Ancestral Spirit"] = "Spell_Nature_Regenerate",
+ ["Anger Management"] = "Spell_Holy_BlessingOfStamina",
+ ["Anticipation"] = "Spell_Nature_MirrorImage",
+ ["Aquatic Form"] = "Ability_Druid_AquaticForm",
+ ["Arcane Brilliance"] = "Spell_Holy_ArcaneIntellect",
+ ["Arcane Concentration"] = "Spell_Shadow_ManaBurn",
+ ["Arcane Explosion"] = "Spell_Nature_WispSplode",
+ ["Arcane Focus"] = "Spell_Holy_Devotion",
+ ["Arcane Instability"] = "Spell_Shadow_Teleport",
+ ["Arcane Intellect"] = "Spell_Holy_MagicalSentry",
+ ["Arcane Meditation"] = "Spell_Shadow_SiphonMana",
+ ["Arcane Mind"] = "Spell_Shadow_Charm",
+ ["Arcane Missiles"] = "Spell_Nature_StarFall",
+ ["Arcane Power"] = "Spell_Nature_Lightning",
+ ["Arcane Resistance"] = "Spell_Nature_StarFall",
+ ["Arcane Shot"] = "Ability_ImpalingBolt",
+ ["Arcane Subtlety"] = "Spell_Holy_DispelMagic",
+ ["Arctic Reach"] = "Spell_Shadow_DarkRitual",
+ ["Aspect of the Beast"] = "Ability_Mount_PinkTiger",
+ ["Aspect of the Cheetah"] = "Ability_Mount_JungleTiger",
+ ["Aspect of the Hawk"] = "Spell_Nature_RavenForm",
+ ["Aspect of the Monkey"] = "Ability_Hunter_AspectOfTheMonkey",
+ ["Aspect of the Pack"] = "Ability_Mount_WhiteTiger",
+ ["Aspect of the Wild"] = "Spell_Nature_ProtectionformNature",
+ ["Astral Recall"] = "Spell_Nature_AstralRecal",
+ ["Attack"] = "Temp",
+ ["Attacking"] = "Temp",
+ ["Auto Shot"] = "Ability_Whirlwind",
+ ["Axe Specialization"] = "INV_Axe_06",
+ ["Backstab"] = "Ability_BackStab",
+ ["Bane"] = "Spell_Shadow_DeathPact",
+ ["Banish"] = "Spell_Shadow_Cripple",
+ ["Barkskin Effect"] = "Spell_Nature_StoneClawTotem",
+ ["Barkskin"] = "Spell_Nature_StoneClawTotem",
+ ["Barrage"] = "Ability_UpgradeMoonGlaive",
+ ["Bash"] = "Ability_Druid_Bash",
+ ["Basic Campfire"] = "Spell_Fire_Fire",
+ ["Battle Shout"] = "Ability_Warrior_BattleShout",
+ ["Battle Stance Passive"] = "Ability_Warrior_OffensiveStance",
+ ["Battle Stance"] = "Ability_Warrior_OffensiveStance",
+ ["Bear Form"] = "Ability_Racial_BearForm",
+ ["Beast Lore"] = "Ability_Physical_Taunt",
+ ["Beast Slaying"] = "INV_Misc_Pelt_Bear_Ruin_02",
+ ["Beast Training"] = "Ability_Hunter_BeastCall02",
+ ["Benediction"] = "Spell_Frost_WindWalkOn",
+ ["Berserker Rage"] = "Spell_Nature_AncestralGuardian",
+ ["Berserker Stance Passive"] = "Ability_Racial_Avatar",
+ ["Berserker Stance"] = "Ability_Racial_Avatar",
+ ["Berserking"] = "Racial_Troll_Berserk",
+ ["Bestial Discipline"] = "Spell_Nature_AbolishMagic",
+ ["Bestial Swiftness"] = "Ability_Druid_Dash",
+ ["Bestial Wrath"] = "Ability_Druid_FerociousBite",
+ ["Bite"] = "Ability_Racial_Cannibalize",
+ ["Black Arrow"] = "Ability_TheBlackArrow",
+ ["Blackout"] = "Spell_Shadow_GatherShadows",
+ ["Blacksmithing"] = "Trade_BlackSmithing",
+ ["Blade Flurry"] = "Ability_Warrior_PunishingBlow",
+ ["Blast Wave"] = "Spell_Holy_Excorcism_02",
+ ["Blessed Recovery"] = "Spell_Holy_BlessedRecovery",
+ ["Blessing of Freedom"] = "Spell_Holy_SealOfValor",
+ ["Blessing of Kings"] = "Spell_Magic_MageArmor",
+ ["Blessing of Light"] = "Spell_Holy_PrayerOfHealing02",
+ ["Blessing of Might"] = "Spell_Holy_FistOfJustice",
+ ["Blessing of Protection"] = "Spell_Holy_SealOfProtection",
+ ["Blessing of Sacrifice"] = "Spell_Holy_SealOfSacrifice",
+ ["Blessing of Salvation"] = "Spell_Holy_SealOfSalvation",
+ ["Blessing of Sanctuary"] = "Spell_Nature_LightningShield",
+ ["Blessing of Wisdom"] = "Spell_Holy_SealOfWisdom",
+ ["Blind"] = "Spell_Shadow_MindSteal",
+ ["Blinding Powder"] = "INV_Misc_Ammo_Gunpowder_02",
+ ["Blink"] = "Spell_Arcane_Blink",
+ ["Blizzard"] = "Spell_Frost_IceStorm",
+ ["Block"] = "Ability_Defend",
+ ["Blood Craze"] = "Spell_Shadow_SummonImp",
+ ["Blood Frenzy"] = "Ability_GhoulFrenzy",
+ ["Blood Fury"] = "Racial_Orc_BerserkerStrength",
+ ["Blood Pact"] = "Spell_Shadow_BloodBoil",
+ ["Bloodrage"] = "Ability_Racial_BloodRage",
+ ["Bloodthirst"] = "Spell_Nature_BloodLust",
+ ["Booming Voice"] = "Spell_Nature_Purge",
+ ["Bow Specialization"] = "INV_Weapon_Bow_12",
+ ["Bows"] = "INV_Weapon_Bow_05",
+ ["Bright Campfire"] = "Spell_Fire_Fire",
+ ["Brutal Impact"] = "Ability_Druid_Bash",
+ ["Burning Soul"] = "Spell_Fire_Fire",
+ ["Call Pet"] = "Ability_Hunter_BeastCall",
+ ["Call of Flame"] = "Spell_Fire_Immolation",
+ ["Call of Thunder"] = "Spell_Nature_CallStorm",
+ ["Camouflage"] = "Ability_Stealth",
+ ["Cannibalize"] = "Ability_Racial_Cannibalize",
+ ["Cat Form"] = "Ability_Druid_CatForm",
+ ["Cataclysm"] = "Spell_Fire_WindsofWoe",
+ ["Chain Heal"] = "Spell_Nature_HealingWaveGreater",
+ ["Chain Lightning"] = "Spell_Nature_ChainLightning",
+ ["Challenging Roar"] = "Ability_Druid_ChallangingRoar",
+ ["Challenging Shout"] = "Ability_BullRush",
+ ["Charge Rage Bonus Effect"] = "Ability_Warrior_Charge",
+ ["Charge"] = "Ability_Warrior_Charge",
+ ["Cheap Shot"] = "Ability_CheapShot",
+ ["Chilled"] = "Spell_Frost_IceStorm",
+ ["Claw"] = "Ability_Druid_Rake",
+ ["Cleanse"] = "Spell_Holy_Renew",
+ ["Clearcasting"] = "Spell_Shadow_ManaBurn",
+ ["Cleave"] = "Ability_Warrior_Cleave",
+ ["Clever Traps"] = "Spell_Nature_TimeStop",
+ ["Closing"] = "Temp",
+ ["Cloth"] = "INV_Chest_Cloth_21",
+ ["Cobra Reflexes"] = "Spell_Nature_GuardianWard",
+ ["Cold Blood"] = "Spell_Ice_Lament",
+ ["Cold Snap"] = "Spell_Frost_WizardMark",
+ ["Combat Endurance"] = "Spell_Nature_AncestralGuardian",
+ ["Combustion"] = "Spell_Fire_SealOfFire",
+ ["Command"] = "Ability_Warrior_WarCry",
+ ["Concentration Aura"] = "Spell_Holy_MindSooth",
+ ["Concussion Blow"] = "Ability_ThunderBolt",
+ ["Concussion"] = "Spell_Fire_Fireball",
+ ["Concussive Shot"] = "Spell_Frost_Stun",
+ ["Cone of Cold"] = "Spell_Frost_Glacier",
+ ["Conflagrate"] = "Spell_Fire_Fireball",
+ ["Conjure Food"] = "INV_Misc_Food_10",
+ ["Conjure Mana Agate"] = "INV_Misc_Gem_Emerald_01",
+ ["Conjure Mana Citrine"] = "INV_Misc_Gem_Opal_01",
+ ["Conjure Mana Jade"] = "INV_Misc_Gem_Emerald_02",
+ ["Conjure Mana Ruby"] = "INV_Misc_Gem_Ruby_01",
+ ["Conjure Water"] = "INV_Drink_06",
+ ["Consecration"] = "Spell_Holy_InnerFire",
+ ["Consume Shadows"] = "Spell_Shadow_AntiShadow",
+ ["Convection"] = "Spell_Nature_WispSplode",
+ ["Conviction"] = "Spell_Holy_RetributionAura",
+ ["Cooking"] = "INV_Misc_Food_15",
+ ["Corruption"] = "Spell_Shadow_AbominationExplosion",
+ ["Counterattack"] = "Ability_Warrior_Challange",
+ ["Counterspell"] = "Spell_Frost_IceShock",
+ ["Cower"] = "Ability_Druid_Cower",
+ ["Create Firestone (Lesser)"]="INV_Ammo_FireTar",
+ ["Create Firestone"]="INV_Ammo_FireTar",
+ ["Create Firestone (Greater)"]="INV_Ammo_FireTar",
+ ["Create Firestone (Major)"]="INV_Ammo_FireTar",
+ ["Create Healthstone (Minor)"]="INV_Stone_04",
+ ["Create Healthstone (Lesser)"]="INV_Stone_04",
+ ["Create Healthstone"]="INV_Stone_04",
+ ["Create Healthstone (Greater)"]="INV_Stone_04",
+ ["Create Healthstone (Major)"]="INV_Stone_04",
+ ["Create Soulstone (Minor)"]="Spell_Shadow_SoulGem",
+ ["Create Soulstone (Lesser)"]="Spell_Shadow_SoulGem",
+ ["Create Soulstone"]="Spell_Shadow_SoulGem",
+ ["Create Soulstone (Greater)"]="Spell_Shadow_SoulGem",
+ ["Create Soulstone (Major)"]="Spell_Shadow_SoulGem",
+ ["Create Spellstone"]="INV_Misc_Gem_Sapphire_01",
+ ["Create Spellstone (Greater)"]="INV_Misc_Gem_Sapphire_01",
+ ["Create Spellstone (Major)"]="INV_Misc_Gem_Sapphire_01",
+ ["Crippling Poison II"] = "Ability_PoisonSting",
+ ["Crippling Poison"] = "Ability_PoisonSting",
+ ["Critical Mass"] = "Spell_Nature_WispHeal",
+ ["Crossbows"] = "INV_Weapon_Crossbow_01",
+ ["Cruelty"] = "Ability_Rogue_Eviscerate",
+ ["Cultivation"] = "INV_Misc_Flower_01",
+ ["Cure Disease"] = "Spell_Holy_NullifyDisease",
+ ["Cure Poison"] = "Spell_Nature_NullifyPoison",
+ ["Curse of Agony"] = "Spell_Shadow_CurseOfSargeras",
+ ["Curse of Doom Effect"] = "Spell_Shadow_AuraOfDarkness",
+ ["Curse of Doom"] = "Spell_Shadow_AuraOfDarkness",
+ ["Curse of Exhaustion"] = "Spell_Shadow_GrimWard",
+ ["Curse of Idiocy"] = "Spell_Shadow_MindRot",
+ ["Curse of Recklessness"] = "Spell_Shadow_UnholyStrength",
+ ["Curse of Shadow"] = "Spell_Shadow_CurseOfAchimonde",
+ ["Curse of Tongues"] = "Spell_Shadow_CurseOfTounges",
+ ["Curse of Weakness"] = "Spell_Shadow_CurseOfMannoroth",
+ ["Curse of the Elements"] = "Spell_Shadow_ChillTouch",
+ ["Dagger Specialization"] = "INV_Weapon_ShortBlade_05",
+ ["Daggers"] = "Ability_SteelMelee",
+ ["Dampen Magic"] = "Spell_Nature_AbolishMagic",
+ ["Dark Pact"] = "Spell_Shadow_DarkRitual",
+ ["Darkness"] = "Spell_Shadow_Twilight",
+ ["Dash"] = "Ability_Druid_Dash",
+ ["Deadly Poison II"] = "Ability_Rogue_DualWeild",
+ ["Deadly Poison III"] = "Ability_Rogue_DualWeild",
+ ["Deadly Poison IV"] = "Ability_Rogue_DualWeild",
+ ["Deadly Poison V"] = "Ability_Rogue_DualWeild",
+ ["Deadly Poison"] = "Ability_Rogue_DualWeild",
+ ["Death Coil"] = "Spell_Shadow_DeathCoil",
+ ["Death Wish"] = "Spell_Shadow_DeathPact",
+ ["Deep Wounds"] = "Ability_BackStab",
+ ["Defense"] = "Ability_Racial_ShadowMeld",
+ ["Defensive Stance Passive"] = "Ability_Warrior_DefensiveStance",
+ ["Defensive Stance"] = "Ability_Warrior_DefensiveStance",
+ ["Defensive State 2"] = "Ability_Defend",
+ ["Defensive State"] = "Ability_Defend",
+ ["Defiance"] = "Ability_Warrior_InnerRage",
+ ["Deflection"] = "Ability_Parry",
+ ["Demon Armor"] = "Spell_Shadow_RagingScream",
+ ["Demon Skin"] = "Spell_Shadow_RagingScream",
+ ["Demonic Embrace"] = "Spell_Shadow_Metamorphosis",
+ ["Demonic Sacrifice"] = "Spell_Shadow_PsychicScream",
+ ["Demoralizing Roar"] = "Ability_Druid_DemoralizingRoar",
+ ["Demoralizing Shout"] = "Ability_Warrior_WarCry",
+ ["Desperate Prayer"] = "Spell_Holy_Restoration",
+ ["Destructive Reach"] = "Spell_Shadow_CorpseExplode",
+ ["Detect Greater Invisibility"] = "Spell_Shadow_DetectInvisibility",
+ ["Detect Invisibility"] = "Spell_Shadow_DetectInvisibility",
+ ["Detect Lesser Invisibility"] = "Spell_Shadow_DetectLesserInvisibility",
+ ["Detect Magic"] = "Spell_Holy_Dizzy",
+ ["Detect Traps"] = "Ability_Spy",
+ ["Detect"] = "Ability_Hibernation",
+ ["Deterrence"] = "Ability_Whirlwind",
+ ["Devastation"] = "Spell_Fire_FlameShock",
+ ["Devotion Aura"] = "Spell_Holy_DevotionAura",
+ ["Devour Magic Effect"] = "Spell_Nature_Purge",
+ ["Devour Magic"] = "Spell_Nature_Purge",
+ ["Devouring Plague"] = "Spell_Shadow_BlackPlague",
+ ["Diplomacy"] = "INV_Misc_Note_02",
+ ["Dire Bear Form"] = "Ability_Racial_BearForm",
+ ["Disarm Trap"] = "Spell_Shadow_GrimWard",
+ ["Disarm"] = "Ability_Warrior_Disarm",
+ ["Disease Cleansing Totem"] = "Spell_Nature_DiseaseCleansingTotem",
+ ["Disenchant"] = "Spell_Holy_RemoveCurse",
+ ["Disengage"] = "Ability_Rogue_Feint",
+ ["Dismiss Pet"] = "Spell_Nature_SpiritWolf",
+ ["Dispel Magic"] = "Spell_Holy_DispelMagic",
+ ["Distract"] = "Ability_Rogue_Distract",
+ ["Distracting Shot"] = "Spell_Arcane_Blink",
+ ["Dive"] = "Spell_Shadow_BurningSpirit",
+ ["Divine Favor"] = "Spell_Holy_Heal",
+ ["Divine Fury"] = "Spell_Holy_SealOfWrath",
+ ["Divine Intellect"] = "Spell_Nature_Sleep",
+ ["Divine Intervention"] = "Spell_Nature_TimeStop",
+ ["Divine Protection"] = "Spell_Holy_Restoration",
+ ["Divine Shield"] = "Spell_Holy_DivineIntervention",
+ ["Divine Spirit"] = "Spell_Holy_DivineSpirit",
+ ["Divine Strength"] = "Ability_GolemThunderClap",
+ ["Dodge"] = "Spell_Nature_Invisibilty",
+ ["Drain Life"] = "Spell_Shadow_LifeDrain02",
+ ["Drain Mana"] = "Spell_Shadow_SiphonMana",
+ ["Drain Soul"] = "Spell_Shadow_Haunting",
+ ["Dual Wield Specialization"] = "Ability_DualWield",
+ ["Dual Wield"] = "Ability_DualWield",
+ ["Duel"] = "Temp",
+ ["Eagle Eye"] = "Ability_Hunter_EagleEye",
+ ["Earth Shock"] = "Spell_Nature_EarthShock",
+ ["Earthbind Totem"] = "Spell_Nature_StrengthOfEarthTotem02",
+ ["Efficiency"] = "Spell_Frost_WizardMark",
+ ["Elemental Focus"] = "Spell_Shadow_ManaBurn",
+ ["Elemental Fury"] = "Spell_Fire_Volcano",
+ ["Elemental Mastery"] = "Spell_Nature_WispHeal",
+ ["Elune's Grace"] = "Spell_Holy_ElunesGrace",
+ ["Elusiveness"] = "Spell_Magic_LesserInvisibilty",
+ ["Emberstorm"] = "Spell_Fire_SelfDestruct",
+ ["Enchanting"] = "Trade_Engraving",
+ ["Endurance Training"] = "Spell_Nature_Reincarnation",
+ ["Endurance"] = "Spell_Nature_UnyeildingStamina",
+ ["Engineering Specialization"] = "INV_Misc_Gear_01",
+ ["Engineering"] = "Trade_Engineering",
+ ["Enrage"] = "Ability_Druid_Enrage",
+ ["Enslave Demon"] = "Spell_Shadow_EnslaveDemon",
+ ["Entangling Roots"] = "Spell_Nature_StrangleVines",
+ ["Entrapment"] = "Spell_Nature_StrangleVines",
+ ["Escape Artist"] = "Ability_Rogue_Trip",
+ ["Evasion"] = "Spell_Shadow_ShadowWard",
+ ["Eventide"] = "Spell_Frost_Stun",
+ ["Eviscerate"] = "Ability_Rogue_Eviscerate",
+ ["Evocation"] = "Spell_Nature_Purge",
+ ["Execute"] = "INV_Sword_48",
+ ["Exorcism"] = "Spell_Holy_Excorcism_02",
+ ["Expansive Mind"] = "INV_Enchant_EssenceEternalLarge",
+ ["Explosive Trap Effect"] = "Spell_Fire_SelfDestruct",
+ ["Explosive Trap"] = "Spell_Fire_SelfDestruct",
+ ["Expose Armor"] = "Ability_Warrior_Riposte",
+ ["Eye for an Eye"] = "Spell_Holy_EyeforanEye",
+ ["Eye of Kilrogg"] = "Spell_Shadow_EvilEye",
+ ["Eyes of the Beast"] = "Ability_EyeOfTheOwl",
+ ["Fade"] = "Spell_Magic_LesserInvisibilty",
+ ["Faerie Fire"] = "Spell_Nature_FaerieFire",
+ ["Far Sight"] = "Spell_Nature_FarSight",
+ ["Fear Ward"] = "Spell_Holy_Excorcism",
+ ["Fear"] = "Spell_Shadow_Possession",
+ ["Feed Pet"] = "Ability_Hunter_BeastTraining",
+ ["Feedback"] = "Spell_Shadow_RitualOfSacrifice",
+ ["Feign Death"] = "Ability_Rogue_FeignDeath",
+ ["Feint"] = "Ability_Rogue_Feint",
+ ["Fel Concentration"] = "Spell_Shadow_FingerOfDeath",
+ ["Fel Domination"] = "Spell_Nature_RemoveCurse",
+ ["Fel Intellect"] = "Spell_Holy_MagicalSentry",
+ ["Fel Stamina"] = "Spell_Shadow_AntiShadow",
+ ["Felfire"] = "Spell_Fire_Fireball",
+ ["Feline Grace"] = "INV_Feather_01",
+ ["Feline Swiftness"] = "Spell_Nature_SpiritWolf",
+ ["Feral Aggression"] = "Ability_Druid_DemoralizingRoar",
+ ["Feral Charge"] = "Ability_Hunter_Pet_Bear",
+ ["Feral Instinct"] = "Ability_Ambush",
+ ["Ferocious Bite"] = "Ability_Druid_FerociousBite",
+ ["Ferocity"] = "INV_Misc_MonsterClaw_04",
+ ["Fetish"] = "INV_Misc_Horn_01",
+ ["Find Herbs"] = "INV_Misc_Flower_02",
+ ["Find Minerals"] = "Spell_Nature_Earthquake",
+ ["Find Treasure"] = "Racial_Dwarf_FindTreasure",
+ ["Fire Blast"] = "Spell_Fire_Fireball",
+ ["Fire Nova Totem"] = "Spell_Fire_SealOfFire",
+ ["Fire Power"] = "Spell_Fire_Immolation",
+ ["Fire Resistance Aura"] = "Spell_Fire_SealOfFire",
+ ["Fire Resistance Totem"] = "Spell_FireResistanceTotem_01",
+ ["Fire Resistance"] = "Spell_Fire_FireArmor",
+ ["Fire Shield"] = "Spell_Fire_FireArmor",
+ ["Fire Vulnerability"] = "Spell_Fire_SoulBurn",
+ ["Fire Ward"] = "Spell_Fire_FireArmor",
+ ["Fireball"] = "Spell_Fire_FlameBolt",
+ ["Firebolt"] = "Spell_Fire_FireBolt",
+ ["First Aid"] = "Spell_Holy_SealOfSacrifice",
+ ["Fishing Poles"] = "Trade_Fishing",
+ ["Fishing"] = "Trade_Fishing",
+ ["Fist Weapon Specialization"] = "INV_Gauntlets_04",
+ ["Fist Weapons"] = "INV_Gauntlets_04",
+ ["Flame Shock"] = "Spell_Fire_FlameShock",
+ ["Flame Throwing"] = "Spell_Fire_Flare",
+ ["Flamestrike"] = "Spell_Fire_SelfDestruct",
+ ["Flamethrower"] = "Spell_Fire_Incinerate",
+ ["Flametongue Totem"] = "Spell_Nature_GuardianWard",
+ ["Flametongue Weapon"] = "Spell_Fire_FlameTounge",
+ ["Flare"] = "Spell_Fire_Flare",
+ ["Flash Heal"] = "Spell_Holy_FlashHeal",
+ ["Flash of Light"] = "Spell_Holy_FlashHeal",
+ ["Flurry"] = "Ability_GhoulFrenzy",
+ ["Focused Casting"] = "Spell_Arcane_Blink",
+ ["Force of Will"] = "Spell_Nature_SlowingTotem",
+ ["Freezing Trap"] = "Spell_Frost_ChainsOfIce",
+ ["Frenzied Regeneration"] = "Ability_BullRush",
+ ["Frenzy"] = "INV_Misc_MonsterClaw_03",
+ ["Frost Armor"] = "Spell_Frost_FrostArmor02",
+ ["Frost Channeling"] = "Spell_Frost_Stun",
+ ["Frost Nova"] = "Spell_Frost_FrostNova",
+ ["Frost Resistance Aura"] = "Spell_Frost_WizardMark",
+ ["Frost Resistance Totem"] = "Spell_FrostResistanceTotem_01",
+ ["Frost Resistance"] = "Spell_Frost_FrostWard",
+ ["Frost Shock"] = "Spell_Frost_FrostShock",
+ ["Frost Trap"] = "Spell_Frost_FreezingBreath",
+ ["Frost Ward"] = "Spell_Frost_FrostWard",
+ ["Frostbite"] = "Spell_Frost_FrostArmor",
+ ["Frostbolt"] = "Spell_Frost_FrostBolt02",
+ ["Frostbrand Weapon"] = "Spell_Frost_FrostBrand",
+ ["Furious Howl"] = "Ability_Hunter_Pet_Wolf",
+ ["Furor"] = "Spell_Holy_BlessingOfStamina",
+ ["Garrote"] = "Ability_Rogue_Garrote",
+ ["Generic"] = "INV_Shield_09",
+ ["Ghost Wolf"] = "Spell_Nature_SpiritWolf",
+ ["Ghostly Strike"] = "Spell_Shadow_Curse",
+ ["Gift of Nature"] = "Spell_Nature_ProtectionformNature",
+ ["Gift of the Wild"] = "Spell_Nature_Regeneration",
+ ["Gouge"] = "Ability_Gouge",
+ ["Grace of Air Totem"] = "Spell_Nature_InvisibilityTotem",
+ ["Great Stamina"] = "Spell_Nature_UnyeildingStamina",
+ ["Greater Blessing of Kings"] = "Spell_Magic_GreaterBlessingofKings",
+ ["Greater Blessing of Light"] = "Spell_Holy_GreaterBlessingofLight",
+ ["Greater Blessing of Might"] = "Spell_Holy_GreaterBlessingofKings",
+ ["Greater Blessing of Salvation"] = "Spell_Holy_GreaterBlessingofSalvation",
+ ["Greater Blessing of Sanctuary"] = "Spell_Holy_GreaterBlessingofSanctuary",
+ ["Greater Blessing of Wisdom"] = "Spell_Holy_GreaterBlessingofWisdom",
+ ["Greater Heal"] = "Spell_Holy_GreaterHeal",
+ ["Grim Reach"] = "Spell_Shadow_CallofBone",
+ ["Grounding Totem"] = "Spell_Nature_GroundingTotem",
+ ["Grovel"] = "Temp",
+ ["Growl"] = "Ability_Physical_Taunt",
+ ["Guardian's Favor"] = "Spell_Holy_SealOfProtection",
+ ["Gun Specialization"] = "INV_Musket_03",
+ ["Guns"] = "INV_Weapon_Rifle_01",
+ ["Hammer of Justice"] = "Spell_Holy_SealOfMight",
+ ["Hand of Justice"] = "INV_Jewelry_Talisman_01",
+ ["Hammer of Wrath"] = "Ability_ThunderClap",
+ ["Hamstring"] = "Ability_ShockWave",
+ ["Harass"] = "Ability_Hunter_Harass",
+ ["Hardiness"] = "INV_Helmet_23",
+ ["Hawk Eye"] = "Ability_TownWatch",
+ ["Heal"] = "Spell_Holy_Heal",
+ ["Healing Focus"] = "Spell_Holy_HealingFocus",
+ ["Healing Light"] = "Spell_Holy_HolyBolt",
+ ["Healing Stream Totem"] = "INV_Spear_04",
+ ["Healing Touch"] = "Spell_Nature_HealingTouch",
+ ["Healing Wave"] = "Spell_Nature_MagicImmunity",
+ ["Health Funnel"] = "Spell_Shadow_LifeDrain",
+ ["Heart of the Wild"] = "Spell_Holy_BlessingOfAgility",
+ ["Hellfire Effect"] = "Spell_Fire_Incinerate",
+ ["Hellfire"] = "Spell_Fire_Incinerate",
+ ["Hemorrhage"] = "Spell_Shadow_LifeDrain",
+ ["Herbalism"] = "Spell_Nature_NatureTouchGrow",
+ ["Herb Gathering"] = "Spell_Nature_NatureTouchGrow",
+ ["Heroic Strike"] = "Ability_Rogue_Ambush",
+ ["Hex of Weakness"] = "Spell_Shadow_FingerOfDeath",
+ ["Hibernate"] = "Spell_Nature_Sleep",
+ ["Holy Fire"] = "Spell_Holy_SearingLight",
+ ["Holy Light"] = "Spell_Holy_HolyBolt",
+ ["Holy Nova"] = "Spell_Holy_HolyNova",
+ ["Holy Power"] = "Spell_Holy_Power",
+ ["Holy Reach"] = "Spell_Holy_Purify",
+ ["Holy Shield"] = "Spell_Holy_BlessingOfProtection",
+ ["Holy Shock"] = "Spell_Holy_SearingLight",
+ ["Holy Specialization"] = "Spell_Holy_SealOfSalvation",
+ ["Holy Wrath"] = "Spell_Holy_Excorcism",
+ ["Honorless Target"] = "Spell_Magic_LesserInvisibilty",
+ ["Horse Riding"] = "Spell_Nature_Swiftness",
+ ["Howl of Terror"] = "Spell_Shadow_DeathScream",
+ ["Humanoid Slaying"] = "Spell_Holy_PrayerOfHealing",
+ ["Hunter's Mark"] = "Ability_Hunter_SniperShot",
+ ["Hurricane"] = "Spell_Nature_Cyclone",
+ ["Ice Armor"] = "Spell_Frost_FrostArmor02",
+ ["Ice Barrier"] = "Spell_Ice_Lament",
+ ["Ice Block"] = "Spell_Frost_Frost",
+ ["Ice Shards"] = "Spell_Frost_IceShard",
+ ["Ignite"] = "Spell_Fire_Incinerate",
+ ["Illumination"] = "Spell_Holy_GreaterHeal",
+ ["Immolate"] = "Spell_Fire_Immolation",
+ ["Immolation Trap Effect"] = "Spell_Fire_FlameShock",
+ ["Immolation Trap"] = "Spell_Fire_FlameShock",
+ ["Impact"] = "Spell_Fire_MeteorStorm",
+ ["Impale"] = "Ability_SearingArrow",
+ ["Improved Ambush"] = "Ability_Rogue_Ambush",
+ ["Improved Arcane Explosion"] = "Spell_Nature_WispSplode",
+ ["Improved Arcane Missiles"] = "Spell_Nature_StarFall",
+ ["Improved Arcane Shot"] = "Ability_ImpalingBolt",
+ ["Improved Aspect of the Hawk"] = "Spell_Nature_RavenForm",
+ ["Improved Aspect of the Monkey"] = "Ability_Hunter_AspectOfTheMonkey",
+ ["Improved Backstab"] = "Ability_BackStab",
+ ["Improved Battle Shout"] = "Ability_Warrior_BattleShout",
+ ["Improved Berserker Rage"] = "Spell_Nature_AncestralGuardian",
+ ["Improved Blessing of Might"] = "Spell_Holy_FistOfJustice",
+ ["Improved Blessing of Wisdom"] = "Spell_Holy_SealOfWisdom",
+ ["Improved Blizzard"] = "Spell_Frost_IceStorm",
+ ["Improved Bloodrage"] = "Ability_Racial_BloodRage",
+ ["Improved Chain Heal"] = "Spell_Nature_HealingWaveGreater",
+ ["Improved Chain Lightning"] = "Spell_Nature_ChainLightning",
+ ["Improved Challenging Shout"] = "Ability_Warrior_Challange",
+ ["Improved Charge"] = "Ability_Warrior_Charge",
+ ["Improved Cheap Shot"] = "Ability_CheapShot",
+ ["Improved Cleave"] = "Ability_Warrior_Cleave",
+ ["Improved Concentration Aura"] = "Spell_Holy_MindSooth",
+ ["Improved Concussive Shot"] = "Spell_Frost_Stun",
+ ["Improved Cone of Cold"] = "Spell_Frost_Glacier",
+ ["Improved Corruption"] = "Spell_Shadow_AbominationExplosion",
+ ["Improved Counterspell"] = "Spell_Frost_IceShock",
+ ["Improved Curse of Agony"] = "Spell_Shadow_CurseOfSargeras",
+ ["Improved Curse of Exhaustion"] = "Spell_Shadow_GrimWard",
+ ["Improved Curse of Weakness"] = "Spell_Shadow_CurseOfMannoroth",
+ ["Improved Dampen Magic"] = "Spell_Nature_AbolishMagic",
+ ["Improved Deadly Poison"] = "Ability_Rogue_DualWeild",
+ ["Improved Demoralizing Shout"] = "Ability_Warrior_WarCry",
+ ["Improved Devotion Aura"] = "Spell_Holy_DevotionAura",
+ ["Improved Disarm"] = "Ability_Warrior_Disarm",
+ ["Improved Distract"] = "Ability_Rogue_Distract",
+ ["Improved Drain Life"] = "Spell_Shadow_LifeDrain02",
+ ["Improved Drain Mana"] = "Spell_Shadow_SiphonMana",
+ ["Improved Drain Soul"] = "Spell_Shadow_Haunting",
+ ["Improved Enrage"] = "Ability_Druid_Enrage",
+ ["Improved Enslave Demon"] = "Spell_Shadow_EnslaveDemon",
+ ["Improved Entangling Roots"] = "Spell_Nature_StrangleVines",
+ ["Improved Evasion"] = "Spell_Shadow_ShadowWard",
+ ["Improved Eviscerate"] = "Ability_Rogue_Eviscerate",
+ ["Improved Execute"] = "INV_Sword_48",
+ ["Improved Expose Armor"] = "Ability_Warrior_Riposte",
+ ["Improved Eyes of the Beast"] = "Ability_EyeOfTheOwl",
+ ["Improved Fade"] = "Spell_Magic_LesserInvisibilty",
+ ["Improved Feign Death"] = "Ability_Rogue_FeignDeath",
+ ["Improved Fire Blast"] = "Spell_Fire_Fireball",
+ ["Improved Fire Nova Totem"] = "Spell_Fire_SealOfFire",
+ ["Improved Fire Ward"] = "Spell_Fire_FireArmor",
+ ["Improved Fireball"] = "Spell_Fire_FlameBolt",
+ ["Improved Firebolt"] = "Spell_Fire_FireBolt",
+ ["Improved Firestone"] = "INV_Ammo_FireTar",
+ ["Improved Flamestrike"] = "Spell_Fire_SelfDestruct",
+ ["Improved Flametongue Weapon"] = "Spell_Fire_FlameTounge",
+ ["Improved Flash of Light"] = "Spell_Holy_FlashHeal",
+ ["Improved Frost Nova"] = "Spell_Frost_FreezingBreath",
+ ["Improved Frost Ward"] = "Spell_Frost_FrostWard",
+ ["Improved Frostbolt"] = "Spell_Frost_FrostBolt02",
+ ["Improved Frostbrand Weapon"] = "Spell_Frost_FrostBrand",
+ ["Improved Garrote"] = "Ability_Rogue_Garrote",
+ ["Improved Ghost Wolf"] = "Spell_Nature_SpiritWolf",
+ ["Improved Gouge"] = "Ability_Gouge",
+ ["Improved Grace of Air Totem"] = "Spell_Nature_InvisibilityTotem",
+ ["Improved Grounding Totem"] = "Spell_Nature_GroundingTotem",
+ ["Improved Hammer of Justice"] = "Spell_Holy_SealOfMight",
+ ["Improved Hamstring"] = "Ability_ShockWave",
+ ["Improved Healing Stream Totem"] = "INV_Spear_04",
+ ["Improved Healing Touch"] = "Spell_Nature_HealingTouch",
+ ["Improved Healing Wave"] = "Spell_Nature_MagicImmunity",
+ ["Improved Healing"] = "Spell_Holy_Heal02",
+ ["Improved Health Funnel"] = "Spell_Shadow_LifeDrain",
+ ["Improved Healthstone"] = "INV_Stone_04",
+ ["Improved Heroic Strike"] = "Ability_Rogue_Ambush",
+ ["Improved Hunter's Mark"] = "Ability_Hunter_SniperShot",
+ ["Improved Immolate"] = "Spell_Fire_Immolation",
+ ["Improved Imp"] = "Spell_Shadow_SummonImp",
+ ["Improved Inner Fire"] = "Spell_Holy_InnerFire",
+ ["Improved Instant Poison"] = "Ability_Poisons",
+ ["Improved Intercept"] = "Ability_Rogue_Sprint",
+ ["Improved Intimidating Shout"] = "Ability_GolemThunderClap",
+ ["Improved Judgement"] = "Spell_Holy_RighteousFury",
+ ["Improved Kick"] = "Ability_Kick",
+ ["Improved Kidney Shot"] = "Ability_Rogue_KidneyShot",
+ ["Improved Lash of Pain"] = "Spell_Shadow_Curse",
+ ["Improved Lay on Hands"] = "Spell_Holy_LayOnHands",
+ ["Improved Lesser Healing Wave"] = "Spell_Nature_HealingWaveLesser",
+ ["Improved Life Tap"] = "Spell_Shadow_BurningSpirit",
+ ["Improved Lightning Bolt"] = "Spell_Nature_Lightning",
+ ["Improved Lightning Shield"] = "Spell_Nature_LightningShield",
+ ["Improved Magma Totem"] = "Spell_Fire_SelfDestruct",
+ ["Improved Mana Burn"] = "Spell_Shadow_ManaBurn",
+ ["Improved Mana Shield"] = "Spell_Shadow_DetectLesserInvisibility",
+ ["Improved Mana Spring Totem"] = "Spell_Nature_ManaRegenTotem",
+ ["Improved Mark of the Wild"] = "Spell_Nature_Regeneration",
+ ["Improved Mend Pet"] = "Ability_Hunter_MendPet",
+ ["Improved Mind Blast"] = "Spell_Shadow_UnholyFrenzy",
+ ["Improved Moonfire"] = "Spell_Nature_StarFall",
+ ["Improved Nature's Grasp"] = "Spell_Nature_NaturesWrath",
+ ["Improved Overpower"] = "INV_Sword_05",
+ ["Improved Power Word: Fortitude"] = "Spell_Holy_WordFortitude",
+ ["Improved Power Word: Shield"] = "Spell_Holy_PowerWordShield",
+ ["Improved Prayer of Healing"] = "Spell_Holy_PrayerOfHealing02",
+ ["Improved Psychic Scream"] = "Spell_Shadow_PsychicScream",
+ ["Improved Pummel"] = "INV_Gauntlets_04",
+ ["Improved Regrowth"] = "Spell_Nature_ResistNature",
+ ["Improved Reincarnation"] = "Spell_Nature_Reincarnation",
+ ["Improved Rejuvenation"] = "Spell_Nature_Rejuvenation",
+ ["Improved Rend"] = "Ability_Gouge",
+ ["Improved Renew"] = "Spell_Holy_Renew",
+ ["Improved Retribution Aura"] = "Spell_Holy_AuraOfLight",
+ ["Improved Revenge"] = "Ability_Warrior_Revenge",
+ ["Improved Revive Pet"] = "Ability_Hunter_BeastSoothe",
+ ["Improved Righteous Fury"] = "Spell_Holy_SealOfFury",
+ ["Improved Rockbiter Weapon"] = "Spell_Nature_RockBiter",
+ ["Improved Rupture"] = "Ability_Rogue_Rupture",
+ ["Improved Sap"] = "Ability_Sap",
+ ["Improved Scorch"] = "Spell_Fire_SoulBurn",
+ ["Improved Scorpid Sting"] = "Ability_Hunter_CriticalShot",
+ ["Improved Seal of Righteousness"] = "Ability_ThunderBolt",
+ ["Improved Seal of the Crusader"] = "Spell_Holy_HolySmite",
+ ["Improved Searing Pain"] = "Spell_Fire_SoulBurn",
+ ["Improved Searing Totem"] = "Spell_Fire_SearingTotem",
+ ["Improved Serpent Sting"] = "Ability_Hunter_Quickshot",
+ ["Improved Shadow Bolt"] = "Spell_Shadow_ShadowBolt",
+ ["Improved Shadow Word: Pain"] = "Spell_Shadow_ShadowWordPain",
+ ["Improved Shield Bash"] = "Ability_Warrior_ShieldBash",
+ ["Improved Shield Block"] = "Ability_Defend",
+ ["Improved Shield Wall"] = "Ability_Warrior_ShieldWall",
+ ["Improved Shred"] = "Spell_Shadow_VampiricAura",
+ ["Improved Sinister Strike"] = "Spell_Shadow_RitualOfSacrifice",
+ ["Improved Slam"] = "Ability_Warrior_DecisiveStrike",
+ ["Improved Slice and Dice"] = "Ability_Rogue_SliceDice",
+ ["Improved Spellstone"] = "INV_Misc_Gem_Sapphire_01",
+ ["Improved Sprint"] = "Ability_Rogue_Sprint",
+ ["Improved Starfire"] = "Spell_Arcane_StarFire",
+ ["Improved Stoneclaw Totem"] = "Spell_Nature_StoneClawTotem",
+ ["Improved Stoneskin Totem"] = "Spell_Nature_StoneSkinTotem",
+ ["Improved Strength of Earth Totem"] = "Spell_Nature_EarthBindTotem",
+ ["Improved Succubus"] = "Spell_Shadow_SummonSuccubus",
+ ["Improved Sunder Armor"] = "Ability_Warrior_Sunder",
+ ["Improved Taunt"] = "Spell_Nature_Reincarnation",
+ ["Improved Thorns"] = "Spell_Nature_Thorns",
+ ["Improved Thunder Clap"] = "Ability_ThunderClap",
+ ["Improved Tranquility"] = "Spell_Nature_Tranquility",
+ ["Improved Vampiric Embrace"] = "Spell_Shadow_ImprovedVampiricEmbrace",
+ ["Improved Vanish"] = "Ability_Vanish",
+ ["Improved Voidwalker"] = "Spell_Shadow_SummonVoidWalker",
+ ["Improved Windfury Weapon"] = "Spell_Nature_Cyclone",
+ ["Improved Wing Clip"] = "Ability_Rogue_Trip",
+ ["Improved Wrath"] = "Spell_Nature_AbolishMagic",
+ ["Incinerate"] = "Spell_Fire_FlameShock",
+ ["Inferno"] = "Spell_Shadow_SummonInfernal",
+ ["Initiative"] = "Spell_Shadow_Fumble",
+ ["Inner Fire"] = "Spell_Holy_InnerFire",
+ ["Inner Focus"] = "Spell_Frost_WindWalkOn",
+ ["Innervate"] = "Spell_Nature_Lightning",
+ ["Insect Swarm"] = "Spell_Nature_InsectSwarm",
+ ["Inspiration"] = "Spell_Holy_LayOnHands",
+ ["Instant Poison II"] = "Ability_Poisons",
+ ["Instant Poison III"] = "Ability_Poisons",
+ ["Instant Poison IV"] = "Ability_Poisons",
+ ["Instant Poison V"] = "Ability_Poisons",
+ ["Instant Poison VI"] = "Ability_Poisons",
+ ["Instant Poison"] = "Ability_Poisons",
+ ["Intensity"] = "Spell_Fire_LavaSpawn",
+ ["Intercept"] = "Ability_Rogue_Sprint",
+ ["Intercept Stun"] = "Ability_Rogue_Sprint",
+ ["Intimidating Shout"] = "Ability_GolemThunderClap",
+ ["Intimidation"] = "Ability_Devour",
+ ["Iron Will"] = "Spell_Magic_MageArmor",
+ ["Judgement of Command"] = "Ability_Warrior_InnerRage",
+ ["Judgement of Justice"] = "Spell_Holy_SealOfWrath",
+ ["Judgement of Light"] = "Spell_Holy_HealingAura",
+ ["Judgement of Righteousness"] = "Spell_Holy_RighteousFury",
+ ["Judgement of Wisdom"] = "Spell_Holy_RighteousnessAura",
+ ["Judgement of the Crusader"] = "Spell_Holy_HolySmite",
+ ["Judgement"] = "Spell_Holy_RighteousFury",
+ ["Kick"] = "Ability_Kick",
+ ["Kidney Shot"] = "Ability_Rogue_KidneyShot",
+ ["Killer Instinct"] = "Spell_Holy_BlessingOfStamina",
+ ["Kodo Riding"] = "Spell_Nature_Swiftness",
+ ["Lash of Pain"] = "Spell_Shadow_Curse",
+ ["Last Stand"] = "Spell_Holy_AshesToAshes",
+ ["Lasting Judgement"] = "Spell_Holy_HealingAura",
+ ["Lay on Hands"] = "Spell_Holy_LayOnHands",
+ ["Leader of the Pack"] = "Spell_Nature_UnyeildingStamina",
+ ["Leather"] = "INV_Chest_Leather_09",
+ ["Leatherworking"] = "INV_Misc_ArmorKit_17",
+ ["Lesser Heal"] = "Spell_Holy_LesserHeal",
+ ["Lesser Healing Wave"] = "Spell_Nature_HealingWaveLesser",
+ ["Lesser Invisibility"] = "Spell_Magic_LesserInvisibilty",
+ ["Lethal Shots"] = "Ability_SearingArrow",
+ ["Lethality"] = "Ability_CriticalStrike",
+ ["Levitate"] = "Spell_Holy_LayOnHands",
+ ["Libram"] = "INV_Misc_Book_11",
+ ["Life Tap"] = "Spell_Shadow_BurningSpirit",
+ ["Lightning Bolt"] = "Spell_Nature_Lightning",
+ ["Lightning Breath"] = "Spell_Nature_Lightning",
+ ["Lightning Mastery"] = "Spell_Lightning_LightningBolt01",
+ ["Lightning Reflexes"] = "Spell_Nature_Invisibilty",
+ ["Lightning Shield"] = "Spell_Nature_LightningShield",
+ ["Lightwell Renew"] = "Spell_Holy_SummonLightwell",
+ ["Lightwell"] = "Spell_Holy_SummonLightwell",
+ ["Long Daze"] = "Spell_Frost_Stun",
+ ["Mace Specialization"] = "INV_Mace_01",
+ ["Mace Stun Effect"] = "Spell_Frost_Stun",
+ ["Mage Armor"] = "Spell_MageArmor",
+ ["Magma Totem"] = "Spell_Fire_SelfDestruct",
+ ["Mail"] = "INV_Chest_Chain_05",
+ ["Malice"] = "Ability_Racial_BloodRage",
+ ["Mana Burn"] = "Spell_Shadow_ManaBurn",
+ ["Mana Shield"] = "Spell_Shadow_DetectLesserInvisibility",
+ ["Mana Spring Totem"] = "Spell_Nature_ManaRegenTotem",
+ ["Mana Tide Totem"] = "Spell_Frost_SummonWaterElemental",
+ ["Mangle"] = "Ability_Druid_Mangle.tga",
+ ["Mark of the Wild"] = "Spell_Nature_Regeneration",
+ ["Martyrdom"] = "Spell_Nature_Tranquility",
+ ["Master Demonologist"] = "Spell_Shadow_ShadowPact",
+ ["Master Summoner"] = "Spell_Shadow_ImpPhaseShift",
+ ["Master of Deception"] = "Spell_Shadow_Charm",
+ ["Maul"] = "Ability_Druid_Maul",
+ ["Mechanostrider Piloting"] = "Spell_Nature_Swiftness",
+ ["Meditation"] = "Spell_Nature_Sleep",
+ ["Melee Specialization"] = "INV_Axe_02",
+ ["Mend Pet"] = "Ability_Hunter_MendPet",
+ ["Mental Agility"] = "Ability_Hibernation",
+ ["Mental Strength"] = "Spell_Nature_EnchantArmor",
+ ["Mind Blast"] = "Spell_Shadow_UnholyFrenzy",
+ ["Mind Control"] = "Spell_Shadow_ShadowWordDominate",
+ ["Mind Flay"] = "Spell_Shadow_SiphonMana",
+ ["Mind Soothe"] = "Spell_Holy_MindSooth",
+ ["Mind Vision"] = "Spell_Holy_MindVision",
+ ["Mind-numbing Poison II"] = "Spell_Nature_NullifyDisease",
+ ["Mind-numbing Poison III"] = "Spell_Nature_NullifyDisease",
+ ["Mind-numbing Poison"] = "Spell_Nature_NullifyDisease",
+ ["Mining"] = "Trade_Mining",
+ ["Mocking Blow"] = "Ability_Warrior_PunishingBlow",
+ ["Mongoose Bite"] = "Ability_Hunter_SwiftStrike",
+ ["Monster Slaying"] = "INV_Misc_Head_Dragon_Black",
+ ["Moonfire"] = "Spell_Nature_StarFall",
+ ["Moonfury"] = "Spell_Nature_MoonGlow",
+ ["Moonglow"] = "Spell_Nature_Sentinal",
+ ["Moonkin Aura"] = "Spell_Nature_MoonGlow",
+ ["Moonkin Form"] = "Spell_Nature_ForceOfNature",
+ ["Mortal Shots"] = "Ability_PierceDamage",
+ ["Mortal Strike"] = "Ability_Warrior_SavageBlow",
+ ["Multi-Shot"] = "Ability_UpgradeMoonGlaive",
+ ["Murder"] = "Spell_Shadow_DeathScream",
+ ["Natural Armor"] = "Spell_Nature_SpiritArmor",
+ ["Natural Shapeshifter"] = "Spell_Nature_WispSplode",
+ ["Natural Weapons"] = "INV_Staff_01",
+ ["Nature Resistance Totem"] = "Spell_Nature_NatureResistanceTotem",
+ ["Nature Resistance"] = "Spell_Nature_ResistNature",
+ ["Nature's Focus"] = "Spell_Nature_HealingWaveGreater",
+ ["Nature's Grace"] = "Spell_Nature_NaturesBlessing",
+ ["Nature's Grasp"] = "Spell_Nature_NaturesWrath",
+ ["Nature's Reach"] = "Spell_Nature_NatureTouchGrow",
+ ["Nature's Swiftness"] = "Spell_Nature_RavenForm",
+ ["Nightfall"] = "Spell_Shadow_Twilight",
+ ["Omen of Clarity"] = "Spell_Nature_CrystalBall",
+ ["One-Handed Axes"] = "INV_Axe_01",
+ ["One-Handed Maces"] = "INV_Mace_01",
+ ["One-Handed Swords"] = "Ability_MeleeDamage",
+ ["One-Handed Weapon Specialization"] = "INV_Sword_20",
+ ["Opening - No Text"] = "Trade_Engineering",
+ ["Opening"] = "Trade_Engineering",
+ ["Opportunity"] = "Ability_Warrior_WarCry",
+ ["Overpower"] = "Ability_MeleeDamage",
+ ["Paranoia"] = "Spell_Shadow_AuraOfDarkness",
+ ["Parry"] = "Ability_Parry",
+ ["Pathfinding"] = "Ability_Mount_JungleTiger",
+ ["Perception"] = "Spell_Nature_Sleep",
+ ["Permafrost"] = "Spell_Frost_Wisp",
+ ["Pet Aggression"] = "Ability_Druid_Maul",
+ ["Pet Hardiness"] = "Ability_BullRush",
+ ["Pet Recovery"] = "Ability_Hibernation",
+ ["Pet Resistance"] = "Spell_Holy_BlessingOfAgility",
+ ["Phase Shift"] = "Spell_Shadow_ImpPhaseShift",
+ ["Pick Lock"] = "Spell_Nature_MoonKey",
+ ["Pick Pocket"] = "INV_Misc_Bag_11",
+ ["Piercing Howl"] = "Spell_Shadow_DeathScream",
+ ["Piercing Ice"] = "Spell_Frost_Frostbolt",
+ ["Plate Mail"] = "INV_Chest_Plate01",
+ ["Poison Cleansing Totem"] = "Spell_Nature_PoisonCleansingTotem",
+ ["Poisons"] = "Trade_BrewPoison",
+ ["Polearm Specialization"] = "INV_Weapon_Halbard_01",
+ ["Polearms"] = "INV_Spear_06",
+ ["Polymorph"] = "Spell_Nature_Polymorph",
+ ["Polymorph: Pig"] = "Spell_Magic_PolymorphPig",
+ ["Polymorph: Turtle"] = "Ability_Hunter_Pet_Turtle",
+ ["Portal: Darnassus"] = "Spell_Arcane_PortalDarnassus",
+ ["Portal: Ironforge"] = "Spell_Arcane_PortalIronForge",
+ ["Portal: Orgrimmar"] = "Spell_Arcane_PortalOrgrimmar",
+ ["Portal: Stormwind"] = "Spell_Arcane_PortalStormWind",
+ ["Portal: Thunder Bluff"] = "Spell_Arcane_PortalThunderBluff",
+ ["Portal: Undercity"] = "Spell_Arcane_PortalUnderCity",
+ ["Pounce Bleed"] = "Ability_Druid_SupriseAttack",
+ ["Pounce"] = "Ability_Druid_SupriseAttack",
+ ["Power Infusion"] = "Spell_Holy_PowerInfusion",
+ ["Power Word: Fortitude"] = "Spell_Holy_WordFortitude",
+ ["Power Word: Shield"] = "Spell_Holy_PowerWordShield",
+ ["Prayer of Fortitude"] = "Spell_Holy_PrayerOfFortitude",
+ ["Prayer of Healing"] = "Spell_Holy_PrayerOfHealing02",
+ ["Prayer of Shadow Protection"] = "Spell_Holy_PrayerofShadowProtection",
+ ["Prayer of Spirit"] = "Spell_Holy_PrayerofSpirit",
+ ["Precision"] = "Ability_Marksmanship",
+ ["Predatory Strikes"] = "Ability_Hunter_Pet_Cat",
+ ["Premeditation"] = "Spell_Shadow_Possession",
+ ["Preparation"] = "Spell_Shadow_AntiShadow",
+ ["Presence of Mind"] = "Spell_Nature_EnchantArmor",
+ ["Primal Fury"] = "Ability_Racial_Cannibalize",
+ ["Prowl"] = "Ability_Druid_SupriseAttack",
+ ["Psychic Scream"] = "Spell_Shadow_PsychicScream",
+ ["Pummel"] = "INV_Gauntlets_04",
+ ["Purge"] = "Spell_Nature_Purge",
+ ["Purification"] = "Spell_Frost_WizardMark",
+ ["Purify"] = "Spell_Holy_Purify",
+ ["Pursuit of Justice"] = "Spell_Holy_PersuitofJustice",
+ ["Pyroblast"] = "Spell_Fire_Fireball02",
+ ["Pyroclasm"] = "Spell_Fire_Volcano",
+ ["Quickness"] = "Ability_Racial_ShadowMeld",
+ ["Rain of Fire"] = "Spell_Shadow_RainOfFire",
+ ["Rake"] = "Ability_Druid_Disembowel",
+ ["Ram Riding"] = "Spell_Nature_Swiftness",
+ ["Ranged Weapon Specialization"] = "INV_Weapon_Rifle_06",
+ ["Rapid Concealment"] = "Ability_Ambush",
+ ["Rapid Fire"] = "Ability_Hunter_RunningShot",
+ ["Raptor Riding"] = "Spell_Nature_Swiftness",
+ ["Raptor Strike"] = "Ability_MeleeDamage",
+ ["Ravage"] = "Ability_Druid_Ravage",
+ ["Readiness"] = "Spell_Nature_Sleep",
+ ["Rebirth"] = "Spell_Nature_Reincarnation",
+ ["Recklessness"] = "Ability_CriticalStrike",
+ ["Reckoning"] = "Spell_Holy_BlessingOfStrength",
+ ["Redemption"] = "Spell_Holy_Resurrection",
+ ["Redoubt"] = "Ability_Defend",
+ ["Reflection"] = "Spell_Frost_WindWalkOn",
+ ["Regeneration"] = "Spell_Nature_Regenerate",
+ ["Regrowth"] = "Spell_Nature_ResistNature",
+ ["Reincarnation"] = "Spell_Nature_Reincarnation",
+ ["Rejuvenation"] = "Spell_Nature_Rejuvenation",
+ ["Relentless Strikes"] = "Ability_Warrior_DecisiveStrike",
+ ["Remorseless Attacks"] = "Ability_FiegnDead",
+ ["Remove Curse"] = "Spell_Holy_RemoveCurse",
+ ["Remove Insignia"] = "Temp",
+ ["Remove Lesser Curse"] = "Spell_Nature_RemoveCurse",
+ ["Rend"] = "Ability_Gouge",
+ ["Renew"] = "Spell_Holy_Renew",
+ ["Repentance"] = "Spell_Holy_PrayerOfHealing",
+ ["Resurrection"] = "Spell_Holy_Resurrection",
+ ["Retaliation"] = "Ability_Warrior_Challange",
+ ["Retribution Aura"] = "Spell_Holy_AuraOfLight",
+ ["Revenge Stun"] = "Ability_Warrior_Revenge",
+ ["Revenge"] = "Ability_Warrior_Revenge",
+ ["Reverberation"] = "Spell_Frost_FrostWard",
+ ["Revive Pet"] = "Ability_Hunter_BeastSoothe",
+ ["Righteous Fury"] = "Spell_Holy_SealOfFury",
+ ["Rip"] = "Ability_GhoulFrenzy",
+ ["Riposte"] = "Ability_Warrior_Challange",
+ ["Ritual of Doom Effect"] = "Spell_Arcane_PortalDarnassus",
+ ["Ritual of Doom"] = "Spell_Shadow_AntiMagicShell",
+ ["Ritual of Summoning"] = "Spell_Shadow_Twilight",
+ ["Rockbiter Weapon"] = "Spell_Nature_RockBiter",
+ ["Rogue Passive"] = "Ability_Stealth",
+ ["Ruin"] = "Spell_Shadow_ShadowWordPain",
+ ["Rupture"] = "Ability_Rogue_Rupture",
+ ["Ruthlessness"] = "Ability_Druid_Disembowel",
+ ["Sacrifice"] = "Spell_Shadow_SacrificialShield",
+ ["Safe Fall"] = "INV_Feather_01",
+ ["Sanctity Aura"] = "Spell_Holy_MindVision",
+ ["Sap"] = "Ability_Sap",
+ ["Savage Fury"] = "Ability_Druid_Ravage",
+ ["Savage Strikes"] = "Ability_Racial_BloodRage",
+ ["Scare Beast"] = "Ability_Druid_Cower",
+ ["Scatter Shot"] = "Ability_GolemStormBolt",
+ ["Scorch"] = "Spell_Fire_SoulBurn",
+ ["Scorpid Poison"] = "Ability_PoisonSting",
+ ["Scorpid Sting"] = "Ability_Hunter_CriticalShot",
+ ["Screech"] = "Ability_Hunter_Pet_Bat",
+ ["Seal Fate"] = "Spell_Shadow_ChillTouch",
+ ["Seal of Command"] = "Ability_Warrior_InnerRage",
+ ["Seal of Justice"] = "Spell_Holy_SealOfWrath",
+ ["Seal of Light"] = "Spell_Holy_HealingAura",
+ ["Seal of Righteousness"] = "Ability_ThunderBolt",
+ ["Seal of Wisdom"] = "Spell_Holy_RighteousnessAura",
+ ["Seal of the Crusader"] = "Spell_Holy_HolySmite",
+ ["Searing Light"] = "Spell_Holy_SearingLightPriest",
+ ["Searing Pain"] = "Spell_Fire_SoulBurn",
+ ["Searing Totem"] = "Spell_Fire_SearingTotem",
+ ["Seduction"] = "Spell_Shadow_MindSteal",
+ ["Sense Demons"] = "Spell_Shadow_Metamorphosis",
+ ["Sense Undead"] = "Spell_Holy_SenseUndead",
+ ["Sentry Totem"] = "Spell_Nature_RemoveCurse",
+ ["Serpent Sting"] = "Ability_Hunter_Quickshot",
+ ["Setup"] = "Spell_Nature_MirrorImage",
+ ["Shackle Undead"] = "Spell_Nature_Slow",
+ ["Shadow Affinity"] = "Spell_Shadow_ShadowWard",
+ ["Shadow Bolt"] = "Spell_Shadow_ShadowBolt",
+ ["Shadow Focus"] = "Spell_Shadow_BurningSpirit",
+ ["Shadow Mastery"] = "Spell_Shadow_ShadeTrueSight",
+ ["Shadow Protection"] = "Spell_Shadow_AntiShadow",
+ ["Shadow Reach"] = "Spell_Shadow_ChillTouch",
+ ["Shadow Resistance Aura"] = "Spell_Shadow_SealOfKings",
+ ["Shadow Resistance"] = "Spell_Shadow_AntiShadow",
+ ["Shadow Trance"] = "Spell_Shadow_Twilight",
+ ["Shadow Ward"] = "Spell_Shadow_AntiShadow",
+ ["Shadow Weaving"] = "Spell_Shadow_BlackPlague",
+ ["Shadow Word: Pain"] = "Spell_Shadow_ShadowWordPain",
+ ["Shadowburn"] = "Spell_Shadow_ScourgeBuild",
+ ["Shadowform"] = "Spell_Shadow_Shadowform",
+ ["Shadowguard"] = "Spell_Nature_LightningShield",
+ ["Shadowmeld Passive"] = "Ability_Ambush",
+ ["Shadowmeld"] = "Ability_Ambush",
+ ["Sharpened Claws"] = "INV_Misc_MonsterClaw_04",
+ ["Shatter"] = "Spell_Frost_FrostShock",
+ ["Shell Shield"] = "Ability_Hunter_Pet_Turtle",
+ ["Shield Bash"] = "Ability_Warrior_ShieldBash",
+ ["Shield Block"] = "Ability_Defend",
+ ["Shield Slam"] = "INV_Shield_05",
+ ["Shield Specialization"] = "INV_Shield_06",
+ ["Shield Wall"] = "Ability_Warrior_ShieldWall",
+ ["Shield"] = "INV_Shield_04",
+ ["Shoot Bow"] = "Ability_Marksmanship",
+ ["Shoot Crossbow"] = "Ability_Marksmanship",
+ ["Shoot Gun"] = "Ability_Marksmanship",
+ ["Shoot"] = "Ability_ShootWand",
+ ["Shred"] = "Spell_Shadow_VampiricAura",
+ ["Silence"] = "Spell_Shadow_ImpPhaseShift",
+ ["Silent Resolve"] = "Spell_Nature_ManaRegenTotem",
+ ["Sinister Strike"] = "Spell_Shadow_RitualOfSacrifice",
+ ["Siphon Life"] = "Spell_Shadow_Requiem",
+ ["Skinning"] = "INV_Misc_Pelt_Wolf_01",
+ ["Slam"] = "Ability_Warrior_DecisiveStrike",
+ ["Slice and Dice"] = "Ability_Rogue_SliceDice",
+ ["Slow Fall"] = "Spell_Magic_FeatherFall",
+ ["Smelting"] = "Spell_Fire_FlameBlades",
+ ["Smite"] = "Spell_Holy_HolySmite",
+ ["Soothe Animal"] = "Ability_Hunter_BeastSoothe",
+ ["Soothing Kiss"] = "Spell_Shadow_SoothingKiss",
+ ["Soul Fire"] = "Spell_Fire_Fireball02",
+ ["Soul Link"] = "Spell_Shadow_GatherShadows",
+ ["Soulstone Resurrection"] = "INV_Misc_Orb_04",
+ ["Spell Lock"] = "Spell_Shadow_MindRot",
+ ["Spell Warding"] = "Spell_Holy_SpellWarding",
+ ["Spirit Bond"] = "Ability_Druid_DemoralizingRoar",
+ ["Spirit Tap"] = "Spell_Shadow_Requiem",
+ ["Spirit of Redemption"] = "INV_Enchant_EssenceEternalLarge",
+ ["Spiritual Focus"] = "Spell_Arcane_Blink",
+ ["Spiritual Guidance"] = "Spell_Holy_SpiritualGuidence",
+ ["Spiritual Healing"] = "Spell_Nature_MoonGlow",
+ ["Sprint"] = "Ability_Rogue_Sprint",
+ ["Starfire"] = "Spell_Arcane_StarFire",
+ ["Starshards"] = "Spell_Arcane_StarFire",
+ ["Staves"] = "INV_Staff_08",
+ ["Stealth"] = "Ability_Stealth",
+ ["Stoneclaw Totem"] = "Spell_Nature_StoneClawTotem",
+ ["Stoneform"] = "Spell_Shadow_UnholyStrength",
+ ["Stoneskin Totem"] = "Spell_Nature_StoneSkinTotem",
+ ["Stormstrike"] = "Spell_Holy_SealOfMight",
+ ["Strength of Earth Totem"] = "Spell_Nature_EarthBindTotem",
+ ["Stuck"] = "Spell_Shadow_Teleport",
+ ["Subtlety"] = "Ability_EyeOfTheOwl",
+ ["Suffering"] = "Spell_Shadow_BlackPlague",
+ ["Summon Charger"] = "Ability_Mount_Charger",
+ ["Summon Dreadsteed"] = "Ability_Mount_Dreadsteed",
+ ["Summon Felhunter"] = "Spell_Shadow_SummonFelHunter",
+ ["Summon Felsteed"] = "Spell_Nature_Swiftness",
+ ["Summon Imp"] = "Spell_Shadow_SummonImp",
+ ["Summon Succubus"] = "Spell_Shadow_SummonSuccubus",
+ ["Summon Voidwalker"] = "Spell_Shadow_SummonVoidWalker",
+ ["Summon Warhorse"] = "Spell_Nature_Swiftness",
+ ["Sunder Armor"] = "Ability_Warrior_Sunder",
+ ["Suppression"] = "Spell_Shadow_UnsummonBuilding",
+ ["Surefooted"] = "Ability_Kick",
+ ["Survivalist"] = "Spell_Shadow_Twilight",
+ ["Sweeping Strikes"] = "Ability_Rogue_SliceDice",
+ ["Swiftmend"] = "INV_Relics_IdolOfRejuvenation",
+ ["Swipe"] = "INV_Misc_MonsterClaw_03",
+ ["Sword Specialization"] = "INV_Sword_27",
+ ["Tactical Mastery"] = "Spell_Nature_EnchantArmor",
+ ["Tailoring"] = "Trade_Tailoring",
+ ["Tainted Blood"] = "Spell_Shadow_LifeDrain",
+ ["Tame Beast"] = "Ability_Hunter_BeastTaming",
+ ["Tamed Pet Passive"] = "Ability_Mount_PinkTiger",
+ ["Taunt"] = "Spell_Nature_Reincarnation",
+ ["Teleport: Darnassus"] = "Spell_Arcane_TeleportDarnassus",
+ ["Teleport: Ironforge"] = "Spell_Arcane_TeleportIronForge",
+ ["Teleport: Moonglade"] = "Spell_Arcane_TeleportMoonglade",
+ ["Teleport: Orgrimmar"] = "Spell_Arcane_TeleportOrgrimmar",
+ ["Teleport: Stormwind"] = "Spell_Arcane_TeleportStormWind",
+ ["Teleport: Thunder Bluff"] = "Spell_Arcane_TeleportThunderBluff",
+ ["Teleport: Undercity"] = "Spell_Arcane_TeleportUnderCity",
+ ["The Human Spirit"] = "INV_Enchant_ShardBrilliantSmall",
+ ["Thick Hide"] = "INV_Misc_Pelt_Bear_03",
+ ["Thorns"] = "Spell_Nature_Thorns",
+ ["Throw"] = "Ability_Throw",
+ ["Throwing Specialization"] = "INV_ThrowingAxe_03",
+ ["Throwing Weapon Specialization"] = "INV_ThrowingKnife_01",
+ ["Thrown"] = "INV_ThrowingKnife_02",
+ ["Thunder Clap"] = "Spell_Nature_ThunderClap",
+ ["Thundering Strikes"] = "Ability_ThunderBolt",
+ ["Thunderstomp"] = "Ability_Hunter_Pet_Gorilla",
+ ["Tidal Focus"] = "Spell_Frost_ManaRecharge",
+ ["Tidal Mastery"] = "Spell_Nature_Tranquility",
+ ["Tiger Riding"] = "Spell_Nature_Swiftness",
+ ["Tiger's Fury"] = "Ability_Mount_JungleTiger",
+ ["Torment"] = "Spell_Shadow_GatherShadows",
+ ["Totem"] = "Spell_Nature_StoneClawTotem",
+ ["Totemic Focus"] = "Spell_Nature_MoonGlow",
+ ["Touch of Weakness"] = "Spell_Shadow_DeadofNight",
+ ["Toughness"] = "Spell_Holy_Devotion",
+ ["Track Beasts"] = "Ability_Tracking",
+ ["Track Demons"] = "Spell_Shadow_SummonFelHunter",
+ ["Track Dragonkin"] = "INV_Misc_Head_Dragon_01",
+ ["Track Elementals"] = "Spell_Frost_SummonWaterElemental",
+ ["Track Giants"] = "Ability_Racial_Avatar",
+ ["Track Hidden"] = "Ability_Stealth",
+ ["Track Humanoids"] = "Ability_Tracking",
+ ["Track Undead"] = "Spell_Shadow_DarkSummoning",
+ ["Tranquil Air Totem"] = "Spell_Nature_Brilliance",
+ ["Tranquil Spirit"] = "Spell_Holy_ElunesGrace",
+ ["Tranquility"] = "Spell_Nature_Tranquility",
+ ["Tranquilizing Shot"] = "Spell_Nature_Drowsy",
+ ["Trap Mastery"] = "Ability_Ensnare",
+ ["Travel Form"] = "Ability_Druid_TravelForm",
+ ["Tremor Totem"] = "Spell_Nature_TremorTotem",
+ ["Trueshot Aura"] = "Ability_TrueShot",
+ ["Turn Undead"] = "Spell_Holy_TurnUndead",
+ ["Two-Handed Axes and Maces"] = "INV_Axe_10",
+ ["Two-Handed Axes"] = "INV_Axe_04",
+ ["Two-Handed Maces"] = "INV_Mace_04",
+ ["Two-Handed Swords"] = "Ability_MeleeDamage",
+ ["Two-Handed Weapon Specialization"] = "INV_Axe_09",
+ ["Unarmed"] = "Ability_GolemThunderClap",
+ ["Unbreakable Will"] = "Spell_Magic_MageArmor",
+ ["Unbridled Wrath Effect"] = "Spell_Nature_StoneClawTotem",
+ ["Unbridled Wrath"] = "Spell_Nature_StoneClawTotem",
+ ["Undead Horsemanship"] = "Spell_Nature_Swiftness",
+ ["Underwater Breathing"] = "Spell_Shadow_DemonBreath",
+ ["Unending Breath"] = "Spell_Shadow_DemonBreath",
+ ["Unholy Power"] = "Spell_Shadow_ShadowWordDominate",
+ ["Unleashed Fury"] = "Ability_BullRush",
+ ["Unyielding Faith"] = "Spell_Holy_UnyieldingFaith",
+ ["Vampiric Embrace"] = "Spell_Shadow_UnsummonBuilding",
+ ["Vanish"] = "Ability_Vanish",
+ ["Vanished"] = "Ability_Vanish",
+ ["Vengeance"] = "Ability_Warrior_Revenge",
+ ["Vigor"] = "Spell_Nature_EarthBindTotem",
+ ["Vile Poisons"] = "Ability_Rogue_FeignDeath",
+ ["Vindication"] = "Spell_Holy_Vindication",
+ ["Viper Sting"] = "Ability_Hunter_AimedShot",
+ ["Volley"] = "Ability_Marksmanship",
+ ["Wand Specialization"] = "INV_Wand_01",
+ ["Wands"] = "Ability_ShootWand",
+ ["War Stomp"] = "Ability_WarStomp",
+ ["Water Breathing"] = "Spell_Shadow_DemonBreath",
+ ["Water Walking"] = "Spell_Frost_WindWalkOn",
+ ["Weakened Soul"] = "Spell_Holy_AshesToAshes",
+ ["Whirlwind"] = "Ability_Whirlwind",
+ ["Will of the Forsaken"] = "Spell_Shadow_RaiseDead",
+ ["Windfury Totem"] = "Spell_Nature_Windfury",
+ ["Windfury Weapon"] = "Spell_Nature_Cyclone",
+ ["Windwall Totem"] = "Spell_Nature_EarthBind",
+ ["Wing Clip"] = "Ability_Rogue_Trip",
+ ["Winter's Chill"] = "Spell_Frost_ChillingBlast",
+ ["Wisp Spirit"] = "Spell_Nature_WispSplode",
+ ["Wolf Riding"] = "Spell_Nature_Swiftness",
+ ["Wound Poison II"] = "INV_Misc_Herb_16",
+ ["Wound Poison III"] = "INV_Misc_Herb_16",
+ ["Wound Poison IV"] = "INV_Misc_Herb_16",
+ ["Wound Poison"] = "INV_Misc_Herb_16",
+ ["Wrath"] = "Spell_Nature_AbolishMagic",
+ ["Wyvern Sting"] = "INV_Spear_02"
+}
+
+BabbleSpell:Debug()
+BabbleSpell:SetStrictness(true)
+
+function BabbleSpell:GetSpellIcon(spell)
+ self:argCheck(spell, 2, "string")
+ local icon = spellIcons[spell] or spellIcons[self:HasReverseTranslation(spell) and self:GetReverseTranslation(spell) or false]
+ if not icon then
+ return nil
+ end
+ return "Interface\\Icons\\" .. icon
+end
+
+function BabbleSpell:GetShortSpellIcon(spell)
+ self:argCheck(spell, 2, "string")
+ return spellIcons[spell] or spellIcons[self:HasReverseTranslation(spell) and self:GetReverseTranslation(spell) or false]
+end
+
+AceLibrary:Register(BabbleSpell, MAJOR_VERSION, MINOR_VERSION)
+BabbleSpell = nil
diff --git a/MikScrollingBattleText/MikCombatEventHelper.lua b/MikScrollingBattleText/MikCombatEventHelper.lua
index 9752e4d..0904edc 100644
--- a/MikScrollingBattleText/MikCombatEventHelper.lua
+++ b/MikScrollingBattleText/MikCombatEventHelper.lua
@@ -1,6 +1,7 @@
--------------------------------------------------------------------------------------
+-------------------------------------------------------------------------------------
-- Title: Mik's Combat Event Helper
-- Author: Mik
+-- Maintainer: Athene
-------------------------------------------------------------------------------------
-- Create "namespace."
@@ -106,8 +107,6 @@ MikCEH.CombatEventData = {};
-- Hold trigger event data.
MikCEH.TriggerEventData = {};
-
-
-------------------------------------------------------------------------------------
-- Private constants.
-------------------------------------------------------------------------------------
@@ -199,6 +198,7 @@ function MikCEH.OnLoad()
table.insert(listenEvents, "CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES"); -- Incoming Melee Misses, Dodges, Parries, Blocks, Absorbs, Immunes
table.insert(listenEvents, "CHAT_MSG_COMBAT_PARTY_MISSES"); -- Incoming Melee Misses, Dodges, Parries, Blocks, Absorbs, Immunes
table.insert(listenEvents, "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE"); -- Incoming Spell/Ability Damage, Misses, Dodges, Parries, Blocks, Absorbs, Resists, Immunes, Power Losses
+ table.insert(listenEvents, "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE"); -- Incoming Spell/Ability Damage, Misses, Dodges, Parries, Blocks, Absorbs, Resists, Immunes, Power Losses -- athenne add
table.insert(listenEvents, "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE"); -- Incoming Spell/Ability Damage, Misses, Dodges, Parries, Blocks, Absorbs, Resists, Immunes, Power Losses
table.insert(listenEvents, "CHAT_MSG_SPELL_PARTY_DAMAGE"); -- Incoming Spell/Ability Damage, Misses, Dodges, Parries, Blocks, Absorbs, Resists, Immunes, Power Losses
table.insert(listenEvents, "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS"); -- Incoming damage from shields
@@ -214,6 +214,7 @@ function MikCEH.OnLoad()
table.insert(listenEvents, "CHAT_MSG_SPELL_SELF_BUFF"); -- Outgoing Heals, Power Gains, Dispel/Purge Resists
table.insert(listenEvents, "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS"); -- Outgoing HoTs
table.insert(listenEvents, "CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS"); -- Outgoing HoTs
+ table.insert(listenEvents, "CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS");
table.insert(listenEvents, "CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE"); -- Outgoing DoTs
table.insert(listenEvents, "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE"); -- Outgoing DoTs, Power Losses
table.insert(listenEvents, "CHAT_MSG_COMBAT_PET_HITS"); -- Outgoing Pet Melee Hits/Crits
@@ -388,7 +389,10 @@ function MikCEH.ParseCombatEvents(event, combatMessage)
MikCEH.ParseForIncomingSpellHeals(combatMessage);
-- Incoming Debuffs, DoTs, Power Gains
- elseif (event == "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE") then
+ elseif (event == "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE" or
+ event == "CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS" or
+ event == "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS" or
+ event == "CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS") then
MikCEH.ParseForIncomingDebuffs(combatMessage);
MikCEH.ParseForPowerGains(combatMessage);
@@ -890,6 +894,123 @@ function MikCEH.ParseForIncomingDamageShieldDamage(combatMessage)
-- Return the parse was successful.
return true;
end
+
+ -- Look for a resist.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLRESISTOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_RESIST, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for a miss.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLMISSOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_MISS, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a dodge.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLDODGEDOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_DODGE, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a parry.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLPARRIEDOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_PARRY, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a block.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLBLOCKEDOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_BLOCK, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for an absorb.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLLOGABSORBOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_ABSORB, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for an immune.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLIMMUNEOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_IMMUNE, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for a reflect.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLREFLECTOTHERSELF", {"%n", "%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_REFLECT, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
-- Return the parse was NOT successful.
return false;
@@ -907,6 +1028,11 @@ function MikCEH.ParseForIncomingSpellHeals(combatMessage)
if (capturedData ~= nil) then
local eventData = MikCEH.GetHealEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.HEALTYPE_CRIT, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+ -- Get overheal info.
+ eventData.Name = playerName
+ MikCEH.PopulateOverhealData(eventData); --athenne add
+ eventData.Name = capturedData.Name
+
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -921,6 +1047,11 @@ function MikCEH.ParseForIncomingSpellHeals(combatMessage)
if (capturedData ~= nil) then
local eventData = MikCEH.GetHealEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.HEALTYPE_NORMAL, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+ -- Get overheal info.
+ eventData.Name = playerName
+ MikCEH.PopulateOverhealData(eventData); --athenne add
+ eventData.Name = capturedData.Name
+
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -936,6 +1067,11 @@ function MikCEH.ParseForIncomingSpellHeals(combatMessage)
if (capturedData ~= nil) then
local eventData = MikCEH.GetHealEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.HEALTYPE_OVER_TIME, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+ -- Get overheal info.
+ eventData.Name = playerName
+ MikCEH.PopulateOverhealData(eventData); -- athenne add
+ eventData.Name = capturedData.Name
+
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -950,6 +1086,9 @@ function MikCEH.ParseForIncomingSpellHeals(combatMessage)
if (capturedData ~= nil) then
local eventData = MikCEH.GetHealEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.HEALTYPE_OVER_TIME, capturedData.Amount, capturedData.SpellName, playerName);
+ -- Get overheal info.
+ MikCEH.PopulateOverhealData(eventData); --athenne add
+
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -969,7 +1108,7 @@ end
function MikCEH.ParseForIncomingDebuffs(combatMessage)
-- Look for a debuff.
local capturedData = MikCEH.GetCapturedData(combatMessage, "AURAADDEDSELFHARMFUL", {"%b"});
-
+
-- If a match was found.
if (capturedData ~= nil) then
local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_DEBUFF, capturedData.Amount, capturedData.BuffName);
@@ -981,13 +1120,23 @@ function MikCEH.ParseForIncomingDebuffs(combatMessage)
return true;
end
-
+ capturedData = nil
-- Look for damage from a debuff.
- local capturedData = MikCEH.GetCapturedData(combatMessage, "PERIODICAURADAMAGEOTHERSELF", {"%a", "%t", "%n", "%s"});
+ if (GetLocale() == "frFR") then
+ capturedData = MikCEH.GetCapturedData(combatMessage, "PERIODICAURADAMAGEOTHERSELF", {"%t", "%a", "%s", "%n"});
+ else
+ capturedData = MikCEH.GetCapturedData(combatMessage, "PERIODICAURADAMAGEOTHERSELF", {"%a", "%t", "%n", "%s"});
+end
-- If a match was found.
if (capturedData ~= nil) then
- local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_OVER_TIME, capturedData.DamageType, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+
+ local eventData
+ if (GetLocale() == "frFR") then
+ eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_OVER_TIME, capturedData.DamageType, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+ else
+ eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_OVER_TIME, capturedData.DamageType, capturedData.Amount, capturedData.Name, capturedData.SpellName);
+ end
-- Look for any partial actions and populate them into the event data.
MikCEH.ParseForPartialActions(combatMessage, eventData);
@@ -998,7 +1147,36 @@ function MikCEH.ParseForIncomingDebuffs(combatMessage)
-- Return the parse was successful.
return true;
end
+
+
+
+ -- Look for damage from a self debuff.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "PERIODICAURADAMAGESELFSELF", {"%a", "%t", "%s"});
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_OVER_TIME, capturedData.DamageType, capturedData.Amount, capturedData.SpellName, nil);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for absorbed damage from a self debuff.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLLOGABSORBSELFSELF", {"%s"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_INCOMING, MikCEH.ACTIONTYPE_ABSORB, nil, nil, nil, capturedData.SpellName, nil);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
-- Look for absorbed damage from a debuff.
local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLLOGABSORBOTHERSELF", {"%n", "%s"});
@@ -1023,14 +1201,16 @@ end
-- Parses for power gains.
-- **********************************************************************************
function MikCEH.ParseForPowerGains(combatMessage)
- -- Look for self power gains.
- local capturedData = MikCEH.GetCapturedData(combatMessage, "POWERGAINSELFSELF", {"%a", "%p", "%s"});
+ local capturedData = nil
+
+ -- Look for power gains from others.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "POWERGAINOTHERSELF", {"%p", "%a", "%s", "%n"});
-- If a match was found.
if (capturedData ~= nil) then
-- Make sure it's mana, rage, or energy.
if (capturedData.PowerType == MANA or capturedData.PowerType == RAGE or capturedData.PowerType == ENERGY) then
- local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType);
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1039,15 +1219,19 @@ function MikCEH.ParseForPowerGains(combatMessage)
return true;
end
end
-
- -- Look for power gains from others.
- local capturedData = MikCEH.GetCapturedData(combatMessage, "POWERGAINOTHERSELF", {"%a", "%p", "%n", "%s"});
+
+ -- Look for self power gains.
+if (GetLocale() == "frFR") then
+ capturedData = MikCEH.GetCapturedData(combatMessage, "POWERGAINSELFSELF", {"%p", "%s", "%a"});
+else
+ capturedData = MikCEH.GetCapturedData(combatMessage, "POWERGAINSELFSELF", {"%a", "%p", "%s"});
+end
-- If a match was found.
if (capturedData ~= nil) then
-- Make sure it's mana, rage, or energy.
if (capturedData.PowerType == MANA or capturedData.PowerType == RAGE or capturedData.PowerType == ENERGY) then
- local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType);
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1064,7 +1248,7 @@ function MikCEH.ParseForPowerGains(combatMessage)
if (capturedData ~= nil) then
-- Make sure it's mana, rage, or energy.
if (capturedData.PowerType == MANA or capturedData.PowerType == RAGE or capturedData.PowerType == ENERGY) then
- local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType);
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_GAIN, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1088,7 +1272,7 @@ function MikCEH.ParseForPowerLosses(combatMessage)
-- If a match was found.
if (capturedData ~= nil) then
- local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_LOSS, capturedData.Amount, capturedData.PowerType);
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_LOSS, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1103,7 +1287,7 @@ function MikCEH.ParseForPowerLosses(combatMessage)
-- If a match was found.
if (capturedData ~= nil) then
- local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_LOSS, capturedData.Amount, capturedData.PowerType);
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_LOSS, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1140,6 +1324,20 @@ function MikCEH.ParseForIncomingBuffs(combatMessage)
-- Return the parse was successful.
return true;
end
+
+ -- Look for a self mana drain.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLPOWERDRAINSELFSELF", {"%s", "%a", "%p"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetNotificationEventData(MikCEH.NOTIFICATIONTYPE_POWER_LOSS, capturedData.Amount, capturedData.PowerType, capturedData.SpellName);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
-- Return the parse was NOT successful.
return false;
@@ -1708,7 +1906,113 @@ function MikCEH.ParseForOutgoingDamageShieldDamage(combatMessage)
-- If a match was found.
if (capturedData ~= nil) then
- local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_NORMAL, capturedData.DamageType, capturedData.Amount, nil, capturedData.Name);
+ local eventData
+ if capturedData.DamageType == 2 and capturedData.Amount == "20" then
+ eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_NORMAL, capturedData.DamageType, capturedData.Amount, "Aura de vindicte", capturedData.Name);
+ else
+ eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_HIT, MikCEH.HITTYPE_NORMAL, capturedData.DamageType, capturedData.Amount, nil, capturedData.Name);
+ end
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for a resist.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLRESISTSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_RESIST, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for an immune.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLIMMUNESELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_IMMUNE, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for an evade
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLEVADEDSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_EVADE, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+ -- Look for a miss.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLMISSSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_MISS, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a dodge.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLDODGEDSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_DODGE, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a parry.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLPARRIEDSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_PARRY, nil, nil, nil, capturedData.SpellName, capturedData.Name);
+
+ -- Send the event.
+ MikCEH.SendEvent(eventData);
+
+ -- Return the parse was successful.
+ return true;
+ end
+
+
+ -- Look for a block.
+ local capturedData = MikCEH.GetCapturedData(combatMessage, "SPELLBLOCKEDSELFOTHER", {"%s", "%n"});
+
+ -- If a match was found.
+ if (capturedData ~= nil) then
+ local eventData = MikCEH.GetDamageEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.ACTIONTYPE_BLOCK, nil, nil, nil, capturedData.SpellName, capturedData.Name);
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -1838,6 +2142,9 @@ function MikCEH.ParseForOutgoingHoTs(combatMessage)
if (capturedData ~= nil) then
local eventData = MikCEH.GetHealEventData(MikCEH.DIRECTIONTYPE_PLAYER_OUTGOING, MikCEH.HEALTYPE_OVER_TIME, capturedData.Amount, capturedData.SpellName, capturedData.Name);
+ -- Get overheal info.
+ MikCEH.PopulateOverhealData(eventData); --athenne add
+
-- Send the event.
MikCEH.SendEvent(eventData);
@@ -2589,7 +2896,7 @@ function MikCEH.GetGlobalStringInfo(globalStringName)
formatCode = currentChar;
else
-- Check if the character is one of the magic characters and escape it.
- if (string.find(currentChar, "[%^%$%(%)%.%[%]%*%+%-%?]")) then
+ if (string.find(currentChar, "[%^%$%(%)%.%[%]%*%-%+%?]")) then
searchString = searchString .. "%" .. currentChar;
-- Normal character so just add it to the formatted string.
else
@@ -2779,6 +3086,8 @@ function MikCEH.GetDamageTypeNumber(damageTypeString)
return MikCEH.DAMAGETYPE_SHADOW;
elseif (damageTypeString == SPELL_SCHOOL6_CAP) then
return MikCEH.DAMAGETYPE_ARCANE;
+ elseif (damageTypeString == "Arcane") then
+ return MikCEH.DAMAGETYPE_ARCANE;
end
-- Return the unknown damage type.
@@ -2865,7 +3174,7 @@ end
-- Populates the combat event data table for a notification event with the passed
-- info.
-- **********************************************************************************
-function MikCEH.GetNotificationEventData(notificationType, amount, effectName)
+function MikCEH.GetNotificationEventData(notificationType, amount, effectName, SpellName)
-- Get the global combat event data table.
local eventData = MikCEH.CombatEventData;
@@ -2876,7 +3185,12 @@ function MikCEH.GetNotificationEventData(notificationType, amount, effectName)
eventData.EventType = MikCEH.EVENTTYPE_NOTIFICATION;
eventData.NotificationType = notificationType;
eventData.Amount = amount;
- eventData.EffectName = effectName;
+ if effectName == MANA or effectName == RAGE or effectName == ENERGY then
+ eventData.Amount = amount.." "..effectName;
+ eventData.EffectName = SpellName;
+ else
+ eventData.EffectName = effectName;
+ end
-- Return the event data.
return eventData;
@@ -2926,7 +3240,14 @@ end
-- **********************************************************************************
function MikCEH.PopulateOverhealData(eventData)
-- Get the appropriate unit id for the unit being checked for overheals.
+
local unitID = MikCEH.GetUnitIDFromName(eventData.Name);
+
+ if not unitID then
+ if UnitName("target") == eventData.Name then
+ unitID = "target";
+ end
+ end
-- Make sure it's a valid unit id.
if (unitID) then
@@ -3128,7 +3449,8 @@ function MikCEH.ParseSelfHealthTriggers()
if (healthPercentage < triggerSettings.Threshold/100 and lastSelfHealthPercentage >= triggerSettings.Threshold/100) then
-- Get trigger event data and call the trigger handler.
local eventData = MikCEH.GetThresholdTriggerEventData(triggerKey, healthAmount);
- MikCEH.SendTriggerEvent(eventData)
+ MikCEH.SendTriggerEvent(eventData);
+ PlaySoundFile("Interface\\AddOns\\MikScrollingBattleText\\sounds\\LowHealth.mp3");
end
end
@@ -3152,7 +3474,8 @@ function MikCEH.ParseSelfManaTriggers()
if (manaPercentage < triggerSettings.Threshold/100 and lastSelfManaPercentage >= triggerSettings.Threshold/100) then
-- Get trigger event data and call the trigger handler.
local eventData = MikCEH.GetThresholdTriggerEventData(triggerKey, manaAmount);
- MikCEH.SendTriggerEvent(eventData)
+ MikCEH.SendTriggerEvent(eventData);
+ PlaySoundFile("Interface\\AddOns\\MikScrollingBattleText\\sounds\\LowMana.mp3");
end
end
diff --git a/MikScrollingBattleText/MikScrollingBattleText-enUS.lua b/MikScrollingBattleText/MikScrollingBattleText-enUS.lua
new file mode 100644
index 0000000..8d6d6ce
--- /dev/null
+++ b/MikScrollingBattleText/MikScrollingBattleText-enUS.lua
@@ -0,0 +1,25 @@
+local L = AceLibrary("AceLocale-2.2"):new("MikScrollingBattleText")
+
+L:RegisterTranslations("enUS", function()
+ return {
+ ["Debug mode has been enabled."] = true,
+ ["Debug mode has been disabled."] = true,
+ ["Event search mode has been enabled. Searching for: "] = true,
+ ["Event search mode has been disabled."] = true,
+ ["The mod is now disabled."] = true,
+ ["The mod is now enabled."] = true,
+ ["Hits"] = true,
+ ["Crit"] = true,
+ ["Crits"] = true,
+ ["Multiple"] = true,
+ [" (%d vulnerability)"] = true,
+ [" <\124cff00b37e\124h%d\124h\124r>"] = true,
+ ["Profile Reset"] = true,
+ ["Drowning"] = true,
+ ["Falling"] = true,
+ ["Fatigue"] = true,
+ ["Fire"] = true,
+ ["Lava"] = true,
+ ["Slime"] = true,
+ }
+end)
\ No newline at end of file
diff --git a/MikScrollingBattleText/MikScrollingBattleText-frFR.lua b/MikScrollingBattleText/MikScrollingBattleText-frFR.lua
new file mode 100644
index 0000000..2c48368
--- /dev/null
+++ b/MikScrollingBattleText/MikScrollingBattleText-frFR.lua
@@ -0,0 +1,25 @@
+local L = AceLibrary("AceLocale-2.2"):new("MikScrollingBattleText")
+
+L:RegisterTranslations("frFR", function()
+ return {
+ ["Debug mode has been enabled."] = "Debug mode has been enabled.",
+ ["Debug mode has been disabled."] = "Debug mode has been disabled.",
+ ["Event search mode has been enabled. Searching for: "] = "Event search mode has been enabled. Searching for: ",
+ ["Event search mode has been disabled."] = "Event search mode has been disabled.",
+ ["The mod is now disabled."] = "The mod is now disabled.",
+ ["The mod is now enabled."] = "The mod is now enabled.",
+ ["Hits"] = "Coups",
+ ["Crit"] = "Crit",
+ ["Crits"] = "Crits",
+ ["Multiple"] = "Multiple",
+ [" (%d vulnerability)"] = " (%d vulnérabilité)",
+ [" <\124cff00b37e\124h%d\124h\124r>"] = " <\124cff00b37e\124h%d\124h\124r>",
+ ["Profile Reset"] = "Profile Reset",
+ ["Drowning"] = "Noyade",
+ ["Falling"] = "Chute",
+ ["Fatigue"] = "Fatigue",
+ ["Fire"] = "Feu",
+ ["Lava"] = "Lave",
+ ["Slime"] = "Gelée",
+ }
+end)
\ No newline at end of file
diff --git a/MikScrollingBattleText/MikScrollingBattleText.lua b/MikScrollingBattleText/MikScrollingBattleText.lua
index 940e471..3896c9a 100644
--- a/MikScrollingBattleText/MikScrollingBattleText.lua
+++ b/MikScrollingBattleText/MikScrollingBattleText.lua
@@ -1,6 +1,7 @@
--------------------------------------------------------------------------------------
+-------------------------------------------------------------------------------------
-- Title: Mik's Scrolling Battle Text
-- Author: Mik
+-- Maintainer: Athene
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
@@ -25,8 +26,96 @@ MikSBT.CurrentProfile = nil;
-- Private constants.
-------------------------------------------------------------------------------------
+-- cache des icones trouvées par l'algo et des icones qu'il ne trouverait pas
+if not ICON_CACHE then
+ ICON_CACHE = {}
+end
+ICON_CACHE["repousser au loin"] = "Interface\\Icons\\Inv_Gauntlets_05"
+ICON_CACHE["rupture du sol"] = "Interface\\Icons\\Spell_Nature_Earthquake"
+ICON_CACHE["rayon de l'oeil"] = "Interface\\Icons\\Spell_Nature_Callstorm"
+ICON_CACHE["salve de traits de l'ombre"] = "Interface\\Icons\\Spell_Shadow_Shadowbolt"
+ICON_CACHE["tempête d'ombre"] = "Interface\\Icons\\spell_shadow_shadowbolt"
+ICON_CACHE["gaz"] = "Interface\\Icons\\Spell_Nature_Abolishmagic"
+ICON_CACHE["décimer"] = "Interface\\Icons\\Inv_Shield_01"
+ICON_CACHE["champ statique"] = "Interface\\Icons\\Spell_Nature_WispHeal"
+ICON_CACHE["horion"] = "Interface\\Icons\\Spell_Nature_WispHeal"
+ICON_CACHE["secousse"] = "Interface\\Icons\\spell_nature_earthquake"
+ICON_CACHE["charge de bouclier"] = "Interface\\Icons\\ability_warrior_charge"
+ICON_CACHE["eclair des arcanes"] = "Interface\\Icons\\spell_arcane_starfire"
+ICON_CACHE["gémissement des âmes"] = "Interface\\Icons\\spell_nature_lightning"
+ICON_CACHE["trait noir"] = "Interface\\Icons\\spell_shadow_shadowbolt"
+ICON_CACHE["infusion de mana"] = "Interface\\Icons\\inv_trinket_naxxramas01"
+ICON_CACHE["afflux"] = "Interface\\Icons\\Ability_Warrior_Charge"
+ICON_CACHE["frappe"] = "Interface\\Icons\\Ability_Rogue_Ambush"
+ICON_CACHE["souffle de lave"] = "Interface\\Icons\\Spell_Fire_WindsOfWoe"
+ICON_CACHE["frappe des ailes"] = "Interface\\Icons\\Inv_Misc_Monsterscales_14"
+ICON_CACHE["lance de flammes"] = "Interface\\Icons\\Ability_Throw"
+ICON_CACHE["horion de l'ombre"] = "Interface\\Icons\\Spell_Shadow_Shadowbolt"
+ICON_CACHE["explosion de lave"] = "Interface\\Icons\\Spell_Fire_Volcano"
+ICON_CACHE["bouclier de lave"] = "Interface\\Icons\\Spell_Fire_Immolation"
+ICON_CACHE["fleur de feu"] = "Interface\\Icons\\Spell_Fire_Fireball02"
+ICON_CACHE["bombe"] = "Interface\\Icons\\Spell_Fire_Selfdestruct"
+ICON_CACHE["explosion"] = "Interface\\Icons\\Spell_Fire_Selfdestruct"
+ICON_CACHE["colère de ragnaros"] = "Interface\\Icons\\Spell_Fire_Soulburn"
+ICON_CACHE["choc"] = "Interface\\Icons\\Ability_Smash"
+ICON_CACHE["secousse violente"] = "Interface\\Icons\\Ability_Smash"
+ICON_CACHE["nova de feu"] = "Interface\\Icons\\Spell_Fire_SealOfFire"
+ICON_CACHE["marque de détonation"] = "Interface\\Icons\\spell_fire_selfdestruct"
+ICON_CACHE["cône de feu"] = "Interface\\Icons\\Spell_Fire_WindsOfWoe"
+ICON_CACHE["volée de boules de feu"] = "Interface\\Icons\\Spell_Fire_Flamebolt"
+ICON_CACHE["vague de foudre"] = "Interface\\Icons\\Spell_Nature_Chainlightning"
+ICON_CACHE["coup de queue"] = "Interface\\Icons\\Inv_Misc_MonsterScales_05"
+ICON_CACHE["exploiter faiblesse"] = "Interface\\Icons\\ability_backstab"
+ICON_CACHE["lancer feu liquide"] = "Interface\\Icons\\spell_fire_meteorstorm"
+ICON_CACHE["poing de force"] = "Interface\\Icons\\inv_gauntlets_31"
+ICON_CACHE["uppercut"] = "Interface\\Icons\\inv_gauntlets_31"
+ICON_CACHE["sangsue"] = "Interface\\Icons\\ability_racial_cannibalize"
+ICON_CACHE["choc de feu"] = "Interface\\Icons\\spell_fire_immolation"
+ICON_CACHE["malédiction du sang"] = "Interface\\Icons\\spell_shadow_ritualofsacrifice"
+ICON_CACHE["brasier"] = "Interface\\Icons\\spell_fire_incinerate"
+ICON_CACHE["météore"] = "Interface\\Icons\\spell_fire_meteorstorm"
+ICON_CACHE["jet de poison"] = "Interface\\Icons\\spell_nature_corrosivebreath"
+ICON_CACHE["explosion d'ombre"] = "Interface\\Icons\\spell_shadow_antishadow"
+ICON_CACHE["voile de l'ombre"] = "Interface\\Icons\\spell_shadow_gathershadows"
+ICON_CACHE["nuée maléfique"] = "Interface\\Icons\\spell_nature_abolishmagic"
+ICON_CACHE["crachat empoisonné"] = "Interface\\Icons\\spell_nature_corrosivebreath"
+ICON_CACHE["piétiner"] = "Interface\\Icons\\spell_nature_natureswrath"
+ICON_CACHE["spores mutées"] = "Interface\\Icons\\spell_nature_abolishmagic"
+ICON_CACHE["heurtoir du vomisseur de bile"] = "Interface\\Icons\\ability_devour"
+ICON_CACHE["eruption"] = "Interface\\Icons\\spell_fire_volcano"
+ICON_CACHE["tempête de mana"] = "Interface\\Icons\\spell_frost_icestorm"
+ICON_CACHE["frappe sacrée"] = "Interface\\Icons\\ability_thunderbolt"
+ICON_CACHE["grondement du tonnerre"] = "Interface\\Icons\\spell_nature_thunderclap"
+ICON_CACHE["déflagration des arcanes"] = "Interface\\Icons\\spell_shadow_deathpact"
+ICON_CACHE["nuage pestilentiel"] = "Interface\\Icons\\spell_nature_abolishmagic"
+ICON_CACHE["régénération de mana"] = "Interface\\Icons\\spell_nature_manaregentotem"
+ICON_CACHE["potion de soins"] = "Interface\\Icons\\inv_potion_54"
+ICON_CACHE["restauration du mana"] = "Interface\\Icons\\inv_potion_76"
+ICON_CACHE["rune démoniaque"] = "Interface\\Icons\\inv_misc_rune_04"
+ICON_CACHE["rune ténébreuse"] = "Interface\\Icons\\spell_shadow_sealofkings"
+ICON_CACHE["absorption de magie"] = "Interface\\Icons\\spell_nature_astralrecalgroup"
+ICON_CACHE["gel"] = "Interface\\Icons\\spell_frost_glacier"
+
+ICON_CACHE["lésions cérébrales"] = "Interface\\Icons\\ability_gouge"
+ICON_CACHE["décharge électrique"] = "Interface\\Icons\\spell_lightning_lightningbolt01"
+ICON_CACHE["foudre"] = "Interface\\Icons\\spell_lightning_lightningbolt01"
+ICON_CACHE["enchantement flamboyant"] = "Interface\\Icons\\spell_fire_selfdestruct"
+ICON_CACHE["pierre de soins supérieure"] = "Interface\\Icons\\inv_stone_04"
+ICON_CACHE["pierre de soins mineure"] = "Interface\\Icons\\inv_stone_04"
+ICON_CACHE["pierre de soins inférieure"] = "Interface\\Icons\\inv_stone_04"
+ICON_CACHE["pierre de soins majeure"] = "Interface\\Icons\\inv_stone_04"
+ICON_CACHE["pierre de soins"] = "Interface\\Icons\\inv_stone_04"
+ICON_CACHE["capturer un esprit"] = "Interface\\Icons\\Spell_Shadow_Haunting"
+
+
+-- Cache des spells dont l'icone n'a pas été trouvée
+NO_ICON_CACHE = {}
+
+-- Babble-Spell pour les icones des spells de class
+local BS = AceLibrary("Babble-Spell-2.2")
+
-- Number of font strings.
-local NUM_FONT_STRINGS = 15;
+local NUM_FONT_STRINGS = 20;
-- Animation values for incoming and outgoing events.
local MIN_VERTICAL_SPACING = 8;
@@ -40,7 +129,7 @@ local STICKY_DISPLAY_TIME = 2;
local STICKY_FADE_OUT_TIME = 0.5;
-- The animation speed.
-local ANIMATION_SPEED = 0.015;
+local ANIMATION_SPEED = 0.02;
-- Scroll directions
local SCROLL_DIRECTION_UP = 1;
@@ -83,9 +172,9 @@ local stillMerging = false;
local activeNonStickies = {};
local activeStickies = {};
--- Create a new table recycler object that holds up to 50 table references
+-- Create a new table recycler object that holds up to 40 table references
-- in primary cache.
-local eventsRecycler = MikTRO:NewRecyclerObject(50);
+local eventsRecycler = MikTRO:NewRecyclerObject(40);
-------------------------------------------------------------------------------------
@@ -482,7 +571,11 @@ function MikSBT.CombatEventsHandler(combatEvent)
end
-- Copy the amount, effect name, and player/enemy name from the passed combat event data.
- animationEvent.Amount = combatEvent.Amount;
+ -- if combatEvent.Amount then
+ -- animationEvent.Amount = combatEvent.Amount * 420;
+ -- else
+ animationEvent.Amount = combatEvent.Amount;
+ -- end
animationEvent.EffectName = combatEvent.EffectName;
animationEvent.Name = combatEvent.Name;
@@ -490,19 +583,19 @@ function MikSBT.CombatEventsHandler(combatEvent)
if (combatEvent.DamageType ~= nil) then
animationEvent.DamageType = MikCEH.GetDamageTypeString(combatEvent.DamageType);
end
-
+
-- If there are partial action types set the partial effect text appropriately.
if (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_ABSORB) then
if (ABSORB_TRAILER) then
- animationEvent.PartialEffectText = string.gsub(ABSORB_TRAILER, "%%d", combatEvent.PartialAmount);
+ animationEvent.PartialEffectText = "\124cffFAFA00\124h"..string.gsub(ABSORB_TRAILER, "%%d", combatEvent.PartialAmount).."\124h\124r";
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_BLOCK) then
if (BLOCK_TRAILER) then
- animationEvent.PartialEffectText = string.gsub(BLOCK_TRAILER, "%%d", combatEvent.PartialAmount);
+ animationEvent.PartialEffectText = "\124cff7F00FF\124h"..string.gsub(BLOCK_TRAILER, "%%d", combatEvent.PartialAmount).."\124h\124r";
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_RESIST) then
if (RESIST_TRAILER) then
- animationEvent.PartialEffectText = string.gsub(RESIST_TRAILER, "%%d", combatEvent.PartialAmount);
+ animationEvent.PartialEffectText = " \124cff81007F\124h"..string.gsub(RESIST_TRAILER, "%%d", combatEvent.PartialAmount).."\124h\124r";
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_VULNERABLE) then
if (MikSBT.MSG_VULERNABLE_TRAILER) then
@@ -510,11 +603,11 @@ function MikSBT.CombatEventsHandler(combatEvent)
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_CRUSHING) then
if (CRUSHING_TRAILER) then
- animationEvent.PartialEffectText = CRUSHING_TRAILER;
+ animationEvent.PartialEffectText = "\124cff7D0000\124h"..CRUSHING_TRAILER.."\124h\124r";
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_GLANCING) then
if (GLANCING_TRAILER) then
- animationEvent.PartialEffectText = GLANCING_TRAILER;
+ animationEvent.PartialEffectText = "\124cffFA0000\124h"..GLANCING_TRAILER.."\124h\124r";
end
elseif (combatEvent.PartialActionType == MikCEH.PARTIALACTIONTYPE_OVERHEAL) then
animationEvent.OverhealAmount = combatEvent.PartialAmount;
@@ -553,6 +646,10 @@ function MikSBT.TriggerHandler(triggerEvent)
animationEvent.ScrollArea = scrollAreas.Notification;
animationEvent.EventSettings = MikSBT.CurrentProfile.Triggers[triggerEvent.TriggerKey].EventSettings;
MikSBT.FormatTriggerText(animationEvent, triggerEvent);
+
+ if (MikSBT.CurrentProfile.Triggers[triggerEvent.TriggerKey].Texture) then
+ animationEvent.Texture = MikSBT.CurrentProfile.Triggers[triggerEvent.TriggerKey].Texture
+ end
-- Dispatch the event to the animation system.
MikSBT.DispatchAnimationEvent(animationEvent);
@@ -637,7 +734,11 @@ function MikSBT.MergeEvents(mergeData, numEvents)
-- If the events have an amount then total them.
if (animationEvent.Amount ~= nil and mergeData.UnmergedEvents[x].Amount ~= nil) then
- animationEvent.Amount = animationEvent.Amount + mergeData.UnmergedEvents[x].Amount;
+ animationEvent.Amount = tonumber (animationEvent.Amount, 10)
+ if animationEvent.Amount and mergeData.UnmergedEvents[x].Amount then
+ animationEvent.Amount = animationEvent.Amount + mergeData.UnmergedEvents[x].Amount;
+ end
+ -- animationEvent.Amount = animationEvent.Amount + mergeData.UnmergedEvents[x].Amount;
end
-- Check if there is an overheal amount and total it.
@@ -916,12 +1017,39 @@ end
-- **********************************************************************************
function MikSBT.FormatEventText(animationEvent)
local outputString = animationEvent.UnformattedText;
-
+
+ -- Print(animationEvent)
+
-- Check if there is no unformatted text and bail.
if (outputString == nil) then
return;
end
+ outputString = string.gsub(outputString, "-%%a", "\124cffff0000\124h-\124h\124r%%a");
+
+ if (animationEvent.DamageType ~= nil) then
+ if animationEvent.DamageType == SPELL_SCHOOL1_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cffF6F99E\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL2_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cffFF8080\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL3_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cff80FF80\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL4_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cff8080FF\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL5_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cffA000A0\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL6_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cffFFB9FF\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL0_CAP and animationEvent.EffectName and animationEvent.ScrollArea.AssociatedFrame == "MSBTFrameOutgoing" then
+ outputString = string.gsub(outputString, "%%a", "\124cffFFFF00\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == SPELL_SCHOOL0_CAP then
+ outputString = string.gsub(outputString, "%%a", "\124cffFFFFFF\124h%%a\124h\124r");
+ elseif animationEvent.DamageType == "Inconnu" then
+ outputString = string.gsub(outputString, "%%a", "\124cffFFB9FF\124h%%a\124h\124r");
+ -- DEFAULT_CHAT_FRAME:AddMessage(animationEvent.DamageType)
+ end
+ end
+
-- Substitute amount.
if (animationEvent.Amount ~= nil) then
-- Check if there is overheal info
@@ -934,8 +1062,11 @@ function MikSBT.FormatEventText(animationEvent)
end
-- Substitute enemy/player names.
- if (animationEvent.Name ~= nil) then
+ if (animationEvent.Name ~= nil) and (animationEvent.Name ~= UnitName("player")) then
outputString = string.gsub(outputString, "%%n", animationEvent.Name);
+ else
+ outputString = string.gsub(outputString, "%(%%n%)", "");
+ outputString = string.gsub(outputString, "%%n", "");
end
-- Substitute effect names.
@@ -1376,10 +1507,14 @@ function MikSBT.AddAnimation(animationEvent)
-- Loop through all of the suppression entries and look for a match.
for _, suppressionSettings in MikSBT.CurrentProfile.Suppressions do
-- Check if the suppression's search pattern is a match.
- if (suppressionSettings.Enabled and string.find(animationEvent.Text, suppressionSettings.SearchPattern)) then
+ if (suppressionSettings.Enabled and (string.find(animationEvent.Text, suppressionSettings.SearchPattern))) then
-- Reclaim the animation event table to the events recycler and leave the function.
eventsRecycler:ReclaimTable(animationEvent);
- return;
+ return;
+ elseif (suppressionSettings.Enabled and animationEvent.EffectName and string.find(animationEvent.EffectName, suppressionSettings.SearchPattern)) then
+ -- Reclaim the animation event table to the events recycler and leave the function.
+ eventsRecycler:ReclaimTable(animationEvent);
+ return;
end
end
@@ -1389,6 +1524,30 @@ function MikSBT.AddAnimation(animationEvent)
animationEvent.IsSticky = true;
end
+ -- Color UnitName by class
+ local UnitID = MikCEH.GetUnitIDFromName(animationEvent.Name)
+ if UnitID then
+ local Class = UnitClass(UnitID)
+ if Class and Class == "Paladin" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffF58CBA|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Druide" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffFF7D0A|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Chasseur" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffABD473|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Mage" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cff69CCF0|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Prêtre" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffFFFFFF|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Voleur" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffFFF569|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Chaman" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cff0070DE|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Démoniste" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cff9482C9|h"..animationEvent.Name.."|h|r")
+ elseif Class and Class == "Guerrier" then
+ animationEvent.Text = string.gsub(animationEvent.Text, animationEvent.Name, "|cffC79C6E|h"..animationEvent.Name.."|h|r")
+ end
+ end
-- Get the next available animation display info object for the scroll area.
local animDisplayInfo = MikSBT.GetNextAnimationDisplayInfo(animationEvent);
@@ -1447,7 +1606,62 @@ function MikSBT.AddAnimation(animationEvent)
animDisplayInfo.FontObject:SetText(animationEvent.Text);
animDisplayInfo.FontObject:SetAlpha(animDisplayInfo.Alpha);
animDisplayInfo.FontObject:SetPoint(animDisplayInfo.AnchorPoint, animDisplayInfo.PositionX, animDisplayInfo.PositionY);
-
+
+ -- Athene Edit - Spell Icon
+ local texture
+ if animationEvent.Texture then texture = animationEvent.Texture end
+ if animationEvent.EffectName then
+ local name = string.gsub(animationEvent.EffectName, " %(%d+%)", "")
+ -- DEFAULT_CHAT_FRAME:AddMessage(animationEvent.EffectName)
+ -- DEFAULT_CHAT_FRAME:AddMessage(name)
+ -- texture = BS:GetSpellIcon(name)
+ if ICON_CACHE[strlower(name)] then
+ texture = ICON_CACHE[strlower(name)]
+ elseif not texture and MikSBT.FindBuff(name) then
+ local bufftype,index,_ = MikSBT.FindBuff(name)
+ local icon
+ if bufftype == "buff" then
+ icon = UnitBuff("player", index)
+ ICON_CACHE[strlower(name)] = icon
+ texture = icon
+ elseif bufftype == "debuff" then
+ icon = UnitDebuff("player", index)
+ ICON_CACHE[strlower(name)] = icon
+ texture = icon
+ else
+ texture = nil
+ NO_ICON_CACHE[strlower(name)] = 1
+ end
+ elseif not texture and BS:GetSpellIcon(name) then
+ texture = BS:GetSpellIcon(name)
+ elseif not texture and MikSBT.FindItemIcon(name) then
+ texture = MikSBT.FindItemIcon(name)
+ ICON_CACHE[strlower(name)] = MikSBT.FindItemIcon(name)
+ elseif not texture then
+ texture = nil
+ NO_ICON_CACHE[strlower(name)] = 1
+ end
+ end
+
+ if texture then
+ -- local frame
+ if not animDisplayInfo.Texture then
+ -- on creer une nouvelle texture
+ animDisplayInfo.Texture = getglobal(animationEvent.ScrollArea.AssociatedFrame):CreateTexture(nil, "ARTWORK")
+ end
+ -- on réutilise une texture existante
+ animDisplayInfo.Texture:ClearAllPoints();
+ animDisplayInfo.Texture:SetTexture(nil);
+ animDisplayInfo.Texture:SetTexture(texture);
+ animDisplayInfo.Texture:SetWidth(animDisplayInfo.FontSize);
+ animDisplayInfo.Texture:SetHeight(animDisplayInfo.FontSize);
+ animDisplayInfo.Texture:SetTexCoord(0.125, 0.875, 0.125, 0.875)
+ animDisplayInfo.Texture:SetPoint("RIGHT", animDisplayInfo.FontObject, "LEFT", -4, 0);
+ animDisplayInfo.Texture:SetDrawLayer(animDisplayInfo.IsSticky and "OVERLAY" or animDisplayInfo.IsCrit and "OVERLAY" or "ARTWORK");
+ elseif animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetTexture(nil);
+ end
+
-- Set the last update to the current time.
animDisplayInfo.LastUpdated = GetTime();
@@ -1475,6 +1689,116 @@ function MikSBT.AddAnimation(animationEvent)
eventsRecycler:ReclaimTable(animationEvent);
end
+-- **********************************************************************************
+-- This function return the buff texture based on
+-- it's name.
+-- **********************************************************************************
+function ItemLinkToName(link)
+ return gsub(link,"^.*%[(.*)%].*$","%1");
+end
+
+function MikSBT.FindItemIcon(item)
+ if ( not item ) then return; end
+ item = string.lower(item);
+ local link;
+ for i = 1,23 do
+ link = GetInventoryItemLink("player",i);
+ if ( link ) then
+ if ( item == string.lower(ItemLinkToName(link)) )then
+ return i, nil, GetInventoryItemTexture('player', i), GetInventoryItemCount('player', i);
+ end
+ end
+ end
+ local count, bag, slot, texture;
+ for i = 0,NUM_BAG_FRAMES do
+ for j = 1,MAX_CONTAINER_ITEMS do
+ link = GetContainerItemLink(i,j);
+ if ( link ) then
+ if ( item == string.lower(ItemLinkToName(link))) then
+ bag, slot = i, j;
+ texture, count = GetContainerItemInfo(i,j);
+ end
+ end
+ end
+ end
+ return texture;
+end
+
+-- **********************************************************************************
+-- This function return the buff texture based on
+-- it's name.
+-- **********************************************************************************
+function MikSBT.FindBuff( obuff, unit, item)
+ local buff=strlower(obuff);
+ local tooltip=MSBT_Tooltip;
+ local textleft1=getglobal(tooltip:GetName().."TextLeft1");
+ if ( not unit ) then
+ unit ='player';
+ end
+ local my, me, mc, oy, oe, oc = GetWeaponEnchantInfo();
+ if ( my ) then
+ tooltip:SetOwner(UIParent, "ANCHOR_NONE");
+ tooltip:SetInventoryItem( unit, 16);
+ for i=1, 23 do
+ local text = getglobal("MSBT_TooltipTextLeft"..i):GetText();
+ if ( not text ) then
+ break;
+ elseif (text and strlower(text) == buff) then
+ tooltip:Hide();
+ return "main",me, mc;
+ end
+ end
+ tooltip:Hide();
+ elseif ( oy ) then
+ tooltip:SetOwner(UIParent, "ANCHOR_NONE");
+ tooltip:SetInventoryItem( unit, 17);
+ for i=1, 23 do
+ local text = getglobal("MSBT_TooltipTextLeft"..i):GetText();
+ if ( not text ) then
+ break;
+ elseif (text and strlower(text) == buff) then
+ tooltip:Hide();
+ return "off", oe, oc;
+ end
+ end
+ tooltip:Hide();
+ end
+ if ( item ) then return end
+ tooltip:SetOwner(UIParent, "ANCHOR_NONE");
+ tooltip:SetTrackingSpell();
+ local b = textleft1:GetText();
+ if ( b and strlower(b) == buff ) then
+ tooltip:Hide();
+ return "track",b;
+ end
+ local c=nil;
+ for i=1, 32 do
+ tooltip:SetOwner(UIParent, "ANCHOR_NONE");
+ tooltip:SetUnitBuff(unit, i);
+ b = textleft1:GetText();
+ tooltip:Hide();
+ if ( b and strlower(b) == buff ) then
+ return "buff", i, b;
+ elseif ( c==b ) then
+ break;
+ end
+ --c = b;
+ end
+ c=nil;
+ for i=1, 16 do
+ tooltip:SetOwner(UIParent, "ANCHOR_NONE");
+ tooltip:SetUnitDebuff(unit, i);
+ b = textleft1:GetText();
+ tooltip:Hide();
+ if ( b and strlower(b) == buff ) then
+ return "debuff", i, b;
+ elseif ( c==b) then
+ break;
+ end
+ --c = b;
+ end
+ tooltip:Hide();
+end
-- **********************************************************************************
-- This function gets the next animation display info object for the correct
@@ -1769,18 +2093,55 @@ function MikSBT.DoAnimation(animDisplayInfo, scrollArea)
local textDelta = animDisplayInfo.FontSize * (1 - (elapsedTime / STICKY_FADE_IN_TIME));
animDisplayInfo.FontObject:SetTextHeight(animDisplayInfo.FontSize + textDelta);
animDisplayInfo.FontObject:SetAlpha(1);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetAlpha(1);
+ animDisplayInfo.Texture:SetWidth(animDisplayInfo.FontSize + textDelta);
+ animDisplayInfo.Texture:SetHeight(animDisplayInfo.FontSize + textDelta);
+ end
return;
elseif (elapsedTime <= (STICKY_DISPLAY_TIME + STICKY_FADE_IN_TIME)) then
animDisplayInfo.FontObject:SetTextHeight(animDisplayInfo.FontSize);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetWidth(animDisplayInfo.FontSize);
+ animDisplayInfo.Texture:SetHeight(animDisplayInfo.FontSize);
+ end
+ if animDisplayInfo.IsCrit then
+ if not animDisplayInfo.timeLastJiggled then
+ animDisplayInfo.originalPositionX = animDisplayInfo.PositionX
+ animDisplayInfo.originalPositionY = animDisplayInfo.PositionY
+ animDisplayInfo.DecalageX = 0
+ animDisplayInfo.DecalageY = 0
+ animDisplayInfo.timeLastJiggled = 0
+ end
+ if animDisplayInfo.PositionY ~= (animDisplayInfo.originalPositionY + animDisplayInfo.DecalageY) then
+ animDisplayInfo.originalPositionX = animDisplayInfo.PositionX
+ animDisplayInfo.originalPositionY = animDisplayInfo.PositionY
+ end
+ if (elapsedTime - animDisplayInfo.timeLastJiggled > 0.05) then
+ animDisplayInfo.DecalageX = math.ceil(math.random(-1, 1));
+ animDisplayInfo.DecalageY = math.ceil(math.random(-1, 1));
+ animDisplayInfo.PositionX = animDisplayInfo.originalPositionX + animDisplayInfo.DecalageX;
+ animDisplayInfo.PositionY = animDisplayInfo.originalPositionY + animDisplayInfo.DecalageY;
+ animDisplayInfo.timeLastJiggled = elapsedTime;
+ animDisplayInfo.FontObject:SetPoint(animDisplayInfo.AnchorPoint, animDisplayInfo.PositionX, animDisplayInfo.PositionY);
+ end
+ end
return;
elseif (elapsedTime <= (STICKY_DISPLAY_TIME + STICKY_FADE_IN_TIME + STICKY_FADE_OUT_TIME)) then
local alpha = 1 - ((elapsedTime - STICKY_DISPLAY_TIME - STICKY_FADE_IN_TIME) / STICKY_FADE_OUT_TIME);
+ animDisplayInfo.timeLastJiggled = nil
animDisplayInfo.FontObject:SetAlpha(alpha);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetAlpha(alpha);
+ end
return;
end
-- Deactivate the animation.
animDisplayInfo.FontObject:SetAlpha(0);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetAlpha(0);
+ end
animDisplayInfo.IsActive = false;
return;
@@ -1797,6 +2158,9 @@ function MikSBT.DoAnimation(animDisplayInfo, scrollArea)
if (animationComplete) then
-- Set the font object's alpha.
animDisplayInfo.FontObject:SetAlpha(0);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetAlpha(0);
+ end
-- Deactive the animation.
animDisplayInfo.IsActive = false;
@@ -1804,6 +2168,9 @@ function MikSBT.DoAnimation(animDisplayInfo, scrollArea)
-- Move the font object and set its alpha.
animDisplayInfo.FontObject:SetPoint(animDisplayInfo.AnchorPoint, animDisplayInfo.PositionX, animDisplayInfo.PositionY);
animDisplayInfo.FontObject:SetAlpha(animDisplayInfo.Alpha);
+ if animDisplayInfo.Texture then
+ animDisplayInfo.Texture:SetAlpha(animDisplayInfo.Alpha);
+ end
end
-- Set the last update to the current time.
@@ -2151,7 +2518,7 @@ end
-- Displays the passed message in the passed scroll area with the passed parameters.
-- This function is for easy displaying of messages from external sources.
-- **********************************************************************************
-function MikSBT.DisplayMessage(message, displayType, isSticky, colorR, colorG, colorB, fontSize, fontIndex, outlineIndex)
+function MikSBT.DisplayMessage(message, displayType, isSticky, colorR, colorG, colorB, fontSize, fontIndex, outlineIndex, Texture)
-- Check if no message was passed and do nothing.
if (message == nil) then
return;
@@ -2235,6 +2602,7 @@ function MikSBT.DisplayMessage(message, displayType, isSticky, colorR, colorG, c
animationEvent.ColorR = colorR;
animationEvent.ColorG = colorG;
animationEvent.ColorB = colorB;
+ animationEvent.Texture = Texture;
-- Add the event to the animation system.
diff --git a/MikScrollingBattleText/MikScrollingBattleText.toc b/MikScrollingBattleText/MikScrollingBattleText.toc
index 878bc23..e780d18 100644
--- a/MikScrollingBattleText/MikScrollingBattleText.toc
+++ b/MikScrollingBattleText/MikScrollingBattleText.toc
@@ -1,8 +1,17 @@
## Interface: 11200
-## Version: 3.01
+## Version: 3.9
## Title: Mik's Scrolling Battle Text
## Notes: Scrolls battle information around the character model.
+## OptionalDeps: SW_FixLogStrings
## SavedVariables: MikSBT_Save
+
+Libs\AceLibrary\AceLibrary.lua
+Libs\AceLocale-2.2\AceLocale-2.2.lua
+Libs\BabbleSpell-2.2\Babble-Spell-2.2.lua
+
+MikScrollingBattleText-enUS.lua
+MikScrollingBattleText-frFR.lua
+
localization.lua
MikTableRecyclerObject.lua
MikCombatEventHelper.lua
diff --git a/MikScrollingBattleText/MikScrollingBattleText.xml b/MikScrollingBattleText/MikScrollingBattleText.xml
index c6b75ac..0975874 100644
--- a/MikScrollingBattleText/MikScrollingBattleText.xml
+++ b/MikScrollingBattleText/MikScrollingBattleText.xml
@@ -11,6 +11,15 @@
+
+
+
+
+ this:SetOwner(WorldFrame, "ANCHOR_NONE");
+
+
+
+
@@ -29,91 +38,101 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -140,91 +159,101 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -251,91 +280,101 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MikScrollingBattleText/MikTableRecyclerObject.lua b/MikScrollingBattleText/MikTableRecyclerObject.lua
index 9c35d6b..03d308b 100644
--- a/MikScrollingBattleText/MikTableRecyclerObject.lua
+++ b/MikScrollingBattleText/MikTableRecyclerObject.lua
@@ -1,6 +1,7 @@
-------------------------------------------------------------------------------------
-- Title: Mik's Table Recyler Object
-- Author: Mik
+-- Maintainer: Athene
-- Credits:
-- Thanks to tekkub, the author of compostLib. I adapted much of his code for
-- this object.
diff --git a/MikScrollingBattleText/localization.lua b/MikScrollingBattleText/localization.lua
index f3f5b70..e5dbf56 100644
--- a/MikScrollingBattleText/localization.lua
+++ b/MikScrollingBattleText/localization.lua
@@ -1,6 +1,7 @@
-------------------------------------------------------------------------------------
-- Title: Mik's Scrolling Battle Text
-- Author: Mik
+-- Maintainer: Athene
-------------------------------------------------------------------------------------
-- Create "namespace."
@@ -11,12 +12,14 @@ MikSBT = {};
-------------------------------------------------------------------------------
MikSBT.MOD_NAME = "MikScrollingBattleText"
-MikSBT.VERSION_NUMBER = 3.01;
-MikSBT.VERSION_STRING = "v3.01";
-MikSBT.WINDOW_TITLE = "Mik's Scrolling Battle Text " .. MikSBT.VERSION_STRING;
+MikSBT.VERSION_NUMBER = 3.9;
+MikSBT.VERSION_STRING = "v3.9";
+MikSBT.WINDOW_TITLE = "Mik's Scrolling Battle Text " .. MikSBT.VERSION_STRING .. " - \124cffF58CBA\124hAthene Edit\124h\124r";
MikSBT.COMMAND = "/msbt";
+local BS = AceLibrary("Babble-Spell-2.2")
+local L = AceLibrary("AceLocale-2.2"):new(MikSBT.MOD_NAME)
-------------------------------------------------------------------------------
-- English (Default)
@@ -53,25 +56,25 @@ MikSBT.COMMAND_USAGE = {
-- Output messages
------------------------------
-MikSBT.MSG_DEBUG_ENABLE = "Debug mode has been enabled.";
-MikSBT.MSG_DEBUG_DISABLE = "Debug mode has been disabled.";
-MikSBT.MSG_SEARCH_ENABLE = "Event search mode has been enabled. Searching for: ";
-MikSBT.MSG_SEARCH_DISABLE = "Event search mode has been disabled.";
-MikSBT.MSG_DISABLE = "The mod is now disabled.";
-MikSBT.MSG_ENABLE = "The mod is now enabled.";
-MikSBT.MSG_HITS = "Hits";
-MikSBT.MSG_CRIT = "Crit";
-MikSBT.MSG_CRITS = "Crits";
-MikSBT.MSG_MULTIPLE_TARGETS = "Multiple";
-MikSBT.MSG_VULERNABLE_TRAILER = " (%d vulnerability)";
-MikSBT.MSG_OVERHEAL_TRAILER = " <%d>";
-MikSBT.MSG_PROFILE_RESET = "Profile Reset";
-MikSBT.MSG_ENVIRONMENTAL_DROWNING = "Drowning";
-MikSBT.MSG_ENVIRONMENTAL_FALLING = "Falling";
-MikSBT.MSG_ENVIRONMENTAL_FATIGUE = "Fatigue";
-MikSBT.MSG_ENVIRONMENTAL_FIRE = "Fire";
-MikSBT.MSG_ENVIRONMENTAL_LAVA = "Lava";
-MikSBT.MSG_ENVIRONMENTAL_SLIME = "Slime";
+MikSBT.MSG_DEBUG_ENABLE = L["Debug mode has been enabled."];
+MikSBT.MSG_DEBUG_DISABLE = L["Debug mode has been disabled."];
+MikSBT.MSG_SEARCH_ENABLE = L["Event search mode has been enabled. Searching for: "];
+MikSBT.MSG_SEARCH_DISABLE = L["Event search mode has been disabled."];
+MikSBT.MSG_DISABLE = L["The mod is now disabled."];
+MikSBT.MSG_ENABLE = L["The mod is now enabled."];
+MikSBT.MSG_HITS = L["Hits"];
+MikSBT.MSG_CRIT = L["Crit"];
+MikSBT.MSG_CRITS = L["Crits"];
+MikSBT.MSG_MULTIPLE_TARGETS = L["Multiple"];
+MikSBT.MSG_VULERNABLE_TRAILER = L[" (%d vulnerability)"];
+MikSBT.MSG_OVERHEAL_TRAILER = L[" <\124cff00b37e\124h%d\124h\124r>"];
+MikSBT.MSG_PROFILE_RESET = L["Profile Reset"];
+MikSBT.MSG_ENVIRONMENTAL_DROWNING = L["Drowning"];
+MikSBT.MSG_ENVIRONMENTAL_FALLING = L["Falling"];
+MikSBT.MSG_ENVIRONMENTAL_FATIGUE = L["Fatigue"];
+MikSBT.MSG_ENVIRONMENTAL_FIRE = L["Fire"];
+MikSBT.MSG_ENVIRONMENTAL_LAVA = L["Lava"];
+MikSBT.MSG_ENVIRONMENTAL_SLIME = L["Slime"];
@@ -89,6 +92,11 @@ MikSBT.AVAILABLE_FONTS = {
[6] = {Name="Friz", Path="Fonts\\FRIZQT__.TTF"},
[7] = {Name="Porky", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\porky.ttf"},
[8] = {Name="Signature", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\signature.ttf"},
+ [9] = {Name="Black Castle", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\BlackCastleMF.ttf"},
+ [10] = {Name="Exocet", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\exocet.ttf"},
+ [11] = {Name="FuturaBold", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\FuturaBold.ttf"},
+ [12] = {Name="Mail Ray Stuff", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\mailrays.ttf"},
+ [13] = {Name="Pepsi", Path="Interface\\Addons\\MikScrollingBattleText\\Fonts\\pepsi.ttf"},
};
-- Holds the available font outlines.
@@ -151,20 +159,20 @@ MikSBT.DEFAULT_CONFIG = {
CreationVersion = MikSBT.VERSION_NUMBER,
ShowPartialEffects = true,
ShowOverheals = true,
- ShowGameDamage = false,
+ ShowGameDamage = true,
UseStickyCrits = true,
- AnimationStep = 2,
+ AnimationStep = 1.5,
MasterFontSettings = {
- Normal = {FontIndex=1, OutlineIndex=3, FontSize=18},
- Crit = {FontIndex=1, OutlineIndex=3, FontSize=26},
+ Normal = {FontIndex=7, OutlineIndex=2, FontSize=18},
+ Crit = {FontIndex=7, OutlineIndex=2, FontSize=26},
},
DisplaySettings = {
Incoming = {
Show = true,
- FrameOffsets = {x=-60, y=-160},
- AnimationStyle = 2,
- ScrollDirection = 2,
- ScrollHeight = 260,
+ FrameOffsets = {x=-450, y=-170},
+ AnimationStyle = 1,
+ ScrollDirection = 1,
+ ScrollHeight = 450,
FontSettings = {
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
Crit = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -173,10 +181,10 @@ MikSBT.DEFAULT_CONFIG = {
},
Outgoing = {
Show = true,
- FrameOffsets = {x=60, y=-160},
- AnimationStyle = 3,
- ScrollDirection = 2,
- ScrollHeight = 260,
+ FrameOffsets = {x=450, y=-170},
+ AnimationStyle = 1,
+ ScrollDirection = 1,
+ ScrollHeight = 450,
FontSettings = {
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
Crit = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -185,8 +193,8 @@ MikSBT.DEFAULT_CONFIG = {
},
Notification = {
Show = true,
- FrameOffsets = {x=0, y=100},
- AnimationStyle = 1,
+ FrameOffsets = {x=-300, y=-322},
+ AnimationStyle = 1,
ScrollDirection = 1,
ScrollHeight = 150,
FontSettings = {
@@ -199,16 +207,16 @@ MikSBT.DEFAULT_CONFIG = {
EventSettings = {
MSBT_EVENTTYPE_INCOMING_DAMAGE = {
Show = true,
- Message = "(%n) -%a",
+ Message = "-%a",
FontSettings = {
- Color = {r=1, g=0, b=0},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
Crit = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_INCOMING_MISS = {
Show = true,
- Message = "Miss!",
+ Message = MISS.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -216,7 +224,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_DODGE = {
Show = true,
- Message = "Dodge!",
+ Message = DODGE.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -224,7 +232,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_PARRY = {
Show = true,
- Message = "Parry!",
+ Message = PARRY.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -232,7 +240,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_BLOCK = {
Show = true,
- Message = "Block!",
+ Message = BLOCK.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -240,7 +248,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_ABSORB = {
Show = true,
- Message = "Absorb!",
+ Message = ABSORB.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -248,7 +256,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_IMMUNE = {
Show = true,
- Message = "Immune!",
+ Message = IMMUNE.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -256,24 +264,24 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_DAMAGE = {
Show = true,
- Message = "(%s) -%a",
+ Message = "-%a",
FontSettings = {
- Color = {r=0.502, g=0, b=0.502},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
Crit = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_INCOMING_SPELL_DOT = {
Show = true,
- Message = "(%s) -%a",
+ Message = "-%a",
FontSettings = {
- Color = {r=0.502, g=0, b=0.502},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_INCOMING_SPELL_MISS = {
Show = true,
- Message = "(%s) Miss!",
+ Message = MISS.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -281,7 +289,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_DODGE = {
Show = true,
- Message = "(%s) Dodge!",
+ Message = DODGE.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -289,7 +297,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_PARRY = {
Show = true,
- Message = "(%s) Parry!",
+ Message = PARRY.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -297,7 +305,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_BLOCK = {
Show = true,
- Message = "(%s) Block!",
+ Message = BLOCK.."!",
FontSettings = {
Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -305,7 +313,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_RESIST = {
Show = true,
- Message = "(%s) Resist!",
+ Message = "(%s) "..RESIST.."!",
FontSettings = {
Color = {r=0.502, g=0, b=0.502},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -313,7 +321,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_ABSORB = {
Show = true,
- Message = "(%s) Absorb!",
+ Message = "(%s) "..ABSORB.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -321,7 +329,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_IMMUNE = {
Show = true,
- Message = "(%s) Immune!",
+ Message = "(%s) "..IMMUNE.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -329,7 +337,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_SPELL_REFLECT = {
Show = true,
- Message = "(%s) Reflect!",
+ Message = "(%s) "..REFLECT.."!",
FontSettings = {
Color = {r=0.502, g=0, b=0.502},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -338,7 +346,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_HEAL = {
Show = true,
- Message = "(%s - %n) +%a",
+ Message = "+%a (%n)",
FontSettings = {
Color = {r=0, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -347,7 +355,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_INCOMING_HOT = {
Show = true,
- Message = "(%s - %n) +%a",
+ Message = "+%a (%n)",
FontSettings = {
Color = {r=0, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -367,46 +375,46 @@ MikSBT.DEFAULT_CONFIG = {
Show = true,
Message = "%a",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
Crit = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_MISS = {
Show = true,
- Message = "Miss!",
+ Message = MISS.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_DODGE = {
Show = true,
- Message = "Dodge!",
+ Message = DODGE.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_PARRY = {
Show = true,
- Message = "Parry!",
+ Message = PARRY.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_BLOCK = {
Show = true,
- Message = "Block!",
+ Message = BLOCK.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=0, g=0, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_ABSORB = {
Show = true,
- Message = "Absorb!",
+ Message = ABSORB.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -414,7 +422,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_IMMUNE = {
Show = true,
- Message = "Immune!",
+ Message = IMMUNE.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -422,7 +430,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_EVADE = {
Show = true,
- Message = "Evade!",
+ Message = EVADE.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=22},
@@ -430,7 +438,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_DAMAGE = {
Show = true,
- Message = "%a (%s)",
+ Message = "%a",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -439,7 +447,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_DOT = {
Show = true,
- Message = "%a (%s)",
+ Message = "%a",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -447,39 +455,39 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_MISS = {
Show = true,
- Message = "Miss! (%s)",
+ Message = MISS.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_SPELL_DODGE = {
Show = true,
- Message = "Dodge! (%s)",
+ Message = DODGE.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_SPELL_PARRY = {
Show = true,
- Message = "Parry! (%s)",
+ Message = PARRY.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_SPELL_BLOCK = {
Show = true,
- Message = "Block! (%s)",
+ Message = BLOCK.."!",
FontSettings = {
- Color = {r=1, g=1, b=1},
+ Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_OUTGOING_SPELL_RESIST = {
Show = true,
- Message = "Resist! (%s)",
+ Message = RESIST.."!",
FontSettings = {
Color = {r=0.502, g=0.502, b=0.698},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -487,7 +495,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_ABSORB = {
Show = true,
- Message = "Absorb! (%s)",
+ Message = "(%s) "..ABSORB.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -495,7 +503,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_IMMUNE = {
Show = true,
- Message = "Immune! (%s)",
+ Message = "(%s) "..IMMUNE.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -503,7 +511,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_REFLECT = {
Show = true,
- Message = "Reflect! (%s)",
+ Message = "(%s) "..REFLECT.."!",
FontSettings = {
Color = {r=1, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -512,7 +520,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_SPELL_EVADE = {
Show = true,
- Message = "Evade! (%s)",
+ Message = "(%s) "..EVADE.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=22},
@@ -520,7 +528,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_HEAL = {
Show = true,
- Message = "+%a (%s - %n)",
+ Message = "+%a",
FontSettings = {
Color = {r=0, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -529,7 +537,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_HOT = {
Show = true,
- Message = "+%a (%s - %n)",
+ Message = "+%a",
FontSettings = {
Color = {r=0, g=1, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -549,7 +557,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_MISS = {
Show = true,
- Message = "Pet Miss!",
+ Message = "Pet "..MISS.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -557,7 +565,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_DODGE = {
Show = true,
- Message = "Pet Dodge!",
+ Message = "Pet "..DODGE.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -565,7 +573,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_PARRY = {
Show = true,
- Message = "Pet Parry!",
+ Message = "Pet "..PARRY.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -573,7 +581,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_BLOCK = {
Show = true,
- Message = "Pet Block!",
+ Message = "Pet "..BLOCK.."!",
FontSettings = {
Color = {r=1, g=0.502, b=0},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -581,7 +589,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_ABSORB = {
Show = true,
- Message = "Pet Absorb!",
+ Message = "Pet "..ABSORB.."!",
FontSettings = {
Color = {r=0.502, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -589,7 +597,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_IMMUNE = {
Show = true,
- Message = "Pet Immune!",
+ Message = "Pet "..IMMUNE.."!",
FontSettings = {
Color = {r=0.502, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -597,7 +605,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_EVADE = {
Show = true,
- Message = "Pet Evade!",
+ Message = "Pet "..EVADE.."!",
FontSettings = {
Color = {r=1, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -614,7 +622,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_MISS = {
Show = true,
- Message = "Pet Miss! (%s)",
+ Message = "Pet "..MISS.."! (%s)",
FontSettings = {
Color = {r=0.33, g=0.33, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -622,7 +630,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_DODGE = {
Show = true,
- Message = "Pet Dodge! (%s)",
+ Message = "Pet "..DODGE.."! (%s)",
FontSettings = {
Color = {r=0.33, g=0.33, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -630,7 +638,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_PARRY = {
Show = true,
- Message = "Pet Parry! (%s)",
+ Message = "Pet "..PARRY.."! (%s)",
FontSettings = {
Color = {r=0.33, g=0.33, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -638,7 +646,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_BLOCK = {
Show = true,
- Message = "Pet Block! (%s)",
+ Message = "Pet "..BLOCK.."! (%s)",
FontSettings = {
Color = {r=0.33, g=0.33, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -646,7 +654,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_RESIST = {
Show = true,
- Message = "Pet Resist! (%s)",
+ Message = "Pet "..RESIST.."! (%s)",
FontSettings = {
Color = {r=0.502, g=0.502, b=0.698},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -654,7 +662,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_ABSORB = {
Show = true,
- Message = "Pet Absorb! (%s)",
+ Message = "Pet "..ABSORB.."! (%s)",
FontSettings = {
Color = {r=0.502, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -662,7 +670,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_IMMUNE = {
Show = true,
- Message = "Pet Immune! (%s)",
+ Message = "Pet "..IMMUNE.."! (%s)",
FontSettings = {
Color = {r=0.502, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
@@ -670,7 +678,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_OUTGOING_PET_SPELL_EVADE = {
Show = true,
- Message = "Pet Evade! (%s)",
+ Message = "Pet "..EVADE.."! (%s)",
FontSettings = {
Color = {r=1, g=0.502, b=1},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=22},
@@ -735,19 +743,19 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_NOTIFICATION_POWER_GAIN = {
Show = true,
- Message = "+%a %s",
+ Message = "+%a",
IsSticky = false,
FontSettings = {
- Color = {r=1, g=1, b=0},
+ Color = {r=0.3098039215686275, g=0.3098039215686275, b=0.8784313725490196},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
MSBT_EVENTTYPE_NOTIFICATION_POWER_LOSS = {
Show = true,
- Message = "-%a %s",
+ Message = "-%a",
IsSticky = false,
FontSettings = {
- Color = {r=1, g=1, b=0},
+ Color = {r=0.7568627450980392, g=0.2705882352941176, b=0.8235294117647058},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=0},
},
},
@@ -771,7 +779,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_NOTIFICATION_HONOR_GAIN = {
Show = true,
- Message = "+%a Honor",
+ Message = "+%a "..HONOR,
IsSticky = false,
FontSettings = {
Color = {r=0.502, g=0.502, b=0.698},
@@ -780,7 +788,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_NOTIFICATION_REP_GAIN = {
Show = true,
- Message = "+%a Reputation (%s)",
+ Message = "+%a "..TUTORIAL_TITLE16.." (%s)",
IsSticky = false,
FontSettings = {
Color = {r=0.502, g=0.502, b=0.698},
@@ -789,7 +797,7 @@ MikSBT.DEFAULT_CONFIG = {
},
MSBT_EVENTTYPE_NOTIFICATION_REP_LOSS = {
Show = true,
- Message = "-%a Reputation (%s)",
+ Message = "-%a "..TUTORIAL_TITLE16.." (%s)",
IsSticky = false,
FontSettings = {
Color = {r=0.502, g=0.502, b=0.698},
@@ -849,6 +857,7 @@ MikSBT.DEFAULT_CONFIG = {
TriggerType = 1,
Threshold = 40,
},
+ Texture = "Interface\\Icons\\spell_holy_sealofsacrifice"
},
MSBT_TRIGGER_LOW_MANA = {
EventSettings = {
@@ -881,11 +890,12 @@ MikSBT.DEFAULT_CONFIG = {
TriggerType = 3,
Threshold = 40,
},
+ Texture = "Interface\\Icons\\spell_holy_sealofsacrifice"
},
MSBT_TRIGGER_EXECUTE = {
EventSettings = {
Show = true,
- Message = "Execute!",
+ Message = BS["Execute"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -893,15 +903,33 @@ MikSBT.DEFAULT_CONFIG = {
},
},
TriggerSettings = {
- Classes = {PALADIN=true,WARRIOR=true},
+ Classes = {WARRIOR=true},
TriggerType = 4,
Threshold = 20,
},
+ Texture = "Interface\\Icons\\inv_sword_48"
+ },
+ MSBT_TRIGGER_HAMMER_OF_WRATH = {
+ EventSettings = {
+ Show = true,
+ Message = BS["Hammer of Wrath"].."!",
+ IsSticky = true,
+ FontSettings = {
+ Color = {r=1, g=1, b=0},
+ Normal = {FontIndex=0, OutlineIndex=0, FontSize=26},
+ },
+ },
+ TriggerSettings = {
+ Classes = {PALADIN=true},
+ TriggerType = 4,
+ Threshold = 20,
+ },
+ Texture = "Interface\\Icons\\ability_thunderclap"
},
MSBT_TRIGGER_COUNTER_ATTACK = {
EventSettings = {
Show = true,
- Message = "Counterattack!",
+ Message = BS["Counterattack"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -915,11 +943,12 @@ MikSBT.DEFAULT_CONFIG = {
"CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE", "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE", "CHAT_MSG_SPELL_PARTY_DAMAGE"},
SearchPatterns = {"VSPARRYOTHERSELF", "SPELLPARRIEDOTHERSELF"},
},
+ Texture = "Interface\\Icons\\ability_warrior_challange"
},
MSBT_TRIGGER_MONGOOSE_BITE = {
EventSettings = {
Show = true,
- Message = "Mongoose Bite!",
+ Message = BS["Mongoose Bite"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -933,11 +962,12 @@ MikSBT.DEFAULT_CONFIG = {
"CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE", "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE", "CHAT_MSG_SPELL_PARTY_DAMAGE"},
SearchPatterns = {"VSDODGEOTHERSELF", "SPELLDODGEDOTHERSELF"},
},
+ Texture = "Interface\\Icons\\ability_hunter_swiftstrike"
},
MSBT_TRIGGER_CLEARCAST = {
EventSettings = {
Show = true,
- Message = "Clearcast!",
+ Message = BS["Clearcasting"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -948,13 +978,14 @@ MikSBT.DEFAULT_CONFIG = {
Classes = {MAGE=true,SHAMAN=true},
TriggerType = 6,
TriggerEvents = {"CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"},
- SearchPatterns = {"You gain Clearcast"},
+ SearchPatterns = {string.format(AURAADDEDSELFHELPFUL, BS["Clearcasting"])},
},
+ Texture = "Interface\\Icons\\spell_shadow_manaburn"
},
MSBT_TRIGGER_RIPOSTE = {
EventSettings = {
Show = true,
- Message = "Riposte!",
+ Message = BS["Riposte"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -968,6 +999,7 @@ MikSBT.DEFAULT_CONFIG = {
"CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE", "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE", "CHAT_MSG_SPELL_PARTY_DAMAGE"},
SearchPatterns = {"VSPARRYOTHERSELF", "SPELLPARRIEDOTHERSELF"},
},
+ Texture = "Interface\\Icons\\ability_warrior_challange"
},
MSBT_TRIGGER_WINDFURY = {
EventSettings = {
@@ -982,13 +1014,31 @@ MikSBT.DEFAULT_CONFIG = {
TriggerSettings = {
TriggerType = 6,
TriggerEvents = {"CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"},
- SearchPatterns = {"You gain %d extra attacks through Windfury"},
+ SearchPatterns = {string.format(SPELLEXTRAATTACKSSELF, 1, BS["Windfury Weapon"])}, --"Vous gagnez %d attaques supplémentaires grâce à Arme Furie-des-vents"
},
+ Texture = "Interface\\Icons\\spell_nature_cyclone"
+ },
+ MSBT_TRIGGER_HAND_OF_JUSTICE = {
+ EventSettings = {
+ Show = true,
+ Message = BS["Hand of Justice"].."!",
+ IsSticky = true,
+ FontSettings = {
+ Color = {r=1, g=1, b=0},
+ Normal = {FontIndex=0, OutlineIndex=0, FontSize=26},
+ },
+ },
+ TriggerSettings = {
+ TriggerType = 6,
+ TriggerEvents = {"CHAT_MSG_SPELL_SELF_BUFF"},
+ SearchPatterns = {string.format(SPELLEXTRAATTACKSSELF, 1, BS["Hand of Justice"])}, --"Vous gagnez %d attaques supplémentaires grâce à Main de justice"
+ },
+ Texture = "Interface\\Icons\\inv_jewelry_talisman_01"
},
MSBT_TRIGGER_NIGHTFALL = {
EventSettings = {
Show = true,
- Message = "Nightfall!",
+ Message = BS["Nightfall"].."!",
IsSticky = true,
FontSettings = {
Color = {r=0.709, g=0, b=0.709},
@@ -999,13 +1049,14 @@ MikSBT.DEFAULT_CONFIG = {
Classes = {WARLOCK=true},
TriggerType = 6,
TriggerEvents = {"CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"},
- SearchPatterns = {"You gain Shadow Trance"},
+ SearchPatterns = {string.format(AURAADDEDSELFHELPFUL, BS["Shadow Trance"])},
},
+ Texture = "Interface\\Icons\\spell_shadow_twilight"
},
MSBT_TRIGGER_OVERPOWER = {
EventSettings = {
Show = true,
- Message = "Overpower!",
+ Message = BS["Overpower"].."!",
IsSticky = true,
FontSettings = {
Color = {r=1, g=1, b=0},
@@ -1018,6 +1069,7 @@ MikSBT.DEFAULT_CONFIG = {
TriggerEvents = {"CHAT_MSG_COMBAT_SELF_MISSES", "CHAT_MSG_SPELL_SELF_DAMAGE"},
SearchPatterns = {"VSDODGESELFOTHER", "SPELLDODGEDSELFOTHER"},
},
+ Texture = "Interface\\Icons\\ability_meleedamage"
},
},
diff --git a/MikScrollingBattleText/sounds/LowHealth.mp3 b/MikScrollingBattleText/sounds/LowHealth.mp3
new file mode 100644
index 0000000..b97b894
Binary files /dev/null and b/MikScrollingBattleText/sounds/LowHealth.mp3 differ
diff --git a/MikScrollingBattleText/sounds/LowMana.mp3 b/MikScrollingBattleText/sounds/LowMana.mp3
new file mode 100644
index 0000000..93bfd89
Binary files /dev/null and b/MikScrollingBattleText/sounds/LowMana.mp3 differ
diff --git a/MikScrollingBattleTextOptions/MSBTOptions.lua b/MikScrollingBattleTextOptions/MSBTOptions.lua
index 16322af..818be8c 100644
--- a/MikScrollingBattleTextOptions/MSBTOptions.lua
+++ b/MikScrollingBattleTextOptions/MSBTOptions.lua
@@ -1,6 +1,7 @@
-------------------------------------------------------------------------------------
-- Title: Mik's Scrolling Battle Text Options
-- Author: Mik
+-- Maintainer: Athene
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
@@ -34,7 +35,7 @@ local MAX_ANIMATION_STEP = 5;
-- The min and max scroll heights.
local MIN_SCROLL_HEIGHT = 100;
-local MAX_SCROLL_HEIGHT = 300;
+local MAX_SCROLL_HEIGHT = 600;
-- The size of an event settings line and number of event items per page.
local EVENT_ITEM_HEIGHT = 25;
@@ -821,7 +822,7 @@ end
function MikSBTOpt.InitSliders()
-- Initialize the Animation Step slider.
local key = "Tab1FrameAnimationStepSlider";
- MikSBTOpt.SetupSlider(OPTIONS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.SLIDERS[key].Tooltip, MIN_ANIMATION_STEP, MAX_ANIMATION_STEP, 1, "AnimationStep");
+ MikSBTOpt.SetupSlider(OPTIONS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.SLIDERS[key].Tooltip, MIN_ANIMATION_STEP, MAX_ANIMATION_STEP, 0.5, "AnimationStep");
-- Initialize the scroll height slider.
key = "ScrollHeightSlider";
@@ -1332,6 +1333,8 @@ function MikSBTOpt.InitEditboxes()
key = "XOffsetEditbox"; MikSBTOpt.SetupEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "YOffsetEditbox"; MikSBTOpt.SetupEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
+ key = "IconNameEditbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
+
key = "SearchPattern1Editbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "SearchPattern2Editbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
end
@@ -3107,7 +3110,7 @@ function MikSBTOpt.SetupAvailableTriggerEvents()
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_PARTY_MISSES");
- table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE");
+ table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE"); -- athenne add
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PARTY_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS");
@@ -3134,6 +3137,7 @@ function MikSBTOpt.SetupAvailableTriggerEvents()
table.insert(availableTriggerEvents, "CHAT_MSG_SKILL");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_XP_GAIN");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HOSTILE_DEATH");
+ table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE");
end
@@ -3235,6 +3239,15 @@ function MikSBTOpt.ShowTriggerConfig(triggerKey)
-- Populate the trigger type.
MikSBTOpt.PopulateDropdown(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerTypeDropdown", triggerData.TriggerSettings.TriggerType);
+ -- Holds the Icon Texture.
+ local texture = "";
+
+ -- Check if there is a texture defined.
+ if (triggerData.Texture) then
+ texture = triggerData.Texture or "";
+ end
+
+ MikSBTOpt.PopulateEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "IconNameEditbox", texture);
-- Setup the trigger controls appropriately depending on the trigger type.
MikSBTOpt.SetupVariableTriggerControls(triggerKey, triggerData.TriggerSettings.TriggerType == MikCEH.TRIGGERTYPE_SEARCH_PATTERN);
@@ -3272,6 +3285,8 @@ function MikSBTOpt.SetupVariableTriggerControls(triggerKey, showSearch)
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox"):Show();
+
+ getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TextureHorizontalBarBottom"):Show();
-- Clear the selected trigger events.
if (not triggerFrame.SelectedTriggerEvents) then
@@ -3318,6 +3333,8 @@ function MikSBTOpt.SetupVariableTriggerControls(triggerKey, showSearch)
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent4Checkbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox"):Hide();
+
+ getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TextureHorizontalBarBottom"):Hide();
-- Populate the threshold slider.
MikSBTOpt.PopulateSlider(TRIGGER_CONFIGURATION_FRAME_NAME .. "ThresholdSlider", triggerData.TriggerSettings.Threshold or 1);
@@ -3396,7 +3413,12 @@ function MikSBTOpt.SaveTriggerConfig()
-- Save the trigger type.
triggerData.TriggerSettings.TriggerType = UIDropDownMenu_GetSelectedValue(getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerTypeDropdown"));
-
+ -- Save the Icon Name
+ local texture = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "IconNameEditbox"):GetText();
+ if (texture) and (texture ~= "") then
+ triggerData.Texture = texture;
+ end
+
-- Check if the trigger type is search pattern.
if (triggerData.TriggerSettings.TriggerType == MikCEH.TRIGGERTYPE_SEARCH_PATTERN) then
-- Clear the threshold field.
diff --git a/MikScrollingBattleTextOptions/MSBTOptions.xml b/MikScrollingBattleTextOptions/MSBTOptions.xml
index 3f46616..42c0b07 100644
--- a/MikScrollingBattleTextOptions/MSBTOptions.xml
+++ b/MikScrollingBattleTextOptions/MSBTOptions.xml
@@ -2013,6 +2013,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2226,7 +2240,7 @@
-
+
diff --git a/MikScrollingBattleTextOptions/MikScrollingBattleTextOptions.toc b/MikScrollingBattleTextOptions/MikScrollingBattleTextOptions.toc
index 6621658..0cd1f75 100644
--- a/MikScrollingBattleTextOptions/MikScrollingBattleTextOptions.toc
+++ b/MikScrollingBattleTextOptions/MikScrollingBattleTextOptions.toc
@@ -1,5 +1,5 @@
## Interface: 11200
-## Version: 3.0
+## Version: 3.9
## Title: Mik's Scrolling Battle Text Options
## Notes: Load on demand options for Mik's Scrolling Battle Text
## Dependencies: MikScrollingBattleText
diff --git a/MikScrollingBattleTextOptions/localization_options.lua b/MikScrollingBattleTextOptions/localization_options.lua
index a3f4a29..6caf9d2 100644
--- a/MikScrollingBattleTextOptions/localization_options.lua
+++ b/MikScrollingBattleTextOptions/localization_options.lua
@@ -1,6 +1,7 @@
-------------------------------------------------------------------------------------
-- Title: Mik's Scrolling Battle Text Options
-- Author: Mik
+-- Maintainer: Athene
-------------------------------------------------------------------------------------
-- Create Options "namespace."
@@ -126,6 +127,7 @@ MikSBTOpt.EDITBOXES = {
["Tab1FrameNewProfileNameEditbox"] = { Label="New Profile Name", Tooltip="Allows you to enter the name of a new profile."},
["XOffsetEditbox"] = { Label="X Offset", Tooltip="Allows you to enter the X offset of the selected scroll frame."},
["YOffsetEditbox"] = { Label="Y Offset", Tooltip="Allows you to enter the Y offset of the selected scroll frame."},
+ ["IconNameEditbox"] = { Label="Icon Path", Tooltip="Allows you to enter the path of the file to display as icon."},
["SearchPattern1Editbox"] = { Label="Search Pattern 1", Tooltip="Allows you to enter a search pattern that will cause the trigger to fire."},
["SearchPattern2Editbox"] = { Label="Search Pattern 2", Tooltip="Allows you to enter a search pattern that will cause the trigger to fire."},
};