handle->timer registry
+ local handle = tostring(timer)
+
+ local selftimers = AceTimer.selfs[self]
+ if not selftimers then
+ selftimers = {}
+ AceTimer.selfs[self] = selftimers
+ end
+ selftimers[handle] = timer
+ selftimers.__ops = (selftimers.__ops or 0) + 1
+
+ return handle
+end
+
+--- Schedule a new one-shot timer.
+-- The timer will fire once in `delay` seconds, unless canceled before.
+-- @param callback Callback function for the timer pulse (funcref or method name).
+-- @param delay Delay for the timer, in seconds.
+-- @param arg An optional argument to be passed to the callback function.
+-- @usage
+-- MyAddon = LibStub("AceAddon-3.0"):NewAddon("TimerTest", "AceTimer-3.0")
+--
+-- function MyAddon:OnEnable()
+-- self:ScheduleTimer("TimerFeedback", 5)
+-- end
+--
+-- function MyAddon:TimerFeedback()
+-- print("5 seconds passed")
+-- end
+function AceTimer:ScheduleTimer(callback, delay, arg)
+ return Reg(self, callback, delay, arg)
+end
+
+--- Schedule a repeating timer.
+-- The timer will fire every `delay` seconds, until canceled.
+-- @param callback Callback function for the timer pulse (funcref or method name).
+-- @param delay Delay for the timer, in seconds.
+-- @param arg An optional argument to be passed to the callback function.
+-- @usage
+-- MyAddon = LibStub("AceAddon-3.0"):NewAddon("TimerTest", "AceTimer-3.0")
+--
+-- function MyAddon:OnEnable()
+-- self.timerCount = 0
+-- self.testTimer = self:ScheduleRepeatingTimer("TimerFeedback", 5)
+-- end
+--
+-- function MyAddon:TimerFeedback()
+-- self.timerCount = self.timerCount + 1
+-- print(("%d seconds passed"):format(5 * self.timerCount))
+-- -- run 30 seconds in total
+-- if self.timerCount == 6 then
+-- self:CancelTimer(self.testTimer)
+-- end
+-- end
+function AceTimer:ScheduleRepeatingTimer(callback, delay, arg)
+ return Reg(self, callback, delay, arg, true)
+end
+
+--- Cancels a timer with the given handle, registered by the same addon object as used for `:ScheduleTimer`
+-- Both one-shot and repeating timers can be canceled with this function, as long as the `handle` is valid
+-- and the timer has not fired yet or was canceled before.
+-- @param handle The handle of the timer, as returned by `:ScheduleTimer` or `:ScheduleRepeatingTimer`
+-- @param silent If true, no error is raised if the timer handle is invalid (expired or already canceled)
+-- @return True if the timer was successfully cancelled.
+function AceTimer:CancelTimer(handle, silent)
+ if not handle then return end -- nil handle -> bail out without erroring
+ if type(handle) ~= "string" then
+ error(MAJOR..": CancelTimer(handle): 'handle' - expected a string", 2) -- for now, anyway
+ end
+ local selftimers = AceTimer.selfs[self]
+ local timer = selftimers and selftimers[handle]
+ if silent then
+ if timer then
+ timer.callback = nil -- don't run it again
+ timer.delay = nil -- if this is the currently-executing one: don't even reschedule
+ -- The timer object is removed in the OnUpdate loop
+ end
+ return not not timer -- might return "true" even if we double-cancel. we'll live.
+ else
+ if not timer then
+ geterrorhandler()(MAJOR..": CancelTimer(handle[, silent]): '"..tostring(handle).."' - no such timer registered")
+ return false
+ end
+ if not timer.callback then
+ geterrorhandler()(MAJOR..": CancelTimer(handle[, silent]): '"..tostring(handle).."' - timer already cancelled or expired")
+ return false
+ end
+ timer.callback = nil -- don't run it again
+ timer.delay = nil -- if this is the currently-executing one: don't even reschedule
+ return true
+ end
+end
+
+--- Cancels all timers registered to the current addon object ('self')
+function AceTimer:CancelAllTimers()
+ if not(type(self) == "string" or type(self) == "table") then
+ error(MAJOR..": CancelAllTimers(): 'self' - must be a string or a table",2)
+ end
+ if self == AceTimer then
+ error(MAJOR..": CancelAllTimers(): supply a meaningful 'self'", 2)
+ end
+
+ local selftimers = AceTimer.selfs[self]
+ if selftimers then
+ for handle,v in pairs(selftimers) do
+ if type(v) == "table" then -- avoid __ops, etc
+ AceTimer.CancelTimer(self, handle, true)
+ end
+ end
+ end
+end
+
+--- Returns the time left for a timer with the given handle, registered by the current addon object ('self').
+-- This function will raise a warning when the handle is invalid, but not stop execution.
+-- @param handle The handle of the timer, as returned by `:ScheduleTimer` or `:ScheduleRepeatingTimer`
+-- @return The time left on the timer, or false if the handle is invalid.
+function AceTimer:TimeLeft(handle)
+ if not handle then return end
+ if type(handle) ~= "string" then
+ error(MAJOR..": TimeLeft(handle): 'handle' - expected a string", 2) -- for now, anyway
+ end
+ local selftimers = AceTimer.selfs[self]
+ local timer = selftimers and selftimers[handle]
+ if not timer then
+ geterrorhandler()(MAJOR..": TimeLeft(handle): '"..tostring(handle).."' - no such timer registered")
+ return false
+ end
+ return timer.when - GetTime()
+end
+
+
+-- ---------------------------------------------------------------------
+-- PLAYER_REGEN_ENABLED: Run through our .selfs[] array step by step
+-- and clean it out - otherwise the table indices can grow indefinitely
+-- if an addon starts and stops a lot of timers. AceBucket does this!
+--
+-- See ACE-94 and tests/AceTimer-3.0-ACE-94.lua
+
+local lastCleaned = nil
+
+local function OnEvent(this, event)
+ if event~="PLAYER_REGEN_ENABLED" then
+ return
+ end
+
+ -- Get the next 'self' to process
+ local selfs = AceTimer.selfs
+ local self = next(selfs, lastCleaned)
+ if not self then
+ self = next(selfs)
+ end
+ lastCleaned = self
+ if not self then -- should only happen if .selfs[] is empty
+ return
+ end
+
+ -- Time to clean it out?
+ local list = selfs[self]
+ if (list.__ops or 0) < 250 then -- 250 slosh indices = ~10KB wasted (max!). For one 'self'.
+ return
+ end
+
+ -- Create a new table and copy all members over
+ local newlist = {}
+ local n=0
+ for k,v in pairs(list) do
+ newlist[k] = v
+ n=n+1
+ end
+ newlist.__ops = 0 -- Reset operation count
+
+ -- And since we now have a count of the number of live timers, check that it's reasonable. Emit a warning if not.
+ if n>BUCKETS then
+ DEFAULT_CHAT_FRAME:AddMessage(MAJOR..": Warning: The addon/module '"..tostring(self).."' has "..n.." live timers. Surely that's not intended?")
+ end
+
+ selfs[self] = newlist
+end
+
+-- ---------------------------------------------------------------------
+-- Embed handling
+
+AceTimer.embeds = AceTimer.embeds or {}
+
+local mixins = {
+ "ScheduleTimer", "ScheduleRepeatingTimer",
+ "CancelTimer", "CancelAllTimers",
+ "TimeLeft"
+}
+
+function AceTimer:Embed(target)
+ AceTimer.embeds[target] = true
+ for _,v in pairs(mixins) do
+ target[v] = AceTimer[v]
+ end
+ return target
+end
+
+-- AceTimer:OnEmbedDisable( target )
+-- target (object) - target object that AceTimer is embedded in.
+--
+-- cancel all timers registered for the object
+function AceTimer:OnEmbedDisable( target )
+ target:CancelAllTimers()
+end
+
+
+for addon in pairs(AceTimer.embeds) do
+ AceTimer:Embed(addon)
+end
+
+-- ---------------------------------------------------------------------
+-- Debug tools (expose copies of internals to test suites)
+AceTimer.debug = AceTimer.debug or {}
+AceTimer.debug.HZ = HZ
+AceTimer.debug.BUCKETS = BUCKETS
+
+-- ---------------------------------------------------------------------
+-- Finishing touchups
+
+AceTimer.frame:SetScript("OnUpdate", OnUpdate)
+AceTimer.frame:SetScript("OnEvent", OnEvent)
+AceTimer.frame:RegisterEvent("PLAYER_REGEN_ENABLED")
+
+-- In theory, we should hide&show the frame based on there being timers or not.
+-- However, this job is fairly expensive, and the chance that there will
+-- actually be zero timers running is diminuitive to say the lest.
diff --git a/Decursive/Libs/AceTimer-3.0/AceTimer-3.0.xml b/Decursive/Libs/AceTimer-3.0/AceTimer-3.0.xml
new file mode 100644
index 0000000..38e9021
--- /dev/null
+++ b/Decursive/Libs/AceTimer-3.0/AceTimer-3.0.xml
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua
new file mode 100644
index 0000000..274016c
--- /dev/null
+++ b/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua
@@ -0,0 +1,240 @@
+--[[ $Id: CallbackHandler-1.0.lua 14 2010-08-09 00:43:38Z mikk $ ]]
+local MAJOR, MINOR = "CallbackHandler-1.0", 6
+local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
+
+if not CallbackHandler then return end -- No upgrade needed
+
+local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
+
+-- Lua APIs
+local tconcat = table.concat
+local assert, error, loadstring = assert, error, loadstring
+local setmetatable, rawset, rawget = setmetatable, rawset, rawget
+local next, select, pairs, type, tostring = next, select, pairs, type, tostring
+
+-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
+-- List them here for Mikk's FindGlobals script
+-- GLOBALS: geterrorhandler
+
+local xpcall = xpcall
+
+local function errorhandler(err)
+ return geterrorhandler()(err)
+end
+
+local function CreateDispatcher(argCount)
+ local code = [[
+ local next, xpcall, eh = ...
+
+ local method, ARGS
+ local function call() method(ARGS) end
+
+ local function dispatch(handlers, ...)
+ local index
+ index, method = next(handlers)
+ if not method then return end
+ local OLD_ARGS = ARGS
+ ARGS = ...
+ repeat
+ xpcall(call, eh)
+ index, method = next(handlers, index)
+ until not method
+ ARGS = OLD_ARGS
+ end
+
+ return dispatch
+ ]]
+
+ local ARGS, OLD_ARGS = {}, {}
+ for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end
+ code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", "))
+ return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler)
+end
+
+local Dispatchers = setmetatable({}, {__index=function(self, argCount)
+ local dispatcher = CreateDispatcher(argCount)
+ rawset(self, argCount, dispatcher)
+ return dispatcher
+end})
+
+--------------------------------------------------------------------------
+-- CallbackHandler:New
+--
+-- target - target object to embed public APIs in
+-- RegisterName - name of the callback registration API, default "RegisterCallback"
+-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback"
+-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
+
+function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused)
+ -- TODO: Remove this after beta has gone out
+ assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused")
+
+ RegisterName = RegisterName or "RegisterCallback"
+ UnregisterName = UnregisterName or "UnregisterCallback"
+ if UnregisterAllName==nil then -- false is used to indicate "don't want this method"
+ UnregisterAllName = "UnregisterAllCallbacks"
+ end
+
+ -- we declare all objects and exported APIs inside this closure to quickly gain access
+ -- to e.g. function names, the "target" parameter, etc
+
+
+ -- Create the registry object
+ local events = setmetatable({}, meta)
+ local registry = { recurse=0, events=events }
+
+ -- registry:Fire() - fires the given event/message into the registry
+ function registry:Fire(eventname, ...)
+ if not rawget(events, eventname) or not next(events[eventname]) then return end
+ local oldrecurse = registry.recurse
+ registry.recurse = oldrecurse + 1
+
+ Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...)
+
+ registry.recurse = oldrecurse
+
+ if registry.insertQueue and oldrecurse==0 then
+ -- Something in one of our callbacks wanted to register more callbacks; they got queued
+ for eventname,callbacks in pairs(registry.insertQueue) do
+ local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten.
+ for self,func in pairs(callbacks) do
+ events[eventname][self] = func
+ -- fire OnUsed callback?
+ if first and registry.OnUsed then
+ registry.OnUsed(registry, target, eventname)
+ first = nil
+ end
+ end
+ end
+ registry.insertQueue = nil
+ end
+ end
+
+ -- Registration of a callback, handles:
+ -- self["method"], leads to self["method"](self, ...)
+ -- self with function ref, leads to functionref(...)
+ -- "addonId" (instead of self) with function ref, leads to functionref(...)
+ -- all with an optional arg, which, if present, gets passed as first argument (after self if present)
+ target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]])
+ if type(eventname) ~= "string" then
+ error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2)
+ end
+
+ method = method or eventname
+
+ local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten.
+
+ if type(method) ~= "string" and type(method) ~= "function" then
+ error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2)
+ end
+
+ local regfunc
+
+ if type(method) == "string" then
+ -- self["method"] calling style
+ if type(self) ~= "table" then
+ error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2)
+ elseif self==target then
+ error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2)
+ elseif type(self[method]) ~= "function" then
+ error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2)
+ end
+
+ if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
+ local arg=select(1,...)
+ regfunc = function(...) self[method](self,arg,...) end
+ else
+ regfunc = function(...) self[method](self,...) end
+ end
+ else
+ -- function ref with self=object or self="addonId" or self=thread
+ if type(self)~="table" and type(self)~="string" and type(self)~="thread" then
+ error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2)
+ end
+
+ if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
+ local arg=select(1,...)
+ regfunc = function(...) method(arg,...) end
+ else
+ regfunc = method
+ end
+ end
+
+
+ if events[eventname][self] or registry.recurse<1 then
+ -- if registry.recurse<1 then
+ -- we're overwriting an existing entry, or not currently recursing. just set it.
+ events[eventname][self] = regfunc
+ -- fire OnUsed callback?
+ if registry.OnUsed and first then
+ registry.OnUsed(registry, target, eventname)
+ end
+ else
+ -- we're currently processing a callback in this registry, so delay the registration of this new entry!
+ -- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency
+ registry.insertQueue = registry.insertQueue or setmetatable({},meta)
+ registry.insertQueue[eventname][self] = regfunc
+ end
+ end
+
+ -- Unregister a callback
+ target[UnregisterName] = function(self, eventname)
+ if not self or self==target then
+ error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2)
+ end
+ if type(eventname) ~= "string" then
+ error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2)
+ end
+ if rawget(events, eventname) and events[eventname][self] then
+ events[eventname][self] = nil
+ -- Fire OnUnused callback?
+ if registry.OnUnused and not next(events[eventname]) then
+ registry.OnUnused(registry, target, eventname)
+ end
+ end
+ if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then
+ registry.insertQueue[eventname][self] = nil
+ end
+ end
+
+ -- OPTIONAL: Unregister all callbacks for given selfs/addonIds
+ if UnregisterAllName then
+ target[UnregisterAllName] = function(...)
+ if select("#",...)<1 then
+ error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2)
+ end
+ if select("#",...)==1 and ...==target then
+ error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2)
+ end
+
+
+ for i=1,select("#",...) do
+ local self = select(i,...)
+ if registry.insertQueue then
+ for eventname, callbacks in pairs(registry.insertQueue) do
+ if callbacks[self] then
+ callbacks[self] = nil
+ end
+ end
+ end
+ for eventname, callbacks in pairs(events) do
+ if callbacks[self] then
+ callbacks[self] = nil
+ -- Fire OnUnused callback?
+ if registry.OnUnused and not next(callbacks) then
+ registry.OnUnused(registry, target, eventname)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ return registry
+end
+
+
+-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it
+-- try to upgrade old implicit embeds since the system is selfcontained and
+-- relies on closures to work.
+
diff --git a/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml b/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml
new file mode 100644
index 0000000..876df83
--- /dev/null
+++ b/Decursive/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/Decursive/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua b/Decursive/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua
new file mode 100644
index 0000000..c5249f2
--- /dev/null
+++ b/Decursive/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua
@@ -0,0 +1,264 @@
+--[[
+Name: DBIcon-1.0
+Revision: $Rev: 14 $
+Author(s): Rabbit (rabbit.magtheridon@gmail.com)
+Description: Allows addons to register to recieve a lightweight minimap icon as an alternative to more heavy LDB displays.
+Dependencies: LibStub
+License: GPL v2 or later.
+]]
+
+--[[
+Copyright (C) 2008-2010 Rabbit
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+]]
+
+-----------------------------------------------------------------------
+-- DBIcon-1.0
+--
+-- Disclaimer: Most of this code was ripped from Barrel but fixed, streamlined
+-- and cleaned up a lot so that it no longer sucks.
+--
+
+local DBICON10 = "LibDBIcon-1.0"
+local DBICON10_MINOR = tonumber(("$Rev: 14 $"):match("(%d+)"))
+if not LibStub then error(DBICON10 .. " requires LibStub.") end
+local ldb = LibStub("LibDataBroker-1.1", true)
+if not ldb then error(DBICON10 .. " requires LibDataBroker-1.1.") end
+local lib = LibStub:NewLibrary(DBICON10, DBICON10_MINOR)
+if not lib then return end
+
+lib.disabled = lib.disabled or nil
+lib.objects = lib.objects or {}
+lib.callbackRegistered = lib.callbackRegistered or nil
+lib.notCreated = lib.notCreated or {}
+
+function lib:IconCallback(event, name, key, value, dataobj)
+ if lib.objects[name] then
+ lib.objects[name].icon:SetTexture(dataobj.icon)
+ end
+end
+if not lib.callbackRegistered then
+ ldb.RegisterCallback(lib, "LibDataBroker_AttributeChanged__icon", "IconCallback")
+ lib.callbackRegistered = true
+end
+
+-- Tooltip code ripped from StatBlockCore by Funkydude
+local function getAnchors(frame)
+ local x,y = frame:GetCenter()
+ if not x or not y then return "TOPLEFT", "BOTTOMLEFT" end
+ local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or ""
+ local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM"
+ return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf
+end
+
+local function onEnter(self)
+ if self.isMoving then return end
+ local obj = self.dataObject
+ if obj.OnTooltipShow then
+ GameTooltip:SetOwner(self, "ANCHOR_NONE")
+ GameTooltip:SetPoint(getAnchors(self))
+ obj.OnTooltipShow(GameTooltip)
+ GameTooltip:Show()
+ elseif obj.OnEnter then
+ obj.OnEnter(self)
+ end
+end
+
+local function onLeave(self)
+ local obj = self.dataObject
+ GameTooltip:Hide()
+ if obj.OnLeave then obj.OnLeave(self) end
+end
+
+--------------------------------------------------------------------------------
+
+local minimapShapes = {
+ ["ROUND"] = {true, true, true, true},
+ ["SQUARE"] = {false, false, false, false},
+ ["CORNER-TOPLEFT"] = {true, false, false, false},
+ ["CORNER-TOPRIGHT"] = {false, false, true, false},
+ ["CORNER-BOTTOMLEFT"] = {false, true, false, false},
+ ["CORNER-BOTTOMRIGHT"] = {false, false, false, true},
+ ["SIDE-LEFT"] = {true, true, false, false},
+ ["SIDE-RIGHT"] = {false, false, true, true},
+ ["SIDE-TOP"] = {true, false, true, false},
+ ["SIDE-BOTTOM"] = {false, true, false, true},
+ ["TRICORNER-TOPLEFT"] = {true, true, true, false},
+ ["TRICORNER-TOPRIGHT"] = {true, false, true, true},
+ ["TRICORNER-BOTTOMLEFT"] = {true, true, false, true},
+ ["TRICORNER-BOTTOMRIGHT"] = {false, true, true, true},
+}
+
+local function updatePosition(button)
+ local angle = math.rad(button.db.minimapPos or 225)
+ local x, y, q = math.cos(angle), math.sin(angle), 1
+ if x < 0 then q = q + 1 end
+ if y > 0 then q = q + 2 end
+ local minimapShape = GetMinimapShape and GetMinimapShape() or "ROUND"
+ local quadTable = minimapShapes[minimapShape]
+ if quadTable[q] then
+ x, y = x*80, y*80
+ else
+ local diagRadius = 103.13708498985 --math.sqrt(2*(80)^2)-10
+ x = math.max(-80, math.min(x*diagRadius, 80))
+ y = math.max(-80, math.min(y*diagRadius, 80))
+ end
+ button:SetPoint("CENTER", Minimap, "CENTER", x, y)
+end
+
+local function onClick(self, b) if self.dataObject.OnClick then self.dataObject.OnClick(self, b) end end
+local function onMouseDown(self) self.icon:SetTexCoord(0, 1, 0, 1) end
+local function onMouseUp(self) self.icon:SetTexCoord(0.05, 0.95, 0.05, 0.95) end
+
+local function onUpdate(self)
+ local mx, my = Minimap:GetCenter()
+ local px, py = GetCursorPosition()
+ local scale = Minimap:GetEffectiveScale()
+ px, py = px / scale, py / scale
+ self.db.minimapPos = math.deg(math.atan2(py - my, px - mx)) % 360
+ updatePosition(self)
+end
+
+local function onDragStart(self)
+ self:LockHighlight()
+ self.icon:SetTexCoord(0, 1, 0, 1)
+ self:SetScript("OnUpdate", onUpdate)
+ self.isMoving = true
+ GameTooltip:Hide()
+end
+
+local function onDragStop(self)
+ self:SetScript("OnUpdate", nil)
+ self.icon:SetTexCoord(0.05, 0.95, 0.05, 0.95)
+ self:UnlockHighlight()
+ self.isMoving = nil
+end
+
+local function createButton(name, object, db)
+ local button = CreateFrame("Button", "LibDBIcon10_"..name, Minimap)
+ button.dataObject = object
+ button.db = db
+ button:SetFrameStrata("MEDIUM")
+ button:SetWidth(31); button:SetHeight(31)
+ button:SetFrameLevel(8)
+ button:RegisterForClicks("anyUp")
+ button:RegisterForDrag("LeftButton")
+ button:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight")
+ local overlay = button:CreateTexture(nil, "OVERLAY")
+ overlay:SetWidth(53); overlay:SetHeight(53)
+ overlay:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder")
+ overlay:SetPoint("TOPLEFT")
+ local icon = button:CreateTexture(nil, "BACKGROUND")
+ icon:SetWidth(20); icon:SetHeight(20)
+ icon:SetTexture(object.icon)
+ icon:SetTexCoord(0.05, 0.95, 0.05, 0.95)
+ icon:SetPoint("TOPLEFT", 7, -5)
+ button.icon = icon
+
+ button:SetScript("OnEnter", onEnter)
+ button:SetScript("OnLeave", onLeave)
+ button:SetScript("OnClick", onClick)
+ button:SetScript("OnDragStart", onDragStart)
+ button:SetScript("OnDragStop", onDragStop)
+ button:SetScript("OnMouseDown", onMouseDown)
+ button:SetScript("OnMouseUp", onMouseUp)
+
+ lib.objects[name] = button
+
+ if lib.loggedIn then
+ updatePosition(button)
+ if not db.hide then button:Show()
+ else button:Hide() end
+ end
+end
+
+-- We could use a metatable.__index on lib.objects, but then we'd create
+-- the icons when checking things like :IsRegistered, which is not necessary.
+local function check(name)
+ if lib.notCreated[name] then
+ createButton(name, lib.notCreated[name][1], lib.notCreated[name][2])
+ lib.notCreated[name] = nil
+ end
+end
+
+lib.loggedIn = lib.loggedIn or false
+-- Wait a bit with the initial positioning to let any GetMinimapShape addons
+-- load up.
+if not lib.loggedIn then
+ local f = CreateFrame("Frame")
+ f:SetScript("OnEvent", function()
+ for _, object in pairs(lib.objects) do
+ updatePosition(object)
+ if not lib.disabled and not object.db.hide then object:Show()
+ else object:Hide() end
+ end
+ lib.loggedIn = true
+ f:SetScript("OnEvent", nil)
+ f = nil
+ end)
+ f:RegisterEvent("PLAYER_LOGIN")
+end
+
+function lib:Register(name, object, db)
+ if lib.disabled then return end
+ if not object.icon then error("Can't register LDB objects without icons set!") end
+ if lib.objects[name] or lib.notCreated[name] then error("Already registered, nubcake.") end
+ if not db or not db.hide then
+ createButton(name, object, db)
+ else
+ lib.notCreated[name] = {object, db}
+ end
+end
+
+function lib:Hide(name)
+ if not lib.objects[name] then return end
+ lib.objects[name]:Hide()
+end
+function lib:Show(name)
+ if lib.disabled then return end
+ check(name)
+ lib.objects[name]:Show()
+ updatePosition(lib.objects[name])
+end
+function lib:IsRegistered(name)
+ return (lib.objects[name] or lib.notCreated[name]) and true or false
+end
+function lib:Refresh(name, db)
+ if lib.disabled then return end
+ check(name)
+ local button = lib.objects[name]
+ if db then button.db = db end
+ updatePosition(button)
+ if not db.hide then button:Show() else button:Hide() end
+end
+
+function lib:EnableLibrary()
+ lib.disabled = nil
+ for name, object in pairs(lib.objects) do
+ if not object.db or (object.db and not object.db.hide) then
+ object:Show()
+ updatePosition(object)
+ end
+ end
+end
+
+function lib:DisableLibrary()
+ lib.disabled = true
+ for name, object in pairs(lib.objects) do
+ object:Hide()
+ end
+end
+
diff --git a/Decursive/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua b/Decursive/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua
new file mode 100644
index 0000000..f47c0cd
--- /dev/null
+++ b/Decursive/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua
@@ -0,0 +1,90 @@
+
+assert(LibStub, "LibDataBroker-1.1 requires LibStub")
+assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
+
+local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
+if not lib then return end
+oldminor = oldminor or 0
+
+
+lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
+lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}
+local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks
+
+if oldminor < 2 then
+ lib.domt = {
+ __metatable = "access denied",
+ __index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,
+ }
+end
+
+if oldminor < 3 then
+ lib.domt.__newindex = function(self, key, value)
+ if not attributestorage[self] then attributestorage[self] = {} end
+ if attributestorage[self][key] == value then return end
+ attributestorage[self][key] = value
+ local name = namestorage[self]
+ if not name then return end
+ callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self)
+ callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self)
+ callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self)
+ callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self)
+ end
+end
+
+if oldminor < 2 then
+ function lib:NewDataObject(name, dataobj)
+ if self.proxystorage[name] then return end
+
+ if dataobj then
+ assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table")
+ self.attributestorage[dataobj] = {}
+ for i,v in pairs(dataobj) do
+ self.attributestorage[dataobj][i] = v
+ dataobj[i] = nil
+ end
+ end
+ dataobj = setmetatable(dataobj or {}, self.domt)
+ self.proxystorage[name], self.namestorage[dataobj] = dataobj, name
+ self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj)
+ return dataobj
+ end
+end
+
+if oldminor < 1 then
+ function lib:DataObjectIterator()
+ return pairs(self.proxystorage)
+ end
+
+ function lib:GetDataObjectByName(dataobjectname)
+ return self.proxystorage[dataobjectname]
+ end
+
+ function lib:GetNameByDataObject(dataobject)
+ return self.namestorage[dataobject]
+ end
+end
+
+if oldminor < 4 then
+ local next = pairs(attributestorage)
+ function lib:pairs(dataobject_or_name)
+ local t = type(dataobject_or_name)
+ assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
+
+ local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+ assert(attributestorage[dataobj], "Data object not found")
+
+ return next, attributestorage[dataobj], nil
+ end
+
+ local ipairs_iter = ipairs(attributestorage)
+ function lib:ipairs(dataobject_or_name)
+ local t = type(dataobject_or_name)
+ assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
+
+ local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+ assert(attributestorage[dataobj], "Data object not found")
+
+ return ipairs_iter, attributestorage[dataobj], 0
+ end
+end
diff --git a/Decursive/Libs/LibDataBroker-1.1/README.textile b/Decursive/Libs/LibDataBroker-1.1/README.textile
new file mode 100644
index 0000000..ef16fed
--- /dev/null
+++ b/Decursive/Libs/LibDataBroker-1.1/README.textile
@@ -0,0 +1,13 @@
+LibDataBroker is a small WoW addon library designed to provide a "MVC":http://en.wikipedia.org/wiki/Model-view-controller interface for use in various addons.
+LDB's primary goal is to "detach" plugins for TitanPanel and FuBar from the display addon.
+Plugins can provide data into a simple table, and display addons can receive callbacks to refresh their display of this data.
+LDB also provides a place for addons to register "quicklaunch" functions, removing the need for authors to embed many large libraries to create minimap buttons.
+Users who do not wish to be "plagued" by these buttons simply do not install an addon to render them.
+
+Due to it's simple generic design, LDB can be used for any design where you wish to have an addon notified of changes to a table.
+
+h2. Links
+
+* "API documentation":http://github.com/tekkub/libdatabroker-1-1/wikis/api
+* "Data specifications":http://github.com/tekkub/libdatabroker-1-1/wikis/data-specifications
+* "Addons using LDB":http://github.com/tekkub/libdatabroker-1-1/wikis/addons-using-ldb
diff --git a/Decursive/Libs/LibQTip-1.0/LICENSE.txt b/Decursive/Libs/LibQTip-1.0/LICENSE.txt
new file mode 100644
index 0000000..54cdb47
--- /dev/null
+++ b/Decursive/Libs/LibQTip-1.0/LICENSE.txt
@@ -0,0 +1,29 @@
+Copyright (c) 2008, LibQTip Development Team
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Redistribution of a stand alone version is strictly prohibited without
+ prior written authorization from the Lead of the LibQTip Development Team.
+ * Neither the name of the LibQTip Development Team nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.lua b/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.lua
new file mode 100644
index 0000000..215bfbd
--- /dev/null
+++ b/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.lua
@@ -0,0 +1,1278 @@
+local MAJOR = "LibQTip-1.0"
+local MINOR = 36 -- Should be manually increased
+assert(LibStub, MAJOR.." requires LibStub")
+
+local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
+if not lib then return end -- No upgrade needed
+
+------------------------------------------------------------------------------
+-- Upvalued globals
+------------------------------------------------------------------------------
+local type = type
+local select = select
+local error = error
+local pairs, ipairs = pairs, ipairs
+local tonumber, tostring = tonumber, tostring
+local strfind = string.find
+local math = math
+local min, max = math.min, math.max
+local setmetatable = setmetatable
+local tinsert, tremove = tinsert, tremove
+local wipe = wipe
+
+local CreateFrame = CreateFrame
+local UIParent = UIParent
+
+------------------------------------------------------------------------------
+-- Tables and locals
+------------------------------------------------------------------------------
+lib.frameMetatable = lib.frameMetatable or {__index = CreateFrame("Frame")}
+
+lib.tipPrototype = lib.tipPrototype or setmetatable({}, lib.frameMetatable)
+lib.tipMetatable = lib.tipMetatable or {__index = lib.tipPrototype}
+
+lib.providerPrototype = lib.providerPrototype or {}
+lib.providerMetatable = lib.providerMetatable or {__index = lib.providerPrototype}
+
+lib.cellPrototype = lib.cellPrototype or setmetatable({}, lib.frameMetatable)
+lib.cellMetatable = lib.cellMetatable or { __index = lib.cellPrototype }
+
+lib.activeTooltips = lib.activeTooltips or {}
+
+lib.tooltipHeap = lib.tooltipHeap or {}
+lib.frameHeap = lib.frameHeap or {}
+lib.tableHeap = lib.tableHeap or {}
+
+local tipPrototype = lib.tipPrototype
+local tipMetatable = lib.tipMetatable
+
+local providerPrototype = lib.providerPrototype
+local providerMetatable = lib.providerMetatable
+
+local cellPrototype = lib.cellPrototype
+local cellMetatable = lib.cellMetatable
+
+local activeTooltips = lib.activeTooltips
+
+------------------------------------------------------------------------------
+-- Private methods for Caches and Tooltip
+------------------------------------------------------------------------------
+local AcquireTooltip, ReleaseTooltip
+local AcquireCell, ReleaseCell
+local AcquireTable, ReleaseTable
+
+local InitializeTooltip, SetTooltipSize, ResetTooltipSize, FixCellSizes
+local ClearTooltipScripts
+local SetFrameScript, ClearFrameScripts
+
+------------------------------------------------------------------------------
+-- Cache debugging.
+------------------------------------------------------------------------------
+--[===[@debug@
+local usedTables, usedFrames, usedTooltips = 0, 0, 0
+--@end-debug@]===]
+
+------------------------------------------------------------------------------
+-- Internal constants to tweak the layout
+------------------------------------------------------------------------------
+local TOOLTIP_PADDING = 10
+local CELL_MARGIN_H = 6
+local CELL_MARGIN_V = 3
+
+------------------------------------------------------------------------------
+-- Public library API
+------------------------------------------------------------------------------
+--- Create or retrieve the tooltip with the given key.
+-- If additional arguments are passed, they are passed to :SetColumnLayout for the acquired tooltip.
+-- @name LibQTip:Acquire(key[, numColumns, column1Justification, column2justification, ...])
+-- @param key string or table - the tooltip key. Any value that can be used as a table key is accepted though you should try to provide unique keys to avoid conflicts.
+-- Numbers and booleans should be avoided and strings should be carefully chosen to avoid namespace clashes - no "MyTooltip" - you have been warned!
+-- @return tooltip Frame object - the acquired tooltip.
+-- @usage Acquire a tooltip with at least 5 columns, justification : left, center, left, left, left
+-- local tip = LibStub('LibQTip-1.0'):Acquire('MyFooBarTooltip', 5, "LEFT", "CENTER")
+function lib:Acquire(key, ...)
+ if key == nil then
+ error("attempt to use a nil key", 2)
+ end
+ local tooltip = activeTooltips[key]
+
+ if not tooltip then
+ tooltip = AcquireTooltip()
+ InitializeTooltip(tooltip, key)
+ activeTooltips[key] = tooltip
+ end
+
+ if select('#', ...) > 0 then
+ -- Here we catch any error to properly report it for the calling code
+ local ok, msg = pcall(tooltip.SetColumnLayout, tooltip, ...)
+
+ if not ok then
+ error(msg, 2)
+ end
+ end
+ return tooltip
+end
+
+function lib:Release(tooltip)
+ local key = tooltip and tooltip.key
+
+ if not key or activeTooltips[key] ~= tooltip then
+ return
+ end
+ ReleaseTooltip(tooltip)
+ activeTooltips[key] = nil
+end
+
+function lib:IsAcquired(key)
+ if key == nil then
+ error("attempt to use a nil key", 2)
+ end
+ return not not activeTooltips[key]
+end
+
+function lib:IterateTooltips()
+ return pairs(activeTooltips)
+end
+
+------------------------------------------------------------------------------
+-- Frame cache
+------------------------------------------------------------------------------
+local frameHeap = lib.frameHeap
+
+local function AcquireFrame(parent)
+ local frame = tremove(frameHeap) or CreateFrame("Frame")
+ frame:SetParent(parent)
+ --[===[@debug@
+ usedFrames = usedFrames + 1
+ --@end-debug@]===]
+ return frame
+end
+
+local function ReleaseFrame(frame)
+ frame:Hide()
+ frame:SetParent(nil)
+ frame:ClearAllPoints()
+ frame:SetBackdrop(nil)
+ ClearFrameScripts(frame)
+ tinsert(frameHeap, frame)
+ --[===[@debug@
+ usedFrames = usedFrames - 1
+ --@end-debug@]===]
+end
+
+------------------------------------------------------------------------------
+-- Dirty layout handler
+------------------------------------------------------------------------------
+lib.layoutCleaner = lib.layoutCleaner or CreateFrame('Frame')
+
+local layoutCleaner = lib.layoutCleaner
+layoutCleaner.registry = layoutCleaner.registry or {}
+
+function layoutCleaner:RegisterForCleanup(tooltip)
+ self.registry[tooltip] = true
+ self:Show()
+end
+
+function layoutCleaner:CleanupLayouts()
+ self:Hide()
+ for tooltip in pairs(self.registry) do
+ FixCellSizes(tooltip)
+ end
+ wipe(self.registry)
+end
+layoutCleaner:SetScript('OnUpdate', layoutCleaner.CleanupLayouts)
+
+------------------------------------------------------------------------------
+-- CellProvider and Cell
+------------------------------------------------------------------------------
+function providerPrototype:AcquireCell()
+ local cell = tremove(self.heap)
+ if not cell then
+ cell = setmetatable(CreateFrame("Frame", nil, UIParent), self.cellMetatable)
+ if type(cell.InitializeCell) == 'function' then
+ cell:InitializeCell()
+ end
+ end
+ self.cells[cell] = true
+ return cell
+end
+
+function providerPrototype:ReleaseCell(cell)
+ if not self.cells[cell] then return end
+ if type(cell.ReleaseCell) == 'function' then
+ cell:ReleaseCell()
+ end
+ self.cells[cell] = nil
+ tinsert(self.heap, cell)
+end
+
+function providerPrototype:GetCellPrototype()
+ return self.cellPrototype, self.cellMetatable
+end
+
+function providerPrototype:IterateCells()
+ return pairs(self.cells)
+end
+
+function lib:CreateCellProvider(baseProvider)
+ local cellBaseMetatable, cellBasePrototype
+ if baseProvider and baseProvider.GetCellPrototype then
+ cellBasePrototype, cellBaseMetatable = baseProvider:GetCellPrototype()
+ else
+ cellBaseMetatable = cellMetatable
+ end
+ local cellPrototype = setmetatable({}, cellBaseMetatable)
+ local cellProvider = setmetatable({}, providerMetatable)
+ cellProvider.heap = {}
+ cellProvider.cells = {}
+ cellProvider.cellPrototype = cellPrototype
+ cellProvider.cellMetatable = { __index = cellPrototype }
+ return cellProvider, cellPrototype, cellBasePrototype
+end
+
+------------------------------------------------------------------------------
+-- Basic label provider
+------------------------------------------------------------------------------
+if not lib.LabelProvider then
+ lib.LabelProvider, lib.LabelPrototype = lib:CreateCellProvider()
+end
+
+local labelProvider = lib.LabelProvider
+local labelPrototype = lib.LabelPrototype
+
+function labelPrototype:InitializeCell()
+ self.fontString = self:CreateFontString()
+ self.fontString:SetFontObject(GameTooltipText)
+end
+
+function labelPrototype:SetupCell(tooltip, value, justification, font, l_pad, r_pad, max_width, min_width, ...)
+ local fs = self.fontString
+ -- detatch fs from cell for size calculations
+ fs:ClearAllPoints()
+ fs:SetFontObject(font or tooltip:GetFont())
+ fs:SetJustifyH(justification)
+ fs:SetText(tostring(value))
+
+ l_pad = l_pad or 0
+ r_pad = r_pad or 0
+
+ local width = fs:GetStringWidth() + l_pad + r_pad
+
+ if max_width and min_width and (max_width < min_width) then
+ error("maximum width cannot be lower than minimum width: "..tostring(max_width).." < "..tostring(min_width), 2)
+ end
+
+ if max_width and (max_width < (l_pad + r_pad)) then
+ error("maximum width cannot be lower than the sum of paddings: "..tostring(max_width).." < "..tostring(l_pad).." + "..tostring(r_pad), 2)
+ end
+
+ if min_width and width < min_width then
+ width = min_width
+ end
+
+ if max_width and max_width < width then
+ width = max_width
+ end
+ fs:SetWidth(width - (l_pad + r_pad))
+ -- Use GetHeight() instead of GetStringHeight() so lines which are longer than width will wrap.
+ local height = fs:GetHeight()
+
+ -- reanchor fs to cell
+ fs:SetWidth(0)
+ fs:SetPoint("TOPLEFT", self, "TOPLEFT", l_pad, 0)
+ fs:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -r_pad, 0)
+--~ fs:SetPoint("TOPRIGHT", self, "TOPRIGHT", -r_pad, 0)
+
+ self._paddingL = l_pad
+ self._paddingR = r_pad
+
+ return width, height
+end
+
+function labelPrototype:getContentHeight()
+ local fs = self.fontString
+ fs:SetWidth(self:GetWidth() - (self._paddingL + self._paddingR))
+ local height = self.fontString:GetHeight()
+ fs:SetWidth(0)
+ return height
+end
+
+function labelPrototype:GetPosition() return self._line, self._column end
+
+------------------------------------------------------------------------------
+-- Tooltip cache
+------------------------------------------------------------------------------
+local tooltipHeap = lib.tooltipHeap
+
+-- Returns a tooltip
+function AcquireTooltip()
+ local tooltip = tremove(tooltipHeap)
+
+ if not tooltip then
+ tooltip = CreateFrame("Frame", nil, UIParent)
+
+ local scrollFrame = CreateFrame("ScrollFrame", nil, tooltip)
+ scrollFrame:SetPoint("TOP", tooltip, "TOP", 0, -TOOLTIP_PADDING)
+ scrollFrame:SetPoint("BOTTOM", tooltip, "BOTTOM", 0, TOOLTIP_PADDING)
+ scrollFrame:SetPoint("LEFT", tooltip, "LEFT", TOOLTIP_PADDING, 0)
+ scrollFrame:SetPoint("RIGHT", tooltip, "RIGHT", -TOOLTIP_PADDING, 0)
+ tooltip.scrollFrame = scrollFrame
+
+ local scrollChild = CreateFrame("Frame", nil, tooltip.scrollFrame)
+ scrollFrame:SetScrollChild(scrollChild)
+ tooltip.scrollChild = scrollChild
+ setmetatable(tooltip, tipMetatable)
+ end
+ --[===[@debug@
+ usedTooltips = usedTooltips + 1
+ --@end-debug@]===]
+ return tooltip
+end
+
+-- Cleans the tooltip and stores it in the cache
+function ReleaseTooltip(tooltip)
+ if tooltip.releasing then
+ return
+ end
+ tooltip.releasing = true
+
+ tooltip:Hide()
+
+ if tooltip.OnRelease then
+ local success, errorMessage = pcall(tooltip.OnRelease, tooltip)
+ if not success then
+ geterrorhandler()(errorMessage)
+ end
+ tooltip.OnRelease = nil
+ end
+
+ tooltip.releasing = nil
+ tooltip.key = nil
+
+ ClearTooltipScripts(tooltip)
+
+ tooltip:SetAutoHideDelay(nil)
+ tooltip:ClearAllPoints()
+ tooltip:Clear()
+
+ if tooltip.slider then
+ tooltip.slider:SetValue(0)
+ tooltip.slider:Hide()
+ tooltip.scrollFrame:SetPoint("RIGHT", tooltip, "RIGHT", -TOOLTIP_PADDING, 0)
+ tooltip:EnableMouseWheel(false)
+ end
+
+ for i, column in ipairs(tooltip.columns) do
+ tooltip.columns[i] = ReleaseFrame(column)
+ end
+ tooltip.columns = ReleaseTable(tooltip.columns)
+ tooltip.lines = ReleaseTable(tooltip.lines)
+ tooltip.colspans = ReleaseTable(tooltip.colspans)
+
+ layoutCleaner.registry[tooltip] = nil
+ tinsert(tooltipHeap, tooltip)
+ --[===[@debug@
+ usedTooltips = usedTooltips - 1
+ --@end-debug@]===]
+end
+
+------------------------------------------------------------------------------
+-- Cell 'cache' (just a wrapper to the provider's cache)
+------------------------------------------------------------------------------
+-- Returns a cell for the given tooltip from the given provider
+function AcquireCell(tooltip, provider)
+ local cell = provider:AcquireCell(tooltip)
+
+ cell:SetParent(tooltip.scrollChild)
+ cell:SetFrameLevel(tooltip.scrollChild:GetFrameLevel() + 3)
+ cell._provider = provider
+ return cell
+end
+
+-- Cleans the cell hands it to its provider for storing
+function ReleaseCell(cell)
+ cell:Hide()
+ cell:ClearAllPoints()
+ cell:SetParent(nil)
+ cell:SetBackdrop(nil)
+ ClearFrameScripts(cell)
+ cell._font, cell._justification, cell._colSpan, cell._line, cell._column = nil
+
+ cell._provider:ReleaseCell(cell)
+ cell._provider = nil
+end
+
+------------------------------------------------------------------------------
+-- Table cache
+------------------------------------------------------------------------------
+local tableHeap = lib.tableHeap
+
+-- Returns a table
+function AcquireTable()
+ local tbl = tremove(tableHeap) or {}
+ --[===[@debug@
+ usedTables = usedTables + 1
+ --@end-debug@]===]
+ return tbl
+end
+
+-- Cleans the table and stores it in the cache
+function ReleaseTable(table)
+ wipe(table)
+ tinsert(tableHeap, table)
+ --[===[@debug@
+ usedTables = usedTables - 1
+ --@end-debug@]===]
+end
+
+------------------------------------------------------------------------------
+-- Tooltip prototype
+------------------------------------------------------------------------------
+function InitializeTooltip(tooltip, key)
+ ----------------------------------------------------------------------
+ -- (Re)set frame settings
+ ----------------------------------------------------------------------
+ local backdrop = GameTooltip:GetBackdrop()
+
+ tooltip:SetBackdrop(backdrop)
+
+ if backdrop then
+ tooltip:SetBackdropColor(GameTooltip:GetBackdropColor())
+ tooltip:SetBackdropBorderColor(GameTooltip:GetBackdropBorderColor())
+ end
+ tooltip:SetScale(GameTooltip:GetScale())
+ tooltip:SetAlpha(1)
+ tooltip:SetFrameStrata("TOOLTIP")
+ tooltip:SetClampedToScreen(false)
+
+ ----------------------------------------------------------------------
+ -- Internal data. Since it's possible to Acquire twice without calling
+ -- release, check for pre-existence.
+ ----------------------------------------------------------------------
+ tooltip.key = key
+ tooltip.columns = tooltip.columns or AcquireTable()
+ tooltip.lines = tooltip.lines or AcquireTable()
+ tooltip.colspans = tooltip.colspans or AcquireTable()
+ tooltip.regularFont = GameTooltipText
+ tooltip.headerFont = GameTooltipHeaderText
+ tooltip.labelProvider = labelProvider
+ tooltip.cell_margin_h = tooltip.cell_margin_h or CELL_MARGIN_H
+ tooltip.cell_margin_v = tooltip.cell_margin_v or CELL_MARGIN_V
+
+ ----------------------------------------------------------------------
+ -- Finishing procedures
+ ----------------------------------------------------------------------
+ tooltip:SetAutoHideDelay(nil)
+ tooltip:Hide()
+ ResetTooltipSize(tooltip)
+end
+
+function tipPrototype:SetDefaultProvider(myProvider)
+ if not myProvider then
+ return
+ end
+ self.labelProvider = myProvider
+end
+
+function tipPrototype:GetDefaultProvider() return self.labelProvider end
+
+local function checkJustification(justification, level, silent)
+ if justification ~= "LEFT" and justification ~= "CENTER" and justification ~= "RIGHT" then
+ if silent then
+ return false
+ end
+ error("invalid justification, must one of LEFT, CENTER or RIGHT, not: "..tostring(justification), level+1)
+ end
+ return true
+end
+
+function tipPrototype:SetColumnLayout(numColumns, ...)
+ if type(numColumns) ~= "number" or numColumns < 1 then
+ error("number of columns must be a positive number, not: "..tostring(numColumns), 2)
+ end
+
+ for i = 1, numColumns do
+ local justification = select(i, ...) or "LEFT"
+
+ checkJustification(justification, 2)
+
+ if self.columns[i] then
+ self.columns[i].justification = justification
+ else
+ self:AddColumn(justification)
+ end
+ end
+end
+
+function tipPrototype:AddColumn(justification)
+ justification = justification or "LEFT"
+ checkJustification(justification, 2)
+
+ local colNum = #self.columns + 1
+ local column = self.columns[colNum] or AcquireFrame(self.scrollChild)
+ column:SetFrameLevel(self.scrollChild:GetFrameLevel() + 1)
+ column.justification = justification
+ column.width = 0
+ column:SetWidth(1)
+ column:SetPoint("TOP", self.scrollChild)
+ column:SetPoint("BOTTOM", self.scrollChild)
+
+ if colNum > 1 then
+ local h_margin = self.cell_margin_h or CELL_MARGIN_H
+
+ column:SetPoint("LEFT", self.columns[colNum - 1], "RIGHT", h_margin, 0)
+ SetTooltipSize(self, self.width + h_margin, self.height)
+ else
+ column:SetPoint("LEFT", self.scrollChild)
+ end
+ column:Show()
+ self.columns[colNum] = column
+ return colNum
+end
+
+------------------------------------------------------------------------------
+-- Convenient methods
+------------------------------------------------------------------------------
+
+function tipPrototype:Release()
+ lib:Release(self)
+end
+
+function tipPrototype:IsAcquiredBy(key)
+ return key ~= nil and self.key == key
+end
+
+------------------------------------------------------------------------------
+-- Script hooks
+------------------------------------------------------------------------------
+
+local RawSetScript = lib.frameMetatable.__index.SetScript
+
+function ClearTooltipScripts(tooltip)
+ if tooltip.scripts then
+ for scriptType in pairs(tooltip.scripts) do
+ RawSetScript(tooltip, scriptType, nil)
+ end
+ tooltip.scripts = ReleaseTable(tooltip.scripts)
+ end
+end
+
+function tipPrototype:SetScript(scriptType, handler)
+ RawSetScript(self, scriptType, handler)
+ if handler then
+ if not self.scripts then
+ self.scripts = AcquireTable()
+ end
+ self.scripts[scriptType] = true
+ elseif self.scripts then
+ self.scripts[scriptType] = nil
+ end
+end
+
+-- That might break some addons ; those addons were breaking other
+-- addons' tooltip though.
+function tipPrototype:HookScript()
+ geterrorhandler()(":HookScript is not allowed on LibQTip tooltips")
+end
+
+------------------------------------------------------------------------------
+-- Scrollbar data and functions
+------------------------------------------------------------------------------
+local sliderBackdrop = {
+ ["bgFile"] = [[Interface\Buttons\UI-SliderBar-Background]],
+ ["edgeFile"] = [[Interface\Buttons\UI-SliderBar-Border]],
+ ["tile"] = true,
+ ["edgeSize"] = 8,
+ ["tileSize"] = 8,
+ ["insets"] = {
+ ["left"] = 3,
+ ["right"] = 3,
+ ["top"] = 3,
+ ["bottom"] = 3,
+ },
+}
+
+local function slider_OnValueChanged(self)
+ self.scrollFrame:SetVerticalScroll(self:GetValue())
+end
+
+local function tooltip_OnMouseWheel(self, delta)
+ local slider = self.slider
+ local currentValue = slider:GetValue()
+ local minValue, maxValue = slider:GetMinMaxValues()
+
+ if delta < 0 and currentValue < maxValue then
+ slider:SetValue(min(maxValue, currentValue + 10))
+ elseif delta > 0 and currentValue > minValue then
+ slider:SetValue(max(minValue, currentValue - 10))
+ end
+end
+
+-- will resize the tooltip to fit the screen and show a scrollbar if needed
+function tipPrototype:UpdateScrolling(maxheight)
+ self:SetClampedToScreen(false)
+
+ -- all data is in the tooltip; fix colspan width and prevent the layout cleaner from messing up the tooltip later
+ FixCellSizes(self)
+ layoutCleaner.registry[self] = nil
+
+ local scale = self:GetScale()
+ local topside = self:GetTop()
+ local bottomside = self:GetBottom()
+ local screensize = UIParent:GetHeight() / scale
+ local tipsize = (topside - bottomside) / scale
+
+ -- if the tooltip would be too high, limit its height and show the slider
+ if bottomside < 0 or topside > screensize or (maxheight and tipsize > maxheight) then
+ local shrink = (bottomside < 0 and (5 - bottomside) or 0) + (topside > screensize and (topside - screensize + 5) or 0)
+
+ if maxheight and tipsize - shrink > maxheight then
+ shrink = tipsize - maxheight
+ end
+ self:SetHeight(2 * TOOLTIP_PADDING + self.height - shrink)
+ self:SetWidth(2 * TOOLTIP_PADDING + self.width + 20)
+ self.scrollFrame:SetPoint("RIGHT", self, "RIGHT", -(TOOLTIP_PADDING + 20), 0)
+
+ if not self.slider then
+ local slider = CreateFrame("Slider", nil, self)
+
+ self.slider = slider
+
+ slider:SetOrientation("VERTICAL")
+ slider:SetPoint("TOPRIGHT", self, "TOPRIGHT", -TOOLTIP_PADDING, -TOOLTIP_PADDING)
+ slider:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -TOOLTIP_PADDING, TOOLTIP_PADDING)
+ slider:SetBackdrop(sliderBackdrop)
+ slider:SetThumbTexture([[Interface\Buttons\UI-SliderBar-Button-Vertical]])
+ slider:SetMinMaxValues(0, 1)
+ slider:SetValueStep(1)
+ slider:SetWidth(12)
+ slider.scrollFrame = self.scrollFrame
+ slider:SetScript("OnValueChanged", slider_OnValueChanged)
+ slider:SetValue(0)
+ end
+ self.slider:SetMinMaxValues(0, shrink)
+ self.slider:Show()
+ self:EnableMouseWheel(true)
+ self:SetScript("OnMouseWheel", tooltip_OnMouseWheel)
+ else
+ self:SetHeight(2 * TOOLTIP_PADDING + self.height)
+ self:SetWidth(2 * TOOLTIP_PADDING + self.width)
+ self.scrollFrame:SetPoint("RIGHT", self, "RIGHT", -TOOLTIP_PADDING, 0)
+
+ if self.slider then
+ self.slider:SetValue(0)
+ self.slider:Hide()
+ self:EnableMouseWheel(false)
+ self:SetScript("OnMouseWheel", nil)
+ end
+ end
+end
+
+------------------------------------------------------------------------------
+-- Tooltip methods for changing its contents.
+------------------------------------------------------------------------------
+function tipPrototype:Clear()
+ for i, line in ipairs(self.lines) do
+ for j, cell in pairs(line.cells) do
+ if cell then
+ ReleaseCell(cell)
+ end
+ end
+ ReleaseTable(line.cells)
+ line.cells = nil
+ ReleaseFrame(line)
+ self.lines[i] = nil
+ end
+
+ for i, column in ipairs(self.columns) do
+ column.width = 0
+ column:SetWidth(1)
+ end
+ wipe(self.colspans)
+ self.cell_margin_h = nil
+ self.cell_margin_v = nil
+ ResetTooltipSize(self)
+end
+
+function tipPrototype:SetCellMarginH(size)
+ if #self.lines > 0 then
+ error("Unable to set horizontal margin while the tooltip has lines.", 2)
+ end
+
+ if not size or type(size) ~= "number" or size < 0 then
+ error("Margin size must be a positive number or zero.", 2)
+ end
+ self.cell_margin_h = size
+end
+
+function tipPrototype:SetCellMarginV(size)
+ if #self.lines > 0 then
+ error("Unable to set vertical margin while the tooltip has lines.", 2)
+ end
+
+ if not size or type(size) ~= "number" or size < 0 then
+ error("Margin size must be a positive number or zero.", 2)
+ end
+ self.cell_margin_v = size
+end
+
+local function checkFont(font, level, silent)
+ if not font or type(font) ~= 'table' or type(font.IsObjectType) ~= 'function' or not font:IsObjectType("Font") then
+ if silent then
+ return false
+ end
+ error("font must be Font instance, not: "..tostring(font), level + 1)
+ end
+ return true
+end
+
+function tipPrototype:SetFont(font)
+ checkFont(font, 2)
+ self.regularFont = font
+end
+
+function tipPrototype:GetFont() return self.regularFont end
+
+function tipPrototype:SetHeaderFont(font)
+ checkFont(font, 2)
+ self.headerFont = font
+end
+
+function tipPrototype:GetHeaderFont() return self.headerFont end
+
+function SetTooltipSize(tooltip, width, height)
+ tooltip:SetHeight(2 * TOOLTIP_PADDING + height)
+ tooltip.scrollChild:SetHeight(height)
+ tooltip.height = height
+
+ tooltip:SetWidth(2 * TOOLTIP_PADDING + width)
+ tooltip.scrollChild:SetWidth(width)
+ tooltip.width = width
+end
+
+-- Add 2 pixels to height so dangling letters (g, y, p, j, etc) are not clipped.
+function ResetTooltipSize(tooltip)
+ local h_margin = tooltip.cell_margin_h or CELL_MARGIN_H
+
+ SetTooltipSize(tooltip, max(0, (h_margin * (#tooltip.columns - 1)) + (h_margin / 2)), 2)
+end
+
+local function EnlargeColumn(tooltip, column, width)
+ if width > column.width then
+ SetTooltipSize(tooltip, tooltip.width + width - column.width, tooltip.height)
+
+ column.width = width
+ column:SetWidth(width)
+ end
+end
+
+local function ResizeLine(tooltip, line, height)
+ SetTooltipSize(tooltip, tooltip.width, tooltip.height + height - line.height)
+
+ line.height = height
+ line:SetHeight(height)
+end
+
+function FixCellSizes(tooltip)
+ local columns = tooltip.columns
+ local colspans = tooltip.colspans
+ local lines = tooltip.lines
+
+ -- resize columns to make room for the colspans
+ local h_margin = tooltip.cell_margin_h or CELL_MARGIN_H
+ while next(colspans) do
+ local maxNeedCols = nil
+ local maxNeedWidthPerCol = 0
+ -- calculate the colspan with the highest additional width need per column
+ for colRange, width in pairs(colspans) do
+ local left, right = colRange:match("^(%d+)%-(%d+)$")
+ left, right = tonumber(left), tonumber(right)
+ for col = left, right-1 do
+ width = width - columns[col].width - h_margin
+ end
+ width = width - columns[right].width
+ if width <=0 then
+ colspans[colRange] = nil
+ else
+ width = width / (right - left + 1)
+ if width > maxNeedWidthPerCol then
+ maxNeedCols = colRange
+ maxNeedWidthPerCol = width
+ end
+ end
+ end
+ -- resize all columns for that colspan
+ if maxNeedCols then
+ local left, right = maxNeedCols:match("^(%d+)%-(%d+)$")
+ for col = left, right do
+ EnlargeColumn(tooltip, columns[col], columns[col].width + maxNeedWidthPerCol)
+ end
+ colspans[maxNeedCols] = nil
+ end
+ end
+
+ --now that the cell width is set, recalculate the rows' height
+ for _, line in ipairs(lines) do
+ if #(line.cells) > 0 then
+ local lineheight = 0
+ for _, cell in pairs(line.cells) do
+ if cell then
+ lineheight = max(lineheight, cell:getContentHeight())
+ end
+ end
+ if lineheight > 0 then
+ ResizeLine(tooltip, line, lineheight)
+ end
+ end
+ end
+end
+
+local function _SetCell(tooltip, lineNum, colNum, value, font, justification, colSpan, provider, ...)
+ local line = tooltip.lines[lineNum]
+ local cells = line.cells
+
+ -- Unset: be quick
+ if value == nil then
+ local cell = cells[colNum]
+
+ if cell then
+ for i = colNum, colNum + cell._colSpan - 1 do
+ cells[i] = nil
+ end
+ ReleaseCell(cell)
+ end
+ return lineNum, colNum
+ end
+
+ -- Check previous cell
+ local cell
+ local prevCell = cells[colNum]
+
+ if prevCell then
+ -- There is a cell here
+ font = font or prevCell._font
+ justification = justification or prevCell._justification
+ colSpan = colSpan or prevCell._colSpan
+
+ -- Clear the currently marked colspan
+ for i = colNum + 1, colNum + prevCell._colSpan - 1 do
+ cells[i] = nil
+ end
+
+ if provider == nil or prevCell._provider == provider then
+ -- Reuse existing cell
+ cell = prevCell
+ provider = cell._provider
+ else
+ -- A new cell is required
+ cells[colNum] = ReleaseCell(prevCell)
+ end
+ elseif prevCell == nil then
+ -- Creating a new cell, using meaningful defaults.
+ provider = provider or tooltip.labelProvider
+ font = font or tooltip.regularFont
+ justification = justification or tooltip.columns[colNum].justification or "LEFT"
+ colSpan = colSpan or 1
+ else
+ error("overlapping cells at column "..colNum, 3)
+ end
+ local tooltipWidth = #tooltip.columns
+ local rightColNum
+
+ if colSpan > 0 then
+ rightColNum = colNum + colSpan - 1
+
+ if rightColNum > tooltipWidth then
+ error("ColSpan too big, cell extends beyond right-most column", 3)
+ end
+ else
+ -- Zero or negative: count back from right-most columns
+ rightColNum = max(colNum, tooltipWidth + colSpan)
+ -- Update colspan to its effective value
+ colSpan = 1 + rightColNum - colNum
+ end
+
+ -- Cleanup colspans
+ for i = colNum + 1, rightColNum do
+ local cell = cells[i]
+
+ if cell then
+ ReleaseCell(cell)
+ elseif cell == false then
+ error("overlapping cells at column "..i, 3)
+ end
+ cells[i] = false
+ end
+
+ -- Create the cell
+ if not cell then
+ cell = AcquireCell(tooltip, provider)
+ cells[colNum] = cell
+ end
+
+ -- Anchor the cell
+ cell:SetPoint("LEFT", tooltip.columns[colNum])
+ cell:SetPoint("RIGHT", tooltip.columns[rightColNum])
+ cell:SetPoint("TOP", line)
+ cell:SetPoint("BOTTOM", line)
+
+ -- Store the cell settings directly into the cell
+ -- That's a bit risky but is really cheap compared to other ways to do it
+ cell._font, cell._justification, cell._colSpan, cell._line, cell._column = font, justification, colSpan, lineNum, colNum
+
+ -- Setup the cell content
+ local width, height = cell:SetupCell(tooltip, value, justification, font, ...)
+ cell:Show()
+
+ if colSpan > 1 then
+ -- Postpone width changes until the tooltip is shown
+ local colRange = colNum.."-"..rightColNum
+
+ tooltip.colspans[colRange] = max(tooltip.colspans[colRange] or 0, width)
+ layoutCleaner:RegisterForCleanup(tooltip)
+ else
+ -- Enlarge the column and tooltip if need be
+ EnlargeColumn(tooltip, tooltip.columns[colNum], width)
+ end
+
+ -- Enlarge the line and tooltip if need be
+ if height > line.height then
+ SetTooltipSize(tooltip, tooltip.width, tooltip.height + height - line.height)
+
+ line.height = height
+ line:SetHeight(height)
+ end
+
+ if rightColNum < tooltipWidth then
+ return lineNum, rightColNum + 1
+ else
+ return lineNum, nil
+ end
+end
+
+local function CreateLine(tooltip, font, ...)
+ if #tooltip.columns == 0 then
+ error("column layout should be defined before adding line", 3)
+ end
+ local lineNum = #tooltip.lines + 1
+ local line = tooltip.lines[lineNum] or AcquireFrame(tooltip.scrollChild)
+
+ line:SetFrameLevel(tooltip.scrollChild:GetFrameLevel() + 2)
+ line:SetPoint('LEFT', tooltip.scrollChild)
+ line:SetPoint('RIGHT', tooltip.scrollChild)
+
+ if lineNum > 1 then
+ local v_margin = tooltip.cell_margin_v or CELL_MARGIN_V
+
+ line:SetPoint('TOP', tooltip.lines[lineNum-1], 'BOTTOM', 0, -v_margin)
+ SetTooltipSize(tooltip, tooltip.width, tooltip.height + v_margin)
+ else
+ line:SetPoint('TOP', tooltip.scrollChild)
+ end
+ tooltip.lines[lineNum] = line
+ line.cells = line.cells or AcquireTable()
+ line.height = 0
+ line:SetHeight(1)
+ line:Show()
+
+ local colNum = 1
+
+ for i = 1, #tooltip.columns do
+ local value = select(i, ...)
+
+ if value ~= nil then
+ lineNum, colNum = _SetCell(tooltip, lineNum, i, value, font, nil, 1, tooltip.labelProvider)
+ end
+ end
+ return lineNum, colNum
+end
+
+function tipPrototype:AddLine(...)
+ return CreateLine(self, self.regularFont, ...)
+end
+
+function tipPrototype:AddHeader(...)
+ return CreateLine(self, self.headerFont, ...)
+end
+
+local GenericBackdrop = {
+ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
+}
+
+function tipPrototype:AddSeparator(height, r, g, b, a)
+ local lineNum, colNum = self:AddLine()
+ local line = self.lines[lineNum]
+ local color = NORMAL_FONT_COLOR
+
+ height = height or 1
+ SetTooltipSize(self, self.width, self.height + height)
+ line.height = height
+ line:SetHeight(height)
+ line:SetBackdrop(GenericBackdrop)
+ line:SetBackdropColor(r or color.r, g or color.g, b or color.b, a or 1)
+ return lineNum, colNum
+end
+
+function tipPrototype:SetCellColor(lineNum, colNum, r, g, b, a)
+ local cell = self.lines[lineNum].cells[colNum]
+
+ if cell then
+ local sr, sg, sb, sa = self:GetBackdropColor()
+ cell:SetBackdrop(GenericBackdrop)
+ cell:SetBackdropColor(r or sr, g or sg, b or sb, a or sa)
+ end
+end
+
+function tipPrototype:SetColumnColor(colNum, r, g, b, a)
+ local column = self.columns[colNum]
+
+ if column then
+ local sr, sg, sb, sa = self:GetBackdropColor()
+ column:SetBackdrop(GenericBackdrop)
+ column:SetBackdropColor(r or sr, g or sg, b or sb, a or sa)
+ end
+end
+
+function tipPrototype:SetLineColor(lineNum, r, g, b, a)
+ local line = self.lines[lineNum]
+
+ if line then
+ local sr, sg, sb, sa = self:GetBackdropColor()
+ line:SetBackdrop(GenericBackdrop)
+ line:SetBackdropColor(r or sr, g or sg, b or sb, a or sa)
+ end
+end
+
+-- TODO: fixed argument positions / remove checks for performance?
+function tipPrototype:SetCell(lineNum, colNum, value, ...)
+ -- Mandatory argument checking
+ if type(lineNum) ~= "number" then
+ error("line number must be a number, not: "..tostring(lineNum), 2)
+ elseif lineNum < 1 or lineNum > #self.lines then
+ error("line number out of range: "..tostring(lineNum), 2)
+ elseif type(colNum) ~= "number" then
+ error("column number must be a number, not: "..tostring(colNum), 2)
+ elseif colNum < 1 or colNum > #self.columns then
+ error("column number out of range: "..tostring(colNum), 2)
+ end
+
+ -- Variable argument checking
+ local font, justification, colSpan, provider
+ local i, arg = 1, ...
+
+ if arg == nil or checkFont(arg, 2, true) then
+ i, font, arg = 2, ...
+ end
+
+ if arg == nil or checkJustification(arg, 2, true) then
+ i, justification, arg = i + 1, select(i, ...)
+ end
+
+ if arg == nil or type(arg) == 'number' then
+ i, colSpan, arg = i + 1, select(i, ...)
+ end
+
+ if arg == nil or type(arg) == 'table' and type(arg.AcquireCell) == 'function' then
+ i, provider = i + 1, arg
+ end
+
+ return _SetCell(self, lineNum, colNum, value, font, justification, colSpan, provider, select(i, ...))
+end
+
+function tipPrototype:GetLineCount() return #self.lines end
+
+function tipPrototype:GetColumnCount() return #self.columns end
+
+
+------------------------------------------------------------------------------
+-- Frame Scripts
+------------------------------------------------------------------------------
+local highlight = CreateFrame("Frame", nil, UIParent)
+highlight:SetFrameStrata("TOOLTIP")
+highlight:Hide()
+
+highlight._texture = highlight:CreateTexture(nil, "OVERLAY")
+highlight._texture:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
+highlight._texture:SetBlendMode("ADD")
+highlight._texture:SetAllPoints(highlight)
+
+local scripts = {
+ OnEnter = function(frame, ...)
+ highlight:SetParent(frame)
+ highlight:SetAllPoints(frame)
+ highlight:Show()
+ if frame._OnEnter_func then
+ frame:_OnEnter_func(frame._OnEnter_arg, ...)
+ end
+ end,
+ OnLeave = function(frame, ...)
+ highlight:Hide()
+ highlight:ClearAllPoints()
+ highlight:SetParent(nil)
+ if frame._OnLeave_func then
+ frame:_OnLeave_func(frame._OnLeave_arg, ...)
+ end
+ end,
+ OnMouseDown = function(frame, ...)
+ frame:_OnMouseDown_func(frame._OnMouseDown_arg, ...)
+ end,
+ OnMouseUp = function(frame, ...)
+ frame:_OnMouseUp_func(frame._OnMouseUp_arg, ...)
+ end,
+}
+
+function SetFrameScript(frame, script, func, arg)
+ if not scripts[script] then
+ return
+ end
+ frame["_"..script.."_func"] = func
+ frame["_"..script.."_arg"] = arg
+
+ if script == "OnMouseDown" or script == "OnMouseUp" then
+ if func then
+ frame:SetScript(script, scripts[script])
+ else
+ frame:SetScript(script, nil)
+ end
+ end
+
+ -- if at least one script is set, set the OnEnter/OnLeave scripts for the highlight
+ if frame._OnEnter_func or frame._OnLeave_func or frame._OnMouseDown_func or frame._OnMouseUp_func then
+ frame:EnableMouse(true)
+ frame:SetScript("OnEnter", scripts.OnEnter)
+ frame:SetScript("OnLeave", scripts.OnLeave)
+ else
+ frame:EnableMouse(false)
+ frame:SetScript("OnEnter", nil)
+ frame:SetScript("OnLeave", nil)
+ end
+end
+
+function ClearFrameScripts(frame)
+ if frame._OnEnter_func or frame._OnLeave_func or frame._OnMouseDown_func or frame._OnMouseUp_func then
+ frame:EnableMouse(false)
+ frame:SetScript("OnEnter", nil)
+ frame._OnEnter_func = nil
+ frame._OnEnter_arg = nil
+ frame:SetScript("OnLeave", nil)
+ frame._OnLeave_func = nil
+ frame._OnLeave_arg = nil
+ frame:SetScript("OnMouseDown", nil)
+ frame._OnMouseDown_func = nil
+ frame._OnMouseDown_arg = nil
+ frame:SetScript("OnMouseUp", nil)
+ frame._OnMouseUp_func = nil
+ frame._OnMouseUp_arg = nil
+ end
+end
+
+function tipPrototype:SetLineScript(lineNum, script, func, arg)
+ SetFrameScript(self.lines[lineNum], script, func, arg)
+end
+
+function tipPrototype:SetColumnScript(colNum, script, func, arg)
+ SetFrameScript(self.columns[colNum], script, func, arg)
+end
+
+function tipPrototype:SetCellScript(lineNum, colNum, script, func, arg)
+ local cell = self.lines[lineNum].cells[colNum]
+ if cell then
+ SetFrameScript(cell, script, func, arg)
+ end
+end
+
+------------------------------------------------------------------------------
+-- Auto-hiding feature
+------------------------------------------------------------------------------
+
+-- Script of the auto-hiding child frame
+local function AutoHideTimerFrame_OnUpdate(self, elapsed)
+ self.checkElapsed = self.checkElapsed + elapsed
+ if self.checkElapsed > 0.1 then
+ if self.parent:IsMouseOver() or (self.alternateFrame and self.alternateFrame:IsMouseOver()) then
+ self.elapsed = 0
+ else
+ self.elapsed = self.elapsed + self.checkElapsed
+ if self.elapsed >= self.delay then
+ lib:Release(self.parent)
+ end
+ end
+ self.checkElapsed = 0
+ end
+end
+
+-- Usage:
+-- :SetAutoHideDelay(0.25) => hides after 0.25sec outside of the tooltip
+-- :SetAutoHideDelay(0.25, someFrame) => hides after 0.25sec outside of both the tooltip and someFrame
+-- :SetAutoHideDelay() => disable auto-hiding (default)
+function tipPrototype:SetAutoHideDelay(delay, alternateFrame)
+ local timerFrame = self.autoHideTimerFrame
+ delay = tonumber(delay) or 0
+
+ if delay > 0 then
+ if not timerFrame then
+ timerFrame = AcquireFrame(self)
+ timerFrame:SetScript("OnUpdate", AutoHideTimerFrame_OnUpdate)
+ self.autoHideTimerFrame = timerFrame
+ end
+ timerFrame.parent = self
+ timerFrame.checkElapsed = 0
+ timerFrame.elapsed = 0
+ timerFrame.delay = delay
+ timerFrame.alternateFrame = alternateFrame
+ timerFrame:Show()
+ elseif timerFrame then
+ self.autoHideTimerFrame = nil
+ timerFrame.alternateFrame = nil
+ timerFrame:SetScript("OnUpdate", nil)
+ ReleaseFrame(timerFrame)
+ end
+end
+
+------------------------------------------------------------------------------
+-- "Smart" Anchoring
+------------------------------------------------------------------------------
+local function GetTipAnchor(frame)
+ local x,y = frame:GetCenter()
+ if not x or not y then return "TOPLEFT", "BOTTOMLEFT" end
+ local hhalf = (x > UIParent:GetWidth() * 2/3) and "RIGHT" or (x < UIParent:GetWidth() / 3) and "LEFT" or ""
+ local vhalf = (y > UIParent:GetHeight() / 2) and "TOP" or "BOTTOM"
+ return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf
+end
+
+function tipPrototype:SmartAnchorTo(frame)
+ if not frame then
+ error("Invalid frame provided.", 2)
+ end
+ self:ClearAllPoints()
+ self:SetClampedToScreen(true)
+ self:SetPoint(GetTipAnchor(frame))
+end
+
+------------------------------------------------------------------------------
+-- Debug slashcmds
+------------------------------------------------------------------------------
+--[===[@debug@
+local print = print
+local function PrintStats()
+ local tipCache = tostring(#tooltipHeap)
+ local frameCache = tostring(#frameHeap)
+ local tableCache = tostring(#tableHeap)
+ local header = false
+
+ print("Tooltips used: "..usedTooltips..", Cached: "..tipCache..", Total: "..tipCache + usedTooltips)
+ print("Frames used: "..usedFrames..", Cached: "..frameCache..", Total: "..frameCache + usedFrames)
+ print("Tables used: "..usedTables..", Cached: "..tableCache..", Total: "..tableCache + usedTables)
+
+ for k, v in pairs(activeTooltips) do
+ if not header then
+ print("Active tooltips:")
+ header = true
+ end
+ print("- "..k)
+ end
+end
+
+SLASH_LibQTip1 = "/qtip"
+SlashCmdList["LibQTip"] = PrintStats
+--@end-debug@]===]
diff --git a/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.toc b/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.toc
new file mode 100644
index 0000000..6fbc0a0
--- /dev/null
+++ b/Decursive/Libs/LibQTip-1.0/LibQTip-1.0.toc
@@ -0,0 +1,17 @@
+## Interface: 30300
+## Title: Lib: QTip-1.0
+## Notes: Library providing multi-column tooltips.
+## Author: Torhal, Adirelle, Elkano, Tristanian
+## Version: r138
+## LoadOnDemand: 1
+## X-Date: 2010-08-03T20:56:32Z
+## X-Credits: Kaelten (input on initial design)
+## X-Category: Library, Tooltip
+## X-License: Ace3 BSD-like license
+## X-Curse-Packaged-Version: r138
+## X-Curse-Project-Name: LibQTip-1.0
+## X-Curse-Project-ID: libqtip-1-0
+## X-Curse-Repository-ID: wow/libqtip-1-0/mainline
+
+LibStub\LibStub.lua
+lib.xml
diff --git a/Decursive/Libs/LibQTip-1.0/lib.xml b/Decursive/Libs/LibQTip-1.0/lib.xml
new file mode 100644
index 0000000..5531be0
--- /dev/null
+++ b/Decursive/Libs/LibQTip-1.0/lib.xml
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/Decursive/Localization/deDE.lua b/Decursive/Localization/deDE.lua
new file mode 100644
index 0000000..b3184a7
--- /dev/null
+++ b/Decursive/Localization/deDE.lua
@@ -0,0 +1,390 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- German localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "deDE");
+
+if not L then
+ T._LoadedFiles["deDE.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+
+L["ABOLISH_CHECK"] = "Zuvor überprüfen ob Reinigung nötig"
+L["ABOUT_AUTHOREMAIL"] = "E-MAIL DES ENTWICKLERS"
+L["ABOUT_CREDITS"] = "VERDIENST"
+L["ABOUT_LICENSE"] = "LIZENZ"
+L["ABOUT_NOTES"] = "Anzeige und Reinigung von Gebrechen für Solo, Gruppe und Schlachtzug mit erweitertem Filter- und Prioritäten-System."
+L["ABOUT_OFFICIALWEBSITE"] = "OFFIZIELLE WEBSEITE"
+L["ABOUT_SHAREDLIBS"] = "GEMEINSAM GENUTZTE SAMMLUNGEN"
+L["ABSENT"] = "Fehlt (%s)"
+L["AFFLICTEDBY"] = "%s Befallen"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "Zeige Anzahl der Betroffenen: "
+L["ANCHOR"] = "Decursive Textfenster"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "Micro-Unit-Fenster anzeigen oder verstecken"
+L["BINDING_NAME_DCRPRADD"] = "Ziel zur Prioritätenliste hinzufügen"
+L["BINDING_NAME_DCRPRCLEAR"] = "Prioritätenliste leeren"
+L["BINDING_NAME_DCRPRLIST"] = "Prioritätenliste ausgeben"
+L["BINDING_NAME_DCRPRSHOW"] = "Zeige/Verstecke die Prioritätenliste UI"
+L["BINDING_NAME_DCRSHOW"] = "Zeige/Verstecke Decursive Main Bar"
+L["BINDING_NAME_DCRSHOWOPTION"] = "Feststehendes Optionsfeld anzeigen"
+L["BINDING_NAME_DCRSKADD"] = "Ziel zur Ignorierliste hinzufügen"
+L["BINDING_NAME_DCRSKCLEAR"] = "Ignorierliste leeren"
+L["BINDING_NAME_DCRSKLIST"] = "Ignorierliste ausgeben"
+L["BINDING_NAME_DCRSKSHOW"] = "Zeige/Verstecke die Ignorierliste UI"
+L["BLACK_LENGTH"] = "Sekunden auf der Blacklist: "
+L["BLACKLISTED"] = "Black-listed"
+L["CHARM"] = "Verführung/Übernommen/Gedankenkontrolle"
+L["CLASS_HUNTER"] = "Jäger"
+L["CLEAR_PRIO"] = "C"
+L["CLEAR_SKIP"] = "C"
+L["COLORALERT"] = "Warnfarbe einstellen, wenn ein '%s' benötigt wird."
+L["COLORCHRONOS"] = "Chronometer"
+L["COLORCHRONOS_DESC"] = "Chronometer-Farbe einstellen"
+L["COLORSTATUS"] = "Farbe für '%s' MUF-Status einstellen."
+L["CTRL"] = "Strg"
+L["CURE_PETS"] = "Scanne und reinige Pets"
+L["CURSE"] = "Fluch"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33Bitte sende den Inhalt dieses Fensters an Archarodim+DcrReport@teaser.fr|r
+|cFF009999(Benutze Strg+A, um alles zu markieren, und dann Strg+C, um den Text in deine Zwischenablage zu kopieren)|r
+Bitte berichte ebenfalls, ob du merkwürdiges Verhalten von Decursive bemerkt hast.
+]=]
+L["DECURSIVE_DEBUG_REPORT"] = " **** |cFFFF0000Decursive-Debug-Bericht|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[Ein Debug-Bericht ist vorhanden!
+Gib |cFFFF0000/dcr general report|r ein, um ihn zu sehen.]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "Debug Report verfügbar !"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "Zeigt einen Debug Report an der für den Author wichtig ist...."
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DEV_VERSION_ALERT"] = [=[Du benutzt eine Entwickler-Version von Decursive.
+
+Falls du nicht teilhaben willst am Testen neuer Features/Fehlerbehebungen, Erhalten von Fehlerbehebungsberichten im Spiel, Probleme oder Anfragen senden möchtest an den Entwickler, dann VERWENDE DIESE VERSION NICHT und lade die letzte stabile Version herunter bei curse.com oder wowace.com.
+
+Diese Mitteilunge wird nur einmal pro Version in den Chat ausgegeben.]=]
+L["DEV_VERSION_EXPIRED"] = [=[Diese Entwickler-Version von Decursive ist abgelaufen.
+Du solltest die neueste Entwickler-Version herunterladen oder zurückgehen zur aktuellen stabilen Release-Version, die du bei CURSE.COM oder WAWACE.COM findest.
+Diese Warnung wird alle zwei Tage angezeigt.]=]
+L["DEWDROPISGONE"] = "Es gibt kein Äquivalent zu DewDrop für Ace3. Alt-Rechts-Klicken, um das Optionsfeld zu öffnen."
+L["DISABLEWARNING"] = [=[Decursive wurde ausgeschaltet!
+
+Um es erneut zu aktivieren, gib |cFFFFAA44/DCR ENABLE|r ein.]=]
+L["DISEASE"] = "Krankheit"
+L["DONOT_BL_PRIO"] = "Keine Namen der Prioritätenliste bannen"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r |cFFAA0000gescheitert bei|r %s
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "Focus Einheit"
+L["FUBARMENU"] = "FuBar Menu"
+L["FUBARMENU_DESC"] = "Setzt die Optionen relativ zum FuBar Icon"
+L["GLOR1"] = "In Gedenken an Glorfindal"
+L["GLOR2"] = [=[Decursive ist Bertrand gewidmet, der uns viel zu früh verlassen hat.
+Er wird immer in Erinnerung bleiben.]=]
+L["GLOR3"] = [=[In Gedenken an Bertrand Sense
+1969 - 2007]=]
+L["GLOR4"] = [=[Freundschaft und Zuneigung haben ihre Wurzeln überall, die, die Glorfindal in World of Warcraft getroffen haben kennen einen Menschen großen Einsatzes und einen charismatischen Leiter.
+
+Er war im echten Leben wie im Spiel, Selbstlos, Grosszügig, immer für seine Freunde da und vor allem ein enthusiastischer Mensch.
+
+Er verließ uns mit 38 und lies nicht nur Anonyme Spieler in einer Virtuellen Welt, sondern echte Freunde zurück, die ihn immer vermissen werden.]=]
+L["GLOR5"] = "Er wird immer in Erinnerung bleiben..."
+L["HANDLEHELP"] = "Alle Micro-Unit-Fenster (MUFs) verschieben"
+L["HIDE_LIVELIST"] = "Verstecke die Live-Liste"
+L["HIDE_MAIN"] = "Verstecke Decursive Fenster"
+L["HIDESHOW_BUTTONS"] = "Verbergen-/Anzeigen-Schaltflächen"
+L["HLP_LEFTCLICK"] = "Linksklick"
+L["HLP_LL_ONCLICK_TEXT"] = [=[Das Klicken auf die aktuelle Liste ist nicht mehr möglich seit WoW 2.0. Lies bitte die Datei "Readme.txt" in deinem Decursive-Ordner...
+(Um diese Liste zu bewegen, bewege die Decursive-Leiste, /dcrshow und Links-Alt-Klick zum Bewegen)]=]
+L["HLP_MIDDLECLICK"] = "Mittlere Maustaste"
+L["HLP_NOTHINGTOCURE"] = "Es gibt nichts zu Heilen!"
+L["HLP_RIGHTCLICK"] = "Rechtsklick"
+L["HLP_USEXBUTTONTOCURE"] = "Benutze \"%s\" um dieses Gebrechen zu Heilen!"
+L["HLP_WRONGMBUTTON"] = "Falscher Mausbutton!"
+L["IGNORE_STEALTH"] = "Ignoriere getarnte Einheiten"
+L["IS_HERE_MSG"] = "Decursive wurde geladen, kontrolliere bitte die Einstellungen"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r-Click: Entfernt den Spieler
+|cFF33AA33LEFT|r-Click: Diesen Spieler eins nach oben setzen
+|cFF33AA33RIGHT|r-Click: Diesen Spieler eins nach unten setzen
+|cFF33AA33[SHIFT] LEFT|r-Click: Setzt den Spieler ganz nach oben
+|cFF33AA33[SHIFT] RIGHT|r-Click: Setzt den Spieler ganz nach unten]=]
+L["MACROKEYALREADYMAPPED"] = [=[Warnung: Die Taste zu dem Decursive macro [%s] ist an Aktion gebunden '%s'.
+Decursive wird es auf die vorherige Einstellung zurück setzen wenn du eine andere Taste für das Marko auswählst.]=]
+L["MACROKEYMAPPINGFAILED"] = "Die Taste [%s] kann nicht an das Decursive-Macro gebunden werden"
+L["MACROKEYMAPPINGSUCCESS"] = "Die Taste [%s] wurde erfolgreich an das Decursive-Macro gebunden"
+L["MACROKEYNOTMAPPED"] = "Decursive mouse-over Makro ist nicht an eine Taste gebunden, schau in der Option \"Makro\" (Interface) nach "
+L["MAGIC"] = "Magie"
+L["MAGICCHARMED"] = "Magie Zauber"
+L["MISSINGUNIT"] = "Fehlende Einheit"
+L["NORMAL"] = "Normal"
+L["NOSPELL"] = "Kein Zauber verfügbar"
+L["OPT_ABOLISHCHECK_DESC"] = "Wähle, ob Einheiten mit einem aktiven \"Aufheben\"-Zauber angezeigt und geheilt werden sollen."
+L["OPT_ABOUT"] = "Über"
+L["OPT_ADDDEBUFF"] = "Ein Gebrechen manuell hinzufügen"
+L["OPT_ADDDEBUFF_DESC"] = "Ein neues Gebrechen der Liste hinzufügen"
+L["OPT_ADDDEBUFFFHIST"] = "Erneuertes Gebrechen hinzufügen."
+L["OPT_ADDDEBUFFFHIST_DESC"] = "Ein Gebrechen anhand der Historie hinzufügen"
+L["OPT_ADDDEBUFF_USAGE"] = ""
+L["OPT_ADVDISP"] = "Erweiterte Anzeigeeinstellungen"
+L["OPT_ADVDISP_DESC"] = "Erlauben, die Transparenz des Rands und der Mitte getrennt einzustellen, den Abstand zwischen jedem MUF einzustellen."
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s betroffen von %s, wird jedoch übersprungen"
+L["OPT_ALWAYSIGNORE"] = "Auch ignorieren wenn nicht im Kampf"
+L["OPT_ALWAYSIGNORE_DESC"] = "Falls Markiert, wird dieses Gebrechen auch dann ignoriert, wenn du dich nicht im Kampf befindest."
+L["OPT_AMOUNT_AFFLIC_DESC"] = "Definiert die maximale Anzahl der anzuzeigenden Verfluchten in der aktuellen Liste"
+L["OPT_ANCHOR_DESC"] = "Zeigt Anker des Rahmens der allgemeinen Mitteilungen an"
+L["OPT_AUTOHIDEMFS"] = "Automatisch verstecken"
+L["OPT_AUTOHIDEMFS_DESC"] = "Wähle, wann das MUF-Fenster verborgen werden soll."
+L["OPT_BLACKLENTGH_DESC"] = "Definiert wie lange ein Spieler auf der Blacklist steht. "
+L["OPT_BORDERTRANSP"] = "Rahmen-Transparenz"
+L["OPT_BORDERTRANSP_DESC"] = "Rahmen-Transparenz setzten"
+L["OPT_CENTERTRANSP"] = "Transparenz Mitte"
+L["OPT_CENTERTRANSP_DESC"] = "Transparenz der Mitte einstellen"
+L["OPT_CHARMEDCHECK_DESC"] = "Wenn markiert, bist du in der Lage, bezauberte Einheiten zu sehen und zu behandeln."
+L["OPT_CHATFRAME_DESC"] = "Decursive Nachrichten werden im Standart Bildfeld ausgegeben."
+L["OPT_CHECKOTHERPLAYERS"] = "Andere Spieler überprüfen"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "Zeigt Decursive-Version den Spielern in deiner aktuellen Gruppe oder Gilde an (kann nicht Versionen vor Decursive 2.4.6 anzeigen)."
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "Erzeuge eine virtuelle Test Krankheit/Gebrechen"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "Lässt dich sehen, wie es aussieht, wenn ein Gebrechen gefunden wurde."
+L["OPT_CUREPETS_DESC"] = "Begleiter werden bearbeitet und geheilt"
+L["OPT_CURINGOPTIONS"] = "Aktuelle Einstellungen"
+L["OPT_CURINGOPTIONS_DESC"] = "Verschiedene Aspekte des Heilungsprozesses einstellen"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+Wähle die Arten von Gebrechen, die du heilen möchtest. Nicht markierte Typen werden komplett von Decursive ignoriert.
+
+Die grüne Zahl legt die Priorität des Gebrechens fest. Diese Priorität beeinflußt mehrere Aspekte:
+- Was Decursive als erstes anzeigt, wenn ein Spieler an verschiedenen Debuff-Typen leidet.
+- Welche Maus-Schaltfläche du klicken mußt, um den jeweiligen Debuff zu heilen (Erster Zauber ist Linksklick, zweiter ist Rechtsklick, etc...).
+
+All dies wird in der Dokumentation genau erklärt (muß gelesen werden):
+http://www.wowace.com/addons/decursive/
+]=]
+L["OPT_CURINGORDEROPTIONS"] = "Aktuelle Sortierungseinstellungen"
+L["OPT_CURSECHECK_DESC"] = "Falls markiert, bist du in der Lage, verfluchte Einheiten zu sehen und zu heilen."
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+
+Standardmäßig markiert]=]
+L["OPT_DEBUFFENTRY_DESC"] = "Auswählen welche Klasse im Kampf ignoriert werden soll wenn sie von dieser Krankheit betroffen ist."
+L["OPT_DEBUFFFILTER"] = "Gebrechen gefilter"
+L["OPT_DEBUFFFILTER_DESC"] = "Wähle Gebrechen anhand des Namens und der Klasse welches innerhalb des Kampfes gefiltert werden soll."
+L["OPT_DISABLEMACROCREATION"] = "Deaktiviert Makro erstellung"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Decursive-Makro wird nicht mehr kreiert oder erhalten"
+L["OPT_DISEASECHECK_DESC"] = "Wenn Aktiv, die Möglichkeit erkrankte Einheiten zu sehen und zu heilen."
+L["OPT_DISPLAYOPTIONS"] = "Anzeigeoptionen"
+L["OPT_DONOTBLPRIO_DESC"] = "Einheiten auf der Prioritätenliste werden nicht in die Blacklist übernommen."
+L["OPT_ENABLEDEBUG"] = "Fehlersuche zulassen"
+L["OPT_ENABLEDEBUG_DESC"] = "Ausgabe der Fehlersuche zulassen"
+L["OPT_ENABLEDECURSIVE"] = "Decursive aktivieren"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "%q wird bei den spezifizierten Klassen ignoriert während du dich im Kampf befindest."
+L["OPT_GENERAL"] = "Allgemeine Optionen"
+L["OPT_GROWDIRECTION"] = "MUF-Anzeige umkehren"
+L["OPT_GROWDIRECTION_DESC"] = "Das MUF von unten nach oben anzeigen"
+L["OPT_HIDELIVELIST_DESC"] = "Wenn nicht versteckt, zeigt eine Informations Leiste von Spielern mit Flüchen"
+L["OPT_HIDEMFS_GROUP"] = "Solo/Gruppe"
+L["OPT_HIDEMFS_GROUP_DESC"] = "Das MUF verstecken wenn du nicht im Raid bist"
+L["OPT_HIDEMFS_NEVER"] = "Nie"
+L["OPT_HIDEMFS_NEVER_DESC"] = "Das MUF-Fenster nie automatisch verstecken."
+L["OPT_HIDEMFS_SOLO"] = "Solo"
+L["OPT_HIDEMFS_SOLO_DESC"] = "Das MUF-Fenster verstecken wenn du in keiner Gruppe oder Raidgruppe bist."
+L["OPT_HIDEMUFSHANDLE"] = "MUF-Handhabung verbergen"
+L["OPT_HIDEMUFSHANDLE_DESC"] = [=[Verbirgt die Handhabung der Mikro-Einheiten-Rahmen und schaltet die Möglichkeit aus, diese zu bewegen.
+Benutze denselben Befehl, um diese wiederherzustellen.]=]
+L["OPT_IGNORESTEALTHED_DESC"] = "Verhüllte/Versteckte Einheiten werden ignoriert"
+L["OPTION_MENU"] = "Decursive Einstellungen"
+L["OPT_LIVELIST"] = "Live-Liste"
+L["OPT_LIVELIST_DESC"] = "Optionen für die Live-Liste"
+L["OPT_LLALPHA"] = "Transparenz Live-Liste"
+L["OPT_LLALPHA_DESC"] = "Andert die Decursive Haupt und Live Leiste Transparenz (Haupt Leiste muss sichtbar sein)"
+L["OPT_LLSCALE"] = "Skalierung der Live-Liste"
+L["OPT_LLSCALE_DESC"] = "Setzt die Größe der Decursive Hauptleiste und der Live-Liste (Hauptleiste muss angezeigt werden)"
+L["OPT_LVONLYINRANGE"] = "Nur Einheiten in Reichweite"
+L["OPT_LVONLYINRANGE_DESC"] = "Nur Einheiten in Dispelreichweite werden in der Live-Liste angezeigt"
+L["OPT_MACROBIND"] = "Tastkombination für das Macro setzen"
+L["OPT_MACROBIND_DESC"] = [=[Definiert die Taste mit der das 'Decursive' Makro aufgerufen wird
+
+Wähle die gewünschte Taste und drück die Taste "Enter" um die Zuordnung abzuschliessen (Mit dem Mouse Over Curso über dem Edit Feld)
+]=]
+L["OPT_MACROOPTIONS"] = "Macro-Optionen"
+L["OPT_MACROOPTIONS_DESC"] = "Das Verhalten des Decursive-Macros festlegen"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "Wenn Aktiv, ist es möglich mit Magie verzauberte Einheiten zu sehen und zu heilen."
+L["OPT_MAGICCHECK_DESC"] = "Wenn Aktiv, ist es möglich mit Magie befallene Einheiten zu sehen und zu heilen."
+L["OPT_MAXMFS"] = "Maximale Anzahl an Einheiten die angezeigt werden sollen"
+L["OPT_MAXMFS_DESC"] = "Definiert die maximale Anzahl an Mikro-Unitframes die angezeigt werden sollen"
+L["OPT_MESSAGES"] = "Nachrichten"
+L["OPT_MESSAGES_DESC"] = "Optionen über Nachrichten Anzeige"
+L["OPT_MFALPHA"] = "Transparenz"
+L["OPT_MFALPHA_DESC"] = "Abweichende Transparenz der MUF's wenn Einheiten nicht betroffen sind"
+L["OPT_MFPERFOPT"] = "Performance-Einstellungen"
+L["OPT_MFREFRESHRATE"] = "Aktualisierungsrate"
+L["OPT_MFREFRESHRATE_DESC"] = "Zeit zwischen jedem refresh Aufruf (1 oder mehrere micro-unit-frames können auf einmal aktuallisiert werden)"
+L["OPT_MFREFRESHSPEED"] = "Aktualisierungsgeschwindigkeit"
+L["OPT_MFREFRESHSPEED_DESC"] = "Anzahl der Micro-Unit-Fenster die in einem Durchgang aktualisiert werden sollen"
+L["OPT_MFSCALE"] = "Scalieriung des Micro-Unit-Fensters"
+L["OPT_MFSCALE_DESC"] = "Große des Micro-Unit-Fensters setzten"
+L["OPT_MFSETTINGS"] = "Einstellungen des Micro-Unit-Fensters"
+L["OPT_MFSETTINGS_DESC"] = "Stellt die MUF Fenster Optionen nach deinen Bedürfnissen ein. "
+L["OPT_MUFFOCUSBUTTON"] = "Fokus-Schaltfläche:"
+L["OPT_MUFMOUSEBUTTONS"] = "Maus-Schaltflächen"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "Maus-Schaltflächen einstellen, die du für jede Warnfarbe des Mikro-Einheiten-Rahmens benutzen möchtest."
+L["OPT_MUFSCOLORS"] = "Farben"
+L["OPT_MUFSCOLORS_DESC"] = "Farben des Micro-Unit-Fensters verändern"
+L["OPT_MUFTARGETBUTTON"] = "Tiel-Schaltfläche:"
+L["OPT_NOKEYWARN"] = "Warnen wenn keine Tastenbelegung angegeben"
+L["OPT_NOKEYWARN_DESC"] = "Warnen wenn keine Tastenbelegung angegeben"
+L["OPT_NOSTARTMESSAGES"] = "Begrüssungsmitteilungen ausschalten"
+L["OPT_NOSTARTMESSAGES_DESC"] = "Die drei Mitteilungen entfernen, die Decursive bei jedem Einloggen im Chat-Rahmen ausgibt."
+L["OPT_PLAYSOUND_DESC"] = "Einen Ton abspielen wenn jemand von einem Fluch betroffen ist"
+L["OPT_POISONCHECK_DESC"] = "Wenn Aktiv, ist es möglich vergiftete Einheiten zu sehen und zu heilen."
+L["OPT_PRINT_CUSTOM_DESC"] = "Decursive-Nachrichten werden in einem eigenen Chat-Fenster angezeigt"
+L["OPT_PRINT_ERRORS_DESC"] = "Fehler werden angezeigt"
+L["OPT_PROFILERESET"] = "Profil zurückgestetzt..."
+L["OPT_RANDOMORDER_DESC"] = "Einheiten werden Angezeigt und in zufälliger Reihenfolge geheilt(Nicht empfohlen)"
+L["OPT_READDDEFAULTSD"] = "RE-ADD Standart Gebrechen "
+L["OPT_READDDEFAULTSD_DESC1"] = [=[Fügt fehlende Decursive standart Gebrechen zu dieser Liste.
+Deine Einstellungen werden nicht geändert. ]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "Alle Decursive standart Gebrechen sind in dieser Liste. "
+L["OPT_REMOVESKDEBCONF"] = [=[ Bist du sicher du wills '%s' entfernen aus der Decursive Krankheiten Liste ?
+]=]
+L["OPT_REMOVETHISDEBUFF"] = "Dieses Gebrechen entfernen"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "Entfernt '%s' von der skip list"
+L["OPT_RESETDEBUFF"] = "Resete diese Gebrechen"
+L["OPT_RESETDTDCRDEFAULT"] = " Resets '%s' auf Decursive Standart"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "Zurücksetzen"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "Zuordnungen der Maus-Schaltflächen auf Standard zurücksetzen."
+L["OPT_RESETOPTIONS"] = "Optionen zurücksetzten"
+L["OPT_RESETOPTIONS_DESC"] = "Aktuelles Profil zurücksetzten"
+L["OPT_RESTPROFILECONF"] = [=[Bist du sicher du willst das Profile
+'(%s) %s'
+auf die Standart Einstellungen zurück setzen ?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "Live-Liste von unten nach oben befüllen"
+L["OPT_SCANLENGTH_DESC"] = "Zeit zwischen jedem Scanvorgang festlegen"
+L["OPT_SHOWBORDER"] = "Zeige Klassenfarbige Umrandung"
+L["OPT_SHOWBORDER_DESC"] = "Eine farbliche Umrandung wird um die MUF's angezeigt welche die Unit Klasse darstellt "
+L["OPT_SHOWCHRONO"] = "Zeige Zeitmesser"
+L["OPT_SHOWCHRONO_DESC"] = "Zeit in Sec. die verstrichen ist seit eine Einheit mit einem Gebrechen befallen ist, wird angezeigt. "
+L["OPT_SHOWCHRONOTIMElEFT"] = "Zeit verbleibend"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "Zeige verbleibende Zeit an anstatt bereits verstrichener Zeit."
+L["OPT_SHOWHELP"] = "Hilfe anzeigen"
+L["OPT_SHOWHELP_DESC"] = "Zeigt einen Detaillierten Tooltip bei Mouse Over über das micro-unit-frame"
+L["OPT_SHOWMFS"] = "Micro-Unit-Fenster anzeigen"
+L["OPT_SHOWMFS_DESC"] = "Muss aktiv sein wenn du über Mausclick heilen möchtest."
+L["OPT_SHOWMINIMAPICON"] = "Minimap Icon"
+L["OPT_SHOWMINIMAPICON_DESC"] = "Minimap Icon anzeigen/verstecken"
+L["OPT_SHOW_STEALTH_STATUS"] = "Verborgenheitsstatus anzeigen"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "Wenn sich ein Spieler in Verborgenheit befindet, nimmt sein MUF eine spezielle Farbe an."
+L["OPT_SHOWTOOLTIP_DESC"] = "Zeigt einen Detailierten Tooltip über einen Fluch in der Life Liste auf den MUF's "
+L["OPT_STICKTORIGHT"] = "MUF rechts ausrichten"
+L["OPT_STICKTORIGHT_DESC"] = "Das MUF-Fenster wächst von rechts nach links. Falls notwendig, wird der Halter bewegt."
+L["OPT_TESTLAYOUT"] = "Test-Layout"
+L["OPT_TESTLAYOUT_DESC"] = [=[Erschaffe simulierte Einheiten, so dass du das Anzeige-Layout testen kannst.
+(Warte ein paar Sekunden nach dem Klicken!)]=]
+L["OPT_TESTLAYOUTUNUM"] = "Einheitsnummer"
+L["OPT_TESTLAYOUTUNUM_DESC"] = "Anzahl der zu erschaffenden simulierten Einheiten einstellen."
+L["OPT_TIECENTERANDBORDER"] = "Transparenz der Mitte und des Rands miteinander verbinden."
+L["OPT_TIECENTERANDBORDER_OPT"] = "Falls markiert, ist die Transparenz des Rands die Hälfte der Transparenz der Mitte."
+L["OPT_TIE_LIVELIST_DESC"] = "Die Anzeige der aktuellen Liste ist verbunden mit der Anzeige der Decursive-Leisten."
+L["OPT_TIEXYSPACING"] = "Horizontaler und vertikaler Abstand"
+L["OPT_TIEXYSPACING_DESC"] = "Der horizontale und vertikale Abstand zwischen MUFs sind gleich."
+L["OPT_UNITPERLINES"] = "Anzahl Einheiten pro Zeile"
+L["OPT_UNITPERLINES_DESC"] = "Definiert die max. Anzahl an Micro-Unitframes die pro Zeile angezeigt werden sollen."
+L["OPT_USERDEBUFF"] = "Diese Krankheit ist nicht Teil von Decursive's standardmässigen Krankheiten."
+L["OPT_XSPACING"] = "Horizontaler Abstand"
+L["OPT_XSPACING_DESC"] = "Den horizontalen Abstand zwischen MUFs festlegen."
+L["OPT_YSPACING"] = "Vertikaler Abstand"
+L["OPT_YSPACING_DESC"] = "Den vertikalen Abstand zwischen MUFs festlegen."
+L["PLAY_SOUND"] = "Akustische Warnung falls Reinigung nötig"
+L["POISON"] = "Gift"
+L["POPULATE"] = "P"
+L["POPULATE_LIST"] = "Schnellbestücken der Decursive Liste"
+L["PRINT_CHATFRAME"] = "Nachrichten im Chat ausgeben"
+L["PRINT_CUSTOM"] = "Nachrichten in Bildschirmmitte ausgeben"
+L["PRINT_ERRORS"] = "Fehlernachrichten ausgeben"
+L["PRIORITY_LIST"] = "Decursive Prioritätenliste"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "Reinige in zufälliger Reihenfolge"
+L["REVERSE_LIVELIST"] = "Zeige die Live-Liste umgekehrt"
+L["SCAN_LENGTH"] = "Sekunden zwischen Live-Scans: "
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "Um das Decursive Fenster anzuzeigen, /dcrshow eingeben"
+L["SHOW_TOOLTIP"] = "Zeige Tooltips in der Betroffenenliste"
+L["SKIP_LIST_STR"] = "Decursive Ignorierliste"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "Zauber %s gefunden!"
+L["STEALTHED"] = "Getarnt"
+L["STR_CLOSE"] = "Schließen"
+L["STR_DCR_PRIO"] = "Decursive Prioritätenliste"
+L["STR_DCR_SKIP"] = "Decursive Ignorierliste"
+L["STR_GROUP"] = "Gruppe "
+L["STR_OPTIONS"] = "Einstellungen"
+L["STR_OTHER"] = "Sonstige"
+L["STR_POP"] = "Bestückungsliste"
+L["STR_QUICK_POP"] = "Schnellbestücken"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r |cFF00AA00Erfolgreich bei|r %s"
+L["TARGETUNIT"] = "Zieleinheit"
+L["TIE_LIVELIST"] = "Tie live-List Sichtbarkeit zu DCR Fenster"
+L["TOOFAR"] = "Zu weit weg"
+L["UNITSTATUS"] = "Einheitenstatus:"
+
+
+
+T._LoadedFiles["deDE.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/enUS.lua b/Decursive/Localization/enUS.lua
new file mode 100644
index 0000000..7990fc1
--- /dev/null
+++ b/Decursive/Localization/enUS.lua
@@ -0,0 +1,395 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- English default localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["Dcr_DIAG.xml"] or not T._LoadedFiles["Dcr_DIAG.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (Dcr_DIAG.lua or Dcr_DIAG.xml not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "enUS", true);
+
+if not L then return end;
+
+L["ABOLISH_CHECK"] = "Check for \"Abolish\" before curing"
+L["ABOUT_AUTHOREMAIL"] = "AUTHOR E-MAIL"
+L["ABOUT_CREDITS"] = "CREDITS"
+L["ABOUT_LICENSE"] = "LICENSE"
+L["ABOUT_NOTES"] = "Afflictions display and cleaning for solo, group and raid with advanced filtering and priority system."
+L["ABOUT_OFFICIALWEBSITE"] = "OFFICIAL WEBSITE"
+L["ABOUT_SHAREDLIBS"] = "SHARED LIBRARIES"
+L["ABSENT"] = "Missing (%s)"
+L["AFFLICTEDBY"] = "%s Afflicted"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "The amount of afflicted to show : "
+L["ANCHOR"] = "Decursive Text Anchor"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "Show or hide the micro-unit frames"
+L["BINDING_NAME_DCRPRADD"] = "Add target to priority list"
+L["BINDING_NAME_DCRPRCLEAR"] = "Clear the priority list"
+L["BINDING_NAME_DCRPRLIST"] = "Print the priority list"
+L["BINDING_NAME_DCRPRSHOW"] = "Show or hide the priority list"
+L["BINDING_NAME_DCRSHOW"] = [=[Show or hide Decursive Main Bar
+(live-list anchor)]=]
+L["BINDING_NAME_DCRSHOWOPTION"] = "Display the option static panel"
+L["BINDING_NAME_DCRSKADD"] = "Add target to skip list"
+L["BINDING_NAME_DCRSKCLEAR"] = "Clear the skip list"
+L["BINDING_NAME_DCRSKLIST"] = "Print the skip list"
+L["BINDING_NAME_DCRSKSHOW"] = "Show or hide the skip list"
+L["BLACK_LENGTH"] = "Seconds on the blacklist : "
+L["BLACKLISTED"] = "Black-listed"
+L["CHARM"] = "Charm"
+L["CLASS_HUNTER"] = "Hunter"
+L["CLEAR_PRIO"] = "C"
+L["CLEAR_SKIP"] = "C"
+L["COLORALERT"] = "Set the color alert when a '%s' is required."
+L["COLORCHRONOS"] = "Chronometers"
+L["COLORCHRONOS_DESC"] = "Set the chronometers' color"
+L["COLORSTATUS"] = "Set the color for the '%s' MUF status."
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "Scan and cure pets"
+L["CURSE"] = "Curse"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33Please report the content of this window to Archarodim+DcrReport@teaser.fr|r
+|cFF009999(Use CTRL+A to select all and then CTRL+C to put the text in your clip-board)|r
+Also tell in your report if you noticed any strange behavior of Decursive.
+]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Decursive Debug Report|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[A debug report is available!
+Type |cFFFF0000/dcr general report|r to see it.]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "Debug report available!"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "Show a debug report the author needs to see..."
+L["DEFAULT_MACROKEY"] = "`"
+L["DEV_VERSION_ALERT"] = [=[You are using a development version of Decursive.
+
+If you do not want to participate in testing new features/fixes, receive in-game debug reports, send issues to the author then DO NOT USE THIS VERSION and download the latest STABLE version on curse.com or wowace.com.
+
+This message will be displayed only once per version]=]
+L["DEV_VERSION_EXPIRED"] = [=[This development version of Decursive has expired.
+You should, download the latest development version or go back to the current stable release available on CURSE.COM or WOWACE.COM.
+This warning will be displayed every two days.]=]
+L["DEWDROPISGONE"] = "There is no DewDrop equivalent for Ace3. Alt-Right-Click to open the option panel."
+L["DISABLEWARNING"] = [=[Decursive has been disabled!
+
+To enable it again, type |cFFFFAA44/DCR ENABLE|r]=]
+L["DISEASE"] = "Disease"
+L["DONOT_BL_PRIO"] = "Don't blacklist priority list names"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r |cFFAA0000failed on|r %s
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "Focus Unit"
+L["FUBARMENU"] = "FuBar Menu"
+L["FUBARMENU_DESC"] = "Set options relative to FuBar icon"
+L["GLOR1"] = "In memory of Glorfindal"
+L["GLOR2"] = [=[Decursive is dedicated to the memory of Bertrand who left way too soon.
+He will always be remembered.]=]
+L["GLOR3"] = [=[In remembrance of Bertrand Sense
+1969 - 2007]=]
+L["GLOR4"] = [=[Friendship and affection can take their roots anywhere, those who met Glorfindal in World of Warcraft knew a man of great commitment and a charismatic leader.
+
+He was in life as he was in game, selfless, generous, dedicated to his friends and most of all, a passionate man.
+
+He left us at the age of 38 leaving behind him not just anonymous players in a virtual world but, a group of true friends who will miss him forever.]=]
+L["GLOR5"] = "He will always be remembered..."
+L["HANDLEHELP"] = "Drag all the Micro-UnitFrames (MUFs)"
+L["HIDE_LIVELIST"] = "Hide the live-list"
+L["HIDE_MAIN"] = "Hide Decursive Window"
+L["HIDESHOW_BUTTONS"] = "Hide/Show buttons"
+L["HLP_LEFTCLICK"] = "Left-Click"
+L["HLP_LL_ONCLICK_TEXT"] = [=[Clicking on the live-list is useless since WoW 2.0. You should read the FAQ in the "Readme.txt" file located in Decursive folder...
+(To move this list move the Decursive bar, /dcrshow and left-alt-click to move)]=]
+L["HLP_MIDDLECLICK"] = "Middle-Click"
+L["HLP_NOTHINGTOCURE"] = "There is nothing to cure!"
+L["HLP_RIGHTCLICK"] = "Right-Click"
+L["HLP_USEXBUTTONTOCURE"] = "Use \"%s\" to cure this affliction!"
+L["HLP_WRONGMBUTTON"] = "Wrong mouse button!"
+L["IGNORE_STEALTH"] = "Ignore cloaked Units"
+L["IS_HERE_MSG"] = "Decursive is now initialized, remember to check the options"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r-Click: Remove this player
+|cFF33AA33LEFT|r-Click: Rise this player
+|cFF33AA33RIGHT|r-Click: Come down this player
+|cFF33AA33[SHIFT] LEFT|r-Click: Put this player at the top
+|cFF33AA33[SHIFT] RIGHT|r-Click: Put this player at the bottom]=]
+L["MACROKEYALREADYMAPPED"] = [=[WARNING: The key mapped to Decursive macro [%s] was mapped to action '%s'.
+Decursive will restore the previous mapping if you set another key for its macro.]=]
+L["MACROKEYMAPPINGFAILED"] = "The key [%s] could not be mapped to Decursive macro!"
+L["MACROKEYMAPPINGSUCCESS"] = "The key [%s] has been successfully mapped to Decursive macro."
+L["MACROKEYNOTMAPPED"] = "Decursive mouse-over macro is not mapped to a key, take a look at the 'Macro' options!"
+L["MAGIC"] = "Magic"
+L["MAGICCHARMED"] = "Magic Charm"
+L["MISSINGUNIT"] = "Missing unit"
+L["NORMAL"] = "Normal"
+L["NOSPELL"] = "No spell available"
+L["OPT_ABOLISHCHECK_DESC"] = "select whether units with an active 'Abolish' spell are shown and cured"
+L["OPT_ABOUT"] = "About"
+L["OPT_ADDDEBUFF"] = "Add a custom affliction"
+L["OPT_ADDDEBUFF_DESC"] = "Adds a new affliction to this list"
+L["OPT_ADDDEBUFFFHIST"] = "Add a recent affliction"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "Add an affliction using the history"
+L["OPT_ADDDEBUFF_USAGE"] = ""
+L["OPT_ADVDISP"] = "Advance display Options"
+L["OPT_ADVDISP_DESC"] = "Allow to set Transparency of the border and center separately, to set the space between each MUF"
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s afflicted by %s will be skipped"
+L["OPT_ALLOWMACROEDIT"] = "Allow macro edition"
+L["OPT_ALLOWMACROEDIT_DESC"] = "Enable this to prevent Decursive from updating its macro, letting you edit it as you want."
+L["OPT_ALWAYSIGNORE"] = "Also ignore when not in combat"
+L["OPT_ALWAYSIGNORE_DESC"] = "If checked, this affliction will also be ignored when you are not in combat"
+L["OPT_AMOUNT_AFFLIC_DESC"] = "Defines the max number of cursed to display in the live-list"
+L["OPT_ANCHOR_DESC"] = "Shows the anchor of the custom message frame"
+L["OPT_AUTOHIDEMFS"] = "Auto-Hide"
+L["OPT_AUTOHIDEMFS_DESC"] = "Choose when to hide the MUF window"
+L["OPT_BLACKLENTGH_DESC"] = "Defines how long someone stays on the blacklist"
+L["OPT_BORDERTRANSP"] = "Border transparency"
+L["OPT_BORDERTRANSP_DESC"] = "Set the transparency of the border"
+L["OPT_CENTERTRANSP"] = "Center transparency"
+L["OPT_CENTERTRANSP_DESC"] = "Set the transparency of the center"
+L["OPT_CHARMEDCHECK_DESC"] = "If checked you'll be able to see and deal with charmed units"
+L["OPT_CHATFRAME_DESC"] = "Decursive's messages will be printed to the default chat frame"
+L["OPT_CHECKOTHERPLAYERS"] = "Check other players"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "Displays Decursive version among the players in your current group or guild (cannot display versions prior to Decursive 2.4.6)."
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "Create a virtual test affliction"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "Lets you see how it looks like when an affliction is found"
+L["OPT_CUREPETS_DESC"] = "Pets will be managed and cured"
+L["OPT_CURINGOPTIONS"] = "Curing options"
+L["OPT_CURINGOPTIONS_DESC"] = "Set different aspects of the curing process"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+Select the types of the afflictions you want to cure, unchecked types will be completely ignored by Decursive.
+
+The green number determine the priority of the affliction. This priority will affect several aspects:
+- What Decursive shows you first if a player got several types of Debuff.
+- What mouse button you'll have to click to cure the debuff (First spell is Left-Click, second is Right-Click, etc...)
+
+All of this is explained in the documentation (a must see):
+http://www.wowace.com/addons/decursive/
+]=]
+L["OPT_CURINGORDEROPTIONS"] = "Curing Order Options"
+L["OPT_CURSECHECK_DESC"] = "If checked you'll be able to see and cure cursed units"
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+
+Checked by default]=]
+L["OPT_DEBUFFENTRY_DESC"] = "Select what class should be ignored in combat when afflicted by this affliction"
+L["OPT_DEBUFFFILTER"] = "Affliction filtering"
+L["OPT_DEBUFFFILTER_DESC"] = "Select afflictions to filter out by name and class while you are in combat"
+L["OPT_DISABLEABOLISH"] = "Do not use 'Abolish' spells"
+L["OPT_DISABLEABOLISH_DESC"] = "If enabled, Decursive will prefer 'Cure Disease' and 'Cure Poison' over their 'Abolish' equivalent."
+L["OPT_DISABLEMACROCREATION"] = "Disable macro creation"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Decursive macro will no longer be created or maintained"
+L["OPT_DISEASECHECK_DESC"] = "If checked you'll be able to see and cure diseased units"
+L["OPT_DISPLAYOPTIONS"] = "Display options"
+L["OPT_DONOTBLPRIO_DESC"] = "Prioritized units won't be blacklisted"
+L["OPT_ENABLEDEBUG"] = "Enable Debugging"
+L["OPT_ENABLEDEBUG_DESC"] = "Enable Debugging output"
+L["OPT_ENABLEDECURSIVE"] = "Enable Decursive"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "%q will be ignored on the specified classes while you are in combat."
+L["OPT_GENERAL"] = "General options"
+L["OPT_GROWDIRECTION"] = "Reverse MUFs Display"
+L["OPT_GROWDIRECTION_DESC"] = "The MUFs will be displayed from bottom to top"
+L["OPT_HIDELIVELIST_DESC"] = "If not hidden, displays an informative list of cursed people"
+L["OPT_HIDEMFS_GROUP"] = "Solo/Party"
+L["OPT_HIDEMFS_GROUP_DESC"] = "Hide the MUF window when you are not in a raid"
+L["OPT_HIDEMFS_NEVER"] = "Never"
+L["OPT_HIDEMFS_NEVER_DESC"] = "Never auto-hide the MUF window"
+L["OPT_HIDEMFS_SOLO"] = "Solo"
+L["OPT_HIDEMFS_SOLO_DESC"] = "Hide the MUF window when you are not in a party or raid"
+L["OPT_HIDEMUFSHANDLE"] = "Hide the MUFs handle"
+L["OPT_HIDEMUFSHANDLE_DESC"] = [=[Hides the Micro-Unit Frames handle and disables the possibility to move them.
+Use the same command to get it back.]=]
+L["OPT_IGNORESTEALTHED_DESC"] = "Cloaked units will be ignored"
+L["OPTION_MENU"] = "Decursive Options Menu"
+L["OPT_LIVELIST"] = "Live list"
+L["OPT_LIVELIST_DESC"] = "Options for the live list"
+L["OPT_LLALPHA"] = "Live-list transparency"
+L["OPT_LLALPHA_DESC"] = "Changes Decursive main bar and live-list transparency (Main bar must be displayed)"
+L["OPT_LLSCALE"] = "Scale of the Live-list"
+L["OPT_LLSCALE_DESC"] = "Set the size of the Decursive main bar and of the Live-list (Main bar must be displayed)"
+L["OPT_LVONLYINRANGE"] = "Units in range only"
+L["OPT_LVONLYINRANGE_DESC"] = "Only units in dispel range will be shown in the live-list"
+L["OPT_MACROBIND"] = "Set the macro binding key"
+L["OPT_MACROBIND_DESC"] = [=[Defines the key on which the 'Decursive' macro will be called.
+
+Press the key and hit your 'Enter' keyboard key to save the new assignment (with your mouse cursor over the edit field)]=]
+L["OPT_MACROOPTIONS"] = "Macro options"
+L["OPT_MACROOPTIONS_DESC"] = "Set the behaviour of the macro created by Decursive"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "If checked you'll be able to see and cure magic-charmed units"
+L["OPT_MAGICCHECK_DESC"] = "If checked you'll be able to see and cure magic afflicted units"
+L["OPT_MAXMFS"] = "Max units shown"
+L["OPT_MAXMFS_DESC"] = "Defines the max number of micro unit frame to display"
+L["OPT_MESSAGES"] = "Messages"
+L["OPT_MESSAGES_DESC"] = "Options about messages display"
+L["OPT_MFALPHA"] = "Transparency"
+L["OPT_MFALPHA_DESC"] = "Defines the transparency of the MUFs when units are not afflicted"
+L["OPT_MFPERFOPT"] = "Performance options"
+L["OPT_MFREFRESHRATE"] = "Refresh rate"
+L["OPT_MFREFRESHRATE_DESC"] = "Time between each refresh call (1 or several micro-unit-frames can be refreshed at once)"
+L["OPT_MFREFRESHSPEED"] = "Refresh speed"
+L["OPT_MFREFRESHSPEED_DESC"] = "Number of micro-unit-frames to refresh on a single pass"
+L["OPT_MFSCALE"] = "Scale of the micro-unit-frames"
+L["OPT_MFSCALE_DESC"] = "Set the size of the micro-unit-frames"
+L["OPT_MFSETTINGS"] = "Micro Unit Frame Settings"
+L["OPT_MFSETTINGS_DESC"] = "Set the micro units frame window options to suit your needs"
+L["OPT_MUFFOCUSBUTTON"] = "Focusing button:"
+L["OPT_MUFMOUSEBUTTONS"] = "Mouse buttons"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "Set the mouse-buttons you want to use for each Micro-Unit-Frame alert color."
+L["OPT_MUFSCOLORS"] = "Colors"
+L["OPT_MUFSCOLORS_DESC"] = "Change the colors of the Micro Unit Frames."
+L["OPT_MUFTARGETBUTTON"] = "Targeting button:"
+L["OPT_NOKEYWARN"] = "Warn if no key"
+L["OPT_NOKEYWARN_DESC"] = "Display a warning if no key is mapped."
+L["OPT_NOSTARTMESSAGES"] = "Disable welcome messages"
+L["OPT_NOSTARTMESSAGES_DESC"] = "Remove the three messages Decursive prints to the chat frame at every login."
+L["OPT_PLAYSOUND_DESC"] = "Play a sound if someone get cursed"
+L["OPT_POISONCHECK_DESC"] = "If checked you'll be able to see and cure poisoned units"
+L["OPT_PRINT_CUSTOM_DESC"] = "Decursive's messages will be printed in a custom chat frame"
+L["OPT_PRINT_ERRORS_DESC"] = "Errors will be displayed"
+L["OPT_PROFILERESET"] = "Profile reset..."
+L["OPT_RANDOMORDER_DESC"] = "Units will be displayed and cured randomly (not recommended)"
+L["OPT_READDDEFAULTSD"] = "Re-add default afflictions"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[Add missing Decursive's default afflictions to this list
+Your settings won't be changed]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "All Decursive's default afflictions are in this list"
+L["OPT_REMOVESKDEBCONF"] = [=[Are you sure you want to remove
+ '%s'
+from Decursive's affliction skip list?]=]
+L["OPT_REMOVETHISDEBUFF"] = "Remove this affliction"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "Removes '%s' from the skip list"
+L["OPT_RESETDEBUFF"] = "Reset this affliction"
+L["OPT_RESETDTDCRDEFAULT"] = "Resets '%s' to Decursive default"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "Reset"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "Reset mouse button assignments to defaults."
+L["OPT_RESETOPTIONS"] = "Reset options to defaults"
+L["OPT_RESETOPTIONS_DESC"] = "Reset the current profile to the default values"
+L["OPT_RESTPROFILECONF"] = [=[Are you sure you want to reset the profile
+ '(%s) %s'
+ to default options?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "The live-list fills itself from bottom to top"
+L["OPT_SCANLENGTH_DESC"] = "Defines the time between each scan"
+L["OPT_SHOWBORDER"] = "Show the class-colored borders"
+L["OPT_SHOWBORDER_DESC"] = "A colored border will be displayed around the MUFs representing the unit's class"
+L["OPT_SHOWCHRONO"] = "Show chronometers"
+L["OPT_SHOWCHRONO_DESC"] = "The number of seconds elapsed since a unit has been afflicted is displayed"
+L["OPT_SHOWCHRONOTIMElEFT"] = "Time left"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "Display time left instead of time elapsed."
+L["OPT_SHOWHELP"] = "Show help"
+L["OPT_SHOWHELP_DESC"] = "Shows an detailed tooltip when you mouse-over a micro-unit-frame"
+L["OPT_SHOWMFS"] = "Show the Micro Units Frame"
+L["OPT_SHOWMFS_DESC"] = "This must be enabled if you want to cure by clicking"
+L["OPT_SHOWMINIMAPICON"] = "Minimap Icon"
+L["OPT_SHOWMINIMAPICON_DESC"] = "Toggle the minimap icon."
+L["OPT_SHOW_STEALTH_STATUS"] = "Show stealth status"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "When a player is stealthed, his MUF will take a special color"
+L["OPT_SHOWTOOLTIP_DESC"] = "Shows a detailed tooltips about curses in the live-list and on the MUFs"
+L["OPT_STICKTORIGHT"] = "Align MUF window to the right"
+L["OPT_STICKTORIGHT_DESC"] = "The MUF window will grow from right to left, the handle will be moved as necessary."
+L["OPT_TESTLAYOUT"] = "Test Layout"
+L["OPT_TESTLAYOUT_DESC"] = [=[Create fake units so you can test the display layout.
+(Wait a few seconds after clicking)]=]
+L["OPT_TESTLAYOUTUNUM"] = "Unit number"
+L["OPT_TESTLAYOUTUNUM_DESC"] = "Set the number of fake units to create."
+L["OPT_TIECENTERANDBORDER"] = "Tie center and border transparency"
+L["OPT_TIECENTERANDBORDER_OPT"] = "The transparency of the border is half the center transparency when checked"
+L["OPT_TIE_LIVELIST_DESC"] = "The live-list display is tied to \"Decursive\" bar display"
+L["OPT_TIEXYSPACING"] = "Tie horizontal and vertical spacing"
+L["OPT_TIEXYSPACING_DESC"] = "The horizontal and vertical space between MUFs are the same"
+L["OPT_UNITPERLINES"] = "Number of units per line"
+L["OPT_UNITPERLINES_DESC"] = "Defines the max number of micro-unit-frames to display per line"
+L["OPT_USERDEBUFF"] = "This affliction is not part of Decursive's default afflictions"
+L["OPT_XSPACING"] = "Horizontal spacing"
+L["OPT_XSPACING_DESC"] = "Set the Horizontal space between MUFs"
+L["OPT_YSPACING"] = "Vertical spacing"
+L["OPT_YSPACING_DESC"] = "Set the Vertical space between MUFs"
+L["PLAY_SOUND"] = "Play a sound when there is someone to cure"
+L["POISON"] = "Poison"
+L["POPULATE"] = "p"
+L["POPULATE_LIST"] = "Quickly populate the Decursive list"
+L["PRINT_CHATFRAME"] = "Print messages in default chat"
+L["PRINT_CUSTOM"] = "Print messages in the window"
+L["PRINT_ERRORS"] = "Print error messages"
+L["PRIORITY_LIST"] = "Decursive Priority List"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "Cure in a random order"
+L["REVERSE_LIVELIST"] = "Reverse live-list display"
+L["SCAN_LENGTH"] = "Seconds between live scans : "
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "To show Decursive's frame, type /dcrshow"
+L["SHOW_TOOLTIP"] = "Show Tooltips on afflicted units"
+L["SKIP_LIST_STR"] = "Decursive Skip List"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "%s spell found!"
+L["STEALTHED"] = "cloaked"
+L["STR_CLOSE"] = "Close"
+L["STR_DCR_PRIO"] = "Decursive Priority"
+L["STR_DCR_SKIP"] = "Decursive Skip"
+L["STR_GROUP"] = "Group "
+L["STR_OPTIONS"] = "Decursive's Options"
+L["STR_OTHER"] = "Other"
+L["STR_POP"] = "Populate List"
+L["STR_QUICK_POP"] = "Quickly Populate"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r |cFF00AA00succeeded on|r %s"
+L["TARGETUNIT"] = "Target Unit"
+L["TIE_LIVELIST"] = "Tie live-list visibility to DCR window"
+L["TOOFAR"] = "Too far"
+L["UNITSTATUS"] = "Unit Status: "
+
+
+
+
+
+T._LoadedFiles["enUS.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/esES.lua b/Decursive/Localization/esES.lua
new file mode 100644
index 0000000..c6179aa
--- /dev/null
+++ b/Decursive/Localization/esES.lua
@@ -0,0 +1,103 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Spanish localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "esES");
+
+if not L then
+ T._LoadedFiles["esES.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+L["CLASS_HUNTER"] = "Cazador"
+L["CURSE"] = "Maldición"
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DISEASE"] = "Enfermedad"
+L["MAGIC"] = "Magia"
+L["OPT_UNITPERLINES_DESC"] = "Define el número máximo de micro-marcos de unidades a mostrar por línea"
+L["OPT_XSPACING"] = "Espaciado horizontal"
+L["OPT_YSPACING"] = "Espaciado vertical"
+L["PLAY_SOUND"] = "Reproducir un sonido cuando hay alguien a quien curar"
+L["POISON"] = "Veneno"
+L["POPULATE"] = "p"
+L["PRINT_CHATFRAME"] = "Mostrar mensajes en el chat predeterminado"
+L["RANDOM_ORDER"] = "Curar en orden aleatorio"
+L["SCAN_LENGTH"] = "Segundos entre escaneos en vivo :"
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "Para mostrar la ventana de Decursive, escribe /dcrshow"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "¡%s hechizo encontrado!"
+L["STR_CLOSE"] = "Cerrar"
+L["STR_DCR_PRIO"] = "Prioridad decursive"
+L["STR_DCR_SKIP"] = "No decursear"
+L["STR_GROUP"] = "Grupo"
+L["STR_OPTIONS"] = "Opciones"
+L["STR_OTHER"] = "Otro"
+L["TOOFAR"] = "Muy lejos"
+
+
+
+T._LoadedFiles["esES.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/esMX.lua b/Decursive/Localization/esMX.lua
new file mode 100644
index 0000000..d8ccc8f
--- /dev/null
+++ b/Decursive/Localization/esMX.lua
@@ -0,0 +1,78 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Spanish localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "esMX");
+
+if not L then
+ T._LoadedFiles["esMX.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+
+
+
+T._LoadedFiles["esMX.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/frFR.lua b/Decursive/Localization/frFR.lua
new file mode 100644
index 0000000..7d2d67d
--- /dev/null
+++ b/Decursive/Localization/frFR.lua
@@ -0,0 +1,392 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- French localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "frFR");
+
+if not L then
+ T._LoadedFiles["frFR.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end
+
+L["ABOLISH_CHECK"] = "Voir si \"Abolir\" sur la cible avant de guérir"
+L["ABOUT_AUTHOREMAIL"] = "CONTACTER L'AUTEUR"
+L["ABOUT_CREDITS"] = "REMERCIEMENTS"
+L["ABOUT_LICENSE"] = "LICENCE"
+L["ABOUT_NOTES"] = "Affichage et guérison des affections avec un système évolué de filtrage et de priorité."
+L["ABOUT_OFFICIALWEBSITE"] = "SITE OFFICIEL"
+L["ABOUT_SHAREDLIBS"] = "LIBRAIRIES PARTAGÉES"
+L["ABSENT"] = "Absente (%s)"
+L["AFFLICTEDBY"] = "Affecté par %s"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "Nombre d'affectés à afficher : "
+L["ANCHOR"] = "Ancre du texte"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "Afficher ou masquer les micro-portraits"
+L["BINDING_NAME_DCRPRADD"] = "Ajouter la cible à la liste de priorités"
+L["BINDING_NAME_DCRPRCLEAR"] = "Effacer la liste de priorités"
+L["BINDING_NAME_DCRPRLIST"] = "Afficher la liste de priorités"
+L["BINDING_NAME_DCRPRSHOW"] = "Afficher ou Cacher la liste de priorités"
+L["BINDING_NAME_DCRSHOW"] = [=[Afficher ou Cacher la barre Decursive
+(Ancre de la liste des affectés)]=]
+L["BINDING_NAME_DCRSHOWOPTION"] = "Affiche le panneau des options"
+L["BINDING_NAME_DCRSKADD"] = "Ajouter la cible à la liste des exceptions"
+L["BINDING_NAME_DCRSKCLEAR"] = "Effacer la liste des exceptions"
+L["BINDING_NAME_DCRSKLIST"] = "Afficher la liste des exceptions"
+L["BINDING_NAME_DCRSKSHOW"] = "Afficher ou Cacher la liste des exceptions"
+L["BLACK_LENGTH"] = "Délais (Secs) sur la *blacklist* : "
+L["BLACKLISTED"] = "Sur liste noire"
+L["CHARM"] = "Possession"
+L["CLASS_HUNTER"] = "Chasseur"
+L["CLEAR_PRIO"] = "E"
+L["CLEAR_SKIP"] = "E"
+L["COLORALERT"] = "Règle la couleur d'alerte quand un '%s' est requis."
+L["COLORCHRONOS"] = "Chronomètres"
+L["COLORCHRONOS_DESC"] = "Règle la couleur des chrnomètres"
+L["COLORSTATUS"] = "Règle la couleur du statut '%s'."
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "Contrôler et guérir les familiers"
+L["CURSE"] = "Malédiction"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33Merci d'envoyer le contenu de cette fenêtre à Archarodim+DcrReport@teaser.fr|r
+|cFF009999(Faire CTRL+A pour tout sélectionner et CTRL+C pour le copier dans votre "presse papier")|r
+Dîtes également dans votre rapport si vous avez remarqué un comportement étrange de Decursive.
+]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Rapport de debuggage de Decursive|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[Un rapport de debuggage est disponible !
+Taper |cFFFF0000/dcr general report|r pour le voir.]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "Rapport de debuggage disponible !"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "Affiche un rapport de debuggage que l'auteur doit voir..."
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DEV_VERSION_ALERT"] = [=[Vous utilisez une version de développement de Decursive.
+
+Si vous ne voulez pas participer au test des nouvelles fonctionnalités/corrections, recevoir des rapports de débuggage pendant le jeu, rapporter les problèmes à l'auteur alors N'UTILISEZ PAS CETTE VERSION et télécharger la dernière version STABLE sur curse.com ou wowace.com.
+
+Ce message ne sera affiché qu'une seule fois par version.
+
+]=]
+L["DEV_VERSION_EXPIRED"] = [=[Cette version de développement de Decursive a expiré.
+Vous devriez télécharger la dernière version de développement ou retourner à la version stable courante disponible sur CURSE.COM ou WOWACE.COM]=]
+L["DEWDROPISGONE"] = "Il n'y a pas d'équivalent à DewDrop pour Ace3. Faire Alt-clique-droit pour ouvrir le panneau des options."
+L["DISABLEWARNING"] = [=[Decursive a été désactivé !
+Pour le réactiver, tapper |cFFFFAA44/DCR ENABLE|r]=]
+L["DISEASE"] = "Maladie"
+L["DONOT_BL_PRIO"] = "Ne pas *blacklister* les gens prioritaires"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r sur %s |cFFAA0000échoué !|r
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "Focalise l'unité"
+L["FUBARMENU"] = "Menu de Fubar"
+L["FUBARMENU_DESC"] = "Règles les options relatives à l'icône de FuBar"
+L["GLOR1"] = "À la mémoire de Glorfindal"
+L["GLOR2"] = "Decursive est dédié à la mémoire de Bertrand qui nous a quitté bien trop tôt. On se souviendra toujours de lui."
+L["GLOR3"] = [=[En souvenir de Bertrand Sense
+1969 - 2007]=]
+L["GLOR4"] = [=[L'amitié et l'affection peuvent prendre naissance n'importe où, ceux qui ont rencontré Glorfindal dans World Of Warcraft ont connu un homme engagé et un leader charismatique.
+
+Il était dans la vie comme dans le jeux, désintéressé, généreux, dévoué envers les siens et surtout un homme passionné.
+
+Il nous a quitté à l'âge de 38 ans laissant derrière lui pas seulement des joueurs anonymes dans un monde virtuel, mais un groupe de véritables amis à qui il manquera éternellement.]=]
+L["GLOR5"] = "On ne l'oubliera jamais..."
+L["HANDLEHELP"] = "Déplacer tous les micro-portraits"
+L["HIDE_LIVELIST"] = "Cacher la liste"
+L["HIDE_MAIN"] = "Cacher la fenêtre \"Decursive\""
+L["HIDESHOW_BUTTONS"] = "Cacher/Afficher les boutons"
+L["HLP_LEFTCLICK"] = "Clic Gauche"
+L["HLP_LL_ONCLICK_TEXT"] = [=[Cliquer sur la liste est inutile depuis WoW 2.0. Vous devriez lire la FAQ se trouvant dans le fichier "lisez-moi.txt" qui se trouve dans le répertoire de Decursive.
+(Pour bouger cette liste, bougez la barre de Decursive, /dcrshow et alt-clique-gauche)]=]
+L["HLP_MIDDLECLICK"] = "Clic Milieu"
+L["HLP_NOTHINGTOCURE"] = "Il n'y a rien à guérir !"
+L["HLP_RIGHTCLICK"] = "Clic Droit"
+L["HLP_USEXBUTTONTOCURE"] = "Utilisez \"%s\" pour guérir cette affection !"
+L["HLP_WRONGMBUTTON"] = "Mauvais clique !"
+L["IGNORE_STEALTH"] = "Ignorer les unités camouflées"
+L["IS_HERE_MSG"] = "Decursive est initialisé, n'oubliez pas de contrôler les options disponibles"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r Click : Efface ce joueur
+Click |cFF33AA33GAUCHE|r : Monte ce joueur
+Click |cFF33AA33DROIT|r: Descend ce joueur
+|cFF33AA33[MAJ]|r Click |cFF33AA33GAUCHE|r : Met ce joueur en haut
+|cFF33AA33[MAJ]|r Click |cFF33AA33DROIT|r : Met ce joueur en bas]=]
+L["MACROKEYALREADYMAPPED"] = [=[ATTENTION: La touche affectée à la macro de Decursive [%s] était affectée à l'action '%s'.
+Decursive restaurera l'action originale si vous affectez une autre touche à la macro.]=]
+L["MACROKEYMAPPINGFAILED"] = "La touche [%s] n'a pas pu être affectée à la macro de Decursive"
+L["MACROKEYMAPPINGSUCCESS"] = "La touche [%s] a été correctement affectée à la macro de Decursive."
+L["MACROKEYNOTMAPPED"] = "Aucune touche n'est affectée à la macro de Decursive, reportez-vous aux options concernant la macro !"
+L["MAGIC"] = "Magie"
+L["MAGICCHARMED"] = "Contrôle magique"
+L["MISSINGUNIT"] = "Unité absente"
+L["NORMAL"] = "Normal"
+L["NOSPELL"] = "Aucun sort disponible"
+L["OPT_ABOLISHCHECK_DESC"] = "Définit si les unités avec un sort 'Abolir' actif sont affichées et soignées"
+L["OPT_ABOUT"] = "À propos"
+L["OPT_ADDDEBUFF"] = "Ajouter une affection"
+L["OPT_ADDDEBUFF_DESC"] = "Ajoute une nouvelle affection à cette liste"
+L["OPT_ADDDEBUFFFHIST"] = "Ajouter une affection récente"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "Ajouter une affection depuis l'historique"
+L["OPT_ADDDEBUFF_USAGE"] = ""
+L["OPT_ADVDISP"] = "Options avancées"
+L["OPT_ADVDISP_DESC"] = "Permet de régler la transparence de la bordure et du centre séparément, permet de régler l'espace entre les micro-portraits"
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s affecté(e) par %s sera ignoré"
+L["OPT_ALLOWMACROEDIT"] = "Autoriser l'édition de la macro"
+L["OPT_ALLOWMACROEDIT_DESC"] = "Activer cette option empêche Decursive de mettre à jour sa macro, vous permettant de la modifier."
+L["OPT_ALWAYSIGNORE"] = "Ignorer aussi hors combat"
+L["OPT_ALWAYSIGNORE_DESC"] = "Si cochée, cette affection sera aussi ignorée en dehors des combats"
+L["OPT_AMOUNT_AFFLIC_DESC"] = "Définit le nombre max d'affectés affichés dans la liste des affectés."
+L["OPT_ANCHOR_DESC"] = "Montre l'ancre de la fenêtre de discussion spéciale"
+L["OPT_AUTOHIDEMFS"] = "Masquer automatiquement"
+L["OPT_AUTOHIDEMFS_DESC"] = "Choisissez quand la fenêtre des micro-portraits doit être masquée automatiquement."
+L["OPT_BLACKLENTGH_DESC"] = "Définit combien de temps quelqu'un reste sur liste noire"
+L["OPT_BORDERTRANSP"] = "Transparence de la bordure"
+L["OPT_BORDERTRANSP_DESC"] = "Règle la transparence de la bordure"
+L["OPT_CENTERTRANSP"] = "Transparence du centre"
+L["OPT_CENTERTRANSP_DESC"] = "Règle la transparence du centre"
+L["OPT_CHARMEDCHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités possédées"
+L["OPT_CHATFRAME_DESC"] = "Les messages de Decursive seront affichés dans la fenêtre de discussion par défaut"
+L["OPT_CHECKOTHERPLAYERS"] = "Vérifier les autres joueurs"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "Affiche la version de Decursive utilisée par les joueurs de votre groupe ou de votre guilde (Ne fonctionne qu'à partir de la version 2.4.6 de Decursive)."
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "Créer une affection virtuelle de test"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "Permet de voir ce qu'il se passe lorsqu'une affection est détectée"
+L["OPT_CUREPETS_DESC"] = "Les familiers seront affichés et guéris"
+L["OPT_CURINGOPTIONS"] = "Options de guérison"
+L["OPT_CURINGOPTIONS_DESC"] = "Définit les différents aspects du processus de guérison"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[Sélectionnez le type d'affections que vous souhaitez guérir. Cette priorité affecte plusieurs aspects de Decursive :
+- Ce que Decursive vous montre en premier lorsque un joueur à plusieurs types de debuff en même temps.
+- Sur quel bouton de la souris vous devrez cliquer pour guérir le debuff (clique gauche pour le premier sort, clique droit pour le second, etc...).
+
+Tout cela est expliquer dans la documentation (À lire absolument - en anglais) :
+http://www.wowace.com/addons/decursive/]=]
+L["OPT_CURINGORDEROPTIONS"] = "Options sur l'ordre de guérison"
+L["OPT_CURSECHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités maudites"
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+
+Cochée par défaut]=]
+L["OPT_DEBUFFENTRY_DESC"] = "Sélectionnez quelle classe doit être ignorée pour cette affection"
+L["OPT_DEBUFFFILTER"] = "Filtrage des affections"
+L["OPT_DEBUFFFILTER_DESC"] = "Sélectionner les affections à filtrer par nom et par classe pendant les combat"
+L["OPT_DISABLEABOLISH"] = "Ne pas utiliser les sorts 'Abolir'"
+L["OPT_DISABLEABOLISH_DESC"] = "Si activée, Decursive préfèrera 'Guérison des maladies' et 'Guérison du poison' à la place de leur équivalent en 'Abolir'"
+L["OPT_DISABLEMACROCREATION"] = "Ne pas créer de macro"
+L["OPT_DISABLEMACROCREATION_DESC"] = "La macro de Decursive ne sera plus créée ni mis à jour."
+L["OPT_DISEASECHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités malade"
+L["OPT_DISPLAYOPTIONS"] = "Options d'affichage"
+L["OPT_DONOTBLPRIO_DESC"] = "Les unités prioritaires ne seront pas blacklistées"
+L["OPT_ENABLEDEBUG"] = "Debug"
+L["OPT_ENABLEDEBUG_DESC"] = "Activer les informations de debuggage"
+L["OPT_ENABLEDECURSIVE"] = "Activer Decursive"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "%q sera ignoré sur les classes spécifiées pendant que vous êtes en combat."
+L["OPT_GENERAL"] = "Options générales"
+L["OPT_GROWDIRECTION"] = "Inverser l'affichage des micro-portraits"
+L["OPT_GROWDIRECTION_DESC"] = "Les micro-portraits seront affichés de bas en haut"
+L["OPT_HIDELIVELIST_DESC"] = "Si non cochée, affiche une liste des personnes affligés"
+L["OPT_HIDEMFS_GROUP"] = "Solo / Groupe"
+L["OPT_HIDEMFS_GROUP_DESC"] = "Masque la fenêtre lorsque vous n'êtes pas dans un raid."
+L["OPT_HIDEMFS_NEVER"] = "Jamais"
+L["OPT_HIDEMFS_NEVER_DESC"] = "Ne jamais masquer la fenêtre automatiquement."
+L["OPT_HIDEMFS_SOLO"] = "Solo"
+L["OPT_HIDEMFS_SOLO_DESC"] = "Masque la fenêtre lorsque vous n'êtes pas dans un groupe ou dans un raid."
+L["OPT_HIDEMUFSHANDLE"] = "Chacher la poignée des Micro-Portraits"
+L["OPT_HIDEMUFSHANDLE_DESC"] = [=[Cache la poignée des Micro-Portraits et désactive la possibilité de les bouger.
+Utilisez la même commande pour la retrouver.]=]
+L["OPT_IGNORESTEALTHED_DESC"] = "Les unités camouflées seront ignorées"
+L["OPTION_MENU"] = "Menu options"
+L["OPT_LIVELIST"] = "Liste des affligés"
+L["OPT_LIVELIST_DESC"] = "Options pour la liste des affligés"
+L["OPT_LLALPHA"] = "Transparence"
+L["OPT_LLALPHA_DESC"] = [=[Définit la transparence de la barre principale de Decursive et de la liste des affligés
+(la barre principale doit être affichée)]=]
+L["OPT_LLSCALE"] = "Échelle de la liste des affectés"
+L["OPT_LLSCALE_DESC"] = [=[Définit la taille de la barre principale de Decursive et de la liste des affectés
+(la barre principale doit être affichée)]=]
+L["OPT_LVONLYINRANGE"] = "Unités à portée seulement"
+L["OPT_LVONLYINRANGE_DESC"] = "Si cette option est activée, uniquement les unités à portée de sorts seront affichées dans la liste"
+L["OPT_MACROBIND"] = "Définit la touche liée à la macro"
+L["OPT_MACROBIND_DESC"] = [=[Définit la touche à partir de laquelle la macro 'Decursive' sera appelée.
+
+Appuyer sur la touche puis sur 'Entrée' pour sauvegarder la nouvelle affectation.]=]
+L["OPT_MACROOPTIONS"] = "Options de la macro"
+L["OPT_MACROOPTIONS_DESC"] = "Définit le comportement de la macro créée par Decursive"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités contrôlées par magie"
+L["OPT_MAGICCHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités affectées par la magie"
+L["OPT_MAXMFS"] = "Nombre maximum d'unités affichées"
+L["OPT_MAXMFS_DESC"] = "Définit le nombre maximum de micro-portraits à afficher"
+L["OPT_MESSAGES"] = "Messages"
+L["OPT_MESSAGES_DESC"] = "Options sur les messages affichés"
+L["OPT_MFALPHA"] = "Transparence"
+L["OPT_MFALPHA_DESC"] = "Définit la transparence des micro-portraits, lorsque l'unité n'est pas affectée."
+L["OPT_MFPERFOPT"] = "Options de performance"
+L["OPT_MFREFRESHRATE"] = "Taux de rafraîchissement"
+L["OPT_MFREFRESHRATE_DESC"] = "Période de rafraîchissement (1 ou plusieurs micro-portraits peuvent être rafraîchis en même temps)"
+L["OPT_MFREFRESHSPEED"] = "Rapidité de rafraîchissement"
+L["OPT_MFREFRESHSPEED_DESC"] = "Nombre de micro-portraits à rafraîchir à chaque passage"
+L["OPT_MFSCALE"] = "Échelle des micro-portraits"
+L["OPT_MFSCALE_DESC"] = "Définit la taille des micro-portraits"
+L["OPT_MFSETTINGS"] = "Configuration des micro-portraits"
+L["OPT_MFSETTINGS_DESC"] = "Réglez les options de la fenêtre des micro-portraits selon vos besoins"
+L["OPT_MUFFOCUSBUTTON"] = "Bouton de ciblage"
+L["OPT_MUFMOUSEBUTTONS"] = "Boutons de la souris"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "Régler les boutons de la souris que vous souhaitez utiliser pour chaque couleur d'alerte des micro-portraits."
+L["OPT_MUFSCOLORS"] = "Couleurs"
+L["OPT_MUFSCOLORS_DESC"] = "Change les couleurs des micro-portraits."
+L["OPT_MUFTARGETBUTTON"] = "Bouton de focalisation"
+L["OPT_NOKEYWARN"] = "Avertir si aucune touche"
+L["OPT_NOKEYWARN_DESC"] = "Affiche un avertissement si aucune touche n'est affectée à la macro."
+L["OPT_NOSTARTMESSAGES"] = "Désactiver les messages de bienvenue"
+L["OPT_NOSTARTMESSAGES_DESC"] = "Enlève les trois messages que Decursive écrit dans le chat à chaque connexion."
+L["OPT_PLAYSOUND_DESC"] = "Joue un son si quelqu'un est affecté."
+L["OPT_POISONCHECK_DESC"] = "Si cochée, vous pourrez voir et guérir les unités empoisonnées"
+L["OPT_PRINT_CUSTOM_DESC"] = "Les messages de Decursive seront affichés dans une fenêtre de discussion spéciale"
+L["OPT_PRINT_ERRORS_DESC"] = "Les erreurs seront affichées"
+L["OPT_PROFILERESET"] = "Remise à zéro du profil..."
+L["OPT_RANDOMORDER_DESC"] = "Les unités seront affichées et guéries au hasard (non recommandé)"
+L["OPT_READDDEFAULTSD"] = "Ré-ajouter les affections par défaut"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[Ajoute les affections de Decursive manquant à cette liste
+Votre configuration ne sera pas changée]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "Toutes les affections par défaut de Decursive sont dans cette liste"
+L["OPT_REMOVESKDEBCONF"] = [=[Êtes-vous sûr de vouloir enlever
+ '%s'
+de la liste des exceptions ?]=]
+L["OPT_REMOVETHISDEBUFF"] = "Enlever cette affection"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "Supprime '%s' de la liste d'exception"
+L["OPT_RESETDEBUFF"] = "Remettre à zéro cette affection"
+L["OPT_RESETDTDCRDEFAULT"] = "Met '%s' aux valeurs par défaut de Decursive"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "Réinitialiser"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "Réinitialise les affectations des boutons de la souris aux valeurs par défaut."
+L["OPT_RESETOPTIONS"] = "Remet les options par défaut"
+L["OPT_RESETOPTIONS_DESC"] = "Met les options du profil courant aux valeurs par défaut"
+L["OPT_RESTPROFILECONF"] = [=[Êtes-vous sûr de vouloir remettre votre profil
+ '(%s) %s'
+ aux valeurs par défaut ?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "La liste des affectés se remplit de bas en haut"
+L["OPT_SCANLENGTH_DESC"] = "Définit le temps entre chaque scan"
+L["OPT_SHOWBORDER"] = "Afficher la bordure colorée des classes"
+L["OPT_SHOWBORDER_DESC"] = "Une bordure colorée représentant la classe de l'unité est affichée autour des micro-portraits"
+L["OPT_SHOWCHRONO"] = "Afficher les chronomètres"
+L["OPT_SHOWCHRONO_DESC"] = "Le nombre de secondes écoulées depuis qu'une unité a été affecté est affiché."
+L["OPT_SHOWCHRONOTIMElEFT"] = "Temps restant"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "Affiche le temps restant au lieu du temps écoulé."
+L["OPT_SHOWHELP"] = "Affiche l'aide"
+L["OPT_SHOWHELP_DESC"] = "Affiche une bulle d'aide lorsque la souris passe au-dessus d'un micro-portrait"
+L["OPT_SHOWMFS"] = "Affiche la fenêtre de micro-portraits"
+L["OPT_SHOWMFS_DESC"] = "Cette option doit être activée, si vous voulez guérir en cliquant avec la souris"
+L["OPT_SHOWMINIMAPICON"] = "Icône Minicarte"
+L["OPT_SHOWMINIMAPICON_DESC"] = "Active/Désactive l'icône de la minicarte"
+L["OPT_SHOW_STEALTH_STATUS"] = "Montrer le camouflage"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "Lorsqu'un joueur est camouflé, son micro-portrait prendra une couleur spéciale."
+L["OPT_SHOWTOOLTIP_DESC"] = "Affiche une bulle d'informations détaillées à propos des affections sur les micro-portraits et dans la liste des affectés."
+L["OPT_STICKTORIGHT"] = "Aligner la fenêtre à droite"
+L["OPT_STICKTORIGHT_DESC"] = "La fenêtre des micro-portrait se développera de la droite vers la gauche, la poignée sera déplacée automatiquement."
+L["OPT_TESTLAYOUT"] = "Tester la disposition"
+L["OPT_TESTLAYOUT_DESC"] = [=[Créé des unités virtuelles permettant de tester leur disposition.
+(Attendre quelques secondes après avoir cliqué)]=]
+L["OPT_TESTLAYOUTUNUM"] = "Nombre d'unité"
+L["OPT_TESTLAYOUTUNUM_DESC"] = "Règle le nombre d'unité virtuelles à créer."
+L["OPT_TIECENTERANDBORDER"] = "Lier le centre et la bordure"
+L["OPT_TIECENTERANDBORDER_OPT"] = "Quand activée, la transparence de la bordure vaut la moitié de celle du centre"
+L["OPT_TIE_LIVELIST_DESC"] = "L'affichage de la liste des affectés est lié à celui de la barre \"Decursive\""
+L["OPT_TIEXYSPACING"] = "Lier l'espacement horizontale et verticale"
+L["OPT_TIEXYSPACING_DESC"] = "L'espacement horizontale et verticale entre les micro-portraits sont identiques"
+L["OPT_UNITPERLINES"] = "Nombre d'unités par ligne"
+L["OPT_UNITPERLINES_DESC"] = "Définit le nombre maximum de micro-portraits à afficher par ligne"
+L["OPT_USERDEBUFF"] = "Cette affection ne fait pas partie de la liste des affections par défaut de Decursive"
+L["OPT_XSPACING"] = "Espacement horizontal"
+L["OPT_XSPACING_DESC"] = "Règle l'espacement horizontal entre les micro-portraits"
+L["OPT_YSPACING"] = "Espacement vertical"
+L["OPT_YSPACING_DESC"] = "Règle l'espacement vertical entre les micro-portraits"
+L["PLAY_SOUND"] = "Jouer un son quand il y a quelqu'un à guérir"
+L["POISON"] = "Poison"
+L["POPULATE"] = "R"
+L["POPULATE_LIST"] = "Remplir rapidement la liste"
+L["PRINT_CHATFRAME"] = "Afficher les messages dans le canal par défaut"
+L["PRINT_CUSTOM"] = "Afficher les messages dans la fenêtre"
+L["PRINT_ERRORS"] = "Afficher les messages d'erreurs"
+L["PRIORITY_LIST"] = "Liste des priorités"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "Guérir aléatoirement"
+L["REVERSE_LIVELIST"] = "Inverser l'affichage de la liste"
+L["SCAN_LENGTH"] = "Délai (secs) entre les scans : "
+L["SHIFT"] = "Maj"
+L["SHOW_MSG"] = "Pour afficher la fenêtre \"Decursive\", tapez /dcrshow."
+L["SHOW_TOOLTIP"] = "Afficher les infos-bulles sur les unités affectées"
+L["SKIP_LIST_STR"] = "Liste des exceptions"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "%s trouvé !"
+L["STEALTHED"] = "Camouflée"
+L["STR_CLOSE"] = "Fermer"
+L["STR_DCR_PRIO"] = "Liste de priorités"
+L["STR_DCR_SKIP"] = "Liste des exceptions"
+L["STR_GROUP"] = "Groupe "
+L["STR_OPTIONS"] = "Options de Decursive"
+L["STR_OTHER"] = "Autre"
+L["STR_POP"] = "Remplir la liste"
+L["STR_QUICK_POP"] = "Remplir rapidement"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r sur %s |cFF00AA00réussi !|r"
+L["TARGETUNIT"] = "Cible l'unité"
+L["TIE_LIVELIST"] = "Lier la visibilité de la liste à \"Decursive\""
+L["TOOFAR"] = "Hors de portée"
+L["UNITSTATUS"] = "Statut de l'unité : "
+
+
+
+T._LoadedFiles["frFR.lua"] = "2.5.1-6-gd3885c5";
+
diff --git a/Decursive/Localization/koKR.lua b/Decursive/Localization/koKR.lua
new file mode 100644
index 0000000..28244c4
--- /dev/null
+++ b/Decursive/Localization/koKR.lua
@@ -0,0 +1,385 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Korean localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+-------------------------------------------------------------------------------
+-- Korean localization
+-------------------------------------------------------------------------------
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "koKR");
+
+if not L then
+ T._LoadedFiles["koKR.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+L["ABOLISH_CHECK"] = "해제 전 \"해제 주문\" 검사"
+L["ABOUT_AUTHOREMAIL"] = "제작자 이메일"
+L["ABOUT_CREDITS"] = "공로자"
+L["ABOUT_LICENSE"] = "라이센스"
+L["ABOUT_NOTES"] = "쏠로, 파티, 공격대를 위한 고급화된 필터링과 시스템 우선권으로 고통들의 표시와 제거를 합니다."
+L["ABOUT_OFFICIALWEBSITE"] = "공식 웹사이트"
+L["ABOUT_SHAREDLIBS"] = "공유된 라이브러리들"
+L["ABSENT"] = "(%s) 자리비움"
+L["AFFLICTEDBY"] = "%s에 걸림"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "표시할 대상의 수 : "
+L["ANCHOR"] = "Decursive 글자 위치"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "작은 유닛 프레임 표시/숨김"
+L["BINDING_NAME_DCRPRADD"] = "대상을 우선순위 목록에 추가"
+L["BINDING_NAME_DCRPRCLEAR"] = "우선순위 목록 초기화"
+L["BINDING_NAME_DCRPRLIST"] = "우선순위 목록 출력"
+L["BINDING_NAME_DCRPRSHOW"] = "우선순위 목록 표시/숨김"
+L["BINDING_NAME_DCRSHOW"] = [=[Decursive 메인바 표시/숨김
+(실시간 목록 고정위치)]=]
+L["BINDING_NAME_DCRSHOWOPTION"] = "고정 창 설정 표시"
+L["BINDING_NAME_DCRSKADD"] = "대상을 제외 목록에 추가"
+L["BINDING_NAME_DCRSKCLEAR"] = "제외 목록 초기화"
+L["BINDING_NAME_DCRSKLIST"] = "제외 목록 출력"
+L["BINDING_NAME_DCRSKSHOW"] = "제외 목록 표시/숨김"
+L["BLACK_LENGTH"] = "블랙리스트 추가 시간(초) : "
+L["BLACKLISTED"] = "블랙리스트됨"
+L["CHARM"] = "변이"
+L["CLASS_HUNTER"] = "사냥꾼"
+L["CLEAR_PRIO"] = "C"
+L["CLEAR_SKIP"] = "C"
+L["COLORALERT"] = "'%s'|1이;가; 필요할때의 알림 색상을 설정합니다."
+L["COLORCHRONOS"] = "크로노미터"
+L["COLORCHRONOS_DESC"] = "크로노미터의 색상을 설정합니다."
+L["COLORSTATUS"] = "MUF 상태가 '%s'일때 색상을 설정합니다."
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "소환수 탐색과 해제"
+L["CURSE"] = "저주"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33Archarodim+DcrReport@teaser.fr로 이 창의 내용을 보고해 주십시오|r
+|cFF009999(CTRL+A키로 모두 선택하고 CTRL+C키로 당신의 클립보드 내 문자를 넣어 사용하십시오)|r
+또한 당신이 눈치챈 Decursive의 어떠한 이상 증상도 보고서에 알리십시오.
+]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Decursive 디버그 보고서|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[디버그 보고서가 유효합니다!
+|cFFFF0000/dcr general report|r를 입력해 그것을 확인합니다.]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "디버그 보고서 유효함!"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "개발자의 확인이 필요한 디버그 보고서 보기..."
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DEV_VERSION_ALERT"] = [=[당신은 Decursive의 개발자 버전을 사용중입니다.
+
+만약 당신이 새로운 지원들/수정들, 게임중 디버그 보고서 보내기, 개발자에게 문제점 보내기 위해 테스트에 참여하고 싶지않다면 '이 버전을 사용하지 마십시오.' 그리고 curse.com의 최종 '안정화' 버전을 다운로드 하십시오.
+
+이 메세지는 버전마다 한번씩만 표시됩니다.
+
+Decursive의 개발자 버전은 플레이어가 게임을 시작 할 때 경고가 표시됩니다.]=]
+L["DEV_VERSION_EXPIRED"] = [=[본 Decursive의 개발자 버전은 만료되었습니다.
+마지막 개발자 버전을 다운로드하거나 CURSE.COM 또는 WOWACE.COM에서 현재 안정화 배포판을 사용해 주십시오.
+이 경고는 2일간 항상 표시됩니다.
+
+알림: Decursive의 만료된 개발 버전으로 접속 시 사용자에게 매번 표시됩니다.]=]
+L["DEWDROPISGONE"] = "거기엔 Ace3에 대해 상응하는 DewDrop이 없습니다. Alt+우-클릭으로 설정판을 여십시오."
+L["DISABLEWARNING"] = [=[Decursive 사용이 중지되었습니다!
+
+다시 사용하려면, |cFFFFAA44/DCR ENABLE|r를 입력하세요.]=]
+L["DISEASE"] = "질병"
+L["DONOT_BL_PRIO"] = "우선순위 블랙리스트 제외"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r|1으로;로; %s |cFFAA0000치료 실패|r
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "주시대상"
+L["FUBARMENU"] = "FuBar 메뉴"
+L["FUBARMENU_DESC"] = "FuBar 아이콘에 관련된 옵션을 설정합니다."
+L["GLOR1"] = "Glorfindal의 추억속에"
+L["GLOR2"] = [=[Decursive는 돌아올 수 없는 길을 떠난 Bertrand의 추억에 바칩니다.
+그는 언제나 기억될 것입니다.]=]
+L["GLOR3"] = [=[Bertrand Sense를 기억하며
+1969 - 2007]=]
+L["GLOR4"] = [=[사랑과 우정은 그들은 언제 어디에서나 얻을 수 있습니다, World of Warcraft에서 Glorfindal을 만났던 사람들은 훌륭히 책임감있고 카리스마 넘치는 지도자로 알고 있었습니다.
+
+그는 게임 속 삶에 있어서, 모든 이들과 그의 친구들에게 헌신적이고, 사심없고, 관대하였고, 열정적인 사람이었습니다.
+
+그는 가상 세계 속의 단지 익명 플레이어로써 훗날 38의 나이에 떠나갔지만, 진정한 친구들이라면 그를 영원히 그리워 할 것입니다.]=]
+L["GLOR5"] = "그는 언제나 기억될 것입니다..."
+L["HANDLEHELP"] = "작은 유닛 프레임(MUFs) 모두 이동"
+L["HIDE_LIVELIST"] = "실시간 목록 숨김"
+L["HIDE_MAIN"] = "Decursive 창 숨김"
+L["HIDESHOW_BUTTONS"] = "버튼 표시/숨김"
+L["HLP_LEFTCLICK"] = "좌-클릭"
+L["HLP_LL_ONCLICK_TEXT"] = [=[실시간 목록을 클릭하는 것은 WoW 2.0 이후 사용할 수 없습니다. Decursive 폴더에 위치한 "Readme.txt" 읽어 보세요...
+(해당 목록을 이동하려면 /dcrshow 혹은 ALT-좌-클릭하세요.)]=]
+L["HLP_MIDDLECLICK"] = "가운데-클릭"
+L["HLP_NOTHINGTOCURE"] = "치료할 것이 없습니다!"
+L["HLP_RIGHTCLICK"] = "우-클릭"
+L["HLP_USEXBUTTONTOCURE"] = "해당 디버프를 치료하려면 \"%s\" 버튼을 사용하세요"
+L["HLP_WRONGMBUTTON"] = "잘못된 마우스 버튼입니다!"
+L["IGNORE_STEALTH"] = "은신 대상 무시"
+L["IS_HERE_MSG"] = "Decursive가 초기화 되었습니다. 옵션을 설정하세요."
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r 클릭: 해당 플레이어 제거
+|cFF33AA33좌|r-클릭: 해당 플레이어를 위로
+|cFF33AA33우|r-클릭: 해당 플레이어를 아래로
+|cFF33AA33[SHIFT] 좌|r-클릭: 해당 플레이어를 최상위로
+|cFF33AA33[SHIFT] 우|r-클릭: 해당 플레이어를 최하위로]=]
+L["MACROKEYALREADYMAPPED"] = [=[경고: Decursive 매크로에 지정한 [%s]키는 '%s'|1을;를; 위해 지정되어 있습니다.
+당신이 매크로에 다른 키를 지정하면 Decursive는 이전 설정을 복원할 것입니다.]=]
+L["MACROKEYMAPPINGFAILED"] = "[%s] 키는 Decursive 매크로로 지정할 수 없습니다!"
+L["MACROKEYMAPPINGSUCCESS"] = "[%s] 키가 Decursive 매크로로 성공적으로 지정되었습니다."
+L["MACROKEYNOTMAPPED"] = "Decursive 마우스오버 매크로는 지정된 키가 없습니다, '매크로' 설정을 보시면 키를 지정할 수 있습니다!"
+L["MAGIC"] = "마법"
+L["MAGICCHARMED"] = "마법 정화"
+L["MISSINGUNIT"] = "잘못된 대상"
+L["NORMAL"] = "정상"
+L["NOSPELL"] = "이용가능한 주문이 없습니다."
+L["OPT_ABOLISHCHECK_DESC"] = "'해제' 주문을 가진 대상을 표시하고 치유 할 지를 선택합니다."
+L["OPT_ABOUT"] = "관하여"
+L["OPT_ADDDEBUFF"] = "목록에 디버프 추가"
+L["OPT_ADDDEBUFF_DESC"] = "이 목록에 새로운 디버프 추가"
+L["OPT_ADDDEBUFFFHIST"] = "최근의 디버프 추가"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "예전에 사용된 디버프를 추가합니다."
+L["OPT_ADDDEBUFF_USAGE"] = "<디버프명>"
+L["OPT_ADVDISP"] = "고급 표시 설정"
+L["OPT_ADVDISP_DESC"] = "각 MUF 사이 간격 설정을 위해 테두리와 가운데 구분의 투명도를 설정할 수 있습니다."
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s - %s에 걸리면 무시합니다."
+L["OPT_ALWAYSIGNORE"] = "비전투시에도 항상 무시"
+L["OPT_ALWAYSIGNORE_DESC"] = "선택 시 해당 디버프는 전투 중이 아닐때도 무시됩니다."
+L["OPT_AMOUNT_AFFLIC_DESC"] = "실시간 목록에 표시할 유닛의 최대 수를 지정합니다."
+L["OPT_ANCHOR_DESC"] = "사용자 정의 메세지창의 고정위치를 표시합니다."
+L["OPT_AUTOHIDEMFS"] = "자동숨김"
+L["OPT_AUTOHIDEMFS_DESC"] = "선택하면 언제 MUF창을 숨겨둘지 설정합니다."
+L["OPT_BLACKLENTGH_DESC"] = "블랙리스트에 등록할 시간을 지정합니다."
+L["OPT_BORDERTRANSP"] = "테두리 투명도"
+L["OPT_BORDERTRANSP_DESC"] = "테두리의 투명도를 설정합니다."
+L["OPT_CENTERTRANSP"] = "가운데 투명도"
+L["OPT_CENTERTRANSP_DESC"] = "가운데의 투명도를 설정합니다."
+L["OPT_CHARMEDCHECK_DESC"] = "선택 시 지배에 걸린 대상을 표시하고 변이합니다."
+L["OPT_CHATFRAME_DESC"] = "Decursive의 메세지가 기본 대화창에 표시됩니다."
+L["OPT_CHECKOTHERPLAYERS"] = "다른 플레이어 확인"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "당신이 현재 속한 길드 또는 그룹 플레이어의 Decursive 버전을 표시합니다. (Decursive 2.4.6 이전 버전은 표시할 수 없습니다.)"
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "가상 테스트 디버프 생성"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "디버프 발생 시 어떻게 보여지는 지를 표시하도록 합니다."
+L["OPT_CUREPETS_DESC"] = "소환수를 관리하고 해제합니다."
+L["OPT_CURINGOPTIONS"] = "해제 옵션"
+L["OPT_CURINGOPTIONS_DESC"] = "해제의 다양한 형태를 설정합니다."
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+당신이 치료를 원하는 재난의 유형을 선택, 선택하지 않은 유형은 Decursive에서 완전히 무시될 것입니다.
+
+재난의 우선 순위는 녹색 숫자로 정의됩니다. 이것은 몇 가지 영향을 미칠 것입니다:
+- 플레이어에 여러 종류의 디버프가 걸려있으면 Decursive가 먼저 표시 할 지.
+- 당신이 디버프를 치료하려 어떤 마우스 버튼을 클릭 할 지.(첫째 주문은 좌-클릭, 둘째는 우-클릭, 등...)
+
+여기에 모든 설명이 기술되어 있습니다(참조 요망):
+http://www.wowace.com/addons/decursive/]=]
+L["OPT_CURINGORDEROPTIONS"] = "해제 순서 설정"
+L["OPT_CURSECHECK_DESC"] = "체크 시 저주에 걸린 대상을 표시하고 치료합니다."
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+기본값으로 설정됨]=]
+L["OPT_DEBUFFENTRY_DESC"] = "해당 디버프에 걸렸을 때 전투 중 무시할 직업을 선택하세요."
+L["OPT_DEBUFFFILTER"] = "디버프 필터링"
+L["OPT_DEBUFFFILTER_DESC"] = "이름과 직업에 의해 필터링 할 디버프를 선택합니다."
+L["OPT_DISABLEMACROCREATION"] = "매크로 생성 사용안함"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Decursive 매크로를 더 이상 생성 또는 유지할 수 없습니다."
+L["OPT_DISEASECHECK_DESC"] = "선택 시 질병에 걸린 대상을 표시하고 치료합니다."
+L["OPT_DISPLAYOPTIONS"] = "디스플레이 옵션"
+L["OPT_DONOTBLPRIO_DESC"] = "우선순위에 등록된 유닛은 블랙리스트에 추가하지 않습니다."
+L["OPT_ENABLEDEBUG"] = "디버깅 사용"
+L["OPT_ENABLEDEBUG_DESC"] = "디버깅 출력 사용"
+L["OPT_ENABLEDECURSIVE"] = "Decursive 사용"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "당신이 전투중인 동안 %q로 지정된 클래스는 무시됩니다."
+L["OPT_GENERAL"] = "기본 설정"
+L["OPT_GROWDIRECTION"] = "MUF 표시 반전"
+L["OPT_GROWDIRECTION_DESC"] = "MUF를 하단에서 상단으로 표시합니다."
+L["OPT_HIDELIVELIST_DESC"] = "숨긴다면 해제된 대상의 정보를 표시합니다."
+L["OPT_HIDEMFS_GROUP"] = "솔로/파티"
+L["OPT_HIDEMFS_GROUP_DESC"] = "MUF창을 공격대에 속해있지 않을 때 숨겨둡니다."
+L["OPT_HIDEMFS_NEVER"] = "사용안함"
+L["OPT_HIDEMFS_NEVER_DESC"] = "MUF창의 자동숨김을 사용하지 않습니다."
+L["OPT_HIDEMFS_SOLO"] = "솔로"
+L["OPT_HIDEMFS_SOLO_DESC"] = "MUF창을 파티나 공격대에 속해있지 않을 때 숨겨둡니다."
+L["OPT_IGNORESTEALTHED_DESC"] = "은신한 대상을 무시합니다."
+L["OPTION_MENU"] = "Decursive 설정 메뉴"
+L["OPT_LIVELIST"] = "실시간 목록"
+L["OPT_LIVELIST_DESC"] = "실시간 목록에 대한 설정입니다."
+L["OPT_LLALPHA"] = "실시간 목록 투명도"
+L["OPT_LLALPHA_DESC"] = "Decursive 메인바와 실시간 목록의 투명도를 변경합니다. (메인바가 표시되어 있어야 함)"
+L["OPT_LLSCALE"] = "실시간 목록 크기"
+L["OPT_LLSCALE_DESC"] = "Decursive 메인바와 실시간 목록의 크기를 설정합니다. (메인바가 표시되어 있어야 함)"
+L["OPT_LVONLYINRANGE"] = "범위 내 대상"
+L["OPT_LVONLYINRANGE_DESC"] = "해제 범위 내 대상만 실시간 목록에 표시합니다."
+L["OPT_MACROBIND"] = "매크로 단축키 설정"
+L["OPT_MACROBIND_DESC"] = [=['Decursive' 매크로를 호출 할 키를 지정합니다.
+
+키를 누르고 키보드의 'Enter'키를 누르면 새롭게 지정된 키가 저장됩니다.(당신의 마우스 커서가 편집 구역내에 있어야 합니다)]=]
+L["OPT_MACROOPTIONS"] = "매크로 설정"
+L["OPT_MACROOPTIONS_DESC"] = "Decursive에 의해 생성된 매크로의 동작을 설정합니다."
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "체크 시 지배에 걸린 대상을 표시하고 치료합니다."
+L["OPT_MAGICCHECK_DESC"] = "체크 시 마법에 걸린 대상을 표시하고 치료합니다."
+L["OPT_MAXMFS"] = "표시할 최대 유닛"
+L["OPT_MAXMFS_DESC"] = "표시할 작은 유닛 프레임의 최대 갯수를 지정합니다."
+L["OPT_MESSAGES"] = "메세지"
+L["OPT_MESSAGES_DESC"] = "메세지 표시에 대한 설정입니다."
+L["OPT_MFALPHA"] = "투명도"
+L["OPT_MFALPHA_DESC"] = "디버프의 걸린 대상이 없을 때 MUF의 투명도를 지정합니다."
+L["OPT_MFPERFOPT"] = "성능 설정"
+L["OPT_MFREFRESHRATE"] = "갱신 주기"
+L["OPT_MFREFRESHRATE_DESC"] = "갱신할 시간 간격(한번에 1 혹은 그 이상 작은 유닛 프레임을 갱신할 수 있습니다.)"
+L["OPT_MFREFRESHSPEED"] = "갱신 속도"
+L["OPT_MFREFRESHSPEED_DESC"] = "한번에 갱신할 작은 유닛 프레임의 갯수"
+L["OPT_MFSCALE"] = "작은 유닛 프레임의 크기"
+L["OPT_MFSCALE_DESC"] = "작은 유닛 프레임의 크기를 설정합니다."
+L["OPT_MFSETTINGS"] = "작은 유닛 프레임 설정"
+L["OPT_MFSETTINGS_DESC"] = "작은 유닛 프레임에 대한 설정입니다."
+L["OPT_MUFMOUSEBUTTONS"] = "마우스 버튼"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "각 MUF의 경고색을 위해 당신이 사용하고자하는 마우스 버튼을 설정합니다."
+L["OPT_MUFSCOLORS"] = "색상"
+L["OPT_MUFSCOLORS_DESC"] = "작은 유닛 프레임의 색상을 변경합니다."
+L["OPT_NOKEYWARN"] = "키 없음 경고"
+L["OPT_NOKEYWARN_DESC"] = "지정된 키가 없다면 경고 문구를 표시합니다."
+L["OPT_NOSTARTMESSAGES"] = "환영 메세지 사용안함"
+L["OPT_NOSTARTMESSAGES_DESC"] = "매일 로그인 시 대화창에 Decursive가 출력하는 3개의 메세지를 제거합니다."
+L["OPT_PLAYSOUND_DESC"] = "해제 가능한 디버프 발견시 효과음을 재생합니다."
+L["OPT_POISONCHECK_DESC"] = "체크 시 독에 걸린 대상을 표시하고 치료합니다."
+L["OPT_PRINT_CUSTOM_DESC"] = "Decursive의 메세지가 사용자 정의 대화창에 표시됩니다."
+L["OPT_PRINT_ERRORS_DESC"] = "오류를 표시합니다."
+L["OPT_PROFILERESET"] = "프로필 초기화..."
+L["OPT_RANDOMORDER_DESC"] = "대상을 무작위로 표시하고 치료합니다.(비추천)"
+L["OPT_READDDEFAULTSD"] = "기본 디버프 재추가"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[해당 목록에 누락된 Decursive의 기본 디버프를 추가합니다.
+설정은 변하지 않습니다.]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "Decursive의 모든 기본 디버프는 해당 목록에 있습니다."
+L["OPT_REMOVESKDEBCONF"] = [=[정말로 Decursive의 디버프 제외 목록에서
+'%s'|1을;를; 제거 하시겠습니까?]=]
+L["OPT_REMOVETHISDEBUFF"] = "해당 디버프 제거"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "제외 목록에서 '%s' 제거"
+L["OPT_RESETDEBUFF"] = "해당 디버프 초기화"
+L["OPT_RESETDTDCRDEFAULT"] = "'%s' Decursive 기본으로 초기화"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "초기화"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "기본값으로 할당된 마우스 버튼을 초기화합니다."
+L["OPT_RESETOPTIONS"] = "기본값으로 설정 초기화"
+L["OPT_RESETOPTIONS_DESC"] = "현재 프로필을 기본값으로 초기화합니다."
+L["OPT_RESTPROFILECONF"] = [=[정말로 '(%s) %s'
+프로필을 기본 설정으로
+초기화 하시겠습니까?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "실시간 목록을 아래에서 위로 생성합니다."
+L["OPT_SCANLENGTH_DESC"] = "각 탐색의 시간 간격을 지정합니다."
+L["OPT_SHOWBORDER"] = "직업 색상 테두리 표시"
+L["OPT_SHOWBORDER_DESC"] = "MUF에 유닛의 직업에 따른 색상을 테두리로 표시합니다."
+L["OPT_SHOWCHRONO"] = "크로노미터 표시"
+L["OPT_SHOWCHRONO_DESC"] = "유닛이 주문에 걸린 이후 경과된 초의 숫자를 표시합니다."
+L["OPT_SHOWCHRONOTIMElEFT"] = "남은 시간"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "경과한 시간 대신 남은 시간을 표시합니다."
+L["OPT_SHOWHELP"] = "도움말 표시"
+L["OPT_SHOWHELP_DESC"] = "작은 유닛 프레임에 마우스를 올리면 정보 툴팁을 표시합니다."
+L["OPT_SHOWMFS"] = "작은 유닛 프레임(MUF) 표시"
+L["OPT_SHOWMFS_DESC"] = "클릭으로 해제하려면 반드시 활성화 되어야 합니다."
+L["OPT_SHOWMINIMAPICON"] = "미니맵 아이콘"
+L["OPT_SHOWMINIMAPICON_DESC"] = "미니맵 아이콘을 표시합니다."
+L["OPT_SHOW_STEALTH_STATUS"] = "은신 상태 보기"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "플레이어가 은신중이면, 그 MUF는 특정한 색상을 갖게 될 것임"
+L["OPT_SHOWTOOLTIP_DESC"] = "실시간 목록과 작은 유닛 프레임에 디버프에 대한 자세한 툴팁을 표시합니다."
+L["OPT_STICKTORIGHT"] = "MUF창 오른쪽으로 정렬"
+L["OPT_STICKTORIGHT_DESC"] = "MUF창은 오른쪽에서 왼쪽으로 증가되며 동작은 자동적으로 이루어질 것입니다."
+L["OPT_TIECENTERANDBORDER"] = "가운데와 테두리의 투명도"
+L["OPT_TIECENTERANDBORDER_OPT"] = "체크 시 테두리의 투명도가 가운데 투명도의 절반이 됩니다."
+L["OPT_TIE_LIVELIST_DESC"] = "실시간 목록을 아래에서 위로 생성합니다."
+L["OPT_TIEXYSPACING"] = "수평/수직 간격"
+L["OPT_TIEXYSPACING_DESC"] = "MUF의 수평과 수직 간격이 같아 집니다."
+L["OPT_UNITPERLINES"] = "한줄에 표시할 유닛의 갯수"
+L["OPT_UNITPERLINES_DESC"] = "한줄에 표시할 작은 유닛 프레임의 최대 갯수를 지정합니다."
+L["OPT_USERDEBUFF"] = "해당 디버프는 Decursive의 기본 디버프가 아닙니다."
+L["OPT_XSPACING"] = "수평 간격"
+L["OPT_XSPACING_DESC"] = "MUF 사이의 수평 간격을 설정합니다."
+L["OPT_YSPACING"] = "수직 간격"
+L["OPT_YSPACING_DESC"] = "MUF 사이의 수직 간격을 설정합니다."
+L["PLAY_SOUND"] = "효과음 재생"
+L["POISON"] = "독"
+L["POPULATE"] = "p"
+L["POPULATE_LIST"] = "Decursive 목록에 빠른 추가"
+L["PRINT_CHATFRAME"] = "기본 대화창에 메세지 표시"
+L["PRINT_CUSTOM"] = "Decursive 창에 메세지 표시"
+L["PRINT_ERRORS"] = "오류 메세지 출력"
+L["PRIORITY_LIST"] = "Decursive 우선순위 목록"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "무작위 해제"
+L["REVERSE_LIVELIST"] = "실시간 목록 표시 반전"
+L["SCAN_LENGTH"] = "실시간 탐색 시간(초) : "
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "Decursive 창 표시, /dcrshow 명령어를 입력하세요."
+L["SHOW_TOOLTIP"] = "디버프 걸린 대상의 툴팁 표시"
+L["SKIP_LIST_STR"] = "Decursive 제외 목록"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "%s 주문 발견!"
+L["STEALTHED"] = "은신상태"
+L["STR_CLOSE"] = "닫기"
+L["STR_DCR_PRIO"] = "Decursive 우선순위"
+L["STR_DCR_SKIP"] = "Decursive 제외"
+L["STR_GROUP"] = "파티 "
+L["STR_OPTIONS"] = "Decursive 설정"
+L["STR_OTHER"] = "기타"
+L["STR_POP"] = "추가 목록"
+L["STR_QUICK_POP"] = "빠른 추가"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r|1으로;로; %s |cFF00AA00치료 성공!|r"
+L["TARGETUNIT"] = "대상"
+L["TIE_LIVELIST"] = "실시간 목록 표시를 DCR 창과 함께 표시"
+L["TOOFAR"] = "거리 벗어남"
+L["UNITSTATUS"] = "상태: "
+
+
+
+T._LoadedFiles["koKR.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/load.xml b/Decursive/Localization/load.xml
new file mode 100644
index 0000000..4f98561
--- /dev/null
+++ b/Decursive/Localization/load.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Decursive/Localization/ruRU.lua b/Decursive/Localization/ruRU.lua
new file mode 100644
index 0000000..4a11c6a
--- /dev/null
+++ b/Decursive/Localization/ruRU.lua
@@ -0,0 +1,388 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Russian localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "ruRU");
+
+if not L then
+ T._LoadedFiles["ruRU.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+L["ABOLISH_CHECK"] = "Проверять на наличие Устранения яда/болезни перед лечением"
+L["ABOUT_AUTHOREMAIL"] = "E-mail автора"
+L["ABOUT_CREDITS"] = "РАЗРАБОТЧИКИ"
+L["ABOUT_LICENSE"] = "ПРАВА"
+L["ABOUT_NOTES"] = "Отображение и инструменты для развеивания дебаффов для одиночной игры, игры в группе и рейде, с развитой системой фильтрации и приоритетов."
+L["ABOUT_OFFICIALWEBSITE"] = "ОФИЦИАЛЬНЫЙ САЙТ"
+L["ABOUT_SHAREDLIBS"] = "ОБЩИЕ БИБЛИОТЕКИ"
+L["ABSENT"] = "Отсутствует (%s)"
+L["AFFLICTEDBY"] = "%s заражен"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "Количество отображаемых заражений : "
+L["ANCHOR"] = "Якорь окна сообщений Decursive"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "Показать или скрыть микро-фреймы игроков"
+L["BINDING_NAME_DCRPRADD"] = "Добавить цель в список приоритетов"
+L["BINDING_NAME_DCRPRCLEAR"] = "Очистить список приоритетов"
+L["BINDING_NAME_DCRPRLIST"] = "Вывести список приоритетов"
+L["BINDING_NAME_DCRPRSHOW"] = "Показать или скрыть список приоритета"
+L["BINDING_NAME_DCRSHOW"] = [=[Показать/скрыть главную панель Decursive
+(якорь активного списка)]=]
+L["BINDING_NAME_DCRSHOWOPTION"] = "Отображать опции панели"
+L["BINDING_NAME_DCRSKADD"] = "Добавить цель в список пропусков"
+L["BINDING_NAME_DCRSKCLEAR"] = "Очистить список пропусков"
+L["BINDING_NAME_DCRSKLIST"] = "Распечатка списка пропусков"
+L["BINDING_NAME_DCRSKSHOW"] = "Показать или скрыть список пропусков"
+L["BLACK_LENGTH"] = "Секунд в чёрном списке : "
+L["BLACKLISTED"] = "В чёрном списке"
+L["CHARM"] = "Подчинение"
+L["CLASS_HUNTER"] = "Охотник"
+L["CLEAR_PRIO"] = "О"
+L["CLEAR_SKIP"] = "О"
+L["COLORALERT"] = "Установить предупреждающий цвет, когда требуется '%s'."
+L["COLORCHRONOS"] = "Хронометры"
+L["COLORCHRONOS_DESC"] = "Установить цвет хронометров"
+L["COLORSTATUS"] = "Установить цвет для статуса МФИ: '%s'."
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "Скан и лечение питомцев"
+L["CURSE"] = "Проклятие"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33Пожайлуйста, отправьте содержимое этого окна по адресу Archarodim+DcrReport@teaser.fr|r
+|cFF009999(Нажмите CTRL+A, чтобы выделить всё содержимое, а затем CTRL+C, чтобы переместить его в буфер обмена)|r
+В своём отчёте также сообщите о неполадках в работе Decursive, если таковые имеются.]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Отчёт об отладке Decursive|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[Отчёт об отладке доступен!
+Введите |cFFFF0000/dcr general report|r, чтобы увидеть его.]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "Отчёт об отладке доступен!"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "Показать отчет о поиске ошибок, который необходимо представить автору..."
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DEV_VERSION_ALERT"] = [=[Вы используете тестовую версию Decursive.
+
+Если вы не желаете участвовать в тестировании новых функций и исправлении ошибок, получать внутриигровые отчеты об ошибках, посылать отчеты автору, тогда НЕ ИСПОЛЬЗУЙТЕ ЭТУ ВЕРСИЮ и скачайте последнюю СТАБИЛЬНУЮ версию с curse.com или wowace.com.
+
+Это сообщение будет отображаться каждый раз при установке каждой новой тестовой версии.]=]
+L["DEV_VERSION_EXPIRED"] = [=[Эта тестовая версия Decursive устарела.
+Пожалуйста, скачайте последнюю тестовую версию или используйте текущую стабильную версию с CURSE.COM или WOWACE.COM.
+
+Спасибо :-)]=]
+L["DEWDROPISGONE"] = "Для Ace3 не существует эквивалента DewDrop. Alt+Правый щелчок, чтобы открыть настройки."
+L["DISABLEWARNING"] = [=[Decursive отключен!
+
+Чтобы включить его снова, введите |cFFFFAA44/DCR ENABLE|r]=]
+L["DISEASE"] = "Болезни"
+L["DONOT_BL_PRIO"] = "Не вносить в чёрный список имена из списка приоритетов"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r |cFFAA0000неудачно на|r %s
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "Фокус"
+L["FUBARMENU"] = "Меню FuBarа"
+L["FUBARMENU_DESC"] = "Настройка иконки FuBarа"
+L["GLOR1"] = "В память о Glorfindal'е"
+L["GLOR2"] = [=[Decursive посвящён памяти о Бертране, который оставил нас слишком рано.
+Его всегда будут помнить.]=]
+L["GLOR3"] = [=[В память о Bertrand Sense
+1969 - 2007]=]
+L["GLOR4"] = [=[Дружба и привязанность могут пустить свои корни где угодно. Те, кто встретился с Glorfindal в World of Warcraft, знали его как человека с великими обязательствами, и харизматического лидера.
+
+В жизни он был таким же, как и в игре: самоотверженным, щедрым, преданным своим друзьям и, прежде всего всего, страстным человеком.
+
+Он оставил нас в возрасте 38 лет, оставив не только игроков в виртуальном мире, но и группу истинных друзей, которые будут тосковать без него всегда.]=]
+L["GLOR5"] = "Его всегда будут помнить..."
+L["HANDLEHELP"] = "Тащить все микро-фреймы игроков (МФИ)"
+L["HIDE_LIVELIST"] = "Скрыть активный список"
+L["HIDE_MAIN"] = "Скрыть окно Decursive"
+L["HIDESHOW_BUTTONS"] = "Скрыть/Показать кнопки"
+L["HLP_LEFTCLICK"] = "Левый клик"
+L["HLP_LL_ONCLICK_TEXT"] = [=[Щелканье по активному списку является бесполезным после WoW 2.0. Вы должны прочитать файл "Readme.txt", находящийся в папке Decursive...
+(Для перемещения этого списка переместите панель Decursive, /dcrshow и alt+клик левой кнопкой для изменения положения)]=]
+L["HLP_MIDDLECLICK"] = "Центральный клик"
+L["HLP_NOTHINGTOCURE"] = "Нечего лечить!"
+L["HLP_RIGHTCLICK"] = "Правый клик"
+L["HLP_USEXBUTTONTOCURE"] = "Используйте \"%s\" для излечения данного заражения!"
+L["HLP_WRONGMBUTTON"] = "Неверная кнопка мыши!"
+L["IGNORE_STEALTH"] = "Игнорировать невидимых игроков"
+L["IS_HERE_MSG"] = "Decursive инициализирован, не забудьте проверить настройки"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r клик: Удалить данного игрока
+|cFF33AA33ЛЕВЫЙ|r клик: Повысить данного игрока
+|cFF33AA33ПРАВЫЙ|r клик:Понизить данного игрока
+|cFF33AA33[SHIFT]ЛЕВЫЙ|r клик: Поместить данного игрока вверх
+|cFF33AA33[SHIFT]ПРАВЫЙ|r клик: Поместить данного игрока вниз]=]
+L["MACROKEYALREADYMAPPED"] = [=[ПРЕДУПРЕЖДЕНИЕ: Клавиша, назначенная для макроса Decursive [%s], уже назначена на '%s'.
+Decursive восстановит предыдущее назначение, если вы назначите другую клавишу для этого макроса.]=]
+L["MACROKEYMAPPINGFAILED"] = "Клавиша [%s] не может быть назначена для макроса Decursive!"
+L["MACROKEYMAPPINGSUCCESS"] = "Клавиша [%s] успешно назначена для макроса Decursive."
+L["MACROKEYNOTMAPPED"] = "Макросу Decursive не назначена клавиша, проверьте настройки макросов!"
+L["MAGIC"] = "Магия"
+L["MAGICCHARMED"] = "Магическое очарования"
+L["MISSINGUNIT"] = "Потеря игрока"
+L["NORMAL"] = "Нормальное"
+L["NOSPELL"] = "Нет доступных заклинаний"
+L["OPT_ABOLISHCHECK_DESC"] = "выберите, отображать ли игроков с активным на них заклинанием 'Устранение', делая их доступными для лечения"
+L["OPT_ABOUT"] = "О проекте"
+L["OPT_ADDDEBUFF"] = "Добавить недуг"
+L["OPT_ADDDEBUFF_DESC"] = "Добавить новый недуг в данный список"
+L["OPT_ADDDEBUFFFHIST"] = "Добавить недавнее заражение"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "Добавить заражение, используя историю"
+L["OPT_ADDDEBUFF_USAGE"] = "<Название недуга>"
+L["OPT_ADVDISP"] = "Доп. настройки отображения"
+L["OPT_ADVDISP_DESC"] = "Позволяет установить прозрачность краёв и центра раздельно, а также установить расстояние между МФИ"
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s пораженный %s будет пропущен"
+L["OPT_ALWAYSIGNORE"] = "Также игнорировать вне боя"
+L["OPT_ALWAYSIGNORE_DESC"] = "Если отмечено, данный недуг будет также игнорироваться, когда вы находитесь вне боя"
+L["OPT_AMOUNT_AFFLIC_DESC"] = "Установить максимальное количество отображаемых в активном списке заражений"
+L["OPT_ANCHOR_DESC"] = "Отображать указатель пользовательского фрейма ошибок"
+L["OPT_AUTOHIDEMFS"] = "Автоскрытие"
+L["OPT_AUTOHIDEMFS_DESC"] = "Выберите, когда скрывать МФИ"
+L["OPT_BLACKLENTGH_DESC"] = "Установить продолжительность нахождения кого-либо в чёрном списке"
+L["OPT_BORDERTRANSP"] = "Прозрачность краёв"
+L["OPT_BORDERTRANSP_DESC"] = "Установка прозрачности краёв"
+L["OPT_CENTERTRANSP"] = "Прозрачность центра"
+L["OPT_CENTERTRANSP_DESC"] = "Установка прозрачности центра"
+L["OPT_CHARMEDCHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать очарованных игроков"
+L["OPT_CHATFRAME_DESC"] = "Сообщения Decursive будут выводиться в стандартное окно чата"
+L["OPT_CHECKOTHERPLAYERS"] = "Проверить других игроков"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "Отображать версию Decursive других игроков вашей группы или гильдии (отображает только версии Decursive свыше 2.4.6)."
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "Создать виртуальный тест заражения"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "Позволяет вам увидеть, как будет всё это выглядеть, когда будет обнаружено заражение"
+L["OPT_CUREPETS_DESC"] = "Питомцы будут отображаться и излечиваться"
+L["OPT_CURINGOPTIONS"] = "Настройки лечения"
+L["OPT_CURINGOPTIONS_DESC"] = "Настроить различные аспекты процесса лечения"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+Выберите типы колдовства, которые вы желаете развеивать, невыбранные типы будут игнорироваться Decursive.
+
+Зеленый номер определяет приоритет колдовства. Этот приоритет будет влиять на несколько аспектов:
+- Что Decursive показывает Вам в первую очередь, если на игрока наложено несколько типов дебаффов.
+- Какую кнопку мыши Вы должны будете нажать, чтобы развеять дебафф (Первое заклинание развеивается Левым щелчком, второе Правым, и т.д...)
+
+Все это описано в документации (необходимо прочесть):
+http://www.wowace.com/addons/decursive/]=]
+L["OPT_CURINGORDEROPTIONS"] = "Настройки порядка лечения"
+L["OPT_CURSECHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать проклятых игроков"
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+Назначен на стандарт]=]
+L["OPT_DEBUFFENTRY_DESC"] = "Выберите класс, который будет игнорироваться в бою при поражении данным недугом"
+L["OPT_DEBUFFFILTER"] = "Фильтрование недугов"
+L["OPT_DEBUFFFILTER_DESC"] = "Выберите недуги для фильтрации по имени и классу, когда вы находитесь в бою"
+L["OPT_DISABLEMACROCREATION"] = "Отключить создание макроса"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Макрос Decursive больше не будет создаваться или поддерживаться"
+L["OPT_DISEASECHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать заболевших игроков"
+L["OPT_DISPLAYOPTIONS"] = "Настройки отображения"
+L["OPT_DONOTBLPRIO_DESC"] = "Приоритетный игрок не может быть в чёрном списке"
+L["OPT_ENABLEDEBUG"] = "Включить поиск ошибок"
+L["OPT_ENABLEDEBUG_DESC"] = "Включить вывод информации при поиске ошибок"
+L["OPT_ENABLEDECURSIVE"] = "Включить Decursive"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "%q будет игнорироваться для указаных классов, пока вы находитесь в режиме боя."
+L["OPT_GENERAL"] = "Основные настройки"
+L["OPT_GROWDIRECTION"] = "Перевернуть отображение МФИ"
+L["OPT_GROWDIRECTION_DESC"] = "МФИ будет отображаться снизу вверх"
+L["OPT_HIDELIVELIST_DESC"] = "Если не скрыт, отображает информацию о зараженных игроках"
+L["OPT_HIDEMFS_GROUP"] = "Один/в группе"
+L["OPT_HIDEMFS_GROUP_DESC"] = "Скрывать МФИ, когда вы не находитесь в рейде"
+L["OPT_HIDEMFS_NEVER"] = "Никогда"
+L["OPT_HIDEMFS_NEVER_DESC"] = "Никогда не скрывать МФИ автоматически"
+L["OPT_HIDEMFS_SOLO"] = "Один"
+L["OPT_HIDEMFS_SOLO_DESC"] = "Скрывать МФИ, когда вы не находитесь в группе или в рейде"
+L["OPT_HIDEMUFSHANDLE"] = "Скрыть поддержку микро-фреймов игроков." -- Needs review
+L["OPT_HIDEMUFSHANDLE_DESC"] = [=[Скрыть микро-фреймы игроков и отключить возможность их перемещения.
+Используйте такую же команду, чтобы вернуть её назад.]=] -- Needs review
+L["OPT_IGNORESTEALTHED_DESC"] = "Скрывающиеся игроки будут игнорироваться"
+L["OPTION_MENU"] = "Меню настроек Decursive"
+L["OPT_LIVELIST"] = "Активный список"
+L["OPT_LIVELIST_DESC"] = "Настройки активного списка"
+L["OPT_LLALPHA"] = "Прозрачность активного списка"
+L["OPT_LLALPHA_DESC"] = "Изменение прозрачности главной панели Decursive и активного списка (Главная панель должна быть включена)"
+L["OPT_LLSCALE"] = "Масштаб активного списка"
+L["OPT_LLSCALE_DESC"] = "Установка размера главной панели Decursive и активного списка (Главная панель должна быть включена)"
+L["OPT_LVONLYINRANGE"] = "Только игроки в пределах досягаемости"
+L["OPT_LVONLYINRANGE_DESC"] = "В активном списке будут отображаться только те игроки, которые находятся в радиусе рассеивания"
+L["OPT_MACROBIND"] = "Назначить клавишу для макроса"
+L["OPT_MACROBIND_DESC"] = [=[Установка клавиши, с помощью которой будет вызываться макрос 'Decursive'.
+
+Выберите клавишу и нажмите 'Enter' для сохранения нового назначения (установив курсор мыши над областью редактирования)]=]
+L["OPT_MACROOPTIONS"] = "Настройки макросов"
+L["OPT_MACROOPTIONS_DESC"] = "Установка поведения макросов, созданных Decursive"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать магически очарованных игроков"
+L["OPT_MAGICCHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать пораженных магией игроков"
+L["OPT_MAXMFS"] = "Всего игроков"
+L["OPT_MAXMFS_DESC"] = "Установить максимальное количество игроков, отображаемых на микро-фреймах"
+L["OPT_MESSAGES"] = "Сообщения"
+L["OPT_MESSAGES_DESC"] = "Настройки отображения сообщений"
+L["OPT_MFALPHA"] = "Прозрачность"
+L["OPT_MFALPHA_DESC"] = "Установка прозрачности МФИ, когда игроки не поражены"
+L["OPT_MFPERFOPT"] = "Настройки быстродействия"
+L["OPT_MFREFRESHRATE"] = "Частота обновления"
+L["OPT_MFREFRESHRATE_DESC"] = "Время между запросами (один или несколько МФИ могут быть обновлены одновременно)"
+L["OPT_MFREFRESHSPEED"] = "Скорость обновления"
+L["OPT_MFREFRESHSPEED_DESC"] = "Количество микро-фреймов игроков, обновляемых в однократном прохождении"
+L["OPT_MFSCALE"] = "Масштаб микро-фреймов игроков"
+L["OPT_MFSCALE_DESC"] = "Установка размера микро-фреймов игроков"
+L["OPT_MFSETTINGS"] = "Настройки микро-фреймов игроков"
+L["OPT_MFSETTINGS_DESC"] = "Настройка микро-фреймов игроков"
+L["OPT_MUFFOCUSBUTTON"] = "Кнопка фокуса:"
+L["OPT_MUFMOUSEBUTTONS"] = "Кнопки мыши"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "Задать кнопки мыши для использования с каждым цветом оповещения микро-фреймов игроков." -- Needs review
+L["OPT_MUFSCOLORS"] = "Цвета"
+L["OPT_MUFSCOLORS_DESC"] = "Изменить цвета микро-фреймов игроков."
+L["OPT_MUFTARGETBUTTON"] = "Кнопка цели:"
+L["OPT_NOKEYWARN"] = "Известить, если нет клавиши"
+L["OPT_NOKEYWARN_DESC"] = "Показать предупреждение, если нет назначенной клавиши."
+L["OPT_NOSTARTMESSAGES"] = "Отключить приветствие"
+L["OPT_NOSTARTMESSAGES_DESC"] = "Отключает выводимые сообщения Decursivа в окно чата при каждом подключении."
+L["OPT_PLAYSOUND_DESC"] = "Проигрывать звук при заражении кого-либо"
+L["OPT_POISONCHECK_DESC"] = "Если отмечено, то вы сможете видеть и излечивать отравленных игроков"
+L["OPT_PRINT_CUSTOM_DESC"] = "Сообщения Decursive будут выводиться в пользовательское окно чата"
+L["OPT_PRINT_ERRORS_DESC"] = "Выводить сообщения об ошибках"
+L["OPT_PROFILERESET"] = "Сброс профиля..."
+L["OPT_RANDOMORDER_DESC"] = "Игроки будут отображаться и излечиваться в случайном порядке (не рекомендуется)"
+L["OPT_READDDEFAULTSD"] = "Повторно добавить стандартный недуг"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[Добавить утерянные стандартные недуги Decursive в данный список
+Ваши настройки не будут изменены]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "Все стандартные недуги Decursive уже существуют в данном списке"
+L["OPT_REMOVESKDEBCONF"] = [=[Вы уверены, что хотите удалить
+ '%s'
+из списка пропусков?]=]
+L["OPT_REMOVETHISDEBUFF"] = "Удалить данный недуг"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "Удалить '%s' из списка пропусков"
+L["OPT_RESETDEBUFF"] = "Сброс данного недуга"
+L["OPT_RESETDTDCRDEFAULT"] = "Сброс '%s' на стандарт Decursive"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "Сброс"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "Сброс назначений кнопок мыши на значения по умолчанию."
+L["OPT_RESETOPTIONS"] = "Сброс настроек на стандартные"
+L["OPT_RESETOPTIONS_DESC"] = "Сброс текущих настроек профиля на стандартные значения"
+L["OPT_RESTPROFILECONF"] = [=[Вы уверены, что хотите сбросить настройки профиля
+ '(%s) %s'
+на стандартные?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "Активный список будет заполняться снизу вверх"
+L["OPT_SCANLENGTH_DESC"] = "Установите промежуток времени между сканированием"
+L["OPT_SHOWBORDER"] = "Показать края по цвету класса"
+L["OPT_SHOWBORDER_DESC"] = "Края МФИ будут отображаться в соответствии с предназначенным для класса цветом"
+L["OPT_SHOWCHRONO"] = "Показать хронометры"
+L["OPT_SHOWCHRONO_DESC"] = "Отображение в секундах количества времени, прошедшего с момента заражения игрока"
+L["OPT_SHOWCHRONOTIMElEFT"] = "Осталось"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "Отображать оставшееся время вместо прошедшего времени."
+L["OPT_SHOWHELP"] = "Вызов справки"
+L["OPT_SHOWHELP_DESC"] = "Отображать детализированные подсказки при наведении курсора мыши на микро-фреймы игроков"
+L["OPT_SHOWMFS"] = "Показать микро-фреймы игроков"
+L["OPT_SHOWMFS_DESC"] = "Эта опция должна быть отмечена, если вы хотите лечить с помощью кликов"
+L["OPT_SHOWMINIMAPICON"] = "Иконка у миникарты"
+L["OPT_SHOWMINIMAPICON_DESC"] = "Показать/скрыть иконку и миникарты."
+L["OPT_SHOW_STEALTH_STATUS"] = "Показать статус скрытности"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "Когда игрок использует скрытность, его МЮФ будет окрашен в особый цвет"
+L["OPT_SHOWTOOLTIP_DESC"] = "Показывать детализированные подсказки о заражениях в активном списке и МФИ"
+L["OPT_STICKTORIGHT"] = "Выравнять МФИ вправо"
+L["OPT_STICKTORIGHT_DESC"] = "МФИ будет расти справа налево, якорь будет перемещён по мере необходимости."
+L["OPT_TESTLAYOUT"] = "Тест отображения"
+L["OPT_TESTLAYOUT_DESC"] = [=[Создать вымышленные единицы для тестирования отображения.
+(Необходимо подождать пару секунд после нажатия)]=] -- Needs review
+L["OPT_TESTLAYOUTUNUM"] = "Количество игроков" -- Needs review
+L["OPT_TESTLAYOUTUNUM_DESC"] = "Укажите количество создаваемых вымышленных игроков" -- Needs review
+L["OPT_TIECENTERANDBORDER"] = "Объединить прозрачность центра и краёв"
+L["OPT_TIECENTERANDBORDER_OPT"] = "Если отмечено, то прозрачность краёв будет соответствовать прозрачности центра"
+L["OPT_TIE_LIVELIST_DESC"] = "Отображение активного списка связано с отображением панели \"Decursive\" "
+L["OPT_TIEXYSPACING"] = "Объединить гориз. и вертик. расстояние"
+L["OPT_TIEXYSPACING_DESC"] = "Если отмечено, то горизонтальное и вертикальное расстояния между МФИ будут равны"
+L["OPT_UNITPERLINES"] = "Игроков в линии"
+L["OPT_UNITPERLINES_DESC"] = "Установить максимальное число игроков, отображаемых на одной строке микрофреймов"
+L["OPT_USERDEBUFF"] = "Данный недуг не является стандартным недугом Decursive"
+L["OPT_XSPACING"] = "Расстояние по горизонтали"
+L["OPT_XSPACING_DESC"] = "Установка расстояния по горизонтали между МФИ"
+L["OPT_YSPACING"] = "Расстояние по вертикали"
+L["OPT_YSPACING_DESC"] = "Установка расстояния по вертикали между МФИ"
+L["PLAY_SOUND"] = "Проиграть звук, если есть кого лечить"
+L["POISON"] = "Яды"
+L["POPULATE"] = "зп"
+L["POPULATE_LIST"] = "Быстро заполнить список Decursive"
+L["PRINT_CHATFRAME"] = "Выводить сообщения в стандартный чат"
+L["PRINT_CUSTOM"] = "Выводить сообщения в окно"
+L["PRINT_ERRORS"] = "Выводить сообщения об ошибках"
+L["PRIORITY_LIST"] = "Список приоритетов"
+L["PRIORITY_SHOW"] = "ПР"
+L["RANDOM_ORDER"] = "Лечить в случайном порядке"
+L["REVERSE_LIVELIST"] = "Перевернуть отображение активного списка"
+L["SCAN_LENGTH"] = "Секунд между активными скан.: "
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "Для отображения фрейма Decursive введите /dcrshow"
+L["SHOW_TOOLTIP"] = "Отображать всплывающие подсказки к зараженным игрокам"
+L["SKIP_LIST_STR"] = "Список пропусков"
+L["SKIP_SHOW"] = "П"
+L["SPELL_FOUND"] = "Заклинание %s найдено!"
+L["STEALTHED"] = "Скрывается"
+L["STR_CLOSE"] = "Закрыть"
+L["STR_DCR_PRIO"] = "Приоритеты Decursive"
+L["STR_DCR_SKIP"] = "Пропуски Decursive"
+L["STR_GROUP"] = "Группа "
+L["STR_OPTIONS"] = "Настройки Decursive"
+L["STR_OTHER"] = "Другое"
+L["STR_POP"] = "Список заполнений"
+L["STR_QUICK_POP"] = "Быстрое заполнение"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r |cFF00AA00успешно на|r %s"
+L["TARGETUNIT"] = "Цель"
+L["TIE_LIVELIST"] = "Привязка обзора активного списка к окну DCR"
+L["TOOFAR"] = "Слишком далеко"
+L["UNITSTATUS"] = "Состояние: "
+
+
+
+T._LoadedFiles["ruRU.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/zhCN.lua b/Decursive/Localization/zhCN.lua
new file mode 100644
index 0000000..3aa5213
--- /dev/null
+++ b/Decursive/Localization/zhCN.lua
@@ -0,0 +1,384 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Simplified Chinese localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "zhCN");
+
+if not L then
+ T._LoadedFiles["zhCN.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+L["ABOLISH_CHECK"] = "在施法前检测是否需要净化"
+L["ABOUT_AUTHOREMAIL"] = "作者 E-Mail"
+L["ABOUT_CREDITS"] = "贡献者"
+L["ABOUT_LICENSE"] = "许可"
+L["ABOUT_NOTES"] = "当单独、小队和团队时清除有害状态,并可使用高级过滤和优先等级系统。"
+L["ABOUT_OFFICIALWEBSITE"] = "官方网站"
+L["ABOUT_SHAREDLIBS"] = "共享库"
+L["ABSENT"] = "不存在 (%s)"
+L["AFFLICTEDBY"] = "受%s影响"
+L["ALT"] = "Alt"
+L["AMOUNT_AFFLIC"] = "实时列表显示人数:"
+L["ANCHOR"] = "Decursive 文字定位点"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "显示或隐藏微单元面板(MUF)"
+L["BINDING_NAME_DCRPRADD"] = "将目标加入优先列表"
+L["BINDING_NAME_DCRPRCLEAR"] = "清空优先列表"
+L["BINDING_NAME_DCRPRLIST"] = "显示优先列表明细条目"
+L["BINDING_NAME_DCRPRSHOW"] = "显示/隐藏 优先列表"
+L["BINDING_NAME_DCRSHOW"] = "显示或隐藏一键驱散状态条"
+L["BINDING_NAME_DCRSHOWOPTION"] = "显示选项设置窗口"
+L["BINDING_NAME_DCRSKADD"] = "将目标加入忽略列表"
+L["BINDING_NAME_DCRSKCLEAR"] = "清空忽略列表"
+L["BINDING_NAME_DCRSKLIST"] = "显示忽略列表明细条目"
+L["BINDING_NAME_DCRSKSHOW"] = "显示/隐藏 忽略列表"
+L["BLACK_LENGTH"] = "黑名单持续时间: "
+L["BLACKLISTED"] = "黑名单"
+L["CHARM"] = "魅惑"
+L["CLASS_HUNTER"] = "猎人"
+L["CLEAR_PRIO"] = "C"
+L["CLEAR_SKIP"] = "C"
+L["COLORALERT"] = "预警颜色"
+L["COLORCHRONOS"] = "秒表"
+L["COLORCHRONOS_DESC"] = "设置秒表颜色"
+L["COLORSTATUS"] = "设定当玩家状态是'%s'时微单元面板(MUF)的颜色"
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "检测并净化宠物"
+L["CURSE"] = "诅咒"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33请报告此窗口的内容给 Archarodim+DcrReport@teaser.fr|r
+|cFF009999(使用 CTRL+A 选择所有 CTRL+C 复制文本到剪切板)|r
+如果发现 Decursive 任何奇怪的行为也一并报告。]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Decursive 除错报告|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[一个除错报告可用!输入
+|cFFFF0000/dcr general report|r 查看]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "除错报告可用!"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "显示作者需要看到的除错报告…"
+L["DEFAULT_MACROKEY"] = "`"
+L["DEV_VERSION_ALERT"] = [=[您正在使用的是开发版本的 Decursive 。
+
+如果不想参加测试新功能与修复,得到游戏中的除错报告后发送问题给作者,请“不要使用此版本”并从 curse.com 和 wowace.com 下载最新的“稳定”版本。
+
+这条消息只将在版本更新中显示一次
+
+使用开发版本 Decursive 的玩家开始游戏显示此提示。]=]
+L["DEV_VERSION_EXPIRED"] = [=[此开发版 Decursive 已过期。
+请从 CURSE.COM 或 WOWACE.COM 下载最新的开发版或使用当前稳定版。谢谢! ^_^
+此提示每两天显示一次。
+
+说明:当用户使用过期的开发版 Decursive 登录时每次显示。]=]
+L["DEWDROPISGONE"] = "没有等同于 Ace3 的 DewDrop。Alt+右键点击打开选项面板。"
+L["DISABLEWARNING"] = [=[Decursive 已被禁用!
+
+要重新启用,输入 |cFFFFAA44/DCR ENABLE|r]=]
+L["DISEASE"] = "疾病"
+L["DONOT_BL_PRIO"] = "不将优先列表中的玩家加入黑名单"
+L["FAILEDCAST"] = [=[|cFF22FFFF%s %s|r |cFFAA0000未能施放于|r %s
+|cFF00AAAA%s|r]=]
+L["FOCUSUNIT"] = "焦点单位"
+L["FUBARMENU"] = "FuBar 选项"
+L["FUBARMENU_DESC"] = "FuBar 的相关设定"
+L["GLOR1"] = "纪念 Glorfindal"
+L["GLOR2"] = "献给匆匆离我们而去的 Bertrand;他将永远被我们所铭记。"
+L["GLOR3"] = "纪念 Bertrand(1969-2007)"
+L["GLOR4"] = "对于那些在魔兽世界里遇见过 Glorfindal 的人来说,他是一个重承诺的男人,也是一个有超凡魅力的领袖。友谊和慈爱将永植于他们的心中。他在游戏中就如同在他生活中一样的无私,彬彬有礼,乐于奉献,最重要的是他对生活充满热情。他离开我们的时候才仅仅38岁,随他离去的绝不会是虚拟世界匿名的角色;在这里还有一群忠实的朋友在永远想念他。"
+L["GLOR5"] = "他将永远被我们所铭记。"
+L["HANDLEHELP"] = "拖拽移动 MUF"
+L["HIDE_LIVELIST"] = "隐藏实时列表"
+L["HIDE_MAIN"] = "隐藏状态条"
+L["HIDESHOW_BUTTONS"] = "显示/隐藏按钮"
+L["HLP_LEFTCLICK"] = "鼠标左键"
+L["HLP_LL_ONCLICK_TEXT"] = "由于暴雪禁用函数的缘故,点击实时列表已经不能驱散负面效果了"
+L["HLP_MIDDLECLICK"] = "鼠标中键"
+L["HLP_NOTHINGTOCURE"] = "没有可处理的负面效果!"
+L["HLP_RIGHTCLICK"] = "鼠标右键"
+L["HLP_USEXBUTTONTOCURE"] = "用 \"%s\" 來净化这个负面效果!"
+L["HLP_WRONGMBUTTON"] = "错误的鼠标按键!"
+L["IGNORE_STEALTH"] = "忽略潜行的玩家"
+L["IS_HERE_MSG"] = "一键驱散已经启动,请核对相关设置。"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r+单击:删除
+|cFF33AA33左键|r单击:上移
+|cFF33AA33右键|r单击:下移
+|cFF33AA33[SHIFT]+左键|r单击:移到顶端
+|cFF33AA33[SHIFT]+右键|r单击:移到底端]=]
+L["MACROKEYALREADYMAPPED"] = [=[警告: 一键驱散的宏绑定按键 [%s] 先前绑定到 '%s' 。
+当你设置別的宏按键后一键驱散会恢复此按键原有的动作。]=]
+L["MACROKEYMAPPINGFAILED"] = "按键 [%s] 不能绑定到一键驱散的宏!"
+L["MACROKEYMAPPINGSUCCESS"] = "按键 [%s] 已成功绑定到一键驱散的宏。"
+L["MACROKEYNOTMAPPED"] = "未绑定一键驱散的宏按键,你可以通过设置选项来设置该功能。"
+L["MAGIC"] = "魔法"
+L["MAGICCHARMED"] = "魔法魅惑"
+L["MISSINGUNIT"] = "丢失单位"
+L["NORMAL"] = "一般"
+L["NOSPELL"] = "没有相关技能"
+L["OPT_ABOLISHCHECK_DESC"] = "设置是否显示和净化带有“驱毒术”增益效果的玩家。"
+L["OPT_ABOUT"] = "关于"
+L["OPT_ADDDEBUFF"] = "新增"
+L["OPT_ADDDEBUFF_DESC"] = "向列表中新增一个负面效果。"
+L["OPT_ADDDEBUFFFHIST"] = "新增一个最近受到的负面效果"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "从历史记录中新增一个负面效果"
+L["OPT_ADDDEBUFF_USAGE"] = "<负面效果名称>"
+L["OPT_ADVDISP"] = "高级显示选项"
+L["OPT_ADVDISP_DESC"] = "允许分别设置面板和边框的透明度,以及 MUF 的间距。"
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s受到%s的影响,但将被忽略。"
+L["OPT_ALWAYSIGNORE"] = "不在战斗状态时也忽略"
+L["OPT_ALWAYSIGNORE_DESC"] = "选中后不在状态时此负面效果也会被忽略。"
+L["OPT_AMOUNT_AFFLIC_DESC"] = "设置实时列表显示的最大玩家数目。"
+L["OPT_ANCHOR_DESC"] = "设置自定义信息面板的定位点。"
+L["OPT_AUTOHIDEMFS"] = "自动隐藏"
+L["OPT_AUTOHIDEMFS_DESC"] = "选择何时自动隐藏微单元面板(MUF)"
+L["OPT_BLACKLENTGH_DESC"] = "设置被暂时加入黑名单的玩家在名单中停留的时间。"
+L["OPT_BORDERTRANSP"] = "边框透明度"
+L["OPT_BORDERTRANSP_DESC"] = "设置边框的透明度。"
+L["OPT_CENTERTRANSP"] = "面板透明度"
+L["OPT_CENTERTRANSP_DESC"] = "设置面板的透明度"
+L["OPT_CHARMEDCHECK_DESC"] = "选中后你将可以查看和处理被诱惑的玩家。"
+L["OPT_CHATFRAME_DESC"] = "提示信息将显示在默认聊天窗口中。"
+L["OPT_CHECKOTHERPLAYERS"] = "检查其他玩家"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "显示当前小队或团队玩家 Decursive 版本(不能显示 Decursive 2.4.6之前的版本)。"
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "创建一个虚拟的测试用负面效果"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "让你看看出现负面效果时的界面是什么样子"
+L["OPT_CUREPETS_DESC"] = "宠物也会被检查和净化。"
+L["OPT_CURINGOPTIONS"] = "净化选项"
+L["OPT_CURINGOPTIONS_DESC"] = "关于净化过程的选项设置。"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+选择你想要治疗的伤害类型,未经检查的类型将被 Decursive 完全忽略。
+
+绿色数字确定优先的伤害。这一优先事项将影响几方面:
+- 如果一个玩家获得许多类型的减益效果,Decursive 将优先显示。
+- 鼠标按钮点击将治疗减益(第一法术是左键点击,第二法术是右键点击,等等…)
+
+所有这一切的说明文档(请见):
+http://www.wowace.com/addons/decursive/]=]
+L["OPT_CURINGORDEROPTIONS"] = "净化顺序设置"
+L["OPT_CURSECHECK_DESC"] = "选中后你将可以查看和净化受到诅咒效果影响的玩家。"
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+
+默认被选中
+
+]=]
+L["OPT_DEBUFFENTRY_DESC"] = "选择在战斗中哪些受到此负面效果影响的职业将被忽略。"
+L["OPT_DEBUFFFILTER"] = "负面效果过滤"
+L["OPT_DEBUFFFILTER_DESC"] = "根据名称和职业选择在战斗中要过滤掉的负面效果"
+L["OPT_DISABLEMACROCREATION"] = "禁止创建宏"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Decursive 宏将不再创建和保留"
+L["OPT_DISEASECHECK_DESC"] = "选中后你将可以查看和净化受到疾病效果影响的玩家。"
+L["OPT_DISPLAYOPTIONS"] = "显示选项"
+L["OPT_DONOTBLPRIO_DESC"] = "优先列表中的玩家不会被加入黑名单。"
+L["OPT_ENABLEDEBUG"] = "启用除错"
+L["OPT_ENABLEDEBUG_DESC"] = "启用除错输出"
+L["OPT_ENABLEDECURSIVE"] = "启用 Decursive"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "在战斗中指定的职业%q将被忽略。"
+L["OPT_GENERAL"] = "一般选项"
+L["OPT_GROWDIRECTION"] = "反向显示 MUF"
+L["OPT_GROWDIRECTION_DESC"] = "MUF 将从下向上显示。"
+L["OPT_HIDELIVELIST_DESC"] = "显示所有受到负面效果影响的玩家列表。"
+L["OPT_HIDEMFS_GROUP"] = "单人/小队"
+L["OPT_HIDEMFS_GROUP_DESC"] = "不在团队中时隐藏微单元面板(MUF)"
+L["OPT_HIDEMFS_NEVER"] = "从不"
+L["OPT_HIDEMFS_NEVER_DESC"] = "从不隐藏"
+L["OPT_HIDEMFS_SOLO"] = "单人"
+L["OPT_HIDEMFS_SOLO_DESC"] = "在没有组队或者团队时隐藏微单元面板(MUF)"
+L["OPT_HIDEMUFSHANDLE"] = "隐藏 MUF 表头"
+L["OPT_HIDEMUFSHANDLE_DESC"] = "隐藏微单元面板(MUF)表头并禁止移动。"
+L["OPT_IGNORESTEALTHED_DESC"] = "处于潜行状态的玩家会被忽略。"
+L["OPTION_MENU"] = "选项设置"
+L["OPT_LIVELIST"] = "实时列表"
+L["OPT_LIVELIST_DESC"] = "关于实时列表的选项设置。"
+L["OPT_LLALPHA"] = "实时列表透明度"
+L["OPT_LLALPHA_DESC"] = "改变一键驱散状态条面和实时列表的透明度(状态条必须可见)"
+L["OPT_LLSCALE"] = "设置实时列表缩放比例"
+L["OPT_LLSCALE_DESC"] = "设置状态条以及其实时列表的大小(状态条必须显示)"
+L["OPT_LVONLYINRANGE"] = "只显示法术有效范围内的目标"
+L["OPT_LVONLYINRANGE_DESC"] = "实时列表将只显示法术有效范围内的目标,超出范围的目标将被忽略。"
+L["OPT_MACROBIND"] = "设置宏按键"
+L["OPT_MACROBIND_DESC"] = [=[绑定一键驱散宏的按键。
+
+按你想設定的按键后按 'Enter' 键保存设置(鼠标需要移动到编辑区域之外)]=]
+L["OPT_MACROOPTIONS"] = "宏选项"
+L["OPT_MACROOPTIONS_DESC"] = "有关 Decursive 创建的宏的选项设置"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "选中后你将可以查看和净化受到魔法诱惑效果影响的玩家。"
+L["OPT_MAGICCHECK_DESC"] = "选中后你将可以查看和净化受到不良魔法效果影响的玩家。"
+L["OPT_MAXMFS"] = "最大单位数"
+L["OPT_MAXMFS_DESC"] = "设置在屏幕上显示的MUF的个数。"
+L["OPT_MESSAGES"] = "信息设置"
+L["OPT_MESSAGES_DESC"] = "关于提示信息的选项设置。"
+L["OPT_MFALPHA"] = "透明度"
+L["OPT_MFALPHA_DESC"] = "定义玩家没有受到负面效果影响时MUF的透明度。"
+L["OPT_MFPERFOPT"] = "性能选项"
+L["OPT_MFREFRESHRATE"] = "刷新率"
+L["OPT_MFREFRESHRATE_DESC"] = "每两次刷新之间的时间间隔"
+L["OPT_MFREFRESHSPEED"] = "刷新速度"
+L["OPT_MFREFRESHSPEED_DESC"] = "设置每次刷新多少个MUF。"
+L["OPT_MFSCALE"] = "MUF 缩放比例"
+L["OPT_MFSCALE_DESC"] = "设置微单元面板(MUF)的大小。"
+L["OPT_MFSETTINGS"] = "微单元面板(MUF)选项"
+L["OPT_MFSETTINGS_DESC"] = "关于微单元面板(MUF)的选项设置。"
+L["OPT_MUFFOCUSBUTTON"] = "焦点按钮:"
+L["OPT_MUFMOUSEBUTTONS"] = "鼠标按钮"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "设置每个 MUF 鼠标按钮的警报颜色。"
+L["OPT_MUFSCOLORS"] = "颜色"
+L["OPT_MUFSCOLORS_DESC"] = "更改关于微单元面板(MUF)的颜色"
+L["OPT_MUFTARGETBUTTON"] = "目标按钮:"
+L["OPT_NOKEYWARN"] = "没有映射按键"
+L["OPT_NOKEYWARN_DESC"] = "没有映射按键"
+L["OPT_NOSTARTMESSAGES"] = "禁用欢迎信息"
+L["OPT_NOSTARTMESSAGES_DESC"] = "移除每次登陆时在聊天框体显示的三个 Decursive 信息。"
+L["OPT_PLAYSOUND_DESC"] = "有玩家受到负面效果影响时播放声音提示。"
+L["OPT_POISONCHECK_DESC"] = "选中后你将可以查看和净化受到中毒效果影响的玩家。"
+L["OPT_PRINT_CUSTOM_DESC"] = "提示信息将显示在自定义聊天窗口中。"
+L["OPT_PRINT_ERRORS_DESC"] = "错误信息将被显示。"
+L["OPT_PROFILERESET"] = "正在重置选项设置方案……"
+L["OPT_RANDOMORDER_DESC"] = "随机净化玩家(不推荐使用)。"
+L["OPT_READDDEFAULTSD"] = "重新加入缺省负面效果"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[向列表中加入所有缺失的默认负面效果。
+你的自定义项目不会丢失]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "所有缺省负面效果都已加入列表。"
+L["OPT_REMOVESKDEBCONF"] = [=[你确定要将“%s”
+从不良状态忽略列表中删除吗?]=]
+L["OPT_REMOVETHISDEBUFF"] = "删除"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "从忽略列表中删除“%s”。"
+L["OPT_RESETDEBUFF"] = "重置"
+L["OPT_RESETDTDCRDEFAULT"] = [=[将
+%s
+恢复默认值。]=]
+L["OPT_RESETMUFMOUSEBUTTONS"] = "重置"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "重置鼠标按钮指派为默认。"
+L["OPT_RESETOPTIONS"] = "恢复默认设置"
+L["OPT_RESETOPTIONS_DESC"] = "将当前选项设置方案恢复到默认值"
+L["OPT_RESTPROFILECONF"] = "你确定要将选项设置方案“(%s) %s”恢复默认值吗?"
+L["OPT_REVERSE_LIVELIST_DESC"] = "实时列表将从下往上显示。"
+L["OPT_SCANLENGTH_DESC"] = "设置实时检测的时间间隔。"
+L["OPT_SHOWBORDER"] = "显示职业彩色边框"
+L["OPT_SHOWBORDER_DESC"] = "MUF 边框将会显示出代表该玩家职业的颜色。"
+L["OPT_SHOWCHRONO"] = "显示计时"
+L["OPT_SHOWCHRONO_DESC"] = "显示单位受到不良效果的时间"
+L["OPT_SHOWCHRONOTIMElEFT"] = "剩余时间"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "显示剩余时间而不是消耗时间。"
+L["OPT_SHOWHELP"] = "显示帮助信息"
+L["OPT_SHOWHELP_DESC"] = "当鼠标移动到 MUF 上时显示信息提示窗口。"
+L["OPT_SHOWMFS"] = "在屏幕上显示 MUF"
+L["OPT_SHOWMFS_DESC"] = "如果你要打地鼠就必須选择这项。"
+L["OPT_SHOWMINIMAPICON"] = "迷你地图图标"
+L["OPT_SHOWMINIMAPICON_DESC"] = "开启或关闭迷你地图图标。"
+L["OPT_SHOW_STEALTH_STATUS"] = "显示潜行状态"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = "当玩家前行时,他的 MUF 将有一个特殊的颜色"
+L["OPT_SHOWTOOLTIP_DESC"] = "在实时列表以及微单元面板(MUF)上显示信息提示。"
+L["OPT_STICKTORIGHT"] = "将微单元面板(MUF)向右对齐"
+L["OPT_STICKTORIGHT_DESC"] = "这个选项将会使微单元面板(MUF)向右对齐"
+L["OPT_TESTLAYOUT"] = "测试布局"
+L["OPT_TESTLAYOUT_DESC"] = [=[新建测试单位以测试显示布局。
+(点击后稍等片刻)]=]
+L["OPT_TESTLAYOUTUNUM"] = "单位数字"
+L["OPT_TESTLAYOUTUNUM_DESC"] = "设置新建测试单位数字。"
+L["OPT_TIECENTERANDBORDER"] = "绑定面板和边框的透明度"
+L["OPT_TIECENTERANDBORDER_OPT"] = "选中时边框的透明度为面板的一半。"
+L["OPT_TIE_LIVELIST_DESC"] = "实时列表将和状态条一起 显示/隐藏。"
+L["OPT_TIEXYSPACING"] = "绑定水平和垂直间距。"
+L["OPT_TIEXYSPACING_DESC"] = "MUF 之间的水平和垂直间距相同。"
+L["OPT_UNITPERLINES"] = "每行单位数"
+L["OPT_UNITPERLINES_DESC"] = "设置每行最多可显示单元面板(MUF)的个数。"
+L["OPT_USERDEBUFF"] = "该负面效果不是<一键驱散>预设的效果之一"
+L["OPT_XSPACING"] = "水平距离"
+L["OPT_XSPACING_DESC"] = "设置 MUF 间的水平距离。"
+L["OPT_YSPACING"] = "垂直距离"
+L["OPT_YSPACING_DESC"] = "设置 MUF 间的垂直距离。"
+L["PLAY_SOUND"] = "有玩家需要净化时播放声音提示"
+L["POISON"] = "中毒"
+L["POPULATE"] = "p"
+L["POPULATE_LIST"] = "列表快速添加器"
+L["PRINT_CHATFRAME"] = "在聊天窗口显示信息"
+L["PRINT_CUSTOM"] = "在游戏画面显示信息"
+L["PRINT_ERRORS"] = "显示错误信息"
+L["PRIORITY_LIST"] = "设置 优先列表"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "随机净化玩家"
+L["REVERSE_LIVELIST"] = "反向显示实时列表"
+L["SCAN_LENGTH"] = "实时检测时间间隔(秒):"
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "如果需要显示状态条,请输入 /dcrshow。"
+L["SHOW_TOOLTIP"] = "在实时列表中显示信息提示"
+L["SKIP_LIST_STR"] = "Decursive 忽略列表"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "找到%s法术!"
+L["STEALTHED"] = "已潜行"
+L["STR_CLOSE"] = "关闭"
+L["STR_DCR_PRIO"] = "Decursive 优先"
+L["STR_DCR_SKIP"] = "Decursive 忽略"
+L["STR_GROUP"] = "小队"
+L["STR_OPTIONS"] = "Decursive 选项"
+L["STR_OTHER"] = "其他"
+L["STR_POP"] = "快速添加列表"
+L["STR_QUICK_POP"] = "快速添加器"
+L["SUCCESSCAST"] = "%s %s|cFF00AA00成功施放于|r|cFF22FFFF %s|r。"
+L["TARGETUNIT"] = "设为目标"
+L["TIE_LIVELIST"] = "根据状态条是否可见 显示/隐藏 实时列表"
+L["TOOFAR"] = "太远"
+L["UNITSTATUS"] = "玩家状态:"
+
+
+
+T._LoadedFiles["zhCN.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/Localization/zhTW.lua b/Decursive/Localization/zhTW.lua
new file mode 100644
index 0000000..cd2a6cc
--- /dev/null
+++ b/Decursive/Localization/zhTW.lua
@@ -0,0 +1,382 @@
+--[[
+ This file is part of Decursive.
+
+ Decursive (v 2.5.1-6-gd3885c5) add-on for World of Warcraft UI
+ Copyright (C) 2006-2007-2008-2009 John Wellesz (archarodim AT teaser.fr) ( http://www.2072productions.com/?to=decursive.php )
+
+ This is the continued work of the original Decursive (v1.9.4) by Quu
+ "Decursive 1.9.4" is in public domain ( www.quutar.com )
+
+ Decursive is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Decursive is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Decursive. If not, see .
+--]]
+
+-------------------------------------------------------------------------------
+-- Traditional Chinese localization
+-------------------------------------------------------------------------------
+
+--[=[
+-- YOUR ATTENTION PLEASE
+--
+-- !!!!!!! TRANSLATORS TRANSLATORS TRANSLATORS !!!!!!!
+--
+-- Thank you very much for your interest in translating Decursive.
+-- Do not edit those files. Use the localization interface available at the following address:
+--
+-- ################################################################
+-- # http://wow.curseforge.com/projects/decursive/localization/ #
+-- ################################################################
+--
+-- Your translations made using this interface will be automatically included in the next release.
+--
+--]=]
+
+local addonName, T = ...;
+-- big ugly scary fatal error message display function {{{
+if not T._FatalError then
+-- the beautiful error popup : {{{ -
+StaticPopupDialogs["DECURSIVE_ERROR_FRAME"] = {
+ text = "|cFFFF0000Decursive Error:|r\n%s",
+ button1 = "OK",
+ OnAccept = function()
+ return false;
+ end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1,
+ showAlert = 1,
+ }; -- }}}
+T._FatalError = function (TheError) StaticPopup_Show ("DECURSIVE_ERROR_FRAME", TheError); end
+end
+-- }}}
+if not T._LoadedFiles or not T._LoadedFiles["enUS.lua"] then
+ if not DecursiveInstallCorrupted then T._FatalError("Decursive installation is corrupted! (enUS.lua not loaded)"); end;
+ DecursiveInstallCorrupted = true;
+ return;
+end
+
+local L = LibStub("AceLocale-3.0"):NewLocale("Decursive", "zhTW");
+
+if not L then
+ T._LoadedFiles["zhTW.lua"] = "2.5.1-6-gd3885c5";
+ return;
+end;
+
+L["ABOLISH_CHECK"] = "施法前檢查是否需要淨化"
+L["ABOUT_AUTHOREMAIL"] = "作者 E-Mail"
+L["ABOUT_CREDITS"] = "貢獻者"
+L["ABOUT_LICENSE"] = "許可"
+L["ABOUT_NOTES"] = "當單獨、小隊和團隊時清除有害狀態,並可使用高級過濾和優先等級系統。"
+L["ABOUT_OFFICIALWEBSITE"] = "官方網站"
+L["ABOUT_SHAREDLIBS"] = "共享庫"
+L["ABSENT"] = "不存在 (%s)"
+L["AFFLICTEDBY"] = "受 %s 影響"
+L["ALT"] = "ALt"
+L["AMOUNT_AFFLIC"] = "即時清單顯示人數: "
+L["ANCHOR"] = "Decursive 文字定位點"
+L["BINDING_NAME_DCRMUFSHOWHIDE"] = "顯示或隱藏 MUF"
+L["BINDING_NAME_DCRPRADD"] = "添加目標至優先名單"
+L["BINDING_NAME_DCRPRCLEAR"] = "清空優先名單"
+L["BINDING_NAME_DCRPRLIST"] = "顯示優先名單至聊天視窗"
+L["BINDING_NAME_DCRPRSHOW"] = "開/關優先名單"
+L["BINDING_NAME_DCRSHOW"] = "顯示或隱藏 Decursive 工作條"
+L["BINDING_NAME_DCRSHOWOPTION"] = "顯示靜態設定選單"
+L["BINDING_NAME_DCRSKADD"] = "添加目標至忽略名單"
+L["BINDING_NAME_DCRSKCLEAR"] = "清空忽略名單"
+L["BINDING_NAME_DCRSKLIST"] = "顯示忽略名單至聊天視窗"
+L["BINDING_NAME_DCRSKSHOW"] = "開/關忽略名單"
+L["BLACK_LENGTH"] = "停留在排除名單的時間: "
+L["BLACKLISTED"] = "在排除名單"
+L["CHARM"] = "魅惑"
+L["CLASS_HUNTER"] = "獵人"
+L["CLEAR_PRIO"] = "C"
+L["CLEAR_SKIP"] = "C"
+L["COLORALERT"] = "設定按鍵警示'%s'的顏色"
+L["COLORCHRONOS"] = "秒錶"
+L["COLORCHRONOS_DESC"] = "設定秒錶顏色"
+L["COLORSTATUS"] = "設定當玩家狀態是 '%s' 時的 MUF 顏色."
+L["CTRL"] = "Ctrl"
+L["CURE_PETS"] = "檢測並淨化寵物"
+L["CURSE"] = "詛咒"
+L["DEBUG_REPORT_HEADER"] = [=[|cFF11FF33請報告此視窗的內容給 Archarodim+DcrReport@teaser.fr|r
+|cFF009999(使用 CTRL+A 選擇所有 CTRL+C 復制文本到剪切板)|r
+如果發現 Decursive 任何奇怪的行為也一并報告。]=]
+L["DECURSIVE_DEBUG_REPORT"] = "**** |cFFFF0000Decursive 除錯報告|r ****"
+L["DECURSIVE_DEBUG_REPORT_NOTIFY"] = [=[一個出錯報告可用!
+輸入 |cFFFF0000/dcr general report|r 查看]=]
+L["DECURSIVE_DEBUG_REPORT_SHOW"] = "除錯報告可用!"
+L["DECURSIVE_DEBUG_REPORT_SHOW_DESC"] = "顯示作者需要看到的除錯報告…"
+L["DEFAULT_MACROKEY"] = "NONE"
+L["DEV_VERSION_ALERT"] = [=[您正在使用的是開發版本的 Decursive 。
+
+如果不想參加測試新功能與修復,得到遊戲中的除錯報告后發送問題給作者,請“不要使用此版本”並從 curse.com 和 wowace.com 下載最新的“穩定”版本。
+
+這條消息只將在版本更新中顯示一次
+
+使用開發版本 Decursive 的玩家開始遊戲顯示此提示。]=]
+L["DEV_VERSION_EXPIRED"] = [=[此開發版 Decursive 已過期。
+請從 CURSE.COM 和 WOWACE.COM 下載最新的開發版或使用當前穩定版。謝謝! ^_^
+此提示每兩天顯示一次。
+
+說明:當用戶使用過期的開發版 Decursive 登錄時每次顯示。]=]
+L["DEWDROPISGONE"] = "沒有等同于 Ace3 的 DewDrop。Alt+點擊右鍵打開選項面板。"
+L["DISABLEWARNING"] = [=[Decursive 已停用!
+
+如欲啟用, 輸入 |cFFFFAA44/DCR ENABLE|r]=]
+L["DISEASE"] = "疾病"
+L["DONOT_BL_PRIO"] = "不添加優先名單的玩家到排除名單"
+L["FAILEDCAST"] = "|cFF22FFFF%s %s|r |cFFAA0000對|r %s釋放失敗\\n|cFF00AAAA%s|r"
+L["FOCUSUNIT"] = "監控單位"
+L["FUBARMENU"] = "Fubar 選單"
+L["FUBARMENU_DESC"] = "Fubar 圖示相關設定"
+L["GLOR1"] = "紀念 Glorfindal"
+L["GLOR2"] = "獻給匆匆離我們而去的Bertrand;他將永遠被我們所銘記。"
+L["GLOR3"] = "紀念 Bertrand (1969~2007)"
+L["GLOR4"] = "對於那些在魔獸世界裡遇見過Glorfindal的人來說,他是一個重承諾的男人,也是一個有超凡魅力的領袖。友誼和慈愛將永植於他們的心中。他在遊戲中就如同在他生活中一樣的無私,彬彬有禮,樂於奉獻,最重要的是他對生活充滿熱情。他離開我們的時候才僅僅38歲,隨他離去的絕不會是虛擬世界匿名的角色;在這裡還有一群忠實的朋友在永遠想念他。"
+L["GLOR5"] = "他將永遠被我們所銘記。"
+L["HANDLEHELP"] = "拖曳移動所有的 Micro-UnitFrames (MUFs)"
+L["HIDE_LIVELIST"] = "隱藏即時清單"
+L["HIDE_MAIN"] = "隱藏 Decursive 視窗"
+L["HIDESHOW_BUTTONS"] = "顯示/隱藏按鈕"
+L["HLP_LEFTCLICK"] = "左-鍵"
+L["HLP_LL_ONCLICK_TEXT"] = "你不可以用點擊即時選單的方式解魔(因為相關的程式介面已經被封鎖),請用微縮圖像以打地鼠的方式解魔,如果你沒看見微縮圖像的話,請先檢察 Decursive 的設定。"
+L["HLP_MIDDLECLICK"] = "中-鍵"
+L["HLP_NOTHINGTOCURE"] = "沒有可處理的負面效果!"
+L["HLP_RIGHTCLICK"] = "右-鍵"
+L["HLP_USEXBUTTONTOCURE"] = "用 \"%s\" 來淨化這個負面效果!"
+L["HLP_WRONGMBUTTON"] = "錯誤的滑鼠按鍵!"
+L["IGNORE_STEALTH"] = "忽略潛行的玩家"
+L["IS_HERE_MSG"] = "Decursive 已經啟動,請核對設定選項。"
+L["LIST_ENTRY_ACTIONS"] = [=[|cFF33AA33[CTRL]|r-左鍵: 移除該玩家
+ |cFF33AA33左|r-鍵: 提升該玩家順序
+ |cFF33AA33右|r-鍵: 降低該玩家順序
+ |cFF33AA33[SHIFT] 左|r-鍵: 將該玩家置頂
+ |cFF33AA33[SHIFT] 右|r-鍵: 將該玩家置底]=]
+L["MACROKEYALREADYMAPPED"] = [=[警告: Decursive 巨集對應按鍵 [%s] 先前對應到 '%s' 動作。
+當你設定別的巨集按鍵後 Decursive 會回復此按鍵原有的對應動作。]=]
+L["MACROKEYMAPPINGFAILED"] = "按鍵 [%s] 不能被對應到 Decursive 巨集!"
+L["MACROKEYMAPPINGSUCCESS"] = "按鍵 [%s] 已成功對應到 Decursive 巨集。"
+L["MACROKEYNOTMAPPED"] = "Decursive 巨集未對應到一個按鍵,你可以透過設定選單來設定此一按鍵。(別錯過這個神奇的功能)"
+L["MAGIC"] = "魔法"
+L["MAGICCHARMED"] = "魔法誘惑"
+L["MISSINGUNIT"] = "找不到的單位"
+L["NORMAL"] = "一般"
+L["NOSPELL"] = "沒有可用法術"
+L["OPT_ABOLISHCHECK_DESC"] = "檢查玩家身上是否有淨化法術在運作。"
+L["OPT_ABOUT"] = "關於"
+L["OPT_ADDDEBUFF"] = "添加一負面效果到清單中"
+L["OPT_ADDDEBUFF_DESC"] = "將一個新的負面效果新增到清單中。"
+L["OPT_ADDDEBUFFFHIST"] = "新增一個最近受到的負面效果"
+L["OPT_ADDDEBUFFFHIST_DESC"] = "從歷史紀錄中新增一個負面效果"
+L["OPT_ADDDEBUFF_USAGE"] = ""
+L["OPT_ADVDISP"] = "進階顯示選項"
+L["OPT_ADVDISP_DESC"] = "可設定邊框與中央色塊各自的透明度,以及 MUFs 之間的距離。"
+L["OPT_AFFLICTEDBYSKIPPED"] = "%s 受到 %s 的影響,但將被忽略。"
+L["OPT_ALWAYSIGNORE"] = "即使不在戰鬥中也忽略之"
+L["OPT_ALWAYSIGNORE_DESC"] = "如果選取該選項,即使脫離戰鬥也忽略該負面效果而不解除"
+L["OPT_AMOUNT_AFFLIC_DESC"] = "設定即時清單最多顯示幾人。"
+L["OPT_ANCHOR_DESC"] = "顯示自訂視窗的文字定位點。"
+L["OPT_AUTOHIDEMFS"] = "自動隱藏"
+L["OPT_AUTOHIDEMFS_DESC"] = "選擇什麼時候隱藏 MUF 視窗"
+L["OPT_BLACKLENTGH_DESC"] = "設定一個人停留在排除名單中的時間。"
+L["OPT_BORDERTRANSP"] = "邊框透明度"
+L["OPT_BORDERTRANSP_DESC"] = "設定邊框的透明度。"
+L["OPT_CENTERTRANSP"] = "中央透明度"
+L["OPT_CENTERTRANSP_DESC"] = "設定中間色塊的透明度"
+L["OPT_CHARMEDCHECK_DESC"] = "選取後你可以看見並處理被媚惑的玩家。"
+L["OPT_CHATFRAME_DESC"] = "顯示到預設的聊天視窗。"
+L["OPT_CHECKOTHERPLAYERS"] = "檢查其他玩家"
+L["OPT_CHECKOTHERPLAYERS_DESC"] = "顯示當前小隊或團隊玩家 Decursive 版本(不能顯示 Decursive 2.4.6之前的版本)。"
+L["OPT_CREATE_VIRTUAL_DEBUFF"] = "建立虛擬負面效果測試"
+L["OPT_CREATE_VIRTUAL_DEBUFF_DESC"] = "讓你看到當負面效果發生時的情形"
+L["OPT_CUREPETS_DESC"] = "寵物會被顯示出來也可淨化。"
+L["OPT_CURINGOPTIONS"] = "淨化選項"
+L["OPT_CURINGOPTIONS_DESC"] = "設定淨化選項。"
+L["OPT_CURINGOPTIONS_EXPLANATION"] = [=[
+選擇你想要治療的傷害類型,未經檢查的類型將被 Decursive 完全忽略。
+
+綠色數字確定優先的傷害。這一優先事項將影響幾方面:
+- 如果一個玩家獲得許多類型的減益效果,Decursive 將優先顯示。
+- 滑鼠按鈕點擊將治療減益(第一法術是左鍵點擊,第二法術是右鍵點擊,等等…)
+
+所有這一切的說明文檔(請見):
+http://www.wowace.com/addons/decursive/]=]
+L["OPT_CURINGORDEROPTIONS"] = "淨化順序設定"
+L["OPT_CURSECHECK_DESC"] = "選取後你可以看見並解除被詛咒的玩家。"
+L["OPT_DEBCHECKEDBYDEF"] = [=[
+
+Checked by default]=]
+L["OPT_DEBUFFENTRY_DESC"] = "選擇戰鬥中要忽略受到此負面效果影響的職業。"
+L["OPT_DEBUFFFILTER"] = "負面效果過濾設定"
+L["OPT_DEBUFFFILTER_DESC"] = "設定戰鬥中要忽略的職業與負面效果"
+L["OPT_DISABLEMACROCREATION"] = "禁止創建巨集"
+L["OPT_DISABLEMACROCREATION_DESC"] = "Decursive 巨集將不再創建和保留"
+L["OPT_DISEASECHECK_DESC"] = "選取後你可以看見並治療生病的玩家。"
+L["OPT_DISPLAYOPTIONS"] = "顯示設定"
+L["OPT_DONOTBLPRIO_DESC"] = "設定到優先清單的玩家不會被移入排除清單中。"
+L["OPT_ENABLEDEBUG"] = "啟用除錯"
+L["OPT_ENABLEDEBUG_DESC"] = "啟用除錯輸出"
+L["OPT_ENABLEDECURSIVE"] = "啟用 Decursive"
+L["OPT_FILTEROUTCLASSES_FOR_X"] = "在戰鬥中指定的職業%q將被忽略。"
+L["OPT_GENERAL"] = "一般選項"
+L["OPT_GROWDIRECTION"] = "反向顯示 MUFs"
+L["OPT_GROWDIRECTION_DESC"] = "MUFs 會從尾巴開始顯示。"
+L["OPT_HIDELIVELIST_DESC"] = "如果未被隱藏則顯示清單,列出中了負面效果的人。"
+L["OPT_HIDEMFS_GROUP"] = "單獨 / 小隊"
+L["OPT_HIDEMFS_GROUP_DESC"] = "當不在團隊中的時候隱藏 MUF 視窗"
+L["OPT_HIDEMFS_NEVER"] = "從不"
+L["OPT_HIDEMFS_NEVER_DESC"] = "從不自動隱藏 MUF 視窗"
+L["OPT_HIDEMFS_SOLO"] = "單獨"
+L["OPT_HIDEMFS_SOLO_DESC"] = "當不在團隊中或隊伍中的時候隱藏 MUF 視窗"
+L["OPT_HIDEMUFSHANDLE"] = "隱藏 MUF 表頭"
+L["OPT_HIDEMUFSHANDLE_DESC"] = "隱藏微單元面板(MUF)表頭並禁止移動。"
+L["OPT_IGNORESTEALTHED_DESC"] = "忽略潛行的玩家。"
+L["OPTION_MENU"] = "Decursive 選項"
+L["OPT_LIVELIST"] = "即時清單"
+L["OPT_LIVELIST_DESC"] = "即時清單設定選項。"
+L["OPT_LLALPHA"] = "實況清單的透明度"
+L["OPT_LLALPHA_DESC"] = "變更 Decursive 工作條及實況清單的透明度(工作條必須設定為顯示)"
+L["OPT_LLSCALE"] = "縮放即時列表"
+L["OPT_LLSCALE_DESC"] = "設定 Decursive 狀態條以及其即時列表的大小(狀態條必須顯示)"
+L["OPT_LVONLYINRANGE"] = "只顯示法術有效範圍內的目標"
+L["OPT_LVONLYINRANGE_DESC"] = "即時清單只顯示淨化法術有效範圍內的目標。"
+L["OPT_MACROBIND"] = "設定巨集按鍵"
+L["OPT_MACROBIND_DESC"] = [=[定義呼叫 Decursive 巨集的按鍵。
+
+按你想設定的按鍵然後按 'Enter' 鍵儲存設定(滑鼠要移動到編輯區域)]=]
+L["OPT_MACROOPTIONS"] = "巨集設定選項"
+L["OPT_MACROOPTIONS_DESC"] = "設定 Decursive 產生的巨集如何動作"
+L["OPT_MAGICCHARMEDCHECK_DESC"] = "選取後你可以看見並處理被魔法媚惑的玩家。"
+L["OPT_MAGICCHECK_DESC"] = "選取後你可以看見並處理受魔法影響的玩家。"
+L["OPT_MAXMFS"] = "最多顯示幾個"
+L["OPT_MAXMFS_DESC"] = "設定在螢幕上最多顯示幾個 micro unit frames。"
+L["OPT_MESSAGES"] = "訊息設定"
+L["OPT_MESSAGES_DESC"] = "設定訊息顯示。"
+L["OPT_MFALPHA"] = "透明度"
+L["OPT_MFALPHA_DESC"] = "設定無 debuff 時 MUFs 的透明度。"
+L["OPT_MFPERFOPT"] = "效能設定選項"
+L["OPT_MFREFRESHRATE"] = "刷新頻率"
+L["OPT_MFREFRESHRATE_DESC"] = "設定多久刷新一次(一次可刷新一個或數個 micro-unit-frames)。"
+L["OPT_MFREFRESHSPEED"] = "刷新速度"
+L["OPT_MFREFRESHSPEED_DESC"] = "設定每次刷新多少個 micro-unit-frames。"
+L["OPT_MFSCALE"] = "micro-unit-frames 大小"
+L["OPT_MFSCALE_DESC"] = "設定螢幕上 micro-unit-frames 的大小。"
+L["OPT_MFSETTINGS"] = "Micro Unit Frame 設定選項"
+L["OPT_MFSETTINGS_DESC"] = "設定 MUF 視窗以符合你的需求。"
+L["OPT_MUFFOCUSBUTTON"] = "監控按鈕:"
+L["OPT_MUFMOUSEBUTTONS"] = "滑鼠按鈕"
+L["OPT_MUFMOUSEBUTTONS_DESC"] = "設定每個 MUF 滑鼠按鈕的警報顏色。"
+L["OPT_MUFSCOLORS"] = "顏色"
+L["OPT_MUFSCOLORS_DESC"] = "變更 MUFs 的顏色"
+L["OPT_MUFTARGETBUTTON"] = "目標按鈕:"
+L["OPT_NOKEYWARN"] = "當沒有設定按鍵時警告"
+L["OPT_NOKEYWARN_DESC"] = "當巨集按鍵沒有設定時顯示警告"
+L["OPT_NOSTARTMESSAGES"] = "禁用歡迎訊息"
+L["OPT_NOSTARTMESSAGES_DESC"] = "移除每次登陸時在聊天框體顯示的三個 Decursive 訊息。"
+L["OPT_PLAYSOUND_DESC"] = "有玩家中了負面效果時發出音效。"
+L["OPT_POISONCHECK_DESC"] = "選取後你可以看見並清除中毒的玩家。"
+L["OPT_PRINT_CUSTOM_DESC"] = "顯示到自訂的聊天視窗。"
+L["OPT_PRINT_ERRORS_DESC"] = "顯示錯誤訊息。"
+L["OPT_PROFILERESET"] = "重置設定檔..."
+L["OPT_RANDOMORDER_DESC"] = "隨機顯示與淨化玩家(不推薦使用)。"
+L["OPT_READDDEFAULTSD"] = "回復預設負面效果"
+L["OPT_READDDEFAULTSD_DESC1"] = [=[添加被移除的預設負面效果
+你的設定不會被改變。]=]
+L["OPT_READDDEFAULTSD_DESC2"] = "所有的預設負面效果都在此清單中。"
+L["OPT_REMOVESKDEBCONF"] = [=[你確定要把
+ '%s'
+ 從負面效果忽略清單中移除?]=]
+L["OPT_REMOVETHISDEBUFF"] = "移除此負面效果"
+L["OPT_REMOVETHISDEBUFF_DESC"] = "將 '%s' 從忽略清單移除。"
+L["OPT_RESETDEBUFF"] = "重置此負面效果"
+L["OPT_RESETDTDCRDEFAULT"] = "重置 '%s' 為 Decursive 預設值。"
+L["OPT_RESETMUFMOUSEBUTTONS"] = "重置"
+L["OPT_RESETMUFMOUSEBUTTONS_DESC"] = "重置滑鼠按鈕指派為默認。"
+L["OPT_RESETOPTIONS"] = "重置為原始設定"
+L["OPT_RESETOPTIONS_DESC"] = "回復目前的設定檔為原始設定"
+L["OPT_RESTPROFILECONF"] = [=[你確定要重置
+ '(%s) %s'
+ 為原始設定?]=]
+L["OPT_REVERSE_LIVELIST_DESC"] = "由下到上填滿即時清單。"
+L["OPT_SCANLENGTH_DESC"] = "設定掃描時間間隔。"
+L["OPT_SHOWBORDER"] = "顯示職業顏色邊框"
+L["OPT_SHOWBORDER_DESC"] = "MUFs 邊框會顯示出該玩家的職業代表顏色。"
+L["OPT_SHOWCHRONO"] = "顯示負面效果持續時間"
+L["OPT_SHOWCHRONO_DESC"] = "在 MUFs 上顯示負面效果持續的秒數"
+L["OPT_SHOWCHRONOTIMElEFT"] = "剩餘時間"
+L["OPT_SHOWCHRONOTIMElEFT_DESC"] = "顯示剩餘時間而不是消耗時間。"
+L["OPT_SHOWHELP"] = "顯示小提示"
+L["OPT_SHOWHELP_DESC"] = "當滑鼠移到一個 micro-unit-frame 上時顯示小提示。"
+L["OPT_SHOWMFS"] = "在螢幕上顯示 micro units Frame (MUF)"
+L["OPT_SHOWMFS_DESC"] = "如果你要在螢幕上按按鍵清除就必須點選這個設定。"
+L["OPT_SHOWMINIMAPICON"] = "迷你地圖圖標"
+L["OPT_SHOWMINIMAPICON_DESC"] = "啟用迷你地圖小圖示。"
+L["OPT_SHOW_STEALTH_STATUS"] = "顯示潛行狀態"
+L["OPT_SHOW_STEALTH_STATUS_DESC"] = [=[當玩家前行時,他的 MUF 將有一個特殊的顏色
+描述 SHOW_STEALTH_STATUS 選項]=]
+L["OPT_SHOWTOOLTIP_DESC"] = "在即時清單跟 MUFs 上顯示負面效果的小提示。"
+L["OPT_STICKTORIGHT"] = "將 MUF 視窗向右對齊"
+L["OPT_STICKTORIGHT_DESC"] = "設定這個選項將會使 MUF 視窗由右邊向左邊成長"
+L["OPT_TESTLAYOUT"] = "測試布局"
+L["OPT_TESTLAYOUT_DESC"] = [=[新建測試單位以測試顯示布局。
+(點擊後稍等片刻)]=]
+L["OPT_TESTLAYOUTUNUM"] = "單位數字"
+L["OPT_TESTLAYOUTUNUM_DESC"] = "設定新建測試單位數字。"
+L["OPT_TIECENTERANDBORDER"] = "固定 MUF 中央與邊框的透明度"
+L["OPT_TIECENTERANDBORDER_OPT"] = "選取時邊界的透明度固定為中央的一半。"
+L["OPT_TIE_LIVELIST_DESC"] = "即時清單顯示與否取決於 \"Decursive\" 工作條是否顯示。"
+L["OPT_TIEXYSPACING"] = "固定水平與垂直距離。"
+L["OPT_TIEXYSPACING_DESC"] = "固定 MUFs 之間的水平與垂直距離(空白)。"
+L["OPT_UNITPERLINES"] = "每一行幾個 MUF"
+L["OPT_UNITPERLINES_DESC"] = "設定每行最多顯示幾個 micro-unit- frames。"
+L["OPT_USERDEBUFF"] = "這項負面效果不是 Decursive 預設的效果之一"
+L["OPT_XSPACING"] = "水平距離"
+L["OPT_XSPACING_DESC"] = "設定 MUFs 之間的水平距離。"
+L["OPT_YSPACING"] = "垂直距離"
+L["OPT_YSPACING_DESC"] = "設定 MUFs 之間的垂直距離。"
+L["PLAY_SOUND"] = "有玩家需要淨化時發出音效"
+L["POISON"] = "中毒"
+L["POPULATE"] = "p"
+L["POPULATE_LIST"] = "Decursive 名單快速添加介面"
+L["PRINT_CHATFRAME"] = "在聊天視窗顯示訊息"
+L["PRINT_CUSTOM"] = "在遊戲畫面中顯示訊息"
+L["PRINT_ERRORS"] = "顯示錯誤訊息"
+L["PRIORITY_LIST"] = "Decursive 優先名單"
+L["PRIORITY_SHOW"] = "P"
+L["RANDOM_ORDER"] = "隨機淨化玩家"
+L["REVERSE_LIVELIST"] = "反向顯示即時清單"
+L["SCAN_LENGTH"] = "即時檢測時間間隔(秒): "
+L["SHIFT"] = "Shift"
+L["SHOW_MSG"] = "要顯示 Decursive 視窗,請輸入 /dcrshow。"
+L["SHOW_TOOLTIP"] = "在即時清單顯示簡要說明"
+L["SKIP_LIST_STR"] = "Decursive 忽略名單"
+L["SKIP_SHOW"] = "S"
+L["SPELL_FOUND"] = "找到 %s 法術"
+L["STEALTHED"] = "已潛行"
+L["STR_CLOSE"] = "關閉"
+L["STR_DCR_PRIO"] = "Decursive 優先選單"
+L["STR_DCR_SKIP"] = "Decursive 忽略選單"
+L["STR_GROUP"] = "隊伍 "
+L["STR_OPTIONS"] = "Decursive 設定選項"
+L["STR_OTHER"] = "其他"
+L["STR_POP"] = "快速添加清單"
+L["STR_QUICK_POP"] = "快速添加介面"
+L["SUCCESSCAST"] = "|cFF22FFFF%s %s|r |cFF00AA00成功淨化|r %s"
+L["TARGETUNIT"] = "選取目標"
+L["TIE_LIVELIST"] = "即時清單顯示與 DCR 視窗連結"
+L["TOOFAR"] = "太遠"
+L["UNITSTATUS"] = "玩家狀態: "
+
+
+
+T._LoadedFiles["zhTW.lua"] = "2.5.1-6-gd3885c5";
diff --git a/Decursive/OldChangeLog.txt b/Decursive/OldChangeLog.txt
new file mode 100644
index 0000000..317b953
--- /dev/null
+++ b/Decursive/OldChangeLog.txt
@@ -0,0 +1,836 @@
+
+Changes from Decursive 2.3.0 to Decursive 2.3.1
+-----------------------------------------------
+
+- Fixes a very old rare issue where Decursive would miss debuff events.
+
+- Fixes focus unit management.
+
+- Fixes minimap icon and main bar management when Decursive is "Ace-disabled".
+
+
+Changes from Decursive 2.3.0 RC7 to Decursive 2.3.0
+---------------------------------------------------
+
+- Added mixed file version check to the self-diagnostic.
+- Fix LUA error introduced in RC7.
+
+Changes from Decursive 2.3.0 RC4 to Decursive 2.3.0 RC7
+-------------------------------------------------------
+
+- Fix a LUA error when PrioList members where excluded from blacklisting and a
+ blacklisting event fired (target not in line of sight etc...)
+- Cleanse Spirit Shaman spell seems to be cast two times instead of once in
+ certain conditions (Blizzard issue), Decursive was displaying spell failure
+ error because of that. This is fixed.
+- Fixes pet spells detection when pet scanning was disabled (this issue was
+ introduced in 2.3 beta 2)
+- The MUF auto-hide option was not setting itself correctly at initialisation
+ (init order issue)
+- Showing the MUFs didn't trigger an update of its display this could result in
+ missing units when using the auto-hide option or if the MUF frame was hidden...
+- Removed "support" for Earth Panel because I don't know what it is and nor
+ does Google...
+- Added and fixed a few comments
+
+
+Changes from Decursive 2.3.0 RC2 to Decursive 2.3.0 RC4
+-------------------------------------------------------
+
+- Removed FubarPlugin-2.0 library (use "Broker2FuBar" to have Decursive in Fubar)
+- Added LibDataBroker-1.1 and LibDBIcon-1.0 libraries.
+- Removed compatibility code for WoW 2.4.
+- Moved and renamed localization files to a proper directory.
+- New option: "MiniMap Icon" to toggle the display of Decursive Icon around the MiniMap.
+- Fixes a NIL error when an outsider friendly target got stealth.
+- Fixes the LUA error related to the "test affliction" in the live-list options.
+
+
+Changes from Decursive 2.3 beta 3 to Decursive 2.3.0 RC2
+--------------------------------------------------------
+
+Fixes faulty initialisation due to CreateMacro() API changes in WoW 3.0 (when
+the users per-character macro were full)
+
+- Bugfix: CreateMacro() was changed in WoW 2.3 as a result Decursive was
+ creating its macro "per character" instead of "per account" and was not
+ checking the right limit...
+
+- Updated minimum required revision of libraries to the latest at this date.
+
+
+Changes from Decursive 2.2.0 to Decursive 2.3 beta 3
+----------------------------------------------------
+
+- Decursive now uses GUID internally instead of unit names (CPU and memory usage optimisation).
+- A change of pet in the group was still triggering a group rescan even if pet
+ scanning was disabled.
+- CPU optimization when using the priority list.
+- WARNING: after installing this version, the priority and skip list will be cleared.
+
+
+Changes from Decursive 2.1.0 Final to Decursive 2.2.0
+-----------------------------------------------------
+
+**Important changes:**
+
+- Decursive no longer uses SpecialEvent-Aura-2.0 to detect afflictions, it uses
+ the new combat log system introduced in WoW 2.4. This simplifies the code a
+ lot and prevent far away units to be scanned uselessly.
+
+- As a result Decursive is now able to detect missed dispels and missed or
+ failed spells with complete accuracy.
+
+- A new sound alerts you if one of your spell launched using the MUFs fails or is resisted.
+
+- The success spell message has been removed and replaced by a failure message when appropriate.
+
+- New affliction alert sound more audible for people without a good bass system.
+
+- The 'focus' unit will only be shown if not hostile and if not already part of the displayed MUF.
+
+- When the live-list tool tips are disabled, the Live-List won't catch mouse
+ events, you can click right through it.
+
+- Affliction history is populated only when you click on a MUF to dispel something.
+
+- Complete Russian translation by StingerSoft
+
+- Compatible with WotLK beta
+
+**Fixed bugs:**
+
+- Fix a nil error when players with pets were excluded using the skip list.
+
+- fix a lot of insidious bugs related to 'gendered' class names.
+
+- fix problems in battlefields with players from other realms (group ordering failures)
+
+- Units not in line of sight are now always properly blacklisted (except when
+ using pets, no failure events are sent).
+
+- When adding or removing a player/group/class to the exclusion list, the MUFs
+ display was not updated immediately.
+
+- Fix for Chinese priests (two different spells named the same in this localisation...)
+
+- Better sound alert management, alert loops are no longer possible.
+
+- The lock and buttons display/hide status of the "Decursive" bar (the
+ live-list anchor) were not applied correctly on startup.
+
+
+Changes from Decursive 2.0.4 to Decursive 2.1.0 Final
+-----------------------------------------------------
+
+**Important changes:**
+
+- When a player is afflicted, a new chronometer appears on its MUF giving the
+ time elapsed (enabled by default)
+
+- Added an automatic self-diagnostic feature also available through the
+ /DCRDIAG command. This diagnostic is run when the add-on is loaded and check
+ if all required libraries are available and are up to date.
+ It also checks if all Decursive internal files are loaded correctly.
+ When the command /DCRDIAG is used it also tests if the library AceEvent is
+ functioning properly.
+
+- New option: "Align MUF window to the right" (defaults to off)
+ If enabled, the MUFs will grow from right to left and the handle will be
+ moved automatically.
+
+- New option: "Auto-Hide" (defaults to "Never")
+ Lets you choose if you want to auto-hide/show the MUF window when in party or raid.
+
+- New option: "Colors" in the "Micro Unit Frame Settings" sub-menu
+ It is now possible to change all the MUFs colors.
+
+- It is now possible to add afflictions to the filters from a list of recently
+ seen afflictions instead of typing their names.
+
+- The cure order priorities are now saved per class
+ (This change resets your cure order priorities to default values)
+
+- Decursive no longer uses the Babble-Spell library that is deprecated since
+ WoW 2.4, all spells are now dynamically translated at load time ensuring
+ compatibility with current and futur localized versions of World of Warcraft.
+
+**Minor changes:**
+
+- When moving the cursor quickly over friendly and hostile units, sometimes a
+ phantom affliction could appear in the live-list for 0.2 seconds this has
+ been fixed.
+
+- When a new MUF is created outside the screen, the MUF window is always
+ automatically moved so that all MUFs are visible.
+
+- Spells handled by pets will no longer interrupt the player spells (when using
+ the MUFs)
+
+- Performance optimizations.
+
+- Workaround for polymorph spells name change in WoW 2.3 (Decursive was no
+ longer casting rank 1 of this spell...)
+
+- Clarification in the different localization files.
+
+- Fix an initialization issue some users were experiencing.
+
+- Added a new FAQ entry about a rumour according to which Decursive would be
+ banned by Blizzard. (take a look at the end of the Readme.txt file)
+
+
+Changes from Decursive 2.0.3 to Decursive 2.0.4
+-----------------------------------------------
+
+- From now on, Decursive is dedicated to the memory of Bertrand Sense who died
+ a month ago and was known as Glorfindal on "Les Sentinelles" (EU server).
+ A special menu entry has been added.
+
+- Moved FuBarPlugin relative options to a sub-menu.
+- Fix problems with Spanish localization since WoW 2.2.3
+- Probably fixed a rare LUA error that could occur in race conditions.
+ (IsSpellInRange(): Invalid spell slot)
+
+
+Changes from Decursive 2.0 Final to Decursive 2.0.3
+---------------------------------------------------
+
+**New features**
+
+- Added a message and a sound when the Unstable Affliction is detected on a MUF
+ you're about to click (works only if the MUFs' tool-tips are active.
+
+- Added support for Druid's Cyclone Spell on friendly mind-controlled players.
+ Because of this change affliction cure priorities may have changed, go into
+ Options -> 'Curing Options' and change the priorities as you like.
+
+- New PayPal donation button.
+
+**Fixed bugs**
+
+- If some afflictions were filtered out while in combat, the MUFs of the afflicted
+ units were not updated once the battle was over.
+
+- If you changed the cure priorities while some afflictions were already
+ displayed in the MUFs, their color was not updated.
+
+- Fix a Lua error that occurred wen the user had the live-list AND the MUFs
+ disabled at UI initialization and was changing its 'Focus' (/focus
+ /clearfocus)
+
+- Pet appearance/disappearance events were not triggering an update of the
+ number of MUFs displayed.
+
+- Fix a Lua error when mouse-overing the MUFs with the class borders disabled.
+
+**Small changes**
+
+- Pet management enhancement:
+ - Pet class and name detection should be much more accurate.
+ - Pet names in MUFs tool-tips are preceded by "Pet" (depends on the
+ localization)
+ - Fix a possible issue with pet management (when several pets are 'unknown
+ entities')
+
+- Small optimization when using cleansing spells (blacklist handling).
+
+- Added 'lesser invisibility' to stealth detection.
+
+- The sound played when a debuff is found is now in a profile setting
+ (profile.SoundFile).
+
+- Decurive's icon will become gray if no curing spell is available or if all
+ types of afflictions are unchecked in "curing options".
+
+- zhCN and koKR translation update.
+
+
+
+Changes from Decursive 2.0 RC1 to Decursive 2.0 Final
+-----------------------------------------------------
+
+- Mages will now cast polymorph rank 1 instead of the highest rank (uses less
+ mana and last less time).
+- "Cast success" messages now include the spell rank.
+- Lua error fixed when using the decurse key when no spell are registered.
+- Default position of the MUFs and live-list have been optimized.
+- A note has been added on how to move the live-list (in readme.txt and in
+ game).
+
+
+Changes from Decursive 2.0 BETA 7-Pub to Decursive 2.0 RC1
+----------------------------------------------------------
+
+- An error message is displayed if Decursive cannot load its main libraries
+ properly.
+- It's now possible to disable the warning displayed when no key is mapped to
+ the macro.
+- There should be no more "succeeded on NONAME" messages.
+- Descriptions in French and Traditional Chinese have been added.
+- .TOC updated for WoW 2.1.
+
+
+Changes from Decursive 2.0 BETA 6-Pub-fixed to Decursive 2.0 BETA 7-Pub
+-----------------------------------------------------------------------
+
+**New features:**
+
+- It's now possible to add dynamic groups and classes in the priority and skip
+ list: Instead of adding each unit separately, class and/or group entities
+(ex: [ group 1 ] , [ Mage ]) will appear in the lists. The old behavior can
+still be used by maintaining [SHIFT] when clicking on a group or class-name in
+the populate list tool (names will be added).
+
+- The last change also allow to sort units per group AND classes at the same
+ time.
+
+- An informative help message is displayed when the user doesn't click a MUF
+ with the correct mouse button.
+
+- Major code optimization: reduced CPU usage from ~0.04 seconds per seconds to
+ ~0.001 seconds per second (results obtained with up to date external Ace2
+libraries, if Decursive's embedded shared libraries are the most up to date,
+Decursive CPU usage will also count the usage of the shared libraries by other
+add-ons).
+
+- Added revised Traditional Chinese translation by Peter Sun.
+
+**Changes:**
+- When a MUF is clicked, any spell targeting in progress is canceled.
+- The MUFs react upon mouse button release instead of mouse button press.
+- When adding an affliction to the filter, the entered name is trimmed.
+- It is now possible to move the "Decursive" bar maintaining the Alt key pushed
+ with the buttons hidden.
+
+- Live-list system entirely rewritten.
+- The scale and transparency of the live-list can be changed in the options.
+- A message is displayed if the user clicks on the live-list...
+- It is possible to hear Decursive's debuff alert sound when the live-list is
+ disabled.
+
+- Decursive uses SpecialEvent-Aura events to monitor debuffs.
+- You can create a virtual debuff to test the display (see in live-list
+ options)
+- The MiniMap and FuBar Decursive Icon is now clickable and an information
+ tool-tip is displayed when mouse-overing it.
+- Decursive Icon gets grey when both the live-list and MUFs are disabled.
+- Added Major Dreamless Sleep to the debuff skip list (Translation is needed
+ for other localizations)
+
+
+**Fixed bug:**
+- The status tool-tip was not displayed if the live-list was hidden.
+- Warlock pet detection could fail in some conditions.
+- Default Warrior ignored debuffs were not used because of a spelling mistake.
+- If you were already in combat when logging-in or if you reloaded your UI in
+ combat, Decursive was unable to operate correctly.
+- Other little bugs were fixed.
+
+
+Changes from Decursive 2.0 BETA 6-Pub to Decursive 2.0 BETA 6-Pub-fixed
+-----------------------------------------------------------------------
+
+- Fixed several problems with the curing order priority system.
+
+
+Changes from Decursive 2.0 BETA 5 to 2.0 BETA 6-Pub
+---------------------------------------------------
+
+ # Important changes:
+
+- Now you need to press Alt to move the MUFs clicking the handle.
+- Now a border is displayed around the MUFs, its color depends on the unit's
+ class.
+- When a unit is charmed, a small green square is displayed inside its MUF.
+- A new static option panel is available by ALT-RIGHT-CLICKING on the handle or
+ typing /dcroptions (Ace2 Waterfall library).
+- Added two new sets of options:
+ - Class border and center transparency can be set separately.
+ - Spacing between MUFs can be changed.
+- Paladin always uses Cleanse instead of Purify (if they learned Cleanse).
+- There is no longer a default key bound to the macro, this caused too many
+ problems with people not knowing how to change it.
+- You can bind a key to show/hide the micro-unit frames.
+- In the debuff filtering system, you can now ignore a debuff permanently and
+ not only when in combat.
+
+ # Minor changes:
+
+- MUFs display can be reversed (they will display from bottom to top instead of
+ top to bottom).
+- The Readme.txt file has been reworked to be more clear, "FEATURES" and "FAQ"
+ sections have been added.
+- Warlock's spell priorities are saved when they change of pet.
+- The focus MUF now disappear when the player clear the focus with
+ "/clearfocus".
+- Fix a bug that caused unit unable to cure magic on magic-charmed unit to see
+ a curable magic debuff on these units.
+- You can fill your priority/skip list with Paladins and Shamans correctly.
+- Added spacers in MUFs option menu for better readability.
+- The missing macro binding error message will not be shown if a global binding
+ is available.
+- Minor code optimizations and bug fixes.
+
+
+Changes from Decursive 2.0 BETA 4 to 2.0 BETA 5
+
+- Fix a bug that caused the loss of per-character bindings.
+- Added a new debuff type: 'Charm' that applies to charmed units so mages can
+ see all charmed units ; previously they could only see charmed units with a
+magical debuff (as priests). (This need testing, the situation is difficult to
+reproduce)
+- Added an option to change the transparency (Alpha) of the MUFs when a unit is
+ not afflicted, it can be set to 0 to be completely transparent.
+- The micro unit frames (MUFs) are set to a lower strata.
+- "Arcane Blast" will no longer be shown as a Debuff.
+- Added full French localization by Sylvin
+- Added full Korean localization by Fenlis
+- Fixed typos in localization.lua and added a missing option description.
+
+
+Changes from Decursive 2.0 BETA 3 to 2.0 BETA 4
+
+- Changed the minimum number of MUF per row to 1
+- The 'Show Help' option also disable the handle tool-tip
+- The focused unit won't be scanned if it's unfriendly (you won't see it in the
+ MUFs nor in the live-list).
+- The macro binding function has been enhanced, it correctly unbinds previously
+ mapped key and restores previously mapped action and displays messages when a
+mapping succeed/fails or replace a currently mapped action.
+- Added an option to not show out of range units in the live-list (enabled by
+ default).
+- On non-English client, the key is set to "NONE" in the localization files so
+ Decursive will display a warning to the user.
+- Babble-Spell library has been updated, Spanish spells should be supported.
+- Decursive is now available on wowace.com SVN
+
+
+Changes from Decursive 2.0 BETA 2 to 2.0 BETA 3
+
+- Fix the huge memory consumption of the scanning functions.
+- Fix a problem with the macro that was not updated if the macro frame was
+ opened.
+- Fix some options in the menus that were not propagated correctly.
+- Code optimization.
+- Added a note in the readme.txt file about how to change the default key bound
+ to the macro.
+
+Changes from Decursive 2.0 BETA 1 to 2.0 BETA 2
+
+- Fix Micro-Unit-Frames (MUFs) display: the first time you log on, the MUFs are
+ displayed to a reachable place instead of the top left corner of your screen.
+- Fix the LUA error message that occurred when you had all your macro spot
+ used.
+- The handle to move the MUFs (above the first MUF) now highlights when
+ mouse-overred, a tooltip has been added.
+- Fix a huge bug in the priority and skip list management causing a variable
+ number of unit to not be displayed in the MUFs if your lists were not empty.
+- MUFs scaling functions have been improved.
+- The readme.txt file has been updated.
+
+
+Changes from Decursive 1.9.8.4 to 2.0 BETA 1
+
+User significant changes:
+
+- Debuff removal capability restored in several ways:
+ - By clicking on-micro unit frames created by Decursive for a
+ user-defined number of players.
+ - By mouse-overring units or unit frames and pushing a user-defined
+ keyboard key.
+ - Read the readme file to know more about these changes
+- Priority list management:
+ - Now fully operational, you can very easily change player positions in
+ the list
+ - List display has been very improved (scrollbars, colors...)
+ - Priority list order defines the order of the micro-unit frames
+ displayed
+- The option window has been removed:
+ - All options are accessed through a drop down menu appearing when
+ right-clicking on "Decursive" bar. (DewDrop Ace2Lib)
+ - Every menu entries has a small explanation tooltip.
+ - All options can be accessed through command line (AceConsole Ace2Lib)
+- Debuff skipping management
+ - Users can easily add/delete debuffs to ignore on specific classes
+ while in combat
+- Mage can sheep mind-controlled units (if other classes are interested, their
+ spell can be added on request)
+- The readme.txt file has been rewritten and should be read of course.
+
+Internal changes:
+
+- Decursive was almost entirely rewritten and reorganized (the live list system
+ has not been redisigned yet)
+- New code architecture, more ressource efficient and more scalable.
+- Decursive is now an Ace2 add-on using Ace2 embeded libraries.
+
+
+Changes from Decursive 1.9.8.3 to 1.9.8.4
+
+- Fix syntax for compatibility with BC and LUA 5.1.1
+- Huge memory usage improvement, Decursive re-uses tables and uses the Compost
+ Ace2 library so Decursive uses 0.0 Kib/s when idle or in action.
+- Improved CPU usage, it should be minimum.
+
+
+After BC Decursive may no longer be used while in combat, it will just tell you
+who you SHOULD de-curse but won't be able to target or cast for you... It may
+still work out of combat but it's not certain at this stage. Blizzard has made
+big changes in the game play so de-cursing without Decursive may not be as
+boring as it used to be...
+
+
+
+Changes from Decursive 1.9.8.2 to 1.9.8.3
+
+- The "nothing Cleaned" bug some people were experiencing should be fixed.
+- There is no more "dead zone" beneath the "Decursive" bar when the live-list
+ is displayed (thanks to Chewster for accurately reporting this bug)
+- The Shaman 'Purge' spell should work again.
+- New option: when Decursive is asked to clean, it cancels any spell in
+ progress. (except for warlocks and channeled spells).
+- A new PDF doc is available in the Archive (thanks to Whitney for writing it).
+
+Changes from Decursive 1.9.8.1 to 1.9.8.2
+
+- Now Decursive disables and re-enables the "self auto cast" option
+ automatically, it's no longer a problem.
+- Last version I hope!!!
+
+Changes from Decursive 1.9.8 RC2 to 1.9.8.1
+
+- Fix the LUA error happening on BG when a player from another server has a
+ debuff to ignore (such as Mind Vision), other related issues should be fixed.
+- The WoW UI option "Auto Self Cast" is causing problems: Decursive is enable
+ to cast on anyone but yourself while this option is active. Now Decursive
+will pop-up a warning if this option is enabled and will propose to disable it.
+- Chinese localization has been updated (thanks to Peter Sun).
+- French localization revised by The Grinch.
+
+Changes from Decursive 1.9.8 RC1 to 1.9.8
+
+- Fixed the LUA error happening for people who had the 'Print messages in
+ default chat' option checked before upgrading to 1.9.8.
+- Fixed the custom message frame display, now it has a font to print
+ something...
+
+Changes from Decursive 1.9.7 to 1.9.8 RC1
+
+************************ ====> IMPORTANT CHANGES: ************************
+
+- TREMENDOUS PERFORMANCE IMPROVEMENTS (no more lag) (thanks to Lex for his
+ cache idea)
+- You can choose in the options the type of debuff you want to cure (Magic,
+ Poison, Curse, Disease)
+- Added cure priority based on debuff type (select the types in the order you
+ want to de-curse). NOTE: For now this only works on a per unit basis,
+Decursive will de-curse a unit in the order you set debuff types. For example
+if you set (Poison, Curse), Decursive will first remove Poison on a unit then
+or if no poison, it will remove curses on that same unit...
+- TOC updated for 1.12
+
+************************** ====> INTERESTING CHANGES:
+**************************
+
+- When you have a target selected, whether it's in your raid or not it will
+ appear in Decursive live-list if you can cure it.
+- Now you can see how many times a debuff is applied on a player in the live
+ list.
+- Affliction type is displayed in the live list.
+
+ ****************** ====> NEW OPTIONS: ******************
+
+- New Option: Now you can decide how the text is displayed in the custom frame
+ (From top or from bottom)
+- New Option: "Reverse live-list display"
+- New Option: "Show Tooltips in afflicted list"
+- New Option: "Hide the live-list"
+- New Option: "Tie live-list visibility to DCR window" (if the main DCR window
+ is closed then the live-list is hidden...)
+- New command line and key binding: /dcrhide will hide Decursive window leaving
+ the live-list visible /dcrshow shows Decursive window
+- New command line and key binding: /dcroption will open and close the option
+ window
+- Added the global variable Dcr_Saved.Dcr_OutputWindow to change the default
+ output window (use /script Dcr_Saved.Dcr_OutputWindow = ChatFrame2 for
+example).
+- Added /dcrdebug command to enable/disable debug info. (thanks to @derey)
+
+******************** ====> MINOR CHANGES: ********************
+
+- Enhanced message display with colors (you can also click character names in
+ default chat window).
+- Raid curing order is now truly per group: your group, the groups after yours
+ and the groups before yours. Before 1.9.8 BETA 2 it was: your group, the
+players from groups after yours and the players from groups before yours.
+- Fix the delay problem with text message (it was related to a change in 1.11)
+- If Decursive fails because the target is invalid, the target is blacklisted.
+- Internal code reorganization and sorting.
+- Updated .toc for 1.12
+- Other minor fixes.
+
+
+
+
+Changes from Decursive 1.9.6 FINAL to 1.9.7
+
+******************* ====> New features: *******************
+
+- Now when a cast fails, only "out of sight" persons are blacklisted.
+
+- You can hide the buttons by right clicking on "Decursive", when the buttons
+ are hidden, the Decursive frame is locked so you can't move it by accident.
+
+- Added the Option "Don't blacklist priority list names" (defaults to off)
+
+- Added Chinese localization (zhTW)
+
+******************* ====> Enhancements: *******************
+
+- Performance improve.
+
+- Debuffs to not cure (Dreamless Sleep and Mind Vision), will not be displayed
+ nor cured unless the unit is debuffed by other debuffs of the same kind. In
+previous versions, those debuffs were skipped only if the player was in combat.
+
+- Decursive's frame is smaller: the version is displayed in a tooltip.
+
+- No more risk to lose the current target when the "Check for range" option is
+ used.
+
+- Decursive no longer checks for mana or for the state of your curing spell, it
+ is no longer necessary (and may avoid some freezes).
+
+- The display of Decursive message is now more logical, the text begins to be
+ displayed just at the bottom of the "Text Anchor" frame (you can move it by
+clicking on the 'A' in the top-right corner of the option window)
+
+- It is now more clear to see on who Decursive is casting the curring spell.
+
+***************** ====> Bugs fixed: *****************
+
+- The forgotten debug message Shamans were seeing has been removed.
+
+- The problem priests in shadow form were experiencing has been fixed.
+
+- No more freeze issue when a lot of players are out of range, thanks to Alason
+ who gave me a new way to test for range.
+
+- When you left-click on someone in the Decursive live-list Decursive won't try
+ to cure your current target.
+
+- No more 'awaiting for target state' when the cast fails.
+
+******************** ====> Small Changes: ********************
+
+- Scanning code has been slightly optimized.
+
+- Out of range players are no longer added to the blacklist (this was useless
+ since Decursive is able to bypass them).
+
+- Removed the option "check for range", Decursive will always check for range.
+
+- The sliders in the option window have been moved to the top to avoid clicking
+ on the last one by accident when closing the window.
+
+- Localization files have been updated.
+
+- French and Chinese localization files are encoded in UTF-8.
+
+
+Changes from Decursive 1.9.6.5 to Decursive 1.9.7
+- Decursive no longer check for mana or for the status of a spell, those were
+ here to avoid to blacklist people for false reason. (LoS is detected since
+1.9.6.5)
+
+Changes from Decursive 1.9.6.4 to Decursive 1.9.6.5
+
+- Added the Option "Don't blacklist priority list names" (defaults to off)
+- Removed the option "check for range", Decursive will always check for range.
+- Now when a cast fails, only "out of sight" persons are blacklisted.
+- Out of range players are no longer added to the blacklist (this was useless).
+- Probably fix the freeze issue some people were experiencing.
+- Updated Chinese localization.
+
+Changes from Decursive 1.9.6.3 to Decursive 1.9.6.4
+
+- Debuffs to not cure (Dreamless Sleep and Mind Vision), will not be displayed
+ nor cured unless the unit is debuffed by other debuffs of the same kind. In
+previous versions, those debuffs were skipped only if the player was in combat.
+- Added Chinese localization (zhTW)
+- Scanning code has been slightly optimized.
+- Now, French and Chinese localization files are in UTF-8
+
+Changes from Decursive 1.9.6.2 to Decursive 1.9.6.3
+
+- When you hide the buttons, the "Decursive" frame is locked so you can't move
+ it by accident.
+- When Decursive dispels someone, the text displayed is shorter.
+- Small changes in the German localization.
+
+
+Changes from Decursive 1.9.6.1 to Decursive 1.9.6.2
+
+- Really fixed the bug with priests in shadow form.
+- When you left-click on someone in the Decursive live-list Decursive won't try
+ to decurse your current target.
+- The display of Decursive message is now more logical, the text begins to be
+ displayed just at the bottom of the "Text Anchor" frame (you can move it by
+clicking on the 'A' in the top-right corner of the option window)
+- The sliders in the option window have been moved to the top to avoid clicking
+ on the last one by accident when closing the window.
+- It is now more clear to see on who Decursive is casting the curring spell.
+
+
+Changes from Decursive 1.9.6 FINAL to Decursive 1.9.6.1
+
+This is mainly a bug-fix release:
+- The forgotten debug message Shamans were seeing has been removed.
+- The problem priests in shadow form were experiencing has been fixed.
+- No more freeze issue when a lot of players are out of range, thanks to Alason
+ who gave me a new way to test for range.
+- No more risk to lose the current target when the "Check for range" option is
+ used.
+- No more 'awaiting for target state' when the cast fails.
+- Decursive's frame is smaller: the version is displayed in a tooltip.
+- You can hide the buttons by right clicking on "Decursive".
+- Small changes in the German localization.
+
+
+Changes from Decursive 1.9.4 to Decursive 1.9.6 Final
+
+Important changes:
+
+- Massive global performance improvement (important code optimization
+ everywhere).
+- Re-Added support for warlock pets (Felhunter and Doomguard spells)
+- Added an option (on by default) to play a sound when you have someone to cure
+ (Breenild idea).
+- Now when you click on a cursed person in Decursive's frame you will keep your
+ current target unless you use the right-button of your mouse.
+- Now Decursive is able to check if you have enough mana before casting.
+- Complete French and German localization (Thanks to Archiv and WalleniuM for
+ the German translations) So Decursive is able to ignore and skip correctly
+certain classes and debuffs in those localizations. This also corrects
+multiple dispels problem for those localizations.
+- Changed the licence to GNU GPL (Decursive 1.9.4 is in public domain)
+
+Minor changes:
+
+- Added a reminder at startup about the available options.
+- If you don't have one of your curring spell in your action bar, Decursive
+ will display an error message when initializing.
+- Out of ranges units are added to the blacklist.
+- Options and lists are saved for each characters.
+- Options are reset to defaults with this version.
+- Improved re-targeting.
+
+
+Bugs fixed:
+
+- Fixed initialization, 1.9.4 was sometime unable to find a spell to use.
+- Mind Control dispel was impossible.
+- The "check for range" option couldn't be set/unset and was causing Decursive
+ to get stuck on out of range persons.
+- Improved Event handling (faster when zoning)
+- When you are in the priority list, your name is no longer displayed twice.
+- the "Ignore Stealthed Units" should work as intended (it never worked before)
+- Tooltip are displayed correctly.
+- Other minor bug fixes.
+
+
+
+See below for a detailed change log between my versions of Decursive.
+
+Changes on 1.9.6 FINAL (Release)
+
+- the "Ignore Stealthed Units" should work as intended (it never worked before)
+- Performance improve when the option "Check for Abolish before curing" is used
+- Decursive can't put the current player to the blacklist anymore.
+
+Changes in 1.9.6 RC4 (Release Candidate)
+
+- Added a mana check, Decursive won't try to cast if there is not enough mana.
+ (not available for warlocks)
+- Performance improve when the live list is displayed and contains afflicted
+ people.
+- Performance improve when checking for range.
+- Added unlocalized strings to loc. (French and German loc. updated, thanks to
+ Archiv for the German translations).
+- Options and lists are now saved per character (options reset to default with
+ this version).
+
+
+Changes in 1.9.6 RC3 (Release Candidate)
+
+- The correction about the MC bug in RC2 introduced a problem with units
+ controlled by priests, changed the fix to a better one :)
+- Fixed tooltip display (tooltips were not displayed)
+
+
+Changes in 1.9.6 RC2 (Release Candidate)
+
+- Probably fixed the MC issue.
+- Fixed: When left-clicking on Decursive's frame, the cured unit may not be the
+ one you cliked on.
+- Fixed a bug (nil method) if the option "Check for range" was used.
+- Fixed the "Check for range" option, depending on the cases checking or
+ unchecking it had no effect on the actual result.
+- When the option "Check for range" is enabled, and a unit is out of range,
+ it's added to the blacklist.
+- Updated French localisation so Decursive can correctly ignored stealthed unit
+ (if the option is set).
+- Updated German localization (problem with accents and a forgotten string,
+ thanks to Archiv).
+
+Changes in 1.9.6 RC1 (Release Candidate):
+
+- Added new translations to French loc to prevent Decursive from dispelling:
+ "Sommeil sans rêve" and "Vision télépathique"
+- Updated German localization (thanks to WalleniuM)
+- Overall performance improve (no more multiple calls to SetOwner()) This
+ change may also fix the "Nothing cleaned" bug some people were still
+experiencing.
+- When you are in the priority list, your name is no longer displayed twice.
+- Warlocks can correctly switch to the target if they right click on it in
+ Decursive's frame.
+
+Changes in 1.9.6c (Was released in Dev Zone):
+
+- Changed the alert sound to a better one.
+- Added a reminder at startup about the available options.
+- Fixed a possible issue with cool downs detection.
+- Added a possible fix for the reported warlock problem (it's still working
+ with my Warlock and another warlock level 60).
+- When you right click on a cursed person in Dcr's window, it's selected even
+ if nothing is done (spell not ready).
+
+Changes in 1.9.6b (Was released in Dev Zone):
+
+- Changed the licence to GNU GPL
+- Now when you click on a cursed person in Decursive's frame you will keep your
+ current target unless you use the right-button of your mouse.
+- Small fixes in French localization.
+- Will never check for range if this is a warlock pet spell.
+- Added some debug information for people who have problems with the
+ Fellhunter's spell.
+
+Changes in 1.9.5c (Release):
+
+- Added an option (on by default) to play a sound when you have someone to cure
+ (Breenild idea).
+- Fixed a bug that could cause the cast of a wrong spell if you learn a new
+ spell.
+
+
+Changes in 1.9.5b (changes from last Quu's version 1.9.4):
+
+- Added support for warlock pet Felhunter spell 'Devour Magic' (tested on a
+ French version but should work for English and German as well unless the
+localisation is not correct in Decursive 1.9.4)
+- Fixed French localization for Priests and Druids.
+- Improved Event handling (faster when zoning)
+- Fixed initialization, 1.9.4 was sometime unable to find a spell to use
+
+
diff --git a/Decursive/Readme.txt b/Decursive/Readme.txt
new file mode 100644
index 0000000..0f2870b
--- /dev/null
+++ b/Decursive/Readme.txt
@@ -0,0 +1,23 @@
+Decursive for World of Warcraft
+===============================
+
+Download and documentation:
+
+http://www.2072productions.com/to/decursive.php
+
+http://www.wowace.com/addons/decursive/
+
+Documentation is also available under the doc/ directory:
+
+ ./doc/Description.txt
+
+ ./doc/user-actions.txt
+
+ ./doc/commands.txt
+
+ ./doc/macro.txt
+
+ ./doc/MUFs.txt
+
+ ./doc/faq.txt
+
diff --git a/Decursive/Sounds/AfflictionAlert.wav b/Decursive/Sounds/AfflictionAlert.wav
new file mode 100644
index 0000000..9c1f3fa
Binary files /dev/null and b/Decursive/Sounds/AfflictionAlert.wav differ
diff --git a/Decursive/Sounds/FailedSpell.wav b/Decursive/Sounds/FailedSpell.wav
new file mode 100644
index 0000000..6f1919c
Binary files /dev/null and b/Decursive/Sounds/FailedSpell.wav differ
diff --git a/Decursive/Textures/BackDrop.tga b/Decursive/Textures/BackDrop.tga
new file mode 100644
index 0000000..c532d41
Binary files /dev/null and b/Decursive/Textures/BackDrop.tga differ
diff --git a/Decursive/Textures/GoldBorder.tga b/Decursive/Textures/GoldBorder.tga
new file mode 100644
index 0000000..159a06e
Binary files /dev/null and b/Decursive/Textures/GoldBorder.tga differ
diff --git a/Decursive/Todo.txt b/Decursive/Todo.txt
new file mode 100644
index 0000000..26f33d3
--- /dev/null
+++ b/Decursive/Todo.txt
@@ -0,0 +1,27 @@
+TODO:
+
+- add a donators credit section in the About UI
+
+- change timers when mass debuff so that only the 5 or so first units of the array get updated in priority all the rest should be handled by the roaming MUF updater
+
+- Add a menu option to choose between available spells. (will also allow to choose other polymorph spells)
+
+- Add an option to disable spell stopping when clicking on a MUF
+
+- Add an option to automatically focus sheeped/cycloned units (if no other focus)
+
+- Add a user debuff warning mechanism where you could define debuff names you
+ want to be aware of, then Decursive would add a special status, such as a
+ little colored triangle in the middle of the MUFs and then you will have to
+ create a mouseover macro (using default Blizzard macro interface) and use it on
+ the MUF of your choice...
+
+-/ when a mind controlled unit is sheepped we should be able to know it without having to target it and look for the sheep debuff
+ (maybe just check for polymorph debuff/buff? on the target and remove the charmed bit if found) ----> or focus it...
+
+- Add an option to let the user choose the alert sound.
+
+
+A very nice review of Decursive :
+
+http://www.hotsdots.com/2009/07/improving-the-interface-using-addons-7-decursive-cleansing-and-dispelling/
diff --git a/Decursive/WhatsNew.txt b/Decursive/WhatsNew.txt
new file mode 100644
index 0000000..174ae18
--- /dev/null
+++ b/Decursive/WhatsNew.txt
@@ -0,0 +1,256 @@
+Decursive 2.5.1 by Archarodim (2010-07-31)
+==========================================
+
+
+Changes from Decursive 2.5.0 to Decursive 2.5.1
+-----------------------------------------------
+
+- *Raid Target Icons are now supported* (MUFs and Live-List display)
+
+- *NEW option*: "Do not use 'Abolish' spells" (in the cure options). If enabled
+ will prefer 'Cure Disease' and 'Cure Poison' over their 'Abolish' equivalent.
+ (Defaults to off)
+
+- "Check for 'Abolish' before curing" option now defaults to off. (May not be
+ wanted when a disease or poison needs to be removed at all costs ; it was
+ also confusing for some users)
+
+- *NEW option*: "Allow macro edition" preventing Decursive from updating its
+ macro and letting the user change it and still use Decursive macro key-binding
+ management. (Defaults to off)
+
+- *NEW command line option* to hide and disable the MUFs handle:
+ (/dcr HideMUFsHandle)
+
+- German translation is now complete (thanks to Freydis88).
+
+- Remove the ERR_GENERIC_NO_TARGET debug report happening when the player
+ tries to use Polymorph or Purge on himself or another friendly player.
+
+- Fix to "LiveList:Update_Display(): couldn't get range" error occurring when
+ not using the MUFs.
+
+- Removed the French version of 'readme' and 'changelog' since 3 persons only
+ were reading those.
+
+
+
+Changes from Decursive 2.4.5.1 to Decursive 2.5.0
+-------------------------------------------------
+
+
+*IMPORTANT CHANGES:*
+
+- *NEW OPTION*: "Time left" for MUF chronometers. (Defaults to off) Displays time
+ left instead of time elapsed on afflicted MUFs.
+
+- *NEW OPTION PANEL*: (under the MUF options) to let the user choose the
+ MUF's mouse button assignments. The middle-mouse button can be used to cast
+ curing spells too.
+
+- *NEW OPTION*: Testing MUF display layout is now possible. Look in the MUF
+ display options.
+
+- It's now possible to *check Decursive versions* used in your current group or
+ Guild (From the 'About' option panel).
+
+
+
+*MINOR CHANGES AND IMPROVEMENTS:*
+
+- The 'Unstable Affliction' warning will also work when tool-tip display is
+ disabled.
+
+- Added a new option (under the general tab) to disable the three welcome
+ messages Decursive prints at each login.
+
+- Enhancement: The MUF tool-tip is always displayed above the MUFs or beneath
+ them if it's not possible. (it can't overlap the MUFS anymore).
+
+- The 'target' and 'mouseover' units will no longer be displayed in the
+ Live-list if the player is part of the group.
+
+- Non-release versions (alphas, betas and release candidates) of Decursive will
+ expire after 30 days instead of 10. The expiration alert of these versions
+ will be displayed only once every 48 hours (and no longer at every login).
+
+- Updated minimum library versions requirements.
+
+
+
+
+Changes from Decursive 2.4.5 to Decursive 2.4.5.1
+---------------------------------------------------
+
+- Fix a problem where Decursive would not correctly detect priest talent 'Body
+ and Soul' at login.
+
+- Re-enabled debuglocals() hotfix for 3.3 when Lua error reporting is enabled.
+
+- Localization update.
+
+- TOC update for WoW 3.3.
+
+
+Changes from Decursive 2.4.3.2 to Decursive 2.4.5
+-------------------------------------------------
+
+- **Major changes:**
+
+ - Decursive has been fully converted to Ace3.
+
+ - Decursive is no longer licensed under the GNU GPL, License has changed
+ to 'All Rights Reserved' (see LICENSE.txt).
+
+ - Due to the conversion to Ace3, there is no longer a drop down menu to
+ access the option.
+
+ - New option panel available through Blizzard add-ons option UI, you can also
+ access the options by alt-right clicking on Decursive Icon.
+
+ - Decursive options will be reset to default upon installation of this version.
+
+- **Minor changes:**
+
+ - Fix for Shamans: 'Cleans Spirit' was not replacing 'Cure Toxins', the two
+ spells were both active and confusing for the user.
+
+ - Removed the 'Ignore stealthed units' option that is useless since several
+ years.
+
+ - The Macro key binding is now a global setting (no longer bind to the
+ profile).
+
+ - Replaced TabbletLib by LibQtip-1.0.
+
+ - Removed DewDrop-2.0 which has no replacement in Ace3 framework.
+
+ - Added an about panel.
+
+ - Various little enhancements and code cleanup.
+
+
+Changes from Decursive 2.4.3 to Decursive 2.4.3.2
+-------------------------------------------------
+
+- A Lua error could occur in rare race conditions (when clicking on a MUF at the
+ exact moment its debuff disappears).
+
+- 'Shadoweld' was no longer detected as stealth because its spell ID changed.
+ (future spell ID changes will generate debug reports).
+
+Changes from Decursive 2.4.2 to Decursive 2.4.3
+-----------------------------------------------
+
+- Implemented a permanent solution for debuffs not detected by direct debuff events.
+
+- Made the macro options more reliable and logical:
+ - When the macro creation is disabled, the currently assigned key is removed.
+ - The assigned key is also removed when the profile options are reset.
+ - Key assignment feature is disabled if the macro creation is disabled.
+
+- The 'no macro key warning' is now turned off by default since this whole
+ mouseover macro thing is not really interesting after all...
+
+- Removed LibBabble-Class-3.0 (replaced by _G.LOCALIZED_CLASS_NAMES_MALE)
+
+- Added an exception for the 'Dark Matter' debuff for which no SPELL_AURA_APPLIED
+ event is generated by the game.
+
+- Re-enabled Lua error handler but added security checks and also dynamic
+ hotfixes to Blizzard_DebugTools errors that resulted in C Stack Overflows.
+ - **IMPORTANT**: Because of (or rather thanks to) those hotfixes, Decursive installation may reveal some Lua errors
+ that you couldn't see before.
+
+- Always use the "player" unitID in raid (was using raid# when the player was included in the priority list)
+ This prevents the player MUF from disappearing temporarily while a group update is in progress.
+
+
+Changes from Decursive 2.4.1 to Decursive 2.4.2
+-----------------------------------------------
+
+- IMPORTANT STABILITY AND RELIABILITY FIXES: Problems fixed in this release
+ could prevent Decursive from reporting afflictions in race conditions (all
+ previous versions are affected).
+
+- Added Shaman's "Hex" spell to crowd control charmed players.
+
+- Added new Shaman spell "Cure Toxins".
+
+- Documentation completely rewritten and reorganised using .docmeta and markdown
+ formatting. Users don't have any excuse left to not read it now ;) The
+ documentation is accessible there:
+
+- Decursive is now able to report LUA errors related to itself using the
+ wonderful "non-annoying after combat auto report feature" introduced in 2.4.1 :)
+
+- Added support for AddonLoader http://www.wowwiki.com/AddonLoader (auto-load
+ if your class is any of Mage, Priest, Paladin, Druid, Hunter, Warlock,
+ Shaman).
+
+- Added an option to disable the macro creation.
+
+- Miscellaneous enhancements and minor bug fixes.
+
+
+Changes from Decursive 2.4 to Decursive 2.4.1
+-----------------------------------------------
+
+- Added support for the new priest talent 'Body and soul' to be able to cleanse
+ a poison effect on self when using 'Abolish Disease'.
+
+- Added the 'Tranquilizing Shot' Hunter spell to remove magic debuff on mind
+ controlled units.
+
+- Important enhancements and fixes to the MUF positioning/scaling system:
+ - Changing their scale will no longer affect their position in an illogical
+ way.
+ - MUFs are maintained on screen whatever happens ; their position will
+ no longer be reset to default.
+
+- Multiple fixes and enhancements to charm (mind control state) detection.
+
+- Fixes to Decursive icon: now it does what the tool-tip says and it doesn't
+ throw a LUA error if tool-tips are disabled in the LDB client.
+
+- The MUFs no longer depend on the 'mouseover' unit (internal simplification,
+ more reliability).
+
+- Added a new advanced debug report system.
+
+
+
+Changes from Decursive 2.3.1 to Decursive 2.4
+---------------------------------------------
+
+- New feature: The cool down of the curing spell to be used is displayed
+ (clock) on afflicted MUFs.
+
+- Decursive uses AceLocal-3.0 ; localization is now made using this interface:
+ http://wow.curseforge.com/projects/decursive/localization/
+
+- Miscellaneous localization updates in various languages.
+
+- Re-implemented the max unit to show option.
+
+- Added a warning when the user disables Decusive and an explanation on how to
+ re-enable it (/dcr standby)
+
+- Translations for key bindings descriptions (WoW key binding interface)
+
+- It's no longer possible to map the button 1 and 2 of the mouse to Decursive's
+ macro by accident.
+
+- Fixes a problem if the game is loaded without any "saved variables" where the
+ API GetCurrentBindingSet() would return incorrect values unusable with the
+ API SaveBindings() preventing Decursive from initializing correctly.
+
+- Bug fix: Charmed unit detection wasn't working if the player himself was charmed.
+
+- Bug fix: The focus MUF was not added at the end but just before pets.
+
+- Bug fix: The stick to right option (concerning the MUFs positions) was broken.
+
+- Some other minor bug fixes.
+
+
diff --git a/Decursive/doc/Description.txt b/Decursive/doc/Description.txt
new file mode 100644
index 0000000..29eea36
--- /dev/null
+++ b/Decursive/doc/Description.txt
@@ -0,0 +1,85 @@
+Decursive for World of Warcraft
+===============================
+
+*Decursive is a cleansing mod intended to render affliction removal easy, effective and fun for all the classes having this ability.*
+
+[Decursive usage][user-actions] - [Micro Unit Frames documentation][MUFs] - [Decursive Macro documentation][mouse-over macro] - [Frequently Asked Questions][FAQ] - [commands][]
+
+Decursive key benefits
+----------------------
+
+- **Ease of use:**
+
+ - Decursive configures itself **automatically** for your character class, *it works straight out of the box*, no configuration is required.
+ - Intuitive interface and detailed options, Decursive is suitable for simple usage and power users.
+
+- Control **what and who** you want to dispel:
+
+ - Easily **Filter out** afflictions you don't want to cure or that are useless to remove by class (*some are pre-configured*).
+ (Such as afflictions affecting mana on non-mana classes, etc...).
+ - **Choose** between what you can dispel (**magic, curses, poison, diseases, charms**) choosing their priority.
+ (this allows you to *share* the cleansing work with other players effectively)
+ - **Prioritize** or exclude members.
+ (keep players, classes, or raid groups in a specific order to cleanse them in order of importance)
+
+- **Manage Mind controlled units:**
+
+ - If you are a Mage, a Druid or a Shaman you can *Polymorph/Cyclone/Hex* mind-controlled players.
+ - In any case Decursive will allow you to target mind controlled units easily.
+ - Decursive supports **magic charming affect removal** for Shamans (*Purge* and *Hex*), Priests (*Dispel Magic*),
+ Hunters (*Tranquilizing Shot*), and Warlocks (*Fellhunter and Doomguards spells*).
+
+- **Don't waste time:**
+
+ - Your cleansing spell **Cooldown** is displayed to maximize your dispel speed.
+ - An **automatic blacklist** will prevent you from loosing time on players that cannot be dispelled.
+ (player 'out of line of sight' for example).
+ - Decursive choose a **logical cleansing order** depending on your current position in the raid.
+ (preventing dispel concurrence between players and thus 'nothing to dispel' messages)
+
+- **React faster:**
+
+ - **Visual** and/or **auditive** alerts when someone needs your attention and *can* be dispelled.
+ - Special sound alert when *Unstable Affliction* is detected and you're about to dispel it.
+ - Visual and auditive alert when your dispel attempts are *resisted or fail*.
+
+- **Integration in any interface:**
+
+ - Decursive is designed to **save screen real estate** and to be forgotten when not needed.
+ - Many options allow you to customize Decursive appearance and interface behavior.
+ - All Decursive alert colors can be modified making it suitable for color-blind people.
+
+- **Highly optimized and effective coding:**
+
+ - Decursive was developed with **memory and CPU usage** in mind, **installing Decursive won't affect your frame rate even in the worst battle conditions**.
+ - Bug free: **bugs are not tolerated in Decursive**.
+
+
+In brief, what you get with Decursive is **effectiveness**, *a player using Decursive will always dispel faster than other players*.
+
+
+*See also:*
+
+- [Decursive usage][user-actions]
+- [Micro Unit Frames documentation][MUFs]
+- [Decursive Macro documentation][mouse-over macro]
+- [Frequently Asked Questions][FAQ] *try this before asking any question*
+- [commands][]
+
+******************************************
+
+
+Decursive is dedicated to the memory of Bertrand Sense known as Glorfindal on
+the European server *Les Sentinelles*.
+He was the raid leader of my guild ()
+
+
+
+
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/doc/MUFs.txt b/Decursive/doc/MUFs.txt
new file mode 100644
index 0000000..12a5259
--- /dev/null
+++ b/Decursive/doc/MUFs.txt
@@ -0,0 +1,85 @@
+The Micro-Unit Frames (MUFs)
+============================
+
+Decursive makes your life easier, it clearly shows you who is afflicted by
+something you can remove, this is done using **Micro-unit-frames (MUFs)**.
+
+A micro-unit-frame is a little square on your screen that *changes its appearance
+according to the unit status*. If you click on a MUF, it casts a cleaning
+spell, **the choice of the spell depends of the mouse button you click**, Decursive
+manages the button mapping automatically.
+
+ MUFs have several colors (which can be configured):
+
+ - **Full red**: the unit is in range and is afflicted by something you can cure by
+ left-clicking on the MUF.
+
+ - **Transparent red**: the unit is out of range and afflicted by something you could
+ cure by left-clicking on the MUF
+
+ - **Full blue**: idem as red but with right-clicking instead of left-clicking.
+
+ - **Full orange**: idem as blue or red but with ctrl-left-clicking.
+
+ - **Transparent grey**: The unit does not exists anymore.
+
+ - **Dark Transparent green**: the unit is in scan range and is not afflicted by
+ something you can cure.
+
+ - **Transparent purple**: The unit is too far to be scanned or cured.
+
+ - **Transparent light-green**: The unit is cloaked.
+
+ - **Any color but with a little green square in the middle**: the unit is
+ Mind-Controlled (Charmed).
+
+ - **Black**: the unit has been blacklisted because it was *out of line of sight* when you
+ tried to cure it, the time in blacklist can be change in the options.
+
+*The information above are also indicated by tool-tips in the game when you hover the MUFs.*
+
+*MUFs display is done according to your settings*, **you can change every aspects
+of the MUFs** (size, spacing, number, colors, grow directions, etc...), look in the *Micro unit
+frame* configuration options.
+
+MUFs are very discreet when no action is required, you can see right through
+them.
+
+*You can change the spell mapping when you are not in combat*, **the mapping is
+done according to your cure priorities** ; go to the "curing options", the
+priorities are indicated by green numbers in front of the affliction types.
+
+Besides casting, MUFs allow you to *target* the units by *Middle-clicking*,
+*Ctrl-Middle-Clicking* will focus them. (To clear the focused unit, use the
+command /clearfocus)
+
+**MUFs are organized intelligently by default**, you're always first then the rest
+of your group, the groups after yours, the group before yours and the **pets (you
+can choose to monitor them or not)** and, at last, your focused unit (changed
+using the command /focus 'name' or by *Ctrl-Middle-Clicking* on a MUF).
+**You can completely change this order by using the priority and skip list, a
+very manageable list of players.** (see [Decursive usage][user-actions] for more information)
+
+**IMPORTANT:**
+
+TO MOVE THE MUFS, ALT-CLICK AND HOLD THE HANDLE JUST ABOVE THE FIRST MUF (IT
+HAS THE SAME SIZE AS A MUF AND HIGHLIGHTS WHEN YOUR MOUSE POINTER IS OVER IT).
+
+*This handle has several uses, a tooltip explains them all.*
+
+*See also:*
+
+- [Decursive usage][user-actions]
+- [Decursive Macro documentation][mouse-over macro]
+- [Frequently Asked Questions][FAQ] *try this before asking any question*
+- [commands][]
+
+
+
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/doc/commands.txt b/Decursive/doc/commands.txt
new file mode 100644
index 0000000..513be6e
--- /dev/null
+++ b/Decursive/doc/commands.txt
@@ -0,0 +1,86 @@
+Decursive's COMMANDS
+====================
+
+- /DcrShow
+
+ To show main Decursive bar (also available by right-shift-clicking the
+MUFs handle)
+Note that *this bar is also the anchor of the live-list*
+(moving this bar moves the live-list).
+
+- /DcrHide
+
+ To hide the Decursive bar (leaving live-list displayed)
+
+- /DcrOptions
+
+ To show a static option panel
+
+- /DcrReset
+
+ To reset Decursive windows position to the middle of your screen (useful
+when you loose a frame)
+
+- /DcrPrAdd
+
+ Add the current target to the priority list
+
+- /DcrPrClear
+
+ clear the priority list
+
+- /DcrPrShow
+
+ Display the priority list UI (where you can add, delete, move players)
+(Ctrl-left-clicking the MUFs handle does the same)
+
+- /DcrSkAdd
+
+ Add the current target to the skip list
+
+- /DcrSkClear
+
+ Clear the skip list
+
+- /DcrSkShow
+
+ Display the skip list UI (where you can add,delete,clear)
+(Shift-right-clicking the MUFs handle does the same)
+
+**NOTE:**
+
+All the above commands can also be bound to a key through the key-binding
+WoW interface.
+
+**Commands are not case sensitive**
+
+
+*Other useful commands:*
+
+- /dcr
+
+ Lists all the command line configuration options.
+
+- /dcr HideMUFsHandle
+
+ Hides the Micro-Unit Frames handle and disables the possibility to move them.
+ Use the same command to get it back.
+
+
+
+*See also:*
+
+- [Decursive usage][user-actions]
+- [Micro Unit Frames documentation][MUFs]
+- [Decursive Macro documentation][mouse-over macro]
+- [Frequently Asked Questions][FAQ] *try this before asking any question*
+
+
+
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/doc/faq.txt b/Decursive/doc/faq.txt
new file mode 100644
index 0000000..1bf0d79
--- /dev/null
+++ b/Decursive/doc/faq.txt
@@ -0,0 +1,79 @@
+Frequently Asked Questions
+==========================
+
+How do I dispel someone?
+------------------------
+
+Click on one of the [MUF][] (*Micro Unit Frames*) with the mouse-button corresponding to the color of the [MUF][].
+
+
+How do I move the Micro-Unit Frames (the little squares)?
+------------------------------------
+To move the [MUFs][], press Alt and left-click and hold the handle just above the first [MUF][] (*Micro Unit Frames*).
+(it has the same size as a [MUF][] and highlights when your mouse pointer is over it)
+This handle has several uses, a tool-tip (in the lower right corner of your screen) explains them all.
+
+How do I move the live-list?
+----------------------------
+
+Display the "Decursive" bar (/dcrshow or shift-right-click on the [MUF][] handle) and
+alt-click to move the bar (The live-list is anchored to this bar).
+
+
+How do I remove the 'focus' unit of the MUFs?
+---------------------------------------------
+
+Type /clearfocus
+
+Why not having a single button to dispel everyone in the raid?
+--------------------------------------------------------------
+
+It's impossible, unit-frame cannot be modified while the player is
+in combat.
+Blizzard wants players to take actions and think to play.
+Single-button-casting add-ons are impossible since WoW 2.0.
+Players have to choose manually their target and the spells they want to use.
+
+Decursive uses new Blizzard's "click casting" solution,
+it's the only way for add-ons to use spells and 'target' players.
+
+
+I have set my hot key. When I push it though I don't cure anything.
+-------------------------------------------------------------------
+
+The macro key works only if you hover a unit or a unit-frame with your mouse
+pointer, the easier way is to use the MUFs (micro-unit-frames - 'the little
+squares')
+
+
+Is Decursive banned by Blizzard?
+--------------------------------
+
+The only add-ons that could put a player in troubles are
+add-ons that don't respect the rules set by Blizzard, such as add-ons that
+allows communication between different factions.
+
+Decursive breaks no rule of that kind. When Blizzard disapproves an add-on they
+simply disable the API it uses to work. This is what happened when WoW 2.0 came
+out, a lot of add-ons where completely unusable (Decursive was part of them).
+
+With Decursive, players still have to choose their target and the spells they
+want to use on that specific target, this is what Blizzard wants. They disapproved
+Decursive 1.x because players had only one button to press to remove all afflictions
+without even thinking...
+
+You can ask to a Game Master in game if you still have some doubts about Decursive status.
+
+*See also:*
+
+- [Decursive usage][user-actions]
+- [Micro Unit Frames documentation][MUFs]
+- [Decursive Macro documentation][mouse-over macro]
+- [commands][]
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/doc/macro.txt b/Decursive/doc/macro.txt
new file mode 100644
index 0000000..bc08635
--- /dev/null
+++ b/Decursive/doc/macro.txt
@@ -0,0 +1,31 @@
+Decursive's Macro
+=================
+
+Decursive also creates and maintains (for all your characters) a macro that
+allows you to cure units (or other unit-frames) you mouse-over, *you choose the
+key in Decursive's options*.
+
+Hitting the key alone will try to cast the first spell, *Ctrl-hitting*, the
+second and *shift-hitting* will try to cast the third. Decursive will show you
+if the unit beneath your cursor is afflicted by something through its
+*live-list* and a sound.
+
+**NOTE:** To change the key, use the drop-down option menu, it is accessed
+by right-clicking the handle or the "Decursive" bar. You can also use the
+command line for example, "/dcr macro SetKey V" will set the new key to [V].
+
+
+*See also:*
+
+- [Decursive usage][user-actions]
+- [Micro Unit Frames documentation][MUFs]
+- [Frequently Asked Questions][FAQ] *try this before asking any question*
+- [commands][]
+
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/doc/user-actions.txt b/Decursive/doc/user-actions.txt
new file mode 100644
index 0000000..e08618b
--- /dev/null
+++ b/Decursive/doc/user-actions.txt
@@ -0,0 +1,123 @@
+Decursive, user possible actions
+--------------------------------
+
+*How to use Decursive at the maximum of its possibilities*
+
+- **Remove afflictions:**
+
+ - Using the [MUFs][]:
+
+ If you've displayed the Micro-Unit-Frame (on by default) you can click on
+ the micro-frames to *cure, target or focus*.
+
+ - Using the [mouse-over macro][]:
+
+ A special macro created and maintained by Decursive automatically.
+ (see the link above for more details)
+
+- **Choose who your want to cure** and their priority:
+
+ You can easily **organize the micro-unit frame order** by using the **priority** and
+ **skip** list, clicking on the buttons in the Decursive bar (These list can *also*
+ be displayed by *Ctrl-Left-Clicking* and *Shift-Left-Clicking* on the [MUF][] handle or on Decursive **Mini-Map Icon**).
+
+ These lists allow you to **dynamically sort** the members of your raid or
+ group per **class**, **raid group** or **per name**. A typical
+ priority list looks like this:
+
+ 1. *Your name* (ex: Archarodim) *(You're always the first player displayed)*
+ 2. *The tank name*
+ 3. [Priests]
+ 4. [Paladin]
+
+ Etc...
+
+ The lists Interface allows you to **add, move, delete** entries very easily and intuitively.
+
+ That's why **Decursive doesn't need to display the player names on the MUF interface**:
+ The more the player is high in the window the more important it is to cure him as quickly as possible.
+
+ **You just need to click on the MUF. No time or thoughts are wasted
+ reading a player name and choosing if you have to cure him or not.**
+
+- **Set Decursive's interface to feet your needs:**
+
+ - **The main 'Decursive bar' and the live-list:**
+
+ This bar is the anchor of the live-list, it can also be used to access
+ Decursive options and different frames.
+
+ *Middle-Clicking* or *Ctrl-Left-Clicking* on the label "Decursive" will hide
+ the buttons and lock the frame and the live-list position.
+ *Alt-Click* to move the bar and the live-list.
+
+ Once you've placed the bar at a position you like you can **hide it**
+ completely clicking on the **'X'** button.
+
+ Various options exists to customize how the live-list behaves.
+
+ - **The** [MUFs][] **window**:
+
+ You can change almost *every aspects* of this window **(Size, Shape,
+ Colors, Behavior, opacity, spacing, etc...)**, just look in the options.
+
+ **Move the MUF window** by *Alt-Left-clicking* above the first MUF, there is a
+ hidden **handle** to move the frame.
+
+- **WoW key binding interface:**
+
+ You can bind a lot of things to keys under "Decursive" section.
+
+- **The option menu:**
+
+ There are **several ways** to access the options:
+
+ - On the MUFs handle, or on Decursive icon (Mini-Map or LDB), *Alt-Right-Click*
+ to display a **static option panel**. (Or type /DcrOptions in the chat window)
+ - In Blizzard Interface->Addons panel, there is a Decursive section.
+
+ Each options has an explanation tool-tip, here are **the most important ones**:
+
+ - **Bind Decursive [mouse-over macro][] to a key:**
+
+ Hitting the bound key will cure the unit under your mouse pointer (the
+ key alone is the first spell, use *Ctrl+key* for the 2nd spell and *shift* for
+ the third)
+
+ - You can **choose what you want to cure** and the **priority**
+ of **each affliction type**, the priority determines what affliction is shown
+ first (in the live-list) but also the key and click mapping of your spells in
+ the MUFs and in the [mouse-over macro][] (look at the tool-tips to know the
+ current bindings)
+
+ - You can **add afflictions** to ignore while in combat (or always) per
+ **class**, it **avoids to waste time and mana** ; Decursive already has
+ a comprehensive affliction list ignored on specific classes.
+
+ The addition of affliction names is **easily done** through a dynamic menu in the
+ options listing recently cured ones *(no need to manually enter the affliction
+ name)*
+
+ - You can **display a fake affliction** to set and place the different aspects
+ of Decursive's interface when a real affliction is detected.
+
+ - Change the way and where Decursive displays its various messages.
+
+ - You can **save your settings** per character/server/class
+ and create custom option profiles.
+
+
+*See also:*
+
+- [Micro Unit Frames documentation][MUFs]
+- [Decursive Macro documentation][mouse-over macro]
+- [Frequently Asked Questions][FAQ] *try this before asking any question*
+- [commands][]
+
+
+[MUFs]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frames"
+[MUF]: http://www.wowace.com/projects/decursive/pages/main/mufs/ "Micro Unit Frame"
+[FAQ]: http://www.wowace.com/projects/decursive/pages/main/faq/ "F.A.Q section"
+[mouse-over macro]: http://www.wowace.com/projects/decursive/pages/main/macro/ "Decursive's mouse-over macro documentation"
+[commands]: http://www.wowace.com/projects/decursive/pages/main/commands/ "Command lines"
+[user-actions]: http://www.wowace.com/projects/decursive/pages/main/user-actions/ "Decursive, user possible actions"
diff --git a/Decursive/embeds.xml b/Decursive/embeds.xml
new file mode 100644
index 0000000..47268bc
--- /dev/null
+++ b/Decursive/embeds.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Decursive/iconOFF.tga b/Decursive/iconOFF.tga
new file mode 100644
index 0000000..6207de6
Binary files /dev/null and b/Decursive/iconOFF.tga differ
diff --git a/Decursive/iconON.tga b/Decursive/iconON.tga
new file mode 100644
index 0000000..dfe7563
Binary files /dev/null and b/Decursive/iconON.tga differ
diff --git a/Decursive/loc_lists.txt b/Decursive/loc_lists.txt
new file mode 100644
index 0000000..cf36387
--- /dev/null
+++ b/Decursive/loc_lists.txt
@@ -0,0 +1,140 @@
+
+"DCR_LOC_VERSION_STRING",
+"DCR_LOC_MACRO_COMMAND",
+"DCR_LOC_MACRO_SHOW",
+"DCR_LOC_MACRO_HIDE",
+"DCR_LOC_MACRO_OPTION",
+"DCR_LOC_MACRO_RESET",
+"DCR_LOC_MACRO_PRADD",
+"DCR_LOC_MACRO_PRCLEAR",
+"DCR_LOC_MACRO_PRLIST",
+"DCR_LOC_MACRO_PRSHOW",
+"DCR_LOC_MACRO_SKADD",
+"DCR_LOC_MACRO_SKCLEAR",
+"DCR_LOC_MACRO_SKLIST",
+"DCR_LOC_MACRO_SKSHOW",
+"DCR_LOC_MACRO_DEBUG",
+"DCR_LOC_MACRO_SHOW_ORDER",
+"DCR_LOC_CLASS_DRUID",
+"DCR_LOC_CLASS_HUNTER",
+"DCR_LOC_CLASS_MAGE",
+"DCR_LOC_CLASS_PALADIN",
+"DCR_LOC_CLASS_PRIEST",
+"DCR_LOC_CLASS_ROGUE",
+"DCR_LOC_CLASS_SHAMAN",
+"DCR_LOC_CLASS_WARLOCK",
+"DCR_LOC_CLASS_WARRIOR",
+"DCR_LOC_DISEASE",
+"DCR_LOC_MAGIC",
+"DCR_LOC_POISON",
+"DCR_LOC_CURSE",
+"DCR_LOC_CHARMED",
+"DCR_LOC_ALLIANCE_NAME",
+"DCR_LOC_CLASS_DRUID",
+"DCR_LOC_CLASS_HUNTER",
+"DCR_LOC_CLASS_MAGE",
+"DCR_LOC_CLASS_PALADIN",
+"DCR_LOC_CLASS_PRIEST",
+"DCR_LOC_CLASS_ROGUE",
+"DCR_LOC_CLASS_SHAMAN",
+"DCR_LOC_CLASS_WARLOCK",
+"DCR_LOC_CLASS_WARRIOR",
+"DCR_LOC_STR_OTHER",
+"DCR_LOC_STR_ANCHOR",
+"DCR_LOC_STR_OPTIONS",
+"DCR_LOC_STR_CLOSE",
+"DCR_LOC_STR_DCR_PRIO",
+"DCR_LOC_STR_DCR_SKIP",
+"DCR_LOC_STR_QUICK_POP",
+"DCR_LOC_STR_POP",
+"DCR_LOC_STR_GROUP",
+"DCR_LOC_STR_NOMANA",
+"DCR_LOC_STR_UNUSABLE",
+"DCR_LOC_STR_NEED_CURE_ACTION_IN_BARS",
+"DCR_LOC_UP",
+"DCR_LOC_DOWN",
+"DCR_LOC_PRIORITY_SHOW",
+"DCR_LOC_POPULATE",
+"DCR_LOC_SKIP_SHOW",
+"DCR_LOC_ANCHOR_SHOW",
+"DCR_LOC_OPTION_SHOW",
+"DCR_LOC_CLEAR_PRIO",
+"DCR_LOC_CLEAR_SKIP",
+"DCR_LOC_AF_TYPE",
+"DCR_LOC_PET_FELHUNTER",
+"DCR_LOC_PET_DOOMGUARD",
+"DCR_LOC_PET_FEL_CAST",
+"DCR_LOC_PET_DOOM_CAST",
+"DCR_LOC_SPELL_CURE_DISEASE",
+"DCR_LOC_SPELL_ABOLISH_DISEASE",
+"DCR_LOC_SPELL_PURIFY",
+"DCR_LOC_SPELL_CLEANSE",
+"DCR_LOC_SPELL_DISPELL_MAGIC",
+"DCR_LOC_SPELL_CURE_POISON",
+"DCR_LOC_SPELL_ABOLISH_POISON",
+"DCR_LOC_SPELL_REMOVE_LESSER_CURSE",
+"DCR_LOC_SPELL_REMOVE_CURSE",
+"DCR_LOC_SPELL_PURGE",
+"DCR_LOC_SPELL_NO_RANK",
+"DCR_LOC_SPELL_RANK_1",
+"DCR_LOC_SPELL_RANK_2",
+"DCR_LOC_DISABLE_AUTOSELFCAST",
+"DCR_LOC_PRIORITY_LIST",
+"DCR_LOC_SKIP_LIST_STR",
+"DCR_LOC_SKIP_OPT_STR",
+"DCR_LOC_POPULATE_LIST",
+"DCR_LOC_RREMOVE_ID",
+"DCR_LOC_HIDE_MAIN",
+"DCR_LOC_SHOW_MSG",
+"DCR_LOC_IS_HERE_MSG",
+"DCR_LOC_PRINT_CHATFRAME",
+"DCR_LOC_PRINT_CUSTOM",
+"DCR_LOC_PRINT_ERRORS",
+"DCR_LOC_SHOW_TOOLTIP",
+"DCR_LOC_REVERSE_LIVELIST",
+"DCR_LOC_TIE_LIVELIST",
+"DCR_LOC_HIDE_LIVELIST",
+"DCR_LOC_AMOUNT_AFFLIC",
+"DCR_LOC_BLACK_LENGTH",
+"DCR_LOC_SCAN_LENGTH",
+"DCR_LOC_ABOLISH_CHECK",
+"DCR_LOC_BEST_SPELL",
+"DCR_LOC_RANDOM_ORDER",
+"DCR_LOC_CURE_PETS",
+"DCR_LOC_IGNORE_STEALTH",
+"DCR_LOC_PLAY_SOUND",
+"DCR_LOC_ANCHOR",
+"DCR_LOC_CHECK_RANGE",
+"DCR_LOC_DONOT_BL_PRIO",
+"DCR_LOC_CHOOSE_CURE",
+"DCR_LOC_ABORT_SIP",
+"DCR_LOC_DISPELL_ENEMY",
+"DCR_LOC_NOT_CLEANED",
+"DCR_LOC_CLEAN_STRING",
+"DCR_LOC_SPELL_FOUND",
+"DCR_LOC_NO_SPELLS",
+"DCR_LOC_NO_SPELLS_RDY",
+"DCR_LOC_OUT_OF_RANGE",
+"DCR_LOC_IGNORE_STRING",
+"DCR_LOC_INVISIBLE_LIST",
+"DCR_LOC_IGNORELIST",
+"DCR_LOC_SKIP_LIST",
+"DCR_LOC_SKIP_BY_CLASS_LIST",
+"DCR_LOC_CLASS_WARRIOR",
+"DCR_LOC_CLASS_ROGUE",
+"DCR_LOC_CLASS_HUNTER",
+"DCR_LOC_CLASS_MAGE",
+"DCR_LOC_DREAMLESSSLEEP",
+"DCR_LOC_GDREAMLESSSLEEP",
+"DCR_LOC_ANCIENTHYSTERIA",
+"DCR_LOC_IGNITE",
+"DCR_LOC_TAINTEDMIND",
+"DCR_LOC_MAGMASHAKLES",
+"DCR_LOC_CRIPLES",
+"DCR_LOC_FROSTTRAPAURA",
+"DCR_LOC_DUSTCLOUD",
+"DCR_LOC_WIDOWSEMBRACE",
+"DCR_LOC_CURSEOFTONGUES",
+"DCR_LOC_SONICBURST",
+"DCR_LOC_THUNDERCLAP",
+"DCR_LOC_DELUSIONOFJINDO",
diff --git a/README.md b/README.md
index 226db33..49ccd35 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# Addon Name
+# Decursive
-This is the repository for . Modified for Ascension.gg.
\ No newline at end of file
+This is the repository for Decursive. Modified for Ascension.gg.
\ No newline at end of file