diff --git a/Icons/Envoker.tga b/Icons/Envoker.tga
new file mode 100644
index 0000000..6d31d3a
Binary files /dev/null and b/Icons/Envoker.tga differ
diff --git a/Libs/.vscode/settings.json b/Libs/.vscode/settings.json
new file mode 100644
index 0000000..a367771
--- /dev/null
+++ b/Libs/.vscode/settings.json
@@ -0,0 +1,20 @@
+{
+ "Lua.diagnostics.globals": [
+ "LibStub",
+ "LibStub",
+ "SMARTBUFF_TITLE",
+ "SMARTBUFF_TITLE",
+ "SMARTBUFF_Options",
+ "SMARTBUFF_Options",
+ "SMARTBUFF_OToggleBuff",
+ "SMARTBUFF_OToggleBuff",
+ "SMARTDEBUFF_ToggleSF",
+ "SMARTDEBUFF_ToggleSF",
+ "SMARTBUFF_OptionsFrame_Toggle",
+ "SMARTBUFF_OptionsFrame_Toggle",
+ "SMARTBUFF_TITAN_TT",
+ "SMARTBUFF_TITAN_TT",
+ "SMARTBUFF_OToggle",
+ "SMARTBUFF_OToggle"
+ ]
+}
\ No newline at end of file
diff --git a/Libs/Broker_SmartBuff/Broker_SmartBuff.lua b/Libs/Broker_SmartBuff/Broker_SmartBuff.lua
new file mode 100644
index 0000000..ae1b766
--- /dev/null
+++ b/Libs/Broker_SmartBuff/Broker_SmartBuff.lua
@@ -0,0 +1,45 @@
+-------------------------------------------------------------------------------
+-- Broker: SmartBuff
+-- Created by Aeldra (EU-Proudmoore)
+--
+-- Data Broker support
+-------------------------------------------------------------------------------
+
+if (not SMARTBUFF_TITLE) then return end
+
+local F = CreateFrame("Frame", "Broker_SmartBuff");
+
+function SMARTBUFF_BROKER_SetIcon()
+ if (not F.LS) then return end
+ if (SMARTBUFF_Options and SMARTBUFF_Options.Toggle) then
+ F.LS.icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconEnabled";
+ else
+ F.LS.icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconDisabled";
+ end
+end
+
+F.LS = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("SmartBuff", {
+ type = "launcher",
+ label = SMARTBUFF_TITLE,
+ OnClick = function(_, msg)
+ if (msg == "RightButton") then
+ SMARTBUFF_OToggle();
+ SMARTBUFF_BROKER_SetIcon(); -- bug fix, credit: SunNova
+ elseif (msg == "LeftButton" and IsAltKeyDown()) then
+ if (IsAddOnLoaded("SmartDebuff")) then
+ SMARTDEBUFF_ToggleSF();
+ end
+ elseif (msg == "LeftButton") then
+ SMARTBUFF_OptionsFrame_Toggle();
+ end
+ end,
+ icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconDisabled",
+ OnTooltipShow = function(tooltip)
+ if (not tooltip or not tooltip.AddLine) then return end
+ tooltip:AddLine("|cffffffff"..SMARTBUFF_TITLE.."|r");
+ tooltip:AddLine(SMARTBUFF_TITAN_TT);
+ end,
+});
+
+F:Hide();
+--print("Borker - SmartBuff loaded");
diff --git a/Libs/Broker_SmartBuff/Broker_SmartBuff.toc b/Libs/Broker_SmartBuff/Broker_SmartBuff.toc
new file mode 100644
index 0000000..f3e3f8f
--- /dev/null
+++ b/Libs/Broker_SmartBuff/Broker_SmartBuff.toc
@@ -0,0 +1,10 @@
+## Interface: 90207
+## Title: Broker: Smart|cffffffffBuff|r
+## Version: 1.90207
+## Notes: SmartBuff support for Data Broker
+## Author: |cff20d2ffAeldra|r (EU-Proudmoore)
+## Dependencies: SmartBuff
+## X-Category: Miscellaneous
+
+LibDataBroker-1.1.lua
+Broker_SmartBuff.lua
diff --git a/Libs/Broker_SmartBuff/LibDataBroker-1.1.lua b/Libs/Broker_SmartBuff/LibDataBroker-1.1.lua
new file mode 100644
index 0000000..f47c0cd
--- /dev/null
+++ b/Libs/Broker_SmartBuff/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/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua
new file mode 100644
index 0000000..a8377fe
--- /dev/null
+++ b/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua
@@ -0,0 +1,212 @@
+--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]]
+local MAJOR, MINOR = "CallbackHandler-1.0", 7
+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 Dispatch(handlers, ...)
+ local index, method = next(handlers)
+ if not method then return end
+ repeat
+ xpcall(method, errorhandler, ...)
+ index, method = next(handlers, index)
+ until not method
+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)
+
+ 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
+
+ Dispatch(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/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua b/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
new file mode 100644
index 0000000..e3d6819
--- /dev/null
+++ b/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
@@ -0,0 +1,1131 @@
+--[[
+Name: LibRangeCheck-2.0
+Revision: $Revision: 214 $
+Author(s): mitch0
+Website: http://www.wowace.com/projects/librangecheck-2-0/
+Description: A range checking library based on interact distances and spell ranges
+Dependencies: LibStub
+License: Public Domain
+]]
+
+--- LibRangeCheck-2.0 provides an easy way to check for ranges and get suitable range checking functions for specific ranges.\\
+-- The checkers use spell and item range checks, or interact based checks for special units where those two cannot be used.\\
+-- The lib handles the refreshing of checker lists in case talents / spells change and in some special cases when equipment changes (for example some of the mage pvp gloves change the range of the Fire Blast spell), and also handles the caching of items used for item-based range checks.\\
+-- A callback is provided for those interested in checker changes.
+-- @usage
+-- local rc = LibStub("LibRangeCheck-2.0")
+--
+-- rc.RegisterCallback(self, rc.CHECKERS_CHANGED, function() print("need to refresh my stored checkers") end)
+--
+-- local minRange, maxRange = rc:GetRange('target')
+-- if not minRange then
+-- print("cannot get range estimate for target")
+-- elseif not maxRange then
+-- print("target is over " .. minRange .. " yards")
+-- else
+-- print("target is between " .. minRange .. " and " .. maxRange .. " yards")
+-- end
+--
+-- local meleeChecker = rc:GetFriendMaxChecker(rc.MeleeRange) or rc:GetFriendMinChecker(rc.MeleeRange) -- use the closest checker (MinChecker) if no valid Melee checker is found
+-- for i = 1, 4 do
+-- -- TODO: check if unit is valid, etc
+-- if meleeChecker("party" .. i) then
+-- print("Party member " .. i .. " is in Melee range")
+-- end
+-- end
+--
+-- local safeDistanceChecker = rc:GetHarmMinChecker(30)
+-- -- negate the result of the checker!
+-- local isSafelyAway = not safeDistanceChecker('target')
+--
+-- @class file
+-- @name LibRangeCheck-2.0
+local MAJOR_VERSION = "LibRangeCheck-2.0"
+local MINOR_VERSION = tonumber(("$Revision: 214 $"):match("%d+")) + 100000
+
+local lib, oldminor = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
+if not lib then
+ return
+end
+
+local IsClassic = false
+ or (_G.WOW_PROJECT_ID == _G.WOW_PROJECT_CLASSIC)
+ or (_G.WOW_PROJECT_ID == _G.WOW_PROJECT_BURNING_CRUSADE_CLASSIC)
+ or (_G.WOW_PROJECT_ID == _G.WOW_PROJECT_WRATH_CLASSIC)
+
+-- << STATIC CONFIG
+
+local UpdateDelay = .5
+local ItemRequestTimeout = 10.0
+
+-- interact distance based checks. ranges are based on my own measurements (thanks for all the folks who helped me with this)
+local DefaultInteractList = {
+ [3] = 8,
+-- [2] = 9,
+ [4] = 28,
+}
+
+-- interact list overrides for races
+local InteractLists = {
+ ["Tauren"] = {
+ [3] = 6,
+-- [2] = 7,
+ [4] = 25,
+ },
+ ["Scourge"] = {
+ [3] = 7,
+-- [2] = 8,
+ [4] = 27,
+ },
+}
+
+local MeleeRange = 2
+
+-- list of friendly spells that have different ranges
+local FriendSpells = {}
+-- list of harmful spells that have different ranges
+local HarmSpells = {}
+
+FriendSpells["DEATHKNIGHT"] = {
+}
+HarmSpells["DEATHKNIGHT"] = {
+ 49576, -- ["Death Grip"], -- 30
+}
+
+FriendSpells["DEMONHUNTER"] = {
+}
+HarmSpells["DEMONHUNTER"] = {
+ 185123, -- ["Throw Glaive"], -- 30
+}
+
+FriendSpells["DRUID"] = {
+ 774, -- ["Rejuvenation"], -- 40
+ 2782, -- ["Remove Corruption"], -- 40
+}
+HarmSpells["DRUID"] = {
+ 5176, -- ["Wrath"], -- 40
+ 339, -- ["Entangling Roots"], -- 35
+ 6795, -- ["Growl"], -- 30
+ 33786, -- ["Cyclone"], -- 20
+ 22568, -- ["Ferocious Bite"], -- Melee
+}
+
+FriendSpells["HUNTER"] = {}
+HarmSpells["HUNTER"] = {
+ 75, -- ["Auto Shot"], -- 40
+}
+
+FriendSpells["MAGE"] = {
+}
+HarmSpells["MAGE"] = {
+ 44614, --["Frostfire Bolt"], -- 40
+ 5019, -- ["Shoot"], -- 30
+}
+
+FriendSpells["MONK"] = {
+ 115450, -- ["Detox"], -- 40
+ 115546, -- ["Provoke"], -- 30
+}
+HarmSpells["MONK"] = {
+ 115546, -- ["Provoke"], -- 30
+ 115078, -- ["Paralysis"], -- 20
+ 100780, -- ["Tiger Palm"], -- Melee
+}
+
+FriendSpells["PALADIN"] = {
+ 19750, -- ["Flash of Light"], -- 40
+}
+HarmSpells["PALADIN"] = {
+ 62124, -- ["Reckoning"], -- 30
+ 20271, -- ["Judgement"], -- 30
+ 853, -- ["Hammer of Justice"], -- 10
+ 35395, -- ["Crusader Strike"], -- Melee
+}
+
+FriendSpells["PRIEST"] = {
+ 527, -- ["Purify"], -- 40
+ 17, -- ["Power Word: Shield"], -- 40
+}
+HarmSpells["PRIEST"] = {
+ 589, -- ["Shadow Word: Pain"], -- 40
+ 5019, -- ["Shoot"], -- 30
+}
+
+FriendSpells["ROGUE"] = {}
+HarmSpells["ROGUE"] = {
+ 2764, -- ["Throw"], -- 30
+ 2094, -- ["Blind"], -- 15
+}
+
+FriendSpells["SHAMAN"] = {
+ 8004, -- ["Healing Surge"], -- 40
+ 546, -- ["Water Walking"], -- 30
+}
+HarmSpells["SHAMAN"] = {
+ 403, -- ["Lightning Bolt"], -- 40
+ 370, -- ["Purge"], -- 30
+ 73899, -- ["Primal Strike"],. -- Melee
+}
+
+FriendSpells["WARRIOR"] = {}
+HarmSpells["WARRIOR"] = {
+ 355, -- ["Taunt"], -- 30
+ 100, -- ["Charge"], -- 8-25
+ 5246, -- ["Intimidating Shout"], -- 8
+}
+
+FriendSpells["WARLOCK"] = {
+ 5697, -- ["Unending Breath"], -- 30
+}
+HarmSpells["WARLOCK"] = {
+ 686, -- ["Shadow Bolt"], -- 40
+ 5019, -- ["Shoot"], -- 30
+}
+
+-- Items [Special thanks to Maldivia for the nice list]
+
+local FriendItems = {
+ [1] = {
+ 90175, -- Gin-Ji Knife Set -- doesn't seem to work for pets (always returns nil)
+ },
+ [2] = {
+ 37727, -- Ruby Acorn
+ },
+ [3] = {
+ 42732, -- Everfrost Razor
+ },
+ [4] = {
+ 129055, -- Shoe Shine Kit
+ },
+ [5] = {
+ 8149, -- Voodoo Charm
+ 136605, -- Solendra's Compassion
+ 63427, -- Worgsaw
+ },
+ [6] = {
+ 164766, -- Iwen's Enchanting Rod
+ },
+ [7] = {
+ 61323, -- Ruby Seeds
+ },
+ [8] = {
+ 34368, -- Attuned Crystal Cores
+ 33278, -- Burning Torch
+ },
+ [10] = {
+ 32321, -- Sparrowhawk Net
+ },
+ [15] = {
+ 1251, -- Linen Bandage
+ 2581, -- Heavy Linen Bandage
+ 3530, -- Wool Bandage
+ 3531, -- Heavy Wool Bandage
+ 6450, -- Silk Bandage
+ 6451, -- Heavy Silk Bandage
+ 8544, -- Mageweave Bandage
+ 8545, -- Heavy Mageweave Bandage
+ 14529, -- Runecloth Bandage
+ 14530, -- Heavy Runecloth Bandage
+ 21990, -- Netherweave Bandage
+ 21991, -- Heavy Netherweave Bandage
+ 34721, -- Frostweave Bandage
+ 34722, -- Heavy Frostweave Bandage
+-- 38643, -- Thick Frostweave Bandage
+-- 38640, -- Dense Frostweave Bandage
+ },
+ [20] = {
+ 21519, -- Mistletoe
+ },
+ [25] = {
+ 31463, -- Zezzak's Shard
+ },
+ [30] = {
+ 1180, -- Scroll of Stamina
+ 1478, -- Scroll of Protection II
+ 3012, -- Scroll of Agility
+ 1712, -- Scroll of Spirit II
+ 2290, -- Scroll of Intellect II
+ 1711, -- Scroll of Stamina II
+ 34191, -- Handful of Snowflakes
+ },
+ [35] = {
+ 18904, -- Zorbin's Ultra-Shrinker
+ },
+ [38] = {
+ 140786, -- Ley Spider Eggs
+ },
+ [40] = {
+ 34471, -- Vial of the Sunwell
+ },
+ [45] = {
+ 32698, -- Wrangling Rope
+ },
+ [50] = {
+ 116139, -- Haunting Memento
+ },
+ [55] = {
+ 74637, -- Kiryn's Poison Vial
+ },
+ [60] = {
+ 32825, -- Soul Cannon
+ 37887, -- Seeds of Nature's Wrath
+ },
+ [70] = {
+ 41265, -- Eyesore Blaster
+ },
+ [80] = {
+ 35278, -- Reinforced Net
+ },
+ [90] = {
+ 133925, -- Fel Lash
+ },
+ [100] = {
+ 41058, -- Hyldnir Harpoon
+ },
+ [150] = {
+ 46954, -- Flaming Spears
+ },
+ [200] = {
+ 75208, -- Rancher's Lariat
+ },
+}
+
+local HarmItems = {
+ [1] = {
+ },
+ [2] = {
+ 37727, -- Ruby Acorn
+ },
+ [3] = {
+ 42732, -- Everfrost Razor
+ },
+ [4] = {
+ 129055, -- Shoe Shine Kit
+ },
+ [5] = {
+ 8149, -- Voodoo Charm
+ 136605, -- Solendra's Compassion
+ 63427, -- Worgsaw
+ },
+ [6] = {
+ 164766, -- Iwen's Enchanting Rod
+ },
+ [7] = {
+ 61323, -- Ruby Seeds
+ },
+ [8] = {
+ 34368, -- Attuned Crystal Cores
+ 33278, -- Burning Torch
+ },
+ [10] = {
+ 32321, -- Sparrowhawk Net
+ },
+ [15] = {
+ 33069, -- Sturdy Rope
+ },
+ [20] = {
+ 10645, -- Gnomish Death Ray
+ },
+ [25] = {
+ 24268, -- Netherweave Net
+ 41509, -- Frostweave Net
+ 31463, -- Zezzak's Shard
+ },
+ [30] = {
+ 835, -- Large Rope Net
+ 7734, -- Six Demon Bag
+ 34191, -- Handful of Snowflakes
+ },
+ [35] = {
+ 24269, -- Heavy Netherweave Net
+ 18904, -- Zorbin's Ultra-Shrinker
+ },
+ [38] = {
+ 140786, -- Ley Spider Eggs
+ },
+ [40] = {
+ 28767, -- The Decapitator
+ },
+ [45] = {
+-- 32698, -- Wrangling Rope
+ 23836, -- Goblin Rocket Launcher
+ },
+ [50] = {
+ 116139, -- Haunting Memento
+ },
+ [55] = {
+ 74637, -- Kiryn's Poison Vial
+ },
+ [60] = {
+ 32825, -- Soul Cannon
+ 37887, -- Seeds of Nature's Wrath
+ },
+ [70] = {
+ 41265, -- Eyesore Blaster
+ },
+ [80] = {
+ 35278, -- Reinforced Net
+ },
+ [90] = {
+ 133925, -- Fel Lash
+ },
+ [100] = {
+ 33119, -- Malister's Frost Wand
+ },
+ [150] = {
+ 46954, -- Flaming Spears
+ },
+ [200] = {
+ 75208, -- Rancher's Lariat
+ },
+}
+
+-- This could've been done by checking player race as well and creating tables for those, but it's easier like this
+for k, v in pairs(FriendSpells) do
+ tinsert(v, 28880) -- ["Gift of the Naaru"]
+end
+
+-- >> END OF STATIC CONFIG
+
+-- cache
+
+local setmetatable = setmetatable
+local tonumber = tonumber
+local pairs = pairs
+local tostring = tostring
+local print = print
+local next = next
+local type = type
+local wipe = wipe
+local tinsert = tinsert
+local tremove = tremove
+local BOOKTYPE_SPELL = BOOKTYPE_SPELL
+local GetSpellInfo = GetSpellInfo
+local GetSpellBookItemName = GetSpellBookItemName
+local GetNumSpellTabs = GetNumSpellTabs
+local GetSpellTabInfo = GetSpellTabInfo
+local GetItemInfo = GetItemInfo
+local UnitAura = UnitAura
+local UnitCanAttack = UnitCanAttack
+local UnitCanAssist = UnitCanAssist
+local UnitExists = UnitExists
+local UnitIsDeadOrGhost = UnitIsDeadOrGhost
+local CheckInteractDistance = CheckInteractDistance
+local IsSpellInRange = IsSpellInRange
+local IsItemInRange = IsItemInRange
+local UnitClass = UnitClass
+local UnitRace = UnitRace
+local GetInventoryItemLink = GetInventoryItemLink
+local GetSpecialization = GetSpecialization
+local GetSpecializationInfo = GetSpecializationInfo
+local GetTime = GetTime
+local HandSlotId = GetInventorySlotInfo("HandsSlot")
+local math_floor = math.floor
+local UnitIsVisible = UnitIsVisible
+
+-- temporary stuff
+
+local pendingItemRequest
+local itemRequestTimeoutAt
+local foundNewItems
+local cacheAllItems
+local friendItemRequests
+local harmItemRequests
+local lastUpdate = 0
+
+-- minRangeCheck is a function to check if spells with minimum range are really out of range, or fail due to range < minRange. See :init() for its setup
+local minRangeCheck = function(unit) return CheckInteractDistance(unit, 2) end
+
+local checkers_Spell = setmetatable({}, {
+ __index = function(t, spellIdx)
+ local func = function(unit)
+ if IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1 then
+ return true
+ end
+ end
+ t[spellIdx] = func
+ return func
+ end
+})
+local checkers_SpellWithMin = setmetatable({}, {
+ __index = function(t, spellIdx)
+ local func = function(unit)
+ if IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1 then
+ return true
+ elseif minRangeCheck(unit) then
+ return true, true
+ end
+ end
+ t[spellIdx] = func
+ return func
+ end
+})
+local checkers_Item = setmetatable({}, {
+ __index = function(t, item)
+ local func = function(unit)
+ return IsItemInRange(item, unit)
+ end
+ t[item] = func
+ return func
+ end
+})
+local checkers_Interact = setmetatable({}, {
+ __index = function(t, index)
+ local func = function(unit)
+ if CheckInteractDistance(unit, index) then
+ return true
+ end
+ end
+ t[index] = func
+ return func
+ end
+})
+
+-- helper functions
+
+local function copyTable(src, dst)
+ if type(dst) ~= "table" then dst = {} end
+ if type(src) == "table" then
+ for k, v in pairs(src) do
+ if type(v) == "table" then
+ v = copyTable(v, dst[k])
+ end
+ dst[k] = v
+ end
+ end
+ return dst
+end
+
+
+local function initItemRequests(cacheAll)
+ friendItemRequests = copyTable(FriendItems)
+ harmItemRequests = copyTable(HarmItems)
+ cacheAllItems = cacheAll
+ foundNewItems = nil
+end
+
+local function getNumSpells()
+ local _, _, offset, numSpells = GetSpellTabInfo(GetNumSpellTabs())
+ return offset + numSpells
+end
+
+-- return the spellIndex of the given spell by scanning the spellbook
+local function findSpellIdx(spellName)
+ if not spellName or spellName == "" then
+ return nil
+ end
+ for i = 1, getNumSpells() do
+ local spell, rank = GetSpellBookItemName(i, BOOKTYPE_SPELL)
+ if spell == spellName then return i end
+ end
+ return nil
+end
+
+-- minRange should be nil if there's no minRange, not 0
+local function addChecker(t, range, minRange, checker, info)
+ local rc = { ["range"] = range, ["minRange"] = minRange, ["checker"] = checker, ["info"] = info }
+ for i = 1, #t do
+ local v = t[i]
+ if rc.range == v.range then return end
+ if rc.range > v.range then
+ tinsert(t, i, rc)
+ return
+ end
+ end
+ tinsert(t, rc)
+end
+
+local function createCheckerList(spellList, itemList, interactList)
+ local res = {}
+ if itemList then
+ for range, items in pairs(itemList) do
+ for i = 1, #items do
+ local item = items[i]
+ if GetItemInfo(item) then
+ addChecker(res, range, nil, checkers_Item[item], "item:" .. item)
+ break
+ end
+ end
+ end
+ end
+
+ if spellList then
+ for i = 1, #spellList do
+ local sid = spellList[i]
+ local name, _, _, _, minRange, range = GetSpellInfo(sid)
+ local spellIdx = findSpellIdx(name)
+ if spellIdx and range then
+ minRange = math_floor(minRange + 0.5)
+ range = math_floor(range + 0.5)
+ -- print("### spell: " .. tostring(name) .. ", " .. tostring(minRange) .. " - " .. tostring(range))
+ if minRange == 0 then -- getRange() expects minRange to be nil in this case
+ minRange = nil
+ end
+ if range == 0 then
+ range = MeleeRange
+ end
+ if minRange then
+ addChecker(res, range, minRange, checkers_SpellWithMin[spellIdx], "spell:" .. sid .. ":" .. tostring(name))
+ else
+ addChecker(res, range, minRange, checkers_Spell[spellIdx], "spell:" .. sid .. ":" .. tostring(name))
+ end
+ end
+ end
+ end
+
+ if interactList and not next(res) then
+ for index, range in pairs(interactList) do
+ addChecker(res, range, nil, checkers_Interact[index], "interact:" .. index)
+ end
+ end
+
+ return res
+end
+
+-- returns minRange, maxRange or nil
+local function getRange(unit, checkerList)
+ local lo, hi = 1, #checkerList
+ while lo <= hi do
+ local mid = math_floor((lo + hi) / 2)
+ local rc = checkerList[mid]
+ if rc.checker(unit) then
+ lo = mid + 1
+ else
+ hi = mid - 1
+ end
+ end
+ if lo > #checkerList then
+ return 0, checkerList[#checkerList].range
+ elseif lo <= 1 then
+ return checkerList[1].range, nil
+ else
+ return checkerList[lo].range, checkerList[lo - 1].range
+ end
+end
+
+local function updateCheckers(origList, newList)
+ if #origList ~= #newList then
+ wipe(origList)
+ copyTable(newList, origList)
+ return true
+ end
+ for i = 1, #origList do
+ if origList[i].range ~= newList[i].range or origList[i].checker ~= newList[i].checker then
+ wipe(origList)
+ copyTable(newList, origList)
+ return true
+ end
+ end
+end
+
+local function rcIterator(checkerList)
+ local curr = #checkerList
+ return function()
+ local rc = checkerList[curr]
+ if not rc then
+ return nil
+ end
+ curr = curr - 1
+ return rc.range, rc.checker
+ end
+end
+
+local function getMinChecker(checkerList, range)
+ local checker, checkerRange
+ for i = 1, #checkerList do
+ local rc = checkerList[i]
+ if rc.range < range then
+ return checker, checkerRange
+ end
+ checker, checkerRange = rc.checker, rc.range
+ end
+ return checker, checkerRange
+end
+
+local function getMaxChecker(checkerList, range)
+ for i = 1, #checkerList do
+ local rc = checkerList[i]
+ if rc.range <= range then
+ return rc.checker, rc.range
+ end
+ end
+end
+
+local function getChecker(checkerList, range)
+ for i = 1, #checkerList do
+ local rc = checkerList[i]
+ if rc.range == range then
+ return rc.checker
+ end
+ end
+end
+
+local function null()
+end
+
+local function createSmartChecker(friendChecker, harmChecker, miscChecker)
+ miscChecker = miscChecker or null
+ friendChecker = friendChecker or miscChecker
+ harmChecker = harmChecker or miscChecker
+ return function(unit)
+ if not UnitExists(unit) then
+ return nil
+ end
+ if UnitIsDeadOrGhost(unit) then
+ return miscChecker(unit)
+ end
+ if UnitCanAttack("player", unit) then
+ return harmChecker(unit)
+ elseif UnitCanAssist("player", unit) then
+ return friendChecker(unit)
+ else
+ return miscChecker(unit)
+ end
+ end
+end
+
+-- OK, here comes the actual lib
+
+-- pre-initialize the checkerLists here so that we can return some meaningful result even if
+-- someone manages to call us before we're properly initialized. miscRC should be independent of
+-- race/class/talents, so it's safe to initialize it here
+-- friendRC and harmRC will be properly initialized later when we have all the necessary data for them
+lib.checkerCache_Spell = lib.checkerCache_Spell or {}
+lib.checkerCache_Item = lib.checkerCache_Item or {}
+lib.miscRC = createCheckerList(nil, nil, DefaultInteractList)
+lib.friendRC = createCheckerList(nil, nil, DefaultInteractList)
+lib.harmRC = createCheckerList(nil, nil, DefaultInteractList)
+
+lib.failedItemRequests = {}
+
+-- << Public API
+
+
+--- The callback name that is fired when checkers are changed.
+-- @field
+lib.CHECKERS_CHANGED = "CHECKERS_CHANGED"
+-- "export" it, maybe someone will need it for formatting
+--- Constant for Melee range (2yd).
+-- @field
+lib.MeleeRange = MeleeRange
+
+function lib:findSpellIndex(spell)
+ if type(spell) == 'number' then
+ spell = GetSpellInfo(spell)
+ end
+ return findSpellIdx(spell)
+end
+
+-- returns the range estimate as a string
+-- deprecated, use :getRange(unit) instead and build your own strings
+-- @param checkVisible if set to true, then a UnitIsVisible check is made, and **nil** is returned if the unit is not visible
+function lib:getRangeAsString(unit, checkVisible, showOutOfRange)
+ local minRange, maxRange = self:getRange(unit, checkVisible)
+ if not minRange then return nil end
+ if not maxRange then
+ return showOutOfRange and minRange .. " +" or nil
+ end
+ return minRange .. " - " .. maxRange
+end
+
+-- initialize RangeCheck if not yet initialized or if "forced"
+function lib:init(forced)
+ if self.initialized and (not forced) then
+ return
+ end
+ self.initialized = true
+ local _, playerClass = UnitClass("player")
+ local _, playerRace = UnitRace("player")
+
+ minRangeCheck = nil
+ -- first try to find a nice item we can use for minRangeCheck
+ if HarmItems[15] then
+ local items = HarmItems[15]
+ for i = 1, #items do
+ local item = items[i]
+ if GetItemInfo(item) then
+ minRangeCheck = function(unit)
+ return IsItemInRange(item, unit)
+ end
+ break
+ end
+ end
+ end
+ if not minRangeCheck then
+ -- ok, then try to find some class specific spell
+ if playerClass == "WARRIOR" then
+ -- for warriors, use Intimidating Shout if available
+ local name = GetSpellInfo(5246) -- ["Intimidating Shout"]
+ local spellIdx = findSpellIdx(name)
+ if spellIdx then
+ minRangeCheck = function(unit)
+ return (IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1)
+ end
+ end
+ elseif playerClass == "ROGUE" then
+ -- for rogues, use Blind if available
+ local name = GetSpellInfo(2094) -- ["Blind"]
+ local spellIdx = findSpellIdx(name)
+ if spellIdx then
+ minRangeCheck = function(unit)
+ return (IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1)
+ end
+ end
+ end
+ end
+ if not minRangeCheck then
+ -- fall back to interact distance checks
+ if playerClass == "HUNTER" or playerRace == "Tauren" then
+ -- for hunters, use interact4 as it's safer
+ -- for Taurens interact4 is actually closer than 25yd and interact3 is closer than 8yd, so we can't use that
+ minRangeCheck = checkers_Interact[4]
+ else
+ minRangeCheck = checkers_Interact[3]
+ end
+ end
+
+ local interactList = InteractLists[playerRace] or DefaultInteractList
+ self.handSlotItem = GetInventoryItemLink("player", HandSlotId)
+ local changed = false
+ if updateCheckers(self.friendRC, createCheckerList(FriendSpells[playerClass], FriendItems, interactList)) then
+ changed = true
+ end
+ if updateCheckers(self.harmRC, createCheckerList(HarmSpells[playerClass], HarmItems, interactList)) then
+ changed = true
+ end
+ if updateCheckers(self.miscRC, createCheckerList(nil, nil, interactList)) then
+ changed = true
+ end
+ if changed and self.callbacks then
+ self.callbacks:Fire(self.CHECKERS_CHANGED)
+ end
+end
+
+--- Return an iterator for checkers usable on friendly units as (**range**, **checker**) pairs.
+function lib:GetFriendCheckers()
+ return rcIterator(self.friendRC)
+end
+
+--- Return an iterator for checkers usable on enemy units as (**range**, **checker**) pairs.
+function lib:GetHarmCheckers()
+ return rcIterator(self.harmRC)
+end
+
+--- Return an iterator for checkers usable on miscellaneous units as (**range**, **checker**) pairs. These units are neither enemy nor friendly, such as people in sanctuaries or corpses.
+function lib:GetMiscCheckers()
+ return rcIterator(self.miscRC)
+end
+
+--- Return a checker suitable for out-of-range checking on friendly units, that is, a checker whose range is equal or larger than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetFriendMinChecker(range)
+ return getMinChecker(self.friendRC, range)
+end
+
+--- Return a checker suitable for out-of-range checking on enemy units, that is, a checker whose range is equal or larger than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetHarmMinChecker(range)
+ return getMinChecker(self.harmRC, range)
+end
+
+--- Return a checker suitable for out-of-range checking on miscellaneous units, that is, a checker whose range is equal or larger than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetMiscMinChecker(range)
+ return getMinChecker(self.miscRC, range)
+end
+
+--- Return a checker suitable for in-range checking on friendly units, that is, a checker whose range is equal or smaller than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetFriendMaxChecker(range)
+ return getMaxChecker(self.friendRC, range)
+end
+
+--- Return a checker suitable for in-range checking on enemy units, that is, a checker whose range is equal or smaller than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetHarmMaxChecker(range)
+ return getMaxChecker(self.harmRC, range)
+end
+
+--- Return a checker suitable for in-range checking on miscellaneous units, that is, a checker whose range is equal or smaller than the requested range.
+-- @param range the range to check for.
+-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.
+function lib:GetMiscMaxChecker(range)
+ return getMaxChecker(self.miscRC, range)
+end
+
+--- Return a checker for the given range for friendly units.
+-- @param range the range to check for.
+-- @return **checker** function or **nil** if no suitable checker is available.
+function lib:GetFriendChecker(range)
+ return getChecker(self.friendRC, range)
+end
+
+--- Return a checker for the given range for enemy units.
+-- @param range the range to check for.
+-- @return **checker** function or **nil** if no suitable checker is available.
+function lib:GetHarmChecker(range)
+ return getChecker(self.harmRC, range)
+end
+
+--- Return a checker for the given range for miscellaneous units.
+-- @param range the range to check for.
+-- @return **checker** function or **nil** if no suitable checker is available.
+function lib:GetMiscChecker(range)
+ return getChecker(self.miscRC, range)
+end
+
+--- Return a checker suitable for out-of-range checking that checks the unit type and calls the appropriate checker (friend/harm/misc).
+-- @param range the range to check for.
+-- @return **checker** function.
+function lib:GetSmartMinChecker(range)
+ return createSmartChecker(
+ getMinChecker(self.friendRC, range),
+ getMinChecker(self.harmRC, range),
+ getMinChecker(self.miscRC, range))
+end
+
+--- Return a checker suitable for in-range checking that checks the unit type and calls the appropriate checker (friend/harm/misc).
+-- @param range the range to check for.
+-- @return **checker** function.
+function lib:GetSmartMaxChecker(range)
+ return createSmartChecker(
+ getMaxChecker(self.friendRC, range),
+ getMaxChecker(self.harmRC, range),
+ getMaxChecker(self.miscRC, range))
+end
+
+--- Return a checker for the given range that checks the unit type and calls the appropriate checker (friend/harm/misc).
+-- @param range the range to check for.
+-- @param fallback optional fallback function that gets called as fallback(unit) if a checker is not available for the given type (friend/harm/misc) at the requested range. The default fallback function return nil.
+-- @return **checker** function.
+function lib:GetSmartChecker(range, fallback)
+ return createSmartChecker(
+ getChecker(self.friendRC, range) or fallback,
+ getChecker(self.harmRC, range) or fallback,
+ getChecker(self.miscRC, range) or fallback)
+end
+
+--- Get a range estimate as **minRange**, **maxRange**.
+-- @param unit the target unit to check range to.
+-- @param checkVisible if set to true, then a UnitIsVisible check is made, and **nil** is returned if the unit is not visible
+-- @return **minRange**, **maxRange** pair if a range estimate could be determined, **nil** otherwise. **maxRange** is **nil** if **unit** is further away than the highest possible range we can check.
+-- Includes checks for unit validity and friendly/enemy status.
+-- @usage
+-- local rc = LibStub("LibRangeCheck-2.0")
+-- local minRange, maxRange = rc:GetRange('target')
+-- local minRangeIfVisible, maxRangeIfVisible = rc:GetRange('target', true)
+function lib:GetRange(unit, checkVisible)
+ if not UnitExists(unit) then
+ return nil
+ end
+ if checkVisible and not UnitIsVisible(unit) then
+ return nil
+ end
+ if UnitIsDeadOrGhost(unit) then
+ return getRange(unit, self.miscRC)
+ end
+ if UnitCanAttack("player", unit) then
+ return getRange(unit, self.harmRC)
+ elseif UnitCanAssist("player", unit) then
+ return getRange(unit, self.friendRC)
+ else
+ return getRange(unit, self.miscRC)
+ end
+end
+
+-- keep this for compatibility
+lib.getRange = lib.GetRange
+
+-- >> Public API
+
+function lib:OnEvent(event, ...)
+ if type(self[event]) == 'function' then
+ self[event](self, event, ...)
+ end
+end
+
+function lib:LEARNED_SPELL_IN_TAB()
+ self:scheduleInit()
+end
+
+function lib:CHARACTER_POINTS_CHANGED()
+ self:scheduleInit()
+end
+
+function lib:PLAYER_TALENT_UPDATE()
+ self:scheduleInit()
+end
+
+function lib:SPELLS_CHANGED()
+ self:scheduleInit()
+end
+
+function lib:UNIT_INVENTORY_CHANGED(event, unit)
+ if self.initialized and unit == "player" and self.handSlotItem ~= GetInventoryItemLink("player", HandSlotId) then
+ self:scheduleInit()
+ end
+end
+
+function lib:UNIT_AURA(event, unit)
+ if self.initialized and unit == "player" then
+ self:scheduleAuraCheck()
+ end
+end
+
+function lib:GET_ITEM_INFO_RECEIVED(event, item, success)
+ -- print("### GET_ITEM_INFO_RECEIVED: " .. tostring(item) .. ", " .. tostring(success))
+ if item == pendingItemRequest then
+ pendingItemRequest = nil
+ if not success then
+ self.failedItemRequests[item] = true
+ end
+ lastUpdate = UpdateDelay
+ end
+end
+
+function lib:processItemRequests(itemRequests)
+ while true do
+ local range, items = next(itemRequests)
+ if not range then return end
+ while true do
+ local i, item = next(items)
+ if not i then
+ itemRequests[range] = nil
+ break
+ elseif self.failedItemRequests[item] then
+ -- print("### processItemRequests: failed: " .. tostring(item))
+ tremove(items, i)
+ elseif item == pendingItemRequest and GetTime() < itemRequestTimeoutAt then
+ return true; -- still waiting for server response
+ elseif GetItemInfo(item) then
+ -- print("### processItemRequests: found: " .. tostring(item))
+ if itemRequestTimeoutAt then
+ -- print("### processItemRequests: new: " .. tostring(item))
+ foundNewItems = true
+ itemRequestTimeoutAt = nil
+ pendingItemRequest = nil
+ end
+ if not cacheAllItems then
+ itemRequests[range] = nil
+ break
+ end
+ tremove(items, i)
+ elseif not itemRequestTimeoutAt then
+ -- print("### processItemRequests: waiting: " .. tostring(item))
+ itemRequestTimeoutAt = GetTime() + ItemRequestTimeout
+ pendingItemRequest = item
+ if not self.frame:IsEventRegistered("GET_ITEM_INFO_RECEIVED") then
+ self.frame:RegisterEvent("GET_ITEM_INFO_RECEIVED")
+ end
+ return true
+ elseif GetTime() >= itemRequestTimeoutAt then
+ -- print("### processItemRequests: timeout: " .. tostring(item))
+ if cacheAllItems then
+ print(MAJOR_VERSION .. ": timeout for item: " .. tostring(item))
+ end
+ self.failedItemRequests[item] = true
+ itemRequestTimeoutAt = nil
+ pendingItemRequest = nil
+ tremove(items, i)
+ else
+ return true -- still waiting for server response
+ end
+ end
+ end
+end
+
+function lib:initialOnUpdate()
+ self:init()
+ if friendItemRequests then
+ if self:processItemRequests(friendItemRequests) then return end
+ friendItemRequests = nil
+ end
+ if harmItemRequests then
+ if self:processItemRequests(harmItemRequests) then return end
+ harmItemRequests = nil
+ end
+ if foundNewItems then
+ self:init(true)
+ foundNewItems = nil
+ end
+ if cacheAllItems then
+ print(MAJOR_VERSION .. ": finished cache")
+ cacheAllItems = nil
+ end
+ self.frame:Hide()
+ self.frame:UnregisterEvent("GET_ITEM_INFO_RECEIVED")
+end
+
+function lib:scheduleInit()
+ self.initialized = nil
+ lastUpdate = 0
+ self.frame:Show()
+end
+
+function lib:scheduleAuraCheck()
+ lastUpdate = UpdateDelay
+ self.frame:Show()
+end
+
+
+-- << load-time initialization
+
+function lib:activate()
+ if not self.frame then
+ local frame = CreateFrame("Frame")
+ self.frame = frame
+ frame:RegisterEvent("LEARNED_SPELL_IN_TAB")
+ frame:RegisterEvent("CHARACTER_POINTS_CHANGED")
+ if not IsClassic then
+ frame:RegisterEvent("PLAYER_TALENT_UPDATE")
+ end
+ frame:RegisterEvent("SPELLS_CHANGED")
+ local _, playerClass = UnitClass("player")
+ if playerClass == "MAGE" or playerClass == "SHAMAN" then
+ -- Mage and Shaman gladiator gloves modify spell ranges
+ frame:RegisterUnitEvent("UNIT_INVENTORY_CHANGED", "player")
+ end
+ end
+ initItemRequests()
+ self.frame:SetScript("OnEvent", function(frame, ...) self:OnEvent(...) end)
+ self.frame:SetScript("OnUpdate", function(frame, elapsed)
+ lastUpdate = lastUpdate + elapsed
+ if lastUpdate < UpdateDelay then
+ return
+ end
+ lastUpdate = 0
+ self:initialOnUpdate()
+ end)
+ self:scheduleInit()
+end
+
+--- BEGIN CallbackHandler stuff
+
+do
+ local lib = lib -- to keep a ref even though later we nil lib
+ --- Register a callback to get called when checkers are updated
+ -- @class function
+ -- @name lib.RegisterCallback
+ -- @usage
+ -- rc.RegisterCallback(self, rc.CHECKERS_CHANGED, "myCallback")
+ -- -- or
+ -- rc.RegisterCallback(self, "CHECKERS_CHANGED", someCallbackFunction)
+ -- @see CallbackHandler-1.0 documentation for more details
+ lib.RegisterCallback = lib.RegisterCallback or function(...)
+ local CBH = LibStub("CallbackHandler-1.0")
+ lib.RegisterCallback = nil -- extra safety, we shouldn't get this far if CBH is not found, but better an error later than an infinite recursion now
+ lib.callbacks = CBH:New(lib)
+ -- ok, CBH hopefully injected or new shiny RegisterCallback
+ return lib.RegisterCallback(...)
+ end
+end
+
+--- END CallbackHandler stuff
+
+lib:activate()
+lib = nil
diff --git a/Libs/LibStub/LibStub.lua b/Libs/LibStub/LibStub.lua
new file mode 100644
index 0000000..0a41ac0
--- /dev/null
+++ b/Libs/LibStub/LibStub.lua
@@ -0,0 +1,30 @@
+-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
+-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
+local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
+local LibStub = _G[LIBSTUB_MAJOR]
+
+if not LibStub or LibStub.minor < LIBSTUB_MINOR then
+ LibStub = LibStub or {libs = {}, minors = {} }
+ _G[LIBSTUB_MAJOR] = LibStub
+ LibStub.minor = LIBSTUB_MINOR
+
+ function LibStub:NewLibrary(major, minor)
+ assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
+ minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
+
+ local oldminor = self.minors[major]
+ if oldminor and oldminor >= minor then return nil end
+ self.minors[major], self.libs[major] = minor, self.libs[major] or {}
+ return self.libs[major], oldminor
+ end
+
+ function LibStub:GetLibrary(major, silent)
+ if not self.libs[major] and not silent then
+ error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
+ end
+ return self.libs[major], self.minors[major]
+ end
+
+ function LibStub:IterateLibraries() return pairs(self.libs) end
+ setmetatable(LibStub, { __call = LibStub.GetLibrary })
+end
diff --git a/README.md b/README.md
index f83e0e8..4af137f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# SmartBuff Classic, SoM, TBC Classic & WOTLK CLassic
+# SmartBuff Wrath of the Lich King CLassic
-For clarity, this repository is ONLY for the Classic version of the client as listed above, and it is not the Retail version of the client.
+For clarity, this repository is ONLY for the WOTLK Classic version of the client as listed above, and it is not the Retail or Classic Era.
SmartBuff is a buff addon to monitor you, your party or raids buffs easily and quickly allowing you to cast those that are missing - all classes are supported.
@@ -15,6 +15,7 @@ Run the mod when ever you wish, if nothing is buffed, there is no penalty or coo
- Checks buffs and rebuffs you, raid, party members and pets.
- Setup your own buff templates (Solo, Party, Raid, Battleground, MC, Onyxia, BWL, AQ, ZG, Custom 1-5)
- Auto switch templates when playing solo, in a party or raid etc.
+- Auto switch Gathering Trackers such as Find Herbs, Find Minerals and Find Fish
- Individual setup for each buff.
- Supports group buffs: 'Gift of the Wild'/'Arcane Brilliance'/'Prayer of Fortitude'/'Prayer of Spirit', incl. group size and reagence checks.
- Supports class buffs: all greater blessings of the Paladin.
@@ -36,7 +37,7 @@ Run the mod when ever you wish, if nothing is buffed, there is no penalty or coo
Minimap button:
- Left click: opens SmartBuff options frame
- Right click: enables/disables SmartBuff
-- Alt-Left click: SmartDebuff
+- Alt-Left click: Toggle Gathering Switcher
- Shift-Left click: move minimap button
@@ -64,10 +65,17 @@ If you prefer to use Smartbuff in a macro rather than scrolling your mouse or us
/click SmartBuff_KeyButton
+
+## Known Issues & Reminders/TODO
+
+- Rogue poison links need implementing for Lethal / Non-Lethal.
+
+
+
## Contact / Support
You will find me on:
-- Classic Server: Mik/Castanova/Amarantine/Paramedic on EU-Mirage Raceway
+- Classic Server: Gabella/Mik/Castanova/Amarantine/Paramedic on EU-Mirage Raceway
- Retail: Challenger, Castanova, Paramedic and many others on EU-Aszune
Join me on discord to offer feedback, report bugs and much more: https://discord.gg/R6EkZ94TKK
diff --git a/ReadMe.txt b/ReadMe.txt
index 3be805b..4457134 100644
--- a/ReadMe.txt
+++ b/ReadMe.txt
@@ -1,18 +1,8 @@
***********************************************************************
-
-SmartBuff - Retail / Classic TBC / Seasons of Mastery / WOTLK versions by Codermik
-
-You will find me on:
- Classic Server: Mik/Castanova/Amarantine/Paramedic on EU-Mirage Raceway
- Retail: Challenger, Castanova, Paramedic and many others on EU-Aszune
-
-Join me on discord to offer feedback, report bugs and much more: https://discord.gg/R6EkZ94TKK
-
-If you would like to help support the addon development please see the addon options screen.
-
+SmartBuff
***********************************************************************
-SmartBuff is a buff addon to cast buffs easily and quickly. All classes are supported.
+SmartBuff is a buff addon, to cast buffs ease and quickly. All classes are supported.
Bind a key and it checks if you, a party/raid member, also hunter and warlock pets, needs your buff and cast it.
Use the options menu to configure it you like, as example: buffs, raid subgroups, pets, etc.
Run the mod when ever you wish, if nothing is buffed, there is no penalty or cool down.
@@ -21,10 +11,10 @@ Features:
- Supports all classes
- Supports EN/DE/FR clients
- Checks buffs and rebuff you, raid/party members, raid/party pets
-- Setup your own buff templates (Solo, Party, Raid, Battleground, MC, Onyxia, BWL, AQ, ZG, Custom 1-5)
+- Setup your own buff templates (Solo, Party, Raid, Battleground, MC, Ony, BWL, AQ, ZG, Custom 1-5)
- Auto switch templates
- Individual setup for each buff
-- Supports group buffs: 'Gift of the Wild'/'Arcane Brilliance'/'Prayer of Fortitude'/'Prayer of Spirit', incl. group size and reagence check
+- Supports group buffs: 'Gift of the Wild'/'Arcane Brilliance'/'Prayer of Fortitude'/'Prayer of Spirit', incl. group size and regeance check
- Supports class buffs: all greater blessings of the Paladin
- Supports self buffs
- Supports weapon buffs (individual for main and off hand): Shaman, all poisons (Rogue), all stones and oils, incl. reagence check
@@ -32,17 +22,17 @@ Features:
- Supports tracking abilities
- Reminder if a buff is missing (Splash/chat/sound)
- ReBuff Timer
-- Scrollwhell or only one key is needed
+- Scrollwheel or only one key is needed
- Fast and easy to use
- FuBar support
- Titan Panel support
Usage:
-Minimap button:
+Minimapbutton:
Left click: opens SmartBuff options frame
Right click: enables/disables SmartBuff
-Alt-Left click: SmartDebuff
+Alt-Left click: Toggle Gathering swithing
Shift-Left click: move minimap button
Chat:
@@ -58,3 +48,4 @@ rafp - reset all frame positions
Options frame:
Right click on buff checkbox: opens buff setup frame
+
diff --git a/SmartBuff.buffs.lua b/SmartBuff.buffs.lua
index 9f1d421..1890f5c 100644
--- a/SmartBuff.buffs.lua
+++ b/SmartBuff.buffs.lua
@@ -1,11 +1,3 @@
--------------------------------------------------------------------------------
--- SmartBuff
--- Originally created by Aeldra (EU-Proudmoore)
--- Classic versions by Codermik (Mik/Castanova/Amarantine EU-Mirage Raceway)
--- Discord: https://discord.gg/R6EkZ94TKK
--- Cast the most important buffs on you, tanks or party/raid members/pets.
--------------------------------------------------------------------------------
-
local _;
local S = SMARTBUFF_GLOBALS;
@@ -29,8 +21,6 @@ SMARTBUFF_CONST_ITEM = "ITEM";
SMARTBUFF_CONST_ITEMGROUP = "ITEMGROUP";
SMARTBUFF_CONST_TOY = "TOY";
-SMARTBUFF_ALCHEMY_ADJ = 1;
-
S.CheckPet = "CHECKPET";
S.CheckPetNeeded = "CHECKPETNEEDED";
S.CheckFishingPole = "CHECKFISHINGPOLE";
@@ -40,9 +30,8 @@ S.Toybox = { };
local function GetItems(items)
local t = { };
for _, id in pairs(items) do
- local name = GetItemInfo(id);
+ local _,name = GetItemInfo(id);
if (name) then
- --print("Item found: "..id..", "..name);
tinsert(t, name);
end
end
@@ -50,10 +39,9 @@ local function GetItems(items)
end
local function InsertItem(t, type, itemId, spellId, duration, link)
- local item = GetItemInfo(itemId);
+ local _,item = GetItemInfo(itemId); -- item link
local spell = GetSpellInfo(spellId);
if (item and spell) then
- --print("Item found: "..item..", "..spell);
tinsert(t, {item, duration, type, nil, spell, link});
end
end
@@ -62,388 +50,442 @@ local function AddItem(itemId, spellId, duration, link)
InsertItem(SMARTBUFF_SCROLL, SMARTBUFF_CONST_SCROLL, itemId, spellId, duration, link);
end
-
-----------------------------------------------------------------------------------------------------------------------------------
----
---- Initialise Item List
----
-----------------------------------------------------------------------------------------------------------------------------------
+--
+-- Initialise Item Lists
+--
function SMARTBUFF_InitItemList()
-
- -- Reagents
- SMARTBUFF_WILDBERRIES = GetItemInfo(17021); -- Wild Berries
- SMARTBUFF_WILDTHORNROOT = GetItemInfo(17026); -- Wild Thornroot
- SMARTBUFF_WILDQUILLVINE = GetItemInfo(22148); -- Wild Quillvine
- SMARTBUFF_ARCANEPOWDER = GetItemInfo(17020); -- Arcane Powder
- SMARTBUFF_HOLYCANDLE = GetItemInfo(17028); -- Holy Candle
- SMARTBUFF_SACREDCANDLE = GetItemInfo(17029); -- Sacred Candle
- SMARTBUFF_SYMBOLOFKINGS = GetItemInfo(21177); -- Symbol of Kings
-
- -- Stones and oils etc.
- SMARTBUFF_HEALTHSTONEGEM1 = GetItemInfo(5512); -- Healthstone Rank 1
- SMARTBUFF_HEALTHSTONEGEM2 = GetItemInfo(5511); -- Healthstone Rank 2
- SMARTBUFF_HEALTHSTONEGEM3 = GetItemInfo(5509); -- Healthstone Rank 3
- SMARTBUFF_HEALTHSTONEGEM4 = GetItemInfo(5510); -- Healthstone Rank 4
- SMARTBUFF_HEALTHSTONEGEM5 = GetItemInfo(9421); -- Healthstone Rank 5
- SMARTBUFF_HEALTHSTONEGEM6 = GetItemInfo(22103); -- Healthstone Rank 6
- SMARTBUFF_HEALTHSTONEGEM7 = GetItemInfo(36889); -- Healthstone Rank 7
- SMARTBUFF_HEALTHSTONEGEM8 = GetItemInfo(36892); -- Healthstone Rank 8
- SMARTBUFF_SOULSTONEGEM1 = GetItemInfo(5232); -- Soulstone Rank 1
- SMARTBUFF_SOULSTONEGEM2 = GetItemInfo(16892); -- Soulstone Rank 2
- SMARTBUFF_SOULSTONEGEM3 = GetItemInfo(16893); -- Soulstone Rank 3
- SMARTBUFF_SOULSTONEGEM4 = GetItemInfo(16895); -- Soulstone Rank 4
- SMARTBUFF_SOULSTONEGEM5 = GetItemInfo(16896); -- Soulstone Rank 5
- SMARTBUFF_SOULSTONEGEM6 = GetItemInfo(22116); -- Soulstone Rank 6
- SMARTBUFF_SOULSTONEGEM7 = GetItemInfo(36895); -- Soulstone Rank 7
- SMARTBUFF_LOCKSPELLSTONE1 = GetItemInfo(41191); -- Warlock Spellstone 1
- SMARTBUFF_LOCKSPELLSTONE2 = GetItemInfo(41192); -- Warlock Spellstone 2
- SMARTBUFF_LOCKSPELLSTONE3 = GetItemInfo(41193); -- Warlock Spellstone 3
- SMARTBUFF_LOCKSPELLSTONE4 = GetItemInfo(41194); -- Warlock Spellstone 4
- SMARTBUFF_LOCKSPELLSTONE5 = GetItemInfo(41195); -- Warlock Spellstone 5
- SMARTBUFF_LOCKSPELLSTONE6 = GetItemInfo(41196); -- Warlock Spellstone 6
- SMARTBUFF_LOCKFIRESTONE1 = GetItemInfo(41170); -- Warlock Firestone 1
- SMARTBUFF_LOCKFIRESTONE2 = GetItemInfo(41169); -- Warlock Firestone 2
- SMARTBUFF_LOCKFIRESTONE3 = GetItemInfo(41171); -- Warlock Firestone 3
- SMARTBUFF_LOCKFIRESTONE4 = GetItemInfo(41172); -- Warlock Firestone 4
- SMARTBUFF_LOCKFIRESTONE5 = GetItemInfo(40773); -- Warlock Firestone 5
- SMARTBUFF_LOCKFIRESTONE6 = GetItemInfo(41173); -- Warlock Firestone 6
- SMARTBUFF_LOCKFIRESTONE7 = GetItemInfo(41174); -- Warlock Firestone 7
- SMARTBUFF_LESSERMANAOIL = GetItemInfo(20747); -- Lesser Mana Oil
- SMARTBUFF_BRILLIANTMANAOIL = GetItemInfo(20748); -- Brilliant Mana Oil
- SMARTBUFF_BRILLIANTWIZARDOIL = GetItemInfo(20749); -- Brilliant Wizard Oil
- SMARTBUFF_SUPERIORMANAOIL = GetItemInfo(22521); -- Superior Mana Oil
- SMARTBUFF_SUPERIORWIZARDOIL = GetItemInfo(22522); -- Superior Wizard Oil
- SMARTBUFF_EXCEPTIONALWIZARDOIL = GetItemInfo(36900); -- Exceptional Wizard Oil
- SMARTBUFF_OILOFIMMOLATION = GetItemInfo(8956); -- Oil of Immolation
- SMARTBUFF_SOLIDWSTONE = GetItemInfo(7965); -- Solid Weighstone
- SMARTBUFF_SOLIDSSTONE = GetItemInfo(7964); -- Solid Sharpening Stone
- SMARTBUFF_ELEMENTALSSTONE = GetItemInfo(18262); -- Solid Weightstone
- SMARTBUFF_ADAMANTITEWSTONE = GetItemInfo(28421); -- Adamantite Weightstone
- SMARTBUFF_ADAMANTITESSTONE = GetItemInfo(23529); -- Adamantite Sharpening Stone
- SMARTBUFF_HEAVYWSTONE = GetItemInfo(3241); -- Heavy Weighstone
- SMARTBUFF_HEAVYSSTONE = GetItemInfo(2871); -- Heavy Sharpening Stone
- SMARTBUFF_WEIGHSTONE = GetItemInfo(28420); -- Fel Weighstone
- SMARTBUFF_FELSHARPENINGSTONE = GetItemInfo(23528); -- Greater Rune of Warding
-
- -- Poisons (some
- SMARTBUFF_INSTANTPOISON1 = GetItemInfo(6947); -- Instant Poison
- SMARTBUFF_INSTANTPOISON2 = GetItemInfo(6949); -- Instant Poison II
- SMARTBUFF_INSTANTPOISON3 = GetItemInfo(6950); -- Instant Poison III
- SMARTBUFF_INSTANTPOISON4 = GetItemInfo(8926); -- Instant Poison IV
- SMARTBUFF_INSTANTPOISON5 = GetItemInfo(8927); -- Instant Poison V
- SMARTBUFF_INSTANTPOISON6 = GetItemInfo(8928); -- Instant Poison VI
- SMARTBUFF_INSTANTPOISON7 = GetItemInfo(21927); -- Instant Poison VII
- SMARTBUFF_WOUNDPOISON1 = GetItemInfo(10918); -- Wound Poison
- SMARTBUFF_WOUNDPOISON2 = GetItemInfo(10920); -- Wound Poison II
- SMARTBUFF_WOUNDPOISON3 = GetItemInfo(10921); -- Wound Poison III
- SMARTBUFF_WOUNDPOISON4 = GetItemInfo(10922); -- Wound Poison IV
- SMARTBUFF_WOUNDPOISON5 = GetItemInfo(22055); -- Wound Poison V
- SMARTBUFF_MINDPOISON1 = GetItemInfo(5237); -- Mind-numbing Poison
- SMARTBUFF_MINDPOISON2 = GetItemInfo(6951); -- Mind-numbing Poison II
- SMARTBUFF_MINDPOISON3 = GetItemInfo(9186); -- Mind-numbing Poison III
- SMARTBUFF_DEADLYPOISON1 = GetItemInfo(2892); -- Deadly Poison
- SMARTBUFF_DEADLYPOISON2 = GetItemInfo(2893); -- Deadly Poison II
- SMARTBUFF_DEADLYPOISON3 = GetItemInfo(8984); -- Deadly Poison III
- SMARTBUFF_DEADLYPOISON4 = GetItemInfo(8985); -- Deadly Poison IV
- SMARTBUFF_DEADLYPOISON5 = GetItemInfo(20844); -- Deadly Poison V
- SMARTBUFF_DEADLYPOISON6 = GetItemInfo(22053); -- Deadly Poison VI
- SMARTBUFF_DEADLYPOISON7 = GetItemInfo(22054); -- Deadly Poison VII
- SMARTBUFF_CRIPPLINGPOISON1 = GetItemInfo(3775); -- Crippling Poison
- SMARTBUFF_CRIPPLINGPOISON2 = GetItemInfo(3776); -- Crippling Poison II
- SMARTBUFF_ANESTHETICPOISON1 = GetItemInfo(21835); -- Anesthetic Poison
-
+ -- Stones and oils
+ _,SMARTBUFF_LOCKHEALTHSTONE = GetItemInfo(5512); --"Healthstone"
+ _,SMARTBUFF_LOCKSPELLSTONE = GetItemInfo(41191); --"Spellstone"
+ _,SMARTBUFF_LOCKFIRESTONE = GetItemInfo(41170); --"Firestone"
+ _,SMARTBUFF_HSMINOR = GetItemInfo(5512); --"Minor Healthstone"
+ _,SMARTBUFF_HSLESSER = GetItemInfo(5511); --"Lesser Healthstone"
+ _,SMARTBUFF_HSTONE = GetItemInfo(5509); --"Healthstone"
+ _,SMARTBUFF_HSGREATER = GetItemInfo(5510); --"Greater Healthstone"
+ _,SMARTBUFF_HSMAJOR = GetItemInfo(9421); --"Major Healthstone"
+ _,SMARTBUFF_HSMASTER = GetItemInfo(22103); --"Master Healthstone"
+ _,SMARTBUFF_HSDEMONIC = GetItemInfo(36889); --"Demonic Healthstone"
+ _,SMARTBUFF_HSFEL = GetItemInfo(36892); --"Fel Healthstone"
+ _,SMARTBUFF_FIRESLESSER = GetItemInfo(41170); --"Lesser Firestone"
+ _,SMARTBUFF_FIRESSTONE = GetItemInfo(41169); --"Firestone"
+ _,SMARTBUFF_FIRESGREATER = GetItemInfo(41171); --"Greater Firestone"
+ _,SMARTBUFF_FIRESMAJOR = GetItemInfo(41172); --"Major Firestone"
+ _,SMARTBUFF_FIRESMASTER = GetItemInfo(40773); --"Master Firestone"
+ _,SMARTBUFF_FIRESFEL = GetItemInfo(41173); --"Fel Firestone"
+ _,SMARTBUFF_FIRESGRAND = GetItemInfo(41174); --"Grand Firestone"
+ _,SMARTBUFF_SPELLSTONE = GetItemInfo(41191); --"Spellstone"
+ _,SMARTBUFF_SPELLSGREATER = GetItemInfo(41192); --"Greater Spellstone"
+ _,SMARTBUFF_SPELLSMAJOR = GetItemInfo(41193); --"Major Spellstone"
+ _,SMARTBUFF_SPELLSMASTER = GetItemInfo(41194); --"Master Spellstone"
+ _,SMARTBUFF_SPELLSDEMONIC = GetItemInfo(41195); --"Demonic Spellstone"
+ _,SMARTBUFF_SPELLSGRAND = GetItemInfo(41196); --"Grand Spellstone"
+ _,SMARTBUFF_MANAGEM = GetItemInfo(36799); --"Mana Gem"
+ _,SMARTBUFF_BRILLIANTMANAGEM = GetItemInfo(81901); --"Brilliant Mana Gem"
+ _,SMARTBUFF_SSROUGH = GetItemInfo(2862); --"Rough Sharpening Stone"
+ _,SMARTBUFF_SSCOARSE = GetItemInfo(2863); --"Coarse Sharpening Stone"
+ _,SMARTBUFF_SSHEAVY = GetItemInfo(2871); --"Heavy Sharpening Stone"
+ _,SMARTBUFF_SSSOLID = GetItemInfo(7964); --"Solid Sharpening Stone"
+ _,SMARTBUFF_SSDENSE = GetItemInfo(12404); --"Dense Sharpening Stone"
+ _,SMARTBUFF_SSELEMENTAL = GetItemInfo(18262); --"Elemental Sharpening Stone"
+ _,SMARTBUFF_SSFEL = GetItemInfo(23528); --"Fel Sharpening Stone"
+ _,SMARTBUFF_SSADAMANTITE = GetItemInfo(23529); --"Adamantite Sharpening Stone"
+ _,SMARTBUFF_WSROUGH = GetItemInfo(3239); --"Rough Weightstone"
+ _,SMARTBUFF_WSCOARSE = GetItemInfo(3240); --"Coarse Weightstone"
+ _,SMARTBUFF_WSHEAVY = GetItemInfo(3241); --"Heavy Weightstone"
+ _,SMARTBUFF_WSSOLID = GetItemInfo(7965); --"Solid Weightstone"
+ _,SMARTBUFF_WSDENSE = GetItemInfo(12643); --"Dense Weightstone"
+ _,SMARTBUFF_WSFEL = GetItemInfo(28420); --"Fel Weightstone"
+ _,SMARTBUFF_WSADAMANTITE = GetItemInfo(28421); --"Adamantite Weightstone"
+ _,SMARTBUFF_SHADOWOIL = GetItemInfo(3824); --"Shadow Oil"
+ _,SMARTBUFF_FROSTOIL = GetItemInfo(3829); --"Frost Oil"
+ _,SMARTBUFF_MANAOIL1 = GetItemInfo(20745); --"Minor Mana Oil"
+ _,SMARTBUFF_MANAOIL2 = GetItemInfo(20747); --"Lesser Mana Oil"
+ _,SMARTBUFF_MANAOIL3 = GetItemInfo(20748); --"Brilliant Mana Oil"
+ _,SMARTBUFF_MANAOIL4 = GetItemInfo(22521); --"Superior Mana Oil"
+ _,SMARTBUFF_WIZARDOIL1 = GetItemInfo(20744); --"Minor Wizard Oil"
+ _,SMARTBUFF_WIZARDOIL2 = GetItemInfo(20746); --"Lesser Wizard Oil"
+ _,SMARTBUFF_WIZARDOIL3 = GetItemInfo(20750); --"Wizard Oil"
+ _,SMARTBUFF_WIZARDOIL4 = GetItemInfo(20749); --"Brilliant Wizard Oil"
+ _,SMARTBUFF_WIZARDOIL5 = GetItemInfo(22522); --"Superior Wizard Oil"
-- Food
- SMARTBUFF_GOLDENFISHSTICKS_ITEM = GetItemInfo(27666); -- Golden Fish Sticks
- SMARTBUFF_FISHERMANSFEAST_ITEM = GetItemInfo(33052); -- Fisherman's Feast
- SMARTBUFF_SKULLFISHSOUP_ITEM = GetItemInfo(33825); -- Skullfish Soup
- SMARTBUFF_SPICYHOTTALBUK_ITEM = GetItemInfo(33872); -- Spicy Hot Talbuk
- SMARTBUFF_BLACKENEDBASILISK_ITEM = GetItemInfo(27657); -- Blackened Basilisk
- SMARTBUFF_BLACKENEDSPOREFISH_ITEM = GetItemInfo(27663); -- Blackened Sporefish
- SMARTBUFF_BUZZARDBITES_ITEM = GetItemInfo(27651); -- Buzzard Bites
- SMARTBUFF_CLAMBAR_ITEM = GetItemInfo(30155); -- Clam Bar
- SMARTBUFF_CRUNCHYSERPENT_ITEM = GetItemInfo(31673); -- Crunchy Serpent
- SMARTBUFF_FELTAILDELIGHT_ITEM = GetItemInfo(27662); -- Feltail Delight
- SMARTBUFF_GRILLEDMUDFISH_ITEM = GetItemInfo(27664); -- Grilled Mudfish
- SMARTBUFF_HELBOARBACON_ITEM = GetItemInfo(29292); -- Hellboar Bacon
- SMARTBUFF_MOKNATHAKSHORTRIBS_ITEM = GetItemInfo(31672); -- Mok'Nathal Shortribs
- SMARTBUFF_POACHEDBLUEFISH_ITEM = GetItemInfo(27665); -- Poached Bluefish
- SMARTBUFF_RAVAGERDOG_ITEM = GetItemInfo(27655); -- Ravager Dog
- SMARTBUFF_ROASTEDCLEFTHOOF_ITEM = GetItemInfo(27658); -- Roasted Clefthoof
- SMARTBUFF_SPICYCRAWDAD_ITEM = GetItemInfo(27667); -- Spicy Crawdad
- SMARTBUFF_TALBUKSTEAK_ITEM = GetItemInfo(27660); -- Talbuk Steak
- SMARTBUFF_WARPBURGER_ITEM = GetItemInfo(27659); -- Warp Burger
- SMARTBUFF_CHARREDBEARKABOBS_ITEM = GetItemInfo(35563); -- Charred Bear Kabobs
- SMARTBUFF_ORONOKSTUBERSPELL_ITEM = GetItemInfo(30361); -- Oronok's Tuber of Spell Power
- SMARTBUFF_ORONOKSTUBERAGILITY_ITEM = GetItemInfo(30358); -- Oronok's Tuber of Agility
- SMARTBUFF_ORONOKSTUBERHEALS_ITEM = GetItemInfo(30357); -- Oronok's Tuber of Healing
- SMARTBUFF_ORONOKSTUBERSTRENGTH_ITEM = GetItemInfo(30359); -- Oronok's Tuber of Strength
- SMARTBUFF_HOTAPPLECIDER_ITEM = GetItemInfo(34411); -- Hot Apple Cider
- SMARTBUFF_SKYGUARDRATIONS_ITEM = GetItemInfo(32721); -- Skyguard Rations
- SMARTBUFF_DIRGESKICKINCHOPS_ITEM = GetItemInfo(21023); -- Dirge's Kickin' Chimaerok Chops
- SMARTBUFF_JUICYBEARBURGER_ITEM = GetItemInfo(35565); -- Juicy Bear Burger
- SMARTBUFF_NIGHTFINSOUP_ITEM = GetItemInfo(13931); -- Nightfin Soup
-
- -- Food item IDs
- S.FoodItems = GetItems({
- -- WotLK
- 39691, 34125, 42779, 42997, 42998, 42999, 43000, 34767, 42995, 34769, 34754, 34758, 34766, 42994, 42996, 34756, 34768, 42993, 34755, 43001, 34757, 34752, 34751, 34750, 34749, 34764, 34765, 34763, 34762, 42942, 43268, 34748,
- });
-
- -- Conjured mage food / Water IDs
- S.FoodMage = GetItems({587, 597, 990, 6129, 10144, 10145, 28612, 33717 });
- S.WaterMage = GetItems({5504, 5505, 5506, 6127, 10138, 10139, 10140, 37420, 27090});
- S.MageManaBuscuit = ({34062});
-
- -- Scrolls
- SMARTBUFF_SOAGILITY1 = GetItemInfo(3012); -- Scroll of Agility I
- SMARTBUFF_SOAGILITY2 = GetItemInfo(1477); -- Scroll of Agility II
- SMARTBUFF_SOAGILITY3 = GetItemInfo(4425); -- Scroll of Agility III
- SMARTBUFF_SOAGILITY4 = GetItemInfo(10309); -- Scroll of Agility IV
- SMARTBUFF_SOAGILITY5 = GetItemInfo(27498); -- Scroll of Agility V
- SMARTBUFF_SOAGILITY6 = GetItemInfo(33457); -- Scroll of Agility VI
- SMARTBUFF_SOAGILITY7 = GetItemInfo(43463); -- Scroll of Agility VII
- SMARTBUFF_SOAGILITY8 = GetItemInfo(43464); -- Scroll of Agility VIII
-
- SMARTBUFF_SOINTELLECT1 = GetItemInfo(955); -- Scroll of Intellect I
- SMARTBUFF_SOINTELLECT2 = GetItemInfo(2290); -- Scroll of Intellect II
- SMARTBUFF_SOINTELLECT3 = GetItemInfo(4419); -- Scroll of Intellect III
- SMARTBUFF_SOINTELLECT4 = GetItemInfo(10308); -- Scroll of Intellect IV
- SMARTBUFF_SOINTELLECT5 = GetItemInfo(27499); -- Scroll of Intellect V
- SMARTBUFF_SOINTELLECT6 = GetItemInfo(33458); -- Scroll of Intellect VI
- SMARTBUFF_SOINTELLECT7 = GetItemInfo(37091); -- Scroll of Intellect VII
- SMARTBUFF_SOINTELLECT8 = GetItemInfo(37092); -- Scroll of Intellect VIII
-
- SMARTBUFF_SOSTAMINA1 = GetItemInfo(1180); -- Scroll of Stamina I
- SMARTBUFF_SOSTAMINA2 = GetItemInfo(1711); -- Scroll of Stamina II
- SMARTBUFF_SOSTAMINA3 = GetItemInfo(4422); -- Scroll of Stamina III
- SMARTBUFF_SOSTAMINA4 = GetItemInfo(10307); -- Scroll of Stamina IV
- SMARTBUFF_SOSTAMINA5 = GetItemInfo(27502); -- Scroll of Stamina V
- SMARTBUFF_SOSTAMINA6 = GetItemInfo(33461); -- Scroll of Stamina VI
- SMARTBUFF_SOSTAMINA7 = GetItemInfo(37093); -- Scroll of Stamina VII
- SMARTBUFF_SOSTAMINA8 = GetItemInfo(37094); -- Scroll of Stamina VIII
-
- SMARTBUFF_SOSPIRIT1 = GetItemInfo(1181); -- Scroll of Spirit I
- SMARTBUFF_SOSPIRIT2 = GetItemInfo(1712); -- Scroll of Spirit II
- SMARTBUFF_SOSPIRIT3 = GetItemInfo(4424); -- Scroll of Spirit III
- SMARTBUFF_SOSPIRIT4 = GetItemInfo(10306); -- Scroll of Spirit IV
- SMARTBUFF_SOSPIRIT5 = GetItemInfo(27501); -- Scroll of Spirit V
- SMARTBUFF_SOSPIRIT6 = GetItemInfo(33460); -- Scroll of Spirit VI
- SMARTBUFF_SOSPIRIT7 = GetItemInfo(37097); -- Scroll of Spirit VII
- SMARTBUFF_SOSPIRIT8 = GetItemInfo(37098); -- Scroll of Spirit VIII
-
- SMARTBUFF_SOSTRENGHT1 = GetItemInfo(954); -- Scroll of Strength I
- SMARTBUFF_SOSTRENGHT2 = GetItemInfo(2289); -- Scroll of Strength II
- SMARTBUFF_SOSTRENGHT3 = GetItemInfo(4426); -- Scroll of Strength III
- SMARTBUFF_SOSTRENGHT4 = GetItemInfo(10310); -- Scroll of Strength IV
- SMARTBUFF_SOSTRENGHT5 = GetItemInfo(27503); -- Scroll of Strength V
- SMARTBUFF_SOSTRENGHT6 = GetItemInfo(33462); -- Scroll of Strength VI
- SMARTBUFF_SOSTRENGHT7 = GetItemInfo(43465); -- Scroll of Strength VII
- SMARTBUFF_SOSTRENGHT8 = GetItemInfo(43466); -- Scroll of Strength VIII
+ _,SMARTBUFF_BEERBASTEDBOARRIBS = GetItemInfo(2888); --Beer Basted Boar Ribs
+ _,SMARTBUFF_CRISPYBATWING = GetItemInfo(12224); --Crispy Bat Wing
+ _,SMARTBUFF_KALDOREISPIDERKABOB = GetItemInfo(5472); --Kaldorei Spider Kabob
+ _,SMARTBUFF_ROASTEDKODOMEAT = GetItemInfo(5474); --Roasted Kodo Meat
+ _,SMARTBUFF_HERBBAKEDEGG = GetItemInfo(6888); --Herb Baked Egg
+ _,SMARTBUFF_SPICEDWOLFMEAT = GetItemInfo(2680); --Spiced Wolf Meat
+ _,SMARTBUFF_BOILEDCLAMS = GetItemInfo(5525); --Boiled Clams
+ _,SMARTBUFF_COYOTESTEAK = GetItemInfo(2684); --Coyote Steak
+ _,SMARTBUFF_CRABCAKE = GetItemInfo(2683); --Crab Cake
+ _,SMARTBUFF_DRYPORKRIBS = GetItemInfo(2687); --Dry Pork Ribs
+ _,SMARTBUFF_BLOODSAUSAGE = GetItemInfo(3220); --Blood Sausage
+ _,SMARTBUFF_CROCOLISKSTEAK = GetItemInfo(3662); --Crocolisk Steak
+ _,SMARTBUFF_FILLETOFFRENZY = GetItemInfo(5476); --Fillet of Frenzy
+ _,SMARTBUFF_GORETUSKLIVERPIE = GetItemInfo(724); --Goretusk Liver Pie
+ _,SMARTBUFF_STRIDERSTEW = GetItemInfo(5477); --Strider Stew
+ _,SMARTBUFF_GOBLINDEVILEDCLAMS = GetItemInfo(5527); --Goblin Deviled Clams
+ _,SMARTBUFF_BIGBEARSTEAK = GetItemInfo(3726); --Big Bear Steak
+ _,SMARTBUFF_CRISPYLIZARDTAIL = GetItemInfo(5479); --Crispy Lizard Tail
+ _,SMARTBUFF_CROCOLISKGUMBO = GetItemInfo(3664); --Crocolisk Gumbo
+ _,SMARTBUFF_CURIOUSLYTASTYOMELET = GetItemInfo(3665); --Curiously Tasty Omelet
+ _,SMARTBUFF_GOOEYSPIDERCAKE = GetItemInfo(3666); --Gooey Spider Cake
+ _,SMARTBUFF_HOTLIONCHOPS = GetItemInfo(3727); --Hot Lion Chops
+ _,SMARTBUFF_LEANVENISON = GetItemInfo(5480); --Lean Venison
+ _,SMARTBUFF_LEANWOLFSTEAK = GetItemInfo(12209); --Lean Wolf Steak
+ _,SMARTBUFF_MURLOCFINSOUP = GetItemInfo(3663); --Murloc Fin Soup
+ _,SMARTBUFF_REDRIDGEGOULASH = GetItemInfo(1082); --Redridge Goulash
+ _,SMARTBUFF_SEASONEDWOLFKABOB = GetItemInfo(1017); --Seasoned Wolf Kabob
+ _,SMARTBUFF_CARRIONSURPRISE = GetItemInfo(12213); -- Carrion Surprise
+ _,SMARTBUFF_ROASTRAPTOR = GetItemInfo(12210); -- Roast Raptor
+ _,SMARTBUFF_GIANTCLAMSCORCHO = GetItemInfo(6038); -- Giant Clam Scorcho
+ _,SMARTBUFF_HEAVYCROCOLISKSTEW = GetItemInfo(20074); -- Heavy Crocolisk Stew
+ _,SMARTBUFF_HOTWOLFRIBS = GetItemInfo(13851); -- Hot Wolf Ribs
+ _,SMARTBUFF_JUNGLESTEW = GetItemInfo(12212); -- Jungle Stew
+ _,SMARTBUFF_MYSTERYSTEW = GetItemInfo(12214); -- Mystery Stew
+ _,SMARTBUFF_SOOTHINGTURTLEBISQUE = GetItemInfo(3729); -- Soothing Turtle Bisque
+ _,SMARTBUFF_TASTYLIONSTEAK = GetItemInfo(3728); -- Tasty Lion Steak
+ _,SMARTBUFF_SPIDERSAUSAGE = GetItemInfo(17222); -- Spider Sausage
+ _,SMARTBUFF_HEAVYKODOSTEW = GetItemInfo(12215); -- Heavy Kodo Stew
+ _,SMARTBUFF_MONSTEROMELET = GetItemInfo(12218); -- Monster Omelet
+ _,SMARTBUFF_SPICEDCHILICRAB = GetItemInfo(12216); -- Spiced Chili Crab
+ _,SMARTBUFF_TENDERWOLFSTEAK = GetItemInfo(18045); -- Tender Wolf Steak
+ _,SMARTBUFF_JUICYBEARBURGER = GetItemInfo(35565); --"Juicy Bear Burger"
+ _,SMARTBUFF_CRUNCHYSPIDER = GetItemInfo(22645); --"Crunchy Spider Surprise"
+ _,SMARTBUFF_LYNXSTEAK = GetItemInfo(27635); --"Lynx Steak"
+ _,SMARTBUFF_CHARREDBEARKABOBS = GetItemInfo(35563); --"Charred Bear Kabobs"
+ _,SMARTBUFF_BATBITES = GetItemInfo(27636); --"Bat Bites"
+ _,SMARTBUFF_ROASTEDMOONGRAZE = GetItemInfo(24105); --"Roasted Moongraze Tenderloin"
+ _,SMARTBUFF_MOKNATHALSHORTRIBS = GetItemInfo(31672); --"Mok'Nathal Shortribs"
+ _,SMARTBUFF_CRUNCHYSERPENT = GetItemInfo(31673); --"Crunchy Serpent"
+ _,SMARTBUFF_ROASTEDCLEFTHOOF = GetItemInfo(27658); --"Roasted Clefthoof"
+ _,SMARTBUFF_FISHERMANSFEAST = GetItemInfo(33052); --"Fisherman's Feast"
+ _,SMARTBUFF_WARPBURGER = GetItemInfo(27659); --"Warp Burger"
+ _,SMARTBUFF_RAVAGERDOG = GetItemInfo(27655); --"Ravager Dog"
+ _,SMARTBUFF_SKULLFISHSOUP = GetItemInfo(33825); --"Skullfish Soup"
+ _,SMARTBUFF_BUZZARDBITES = GetItemInfo(27651); --"Buzzard Bites"
+ _,SMARTBUFF_TALBUKSTEAK = GetItemInfo(27660); --"Talbuk Steak"
+ _,SMARTBUFF_GOLDENFISHSTICKS = GetItemInfo(27666); --"Golden Fish Sticks"
+ _,SMARTBUFF_SPICYHOTTALBUK = GetItemInfo(33872); --"Spicy Hot Talbuk"
+ _,SMARTBUFF_FELTAILDELIGHT = GetItemInfo(27662); --"Feltail Delight"
+ _,SMARTBUFF_BLACKENEDSPOREFISH = GetItemInfo(27663); --"Blackened Sporefish"
+ _,SMARTBUFF_HOTAPPLECIDER = GetItemInfo(34411); --"Hot Apple Cider"
+ _,SMARTBUFF_BROILEDBLOODFIN = GetItemInfo(33867); --"Broiled Bloodfin"
+ _,SMARTBUFF_SPICYCRAWDAD = GetItemInfo(27667); --"Spicy Crawdad"
+ _,SMARTBUFF_POACHEDBLUEFISH = GetItemInfo(27665); --"Poached Bluefish"
+ _,SMARTBUFF_BLACKENEDBASILISK = GetItemInfo(27657); --"Blackened Basilisk"
+ _,SMARTBUFF_GRILLEDMUDFISH = GetItemInfo(27664); --"Grilled Mudfish"
+ _,SMARTBUFF_CLAMBAR = GetItemInfo(30155); --"Clam Bar"
+ _,SMARTBUFF_SAGEFISHDELIGHT = GetItemInfo(21217); --"Sagefish Delight"
+ -- poisons
+ _,SMARTBUFF_INSTANTPOISON1 = GetItemInfo(6947); -- Instant Poison
+ _,SMARTBUFF_INSTANTPOISON2 = GetItemInfo(6949); -- Instant Poison II
+ _,SMARTBUFF_INSTANTPOISON3 = GetItemInfo(6950); -- Instant Poison III
+ _,SMARTBUFF_INSTANTPOISON4 = GetItemInfo(8926); -- Instant Poison IV
+ _,SMARTBUFF_INSTANTPOISON5 = GetItemInfo(8927); -- Instant Poison V
+ _,SMARTBUFF_INSTANTPOISON6 = GetItemInfo(8928); -- Instant Poison VI
+ _,SMARTBUFF_INSTANTPOISON7 = GetItemInfo(21927); -- Instant Poison VII
+ _,SMARTBUFF_INSTANTPOISON8 = GetItemInfo(43230); -- Instant Poison VIII
+ _,SMARTBUFF_INSTANTPOISON9 = GetItemInfo(43231); -- Instant Poison IX
+ _,SMARTBUFF_WOUNDPOISON1 = GetItemInfo(10918); -- Wound Poison
+ _,SMARTBUFF_WOUNDPOISON2 = GetItemInfo(10920); -- Wound Poison II
+ _,SMARTBUFF_WOUNDPOISON3 = GetItemInfo(10921); -- Wound Poison III
+ _,SMARTBUFF_WOUNDPOISON4 = GetItemInfo(10922); -- Wound Poison IV
+ _,SMARTBUFF_WOUNDPOISON5 = GetItemInfo(22055); -- Wound Poison V
+ _,SMARTBUFF_WOUNDPOISON6 = GetItemInfo(43234); -- Wound Poison VI
+ _,SMARTBUFF_WOUNDPOISON7 = GetItemInfo(43235); -- Wound Poison VII
+ _,SMARTBUFF_MINDPOISON1 = GetItemInfo(5237); -- Mind-numbing Poison
+ _,SMARTBUFF_MINDPOISON2 = GetItemInfo(6951); -- Mind-numbing Poison II
+ _,SMARTBUFF_MINDPOISON3 = GetItemInfo(9186); -- Mind-numbing Poison III
+ _,SMARTBUFF_DEADLYPOISON1 = GetItemInfo(2892); -- Deadly Poison
+ _,SMARTBUFF_DEADLYPOISON2 = GetItemInfo(2893); -- Deadly Poison II
+ _,SMARTBUFF_DEADLYPOISON3 = GetItemInfo(8984); -- Deadly Poison III
+ _,SMARTBUFF_DEADLYPOISON4 = GetItemInfo(8985); -- Deadly Poison IV
+ _,SMARTBUFF_DEADLYPOISON5 = GetItemInfo(20844); -- Deadly Poison V
+ _,SMARTBUFF_DEADLYPOISON6 = GetItemInfo(22053); -- Deadly Poison VI
+ _,SMARTBUFF_DEADLYPOISON7 = GetItemInfo(22054); -- Deadly Poison VII
+ _,SMARTBUFF_DEADLYPOISON8 = GetItemInfo(43232); -- Deadly Poison VIII
+ _,SMARTBUFF_DEADLYPOISON9 = GetItemInfo(43233); -- Deadly Poison IX
+ _,SMARTBUFF_CRIPPLINGPOISON1 = GetItemInfo(3775); -- Crippling Poison
+ _,SMARTBUFF_CRIPPLINGPOISON2 = GetItemInfo(3776); -- Crippling Poison II
+ _,SMARTBUFF_ANESTHETICPOISON1 = GetItemInfo(21835); -- Anesthetic Poison
+ _,SMARTBUFF_ANESTHETICPOISON2 = GetItemInfo(43237); -- Anesthetic Poison II
+
+ -- Food item IDs
+ S.FoodItems = GetItems({39691, 34125, 42779, 42997, 42998, 42999, 43000, 34767, 42995, 34769, 34754, 34758, 34766, 42994, 42996, 34756, 34768, 42993, 34755, 43001, 34757, 34752, 34751, 34750, 34749, 34764, 34765, 34763, 34762, 42942, 43268, 34748, });
+
+ -- Conjured items
+ ConjuredMageFood = { 5349, 1113, 1114, 1487, 8075, 8076, 22895, 22019, 43518, 43523 }; -- classic > wotlk conjured mage food
+ ConjuredMageWater = { 5350, 2288, 2136, 3772, 8077, 8078, 8079, 30703, 22018 }; -- classic > wotlk conjured mage water
+ ConjuredMageGems = { 5514, 5513, 8007, 8008, 22044, 33312}; -- classic > wotlk conjured gems.
+ ConjuredLockHealthStones = { 5512, 5511, 5509, 5510, 11730, 22103, 36889, 36892, 36894 }; -- classic > wotlk warlock healthstones
+ ConjuredLockSoulstones = { 5232, 16892, 16893, 16895, 16896, 22116, 36895, }; -- classic > wotlk warlock soulstones
+ ConjuredLockSpellstones = { 41191, 41192, 41193, 41194, 41195, 41196 }; -- classic > wotlk warlock spellstones
+ ConjuredLockFirestones = { 41170, 41169, 41171, 41172, 40773, 41173, 41174 }; -- classic > wotlk warlock firestones
- SMARTBUFF_SOPROTECTION1 = GetItemInfo(3013); -- Scroll of Protection I
- SMARTBUFF_SOPROTECTION2 = GetItemInfo(1478); -- Scroll of Protection II
- SMARTBUFF_SOPROTECTION3 = GetItemInfo(4421); -- Scroll of Protection III
- SMARTBUFF_SOPROTECTION4 = GetItemInfo(10305); -- Scroll of Protection IV
- SMARTBUFF_SOPROTECTION5 = GetItemInfo(27500); -- Scroll of Protection V
- SMARTBUFF_SOPROTECTION6 = GetItemInfo(33459); -- Scroll of Protection VI
- SMARTBUFF_SOPROTECTION7 = GetItemInfo(43467); -- Scroll of Protection VII
- SMARTBUFF_SOPROTECTION8 = GetItemInfo(43468); -- Scroll of Protection VIII
-
- -- Potions / Elixirs / Flasks Items
- SMARTBUFF_ADEPTELIXIR_ITEM = GetItemInfo(28103); -- Adept's Elixir
- SMARTBUFF_MAJORDEFENSE_ITEM = GetItemInfo(22834); -- Major Defense
- SMARTBUFF_MAJORAGILITY_ITEM = GetItemInfo(22831); -- Major Agility
- SMARTBUFF_DRAENICWISDOM_ITEM = GetItemInfo(32067); -- Draenic Wisdom
- SMARTBUFF_MAJORFROSTPOWER_ITEM = GetItemInfo(22827); -- Major Frost Power
- SMARTBUFF_EARTHEN_ITEM = GetItemInfo(32063); -- Earthen Elixir
- SMARTBUFF_MASTERY_ITEM = GetItemInfo(28104); -- Elixir of Mastery
- SMARTBUFF_CAMOUFLAGE_ITEM = GetItemInfo(22823); -- Elixir of Camouflage
- SMARTBUFF_HEALINGPOWER_ITEM = GetItemInfo(22825); -- Elixir of Healing Power
- SMARTBUFF_MAJORFORTITUDE_ITEM = GetItemInfo(32062); -- Elixir of Major Fortitude
- SMARTBUFF_MAJORSTRENGTH_ITEM = GetItemInfo(22824); -- Elixir of Major Strength
- SMARTBUFF_ONSLAUGHTELIXIR_ITEM = GetItemInfo(28102); -- Onslaught Elixir
- SMARTBUFF_GREATERARCANE_ITEM = GetItemInfo(13454); -- Greater Arcane
- SMARTBUFF_MONGOOSEELIXIR_ITEM = GetItemInfo(13452); -- Elixir of Mongoose
- SMARTBUFF_BRUTEFORCE_ITEM = GetItemInfo(13453); -- Elixir of Brute Force
- SMARTBUFF_SAGESELIXIR_ITEM = GetItemInfo(13447); -- Elixir of Sages
- SMARTBUFF_SUPERIORDEFENSE_ITEM = GetItemInfo(13445); -- Elixir of Superior Defense
- SMARTBUFF_DEMONSLAYING_ITEM = GetItemInfo(9224); -- Elixir of Demon Slaying
- SMARTBUFF_MAJORFIREPOWER_ITEM = GetItemInfo(22833); -- Elixir of Major Fire Power
- SMARTBUFF_GREATERFIREPOWER_ITEM = GetItemInfo(21546); -- Elixir of Greater Fire Power
- SMARTBUFF_SHADOWPOWER_ITEM = GetItemInfo(9264); -- Elixir of Shadow Power
- SMARTBUFF_GIANTSELIXIR_ITEM = GetItemInfo(9206); -- Elixir of Giants
- SMARTBUFF_GREATERAGILITY_ITEM = GetItemInfo(9187); -- Elixir of Greater Agility
- SMARTBUFF_GIFTOFARTHAS_ITEM = GetItemInfo(9088); -- Gift of Arthas
- SMARTBUFF_ARANCEELIXIR_ITEM = GetItemInfo(9155); -- Arcane Elixir
- SMARTBUFF_GREATERINTELLECT_ITEM = GetItemInfo(9179); -- Elixir of Greater Intellect
- SMARTBUFF_MAJORNATUREPROT_ITEM = GetItemInfo(22844); -- Major Natur Protection Potion
- SMARTBUFF_MAJORMAGEBLOOD_ITEM = GetItemInfo(22840); -- Major Mageblood
- SMARTBUFF_MAJORSHADOWPWR_ITEM = GetItemInfo(22835); -- Major Shadow Power
- SMARTBUFF_MAJORIRONSKIN_ITEM = GetItemInfo(32068); -- Major Ironskin
- SMARTBUFF_BLINDINGLIGHTFLASK_ITEM = GetItemInfo(22861); -- Flask of Blinding Light
- SMARTBUFF_FORTIFICATIONFLASK_ITEM = GetItemInfo(22851); -- Flask of Fortification
- SMARTBUFF_RESTORATIONFLASK_ITEM = GetItemInfo(22853); -- Flask of Restoration
- SMARTBUFF_PUREDEATHFLASK_ITEM = GetItemInfo(22866); -- Flask of Pure Death
- SMARTBUFF_RELENTLESSFLASK_ITEM = GetItemInfo(22854); -- Flask of Relentless Assault
- SMARTBUFF_CHROMATICFLASK_ITEM = GetItemInfo(13513); -- Flask of Chromatic Resistance
- SMARTBUFF_DISTILLEDFLASK_ITEM = GetItemInfo(13511); -- Flask of Distilled Wisdom
- SMARTBUFF_SUPREMEPWRFLASK_ITEM = GetItemInfo(13512); -- Flask of Supreme Power
-
- SMARTBUFF_FLASKOFFROSTWYRM_ITEM = GetItemInfo(46376); -- Flask of Frost Wyrm
- SMARTBUFF_FLASKOFENDLESSRAGE_ITEM = GetItemInfo(46377); -- Flask of Endless Rage
- SMARTBUFF_FLASKOFTHENORTH_ITEM = GetItemInfo(47499); -- Flask of the North
- SMARTBUFF_FLASKOFSTONEBLOOD_ITEM = GetItemInfo(46379); -- Flask of Stoneblood
-
- -- Misc Items
+ -- Scrolls
+ _,SMARTBUFF_SOAGILITY1 = GetItemInfo(3012); --"Scroll of Agility I"
+ _,SMARTBUFF_SOAGILITY2 = GetItemInfo(1477); --"Scroll of Agility II"
+ _,SMARTBUFF_SOAGILITY3 = GetItemInfo(4425); --"Scroll of Agility III"b
+ _,SMARTBUFF_SOAGILITY4 = GetItemInfo(10309); --"Scroll of Agility IV"
+ _,SMARTBUFF_SOAGILITY5 = GetItemInfo(27498); --"Scroll of Agility V"
+ _,SMARTBUFF_SOAGILITY6 = GetItemInfo(33457); --"Scroll of Agility VI"
+ _,SMARTBUFF_SOAGILITY7 = GetItemInfo(43463); --"Scroll of Agility VII"
+ _,SMARTBUFF_SOAGILITY8 = GetItemInfo(43464); --"Scroll of Agility VIII"
+ _,SMARTBUFF_SOAGILITY9 = GetItemInfo(63303); --"Scroll of Agility IX"
+ _,SMARTBUFF_SOINTELLECT1 = GetItemInfo(955); --"Scroll of Intellect I"
+ _,SMARTBUFF_SOINTELLECT2 = GetItemInfo(2290); --"Scroll of Intellect II"
+ _,SMARTBUFF_SOINTELLECT3 = GetItemInfo(4419); --"Scroll of Intellect III"
+ _,SMARTBUFF_SOINTELLECT4 = GetItemInfo(10308); --"Scroll of Intellect IV"
+ _,SMARTBUFF_SOINTELLECT5 = GetItemInfo(27499); --"Scroll of Intellect V"
+ _,SMARTBUFF_SOINTELLECT6 = GetItemInfo(33458); --"Scroll of Intellect VI"
+ _,SMARTBUFF_SOINTELLECT7 = GetItemInfo(37091); --"Scroll of Intellect VII"
+ _,SMARTBUFF_SOINTELLECT8 = GetItemInfo(37092); --"Scroll of Intellect VIII"
+ _,SMARTBUFF_SOINTELLECT9 = GetItemInfo(63305); --"Scroll of Intellect IX"
+ _,SMARTBUFF_SOSTAMINA1 = GetItemInfo(1180); --"Scroll of Stamina I"
+ _,SMARTBUFF_SOSTAMINA2 = GetItemInfo(1711); --"Scroll of Stamina II"
+ _,SMARTBUFF_SOSTAMINA3 = GetItemInfo(4422); --"Scroll of Stamina III"
+ _,SMARTBUFF_SOSTAMINA4 = GetItemInfo(10307); --"Scroll of Stamina IV"
+ _,SMARTBUFF_SOSTAMINA5 = GetItemInfo(27502); --"Scroll of Stamina V"
+ _,SMARTBUFF_SOSTAMINA6 = GetItemInfo(33461); --"Scroll of Stamina VI"
+ _,SMARTBUFF_SOSTAMINA7 = GetItemInfo(37093); --"Scroll of Stamina VII"
+ _,SMARTBUFF_SOSTAMINA8 = GetItemInfo(37094); --"Scroll of Stamina VIII"
+ _,SMARTBUFF_SOSTAMINA9 = GetItemInfo(63306); --"Scroll of Stamina IX"
+ _,SMARTBUFF_SOSPIRIT1 = GetItemInfo(1181); --"Scroll of Spirit I"
+ _,SMARTBUFF_SOSPIRIT2 = GetItemInfo(1712); --"Scroll of Spirit II"
+ _,SMARTBUFF_SOSPIRIT3 = GetItemInfo(4424); --"Scroll of Spirit III"
+ _,SMARTBUFF_SOSPIRIT4 = GetItemInfo(10306); --"Scroll of Spirit IV"
+ _,SMARTBUFF_SOSPIRIT5 = GetItemInfo(27501); --"Scroll of Spirit V"
+ _,SMARTBUFF_SOSPIRIT6 = GetItemInfo(33460); --"Scroll of Spirit VI"
+ _,SMARTBUFF_SOSPIRIT7 = GetItemInfo(37097); --"Scroll of Spirit VII"
+ _,SMARTBUFF_SOSPIRIT8 = GetItemInfo(37098); --"Scroll of Spirit VIII"
+ _,SMARTBUFF_SOSPIRIT9 = GetItemInfo(63307); --"Scroll of Spirit IX"
+ _,SMARTBUFF_SOSTRENGHT1 = GetItemInfo(954); --"Scroll of Strength I"
+ _,SMARTBUFF_SOSTRENGHT2 = GetItemInfo(2289); --"Scroll of Strength II"
+ _,SMARTBUFF_SOSTRENGHT3 = GetItemInfo(4426); --"Scroll of Strength III"
+ _,SMARTBUFF_SOSTRENGHT4 = GetItemInfo(10310); --"Scroll of Strength IV"
+ _,SMARTBUFF_SOSTRENGHT5 = GetItemInfo(27503); --"Scroll of Strength V"
+ _,SMARTBUFF_SOSTRENGHT6 = GetItemInfo(33462); --"Scroll of Strength VI"
+ _,SMARTBUFF_SOSTRENGHT7 = GetItemInfo(43465); --"Scroll of Strength VII"
+ _,SMARTBUFF_SOSTRENGHT8 = GetItemInfo(43466); --"Scroll of Strength VIII"
+ _,SMARTBUFF_FLASKTBC1 = GetItemInfo(22854); --"Flask of Relentless Assault"
+ _,SMARTBUFF_FLASKTBC2 = GetItemInfo(22866); --"Flask of Pure Death"
+ _,SMARTBUFF_FLASKTBC3 = GetItemInfo(22851); --"Flask of Fortification"
+ _,SMARTBUFF_FLASKTBC4 = GetItemInfo(22861); --"Flask of Blinding Light"
+ _,SMARTBUFF_FLASKTBC5 = GetItemInfo(22853); --"Flask of Mighty Versatility"
+ _,SMARTBUFF_FLASK1 = GetItemInfo(46377); --"Flask of Endless Rage"
+ _,SMARTBUFF_FLASK2 = GetItemInfo(46376); --"Flask of the Frost Wyrm"
+ _,SMARTBUFF_FLASK3 = GetItemInfo(46379); --"Flask of Stoneblood"
+ _,SMARTBUFF_FLASK4 = GetItemInfo(46378); --"Flask of Pure Mojo"
+ _,SMARTBUFF_ELIXIRTBC1 = GetItemInfo(22831); --"Elixir of Major Agility"
+ _,SMARTBUFF_ELIXIRTBC2 = GetItemInfo(28104); --"Elixir of Mastery"
+ _,SMARTBUFF_ELIXIRTBC3 = GetItemInfo(22825); --"Elixir of Healing Power"
+ _,SMARTBUFF_ELIXIRTBC4 = GetItemInfo(22834); --"Elixir of Major Defense"
+ _,SMARTBUFF_ELIXIRTBC5 = GetItemInfo(22824); --"Elixir of Major Strangth"
+ _,SMARTBUFF_ELIXIRTBC6 = GetItemInfo(32062); --"Elixir of Major Fortitude"
+ _,SMARTBUFF_ELIXIRTBC7 = GetItemInfo(22840); --"Elixir of Major Mageblood"
+ _,SMARTBUFF_ELIXIRTBC8 = GetItemInfo(32067); --"Elixir of Draenic Wisdom"
+ _,SMARTBUFF_ELIXIRTBC9 = GetItemInfo(28103); --"Adept's Elixir"
+ _,SMARTBUFF_ELIXIRTBC10 = GetItemInfo(22848); --"Elixir of Empowerment"
+ _,SMARTBUFF_ELIXIRTBC11 = GetItemInfo(28102); --"Onslaught Elixir"
+ _,SMARTBUFF_ELIXIRTBC12 = GetItemInfo(22835); --"Elixir of Major Shadow Power"
+ _,SMARTBUFF_ELIXIRTBC13 = GetItemInfo(32068); --"Elixir of Ironskin"
+ _,SMARTBUFF_ELIXIRTBC14 = GetItemInfo(32063); --"Earthen Elixir"
+ _,SMARTBUFF_ELIXIRTBC15 = GetItemInfo(22827); --"Elixir of Major Frost Power"
+ _,SMARTBUFF_ELIXIRTBC16 = GetItemInfo(31679); --"Fel Strength Elixir"
+ _,SMARTBUFF_ELIXIRTBC17 = GetItemInfo(22833); --"Elixir of Major Firepower"
+ _,SMARTBUFF_ELIXIR1 = GetItemInfo(39666); --"Elixir of Mighty Agility"
+ _,SMARTBUFF_ELIXIR2 = GetItemInfo(44332); --"Elixir of Mighty Thoughts"
+ _,SMARTBUFF_ELIXIR3 = GetItemInfo(40078); --"Elixir of Mighty Fortitude"
+ _,SMARTBUFF_ELIXIR4 = GetItemInfo(40073); --"Elixir of Mighty Strength"
+ _,SMARTBUFF_ELIXIR5 = GetItemInfo(40072); --"Elixir of Spirit"
+ _,SMARTBUFF_ELIXIR6 = GetItemInfo(40097); --"Elixir of Protection"
+ _,SMARTBUFF_ELIXIR7 = GetItemInfo(44328); --"Elixir of Mighty Defense"
+ _,SMARTBUFF_ELIXIR8 = GetItemInfo(44331); --"Elixir of Lightning Speed"
+ _,SMARTBUFF_ELIXIR9 = GetItemInfo(44329); --"Elixir of Expertise"
+ _,SMARTBUFF_ELIXIR10 = GetItemInfo(44327); --"Elixir of Deadly Strikes"
+ _,SMARTBUFF_ELIXIR11 = GetItemInfo(44330); --"Elixir of Armor Piercing"
+ _,SMARTBUFF_ELIXIR12 = GetItemInfo(44325); --"Elixir of Accuracy"
+ _,SMARTBUFF_ELIXIR13 = GetItemInfo(40076); --"Guru's Elixir"
+ _,SMARTBUFF_ELIXIR14 = GetItemInfo(9187); --"Elixir of Greater Agility"
+ _,SMARTBUFF_ELIXIR15 = GetItemInfo(28103); --"Adept's Elixir"
+ _,SMARTBUFF_ELIXIR16 = GetItemInfo(40070); --"Spellpower Elixir"
+
+ -- fishing pole
_, _, _, _, _, _, S.FishingPole = GetItemInfo(6256); --"Fishing Pole"
-
- -- read professions and check for alchemy.
- for i = 1, GetNumSkillLines() do
- local skillName, isHeader, _, skillRank, _, _, skillMaxRank, _, _, _, _, _, _ = GetSkillLineInfo(i)
- if not isHeader then
- if skillName == SMARTBUFF_ALCHEMY_TITLE then
- SMARTBUFF_ALCHEMY_ADJ = 2;
- SMARTBUFF_AddMsgD(">>>> Player has Alchemy, doubling duration.");
- break
- end
- end
- end
-
- SMARTBUFF_AddMsgD(">>>> Item list's have been initialised and durations for Alchemy checked.");
-
+ SMARTBUFF_AddMsgD("Item list initialized");
end
-
-----------------------------------------------------------------------------------------------------------------------------------
----
---- Initialise Spell Id
----
-----------------------------------------------------------------------------------------------------------------------------------
+--
+-- Initialise SpellId Lists
+--
function SMARTBUFF_InitSpellIDs()
-
- -- Misc
- SMARTBUFF_KIRUSSOV = GetSpellInfo(46302); --"K'iru's Song of Victory"
- SMARTBUFF_FISHING = GetSpellInfo(7620) or GetSpellInfo(111541); --"Fishing"
- SMARTBUFF_FELINTELLIGENCE = GetSpellInfo(54424) -- "Fel Intelligence"
-
- -- Druid
- SMARTBUFF_DRUID_CAT = GetSpellInfo(768); --"Cat Form"
- SMARTBUFF_DRUID_TREE = GetSpellInfo(33891); --"Tree of Life"
- SMARTBUFF_DRUID_MOONKIN = GetSpellInfo(24858); --"Moonkin Form"
- SMARTBUFF_DRUID_TRACK = GetSpellInfo(5225); --"Track Humanoids"
- SMARTBUFF_MOTW = GetSpellInfo(1126); --"Mark of the Wild"
- SMARTBUFF_GOTWRB1 = GetSpellInfo(21849); --"Gift of the Wild"
- SMARTBUFF_THORNS = GetSpellInfo(467); --"Thorns"
- SMARTBUFF_IMPTHORNS = GetSpellInfo(16836); --"Improved Thorns"
- SMARTBUFF_BARKSKIN = GetSpellInfo(22812); --"Barkskin"
- SMARTBUFF_NATURESGRASP = GetSpellInfo(16689); --"Nature's Grasp"
- SMARTBUFF_TIGERSFURY = GetSpellInfo(5217); --"Tiger's Fury"
- SMARTBUFF_SAVAGEROAR = GetSpellInfo(52610); --"Savage Roar"
- SMARTBUFF_OMENOFCLARITY = GetSpellInfo(16864); --"Omen of Clarity"
-
- -- Druid linked
- S.LinkDruidThorns = { SMARTBUFF_THORNS, SMARTBUFF_IMPTHORNS };
- S.LinkDruidGOTW = { SMARTBUFF_MOTW, SMARTBUFF_GOTWRB1}
+
+ SMARTBUFF_TESTSPELL = GetSpellInfo(774);
+
+ -- Paladin - Updated 7/5/2023 ------------------------------------------------------------------
+ -- blessings
+ SMARTBUFF_GBOM = GetSpellInfo(25782); --"Greater Blessing of Might"
+ SMARTBUFF_GBOK = GetSpellInfo(25898); --"Greater Blessing of Kings"
+ SMARTBUFF_GBOW = GetSpellInfo(25894); --"Greater Blessing of Wisdom"
+ SMARTBUFF_GBOS = GetSpellInfo(25899); --"Greater Blessing of Sanctuary"
+ SMARTBUFF_BOM = GetSpellInfo(19740); --"Blessing of Might"
+ SMARTBUFF_BOK = GetSpellInfo(20217); --"Blessing of Kings"
+ SMARTBUFF_BOW = GetSpellInfo(19742); --"Blessing of Wisdom"
+ SMARTBUFF_BOS = GetSpellInfo(20911); --"Blessing of Sanctuary"
+ -- hands
+ SMARTBUFF_HOF = GetSpellInfo(1044); --"Hand of Freedom"
+ SMARTBUFF_HOP = GetSpellInfo(1022); --"Hand of Protection"
+ SMARTBUFF_HOSAL = GetSpellInfo(1038); --"Hand of Salvation"
+ SMARTBUFF_HOSAC = GetSpellInfo(6940); --"Hand of Sacrifice"
+ -- seals
+ SMARTBUFF_SOCOMMAND = GetSpellInfo(20375); --"Seal of Command"
+ SMARTBUFF_SOVENGEANCE = GetSpellInfo(31801); --"Seal of Vengeance"
+ SMARTBUFF_SOCORRUPTION = GetSpellInfo(53736); --"Seal of Corruption" (Blood Elf)
+ SMARTBUFF_SOJUSTICE = GetSpellInfo(20164); --"Seal of Justice"
+ SMARTBUFF_SORIGHTEOUSNESS = GetSpellInfo(21084); --"Seal of Righteousness"
+ SMARTBUFF_SOWISDOM = GetSpellInfo(20166); --"Seal of Wisdom"
+ SMARTBUFF_SOLIGHT = GetSpellInfo(20165); --"Seal of Light"
+ -- auras
+ SMARTBUFF_CRUSADERAURA = GetSpellInfo(32223); --"Crusader Aura"
+ SMARTBUFF_DEVOTIONAURA = GetSpellInfo(465); --"Devotion Aura"
+ SMARTBUFF_RETRIBUTIONAURA = GetSpellInfo(7294); --"Retribution Aura"
+ SMARTBUFF_FIREAURA = GetSpellInfo(19891); --"Fire Resistance Aura"
+ SMARTBUFF_FROSTAURA = GetSpellInfo(19888); --"Frost Resistance Aura"
+ SMARTBUFF_SHADOWAURA = GetSpellInfo(19876); --"Shadow Resistance Aura"
+ -- other
+ SMARTBUFF_RIGHTEOUSFURY = GetSpellInfo(25780); --"Righteous Fury"
+ SMARTBUFF_HOLYSHIELD = GetSpellInfo(20925); --"Holy Shield"
+ SMARTBUFF_SACREDSHIELD = GetSpellInfo(53601); --"Sacred Shield"
+ SMARTBUFF_AVENGINGWARTH = GetSpellInfo(31884); --"Avenging Wrath"
+ SMARTBUFF_BEACONOFLIGHT = GetSpellInfo(53563); --"Beacon of Light"
+ -- Paladin buff links
+ S.ChainPaladinAura = { SMARTBUFF_DEVOTIONAURA, SMARTBUFF_RETRIBUTIONAURA, SMARTBUFF_CRUSADERAURA, SMARTBUFF_FIREAURA, SMARTBUFF_FROSTAURA, SMARTBUFF_SHADOWAURA }; -- *
+ S.ChainPaladinSeal = { SMARTBUFF_SOCOMMAND, SMARTBUFF_SOVENGEANCE, SMARTBUFF_SOCORRUPTION, SMARTBUFF_SOJUSTICE, SMARTBUFF_SORIGHTEOUSNESS, SMARTBUFF_SOWISDOM, SMARTBUFF_SOLIGHT }; -- *
+ S.ChainPaladinHand = { SMARTBUFF_HOF, SMARTBUFF_HOP, SMARTBUFF_HOSAL, SMARTBUFF_HOSAC }; -- *
+ S.ChainPaladinBlessing = { SMARTBUFF_GBOM, SMARTBUFF_GBOK, SMARTBUFF_GBOW, SMARTBUFF_BOS, SMARTBUFF_BOM, SMARTBUFF_BOK, SMARTBUFF_BOW, SMARTBUFF_BOS}; -- *
+
+ -- Mage - Updated 7/5/2023 ------------------------------------------------------------------------
+ -- buffs
+ SMARTBUFF_AI = GetSpellInfo(1459); --"Arcane Intellect"
+ SMARTBUFF_AB = GetSpellInfo(23028); --"Arcane Brilliance"
+ SMARTBUFF_DALARANB = GetSpellInfo(61316); --"Dalaran Brilliance"
+ -- Armor
+ SMARTBUFF_ICEARMOR = GetSpellInfo(7302); --"Ice Armor"
+ SMARTBUFF_FROSTARMOR = GetSpellInfo(168); --"Frost Armor"
+ SMARTBUFF_MAGEARMOR = GetSpellInfo(6117); --"Mage Armor"
+ SMARTBUFF_MOLTENARMOR = GetSpellInfo(30482); --"Molten Armor"
+ -- Shields
+ SMARTBUFF_MANASHIELD = GetSpellInfo(1463); --"Mana Shield"
+ SMARTBUFF_ICEBARRIER = GetSpellInfo(11426); --"Ice Barrier"
+ -- wards
+ SMARTBUFF_FIREWARD = GetSpellInfo(543); --"Fire Ward"
+ SMARTBUFF_FROSTWARD = GetSpellInfo(6143); --"Frost Ward"
+ -- other
+ SMARTBUFF_FOCUSMAGIC = GetSpellInfo(54648); --"Focus Magic"
+ SMARTBUFF_AMPLIFYMAGIC = GetSpellInfo(1008); --"Amplify Magic"
+ SMARTBUFF_DAMPENMAGIC = GetSpellInfo(604); --"Dampen Magic"
+ SMARTBUFF_SUMMONWATERELE = GetSpellInfo(31687); --"Summon Water Elemental"
+ SMARTBUFF_COMBUSTION = GetSpellInfo(11129); --"Combustion"
+ SMARTBUFF_ARCANEPOWER = GetSpellInfo(12042); --"Arcane Power"
+ SMARTBUFF_PRESENCEOFMIND = GetSpellInfo(12043); --"Presence of Mind"
+ SMARTBUFF_ICYVEINS = GetSpellInfo(12472); --"Icy Veins"
+ -- food and drink
+ SMARTBUFF_CONJFOOD = GetSpellInfo(587); --"Conjure Food"
+ SMARTBUFF_CONJWATER = GetSpellInfo(5504); --"Conjure Water"
+ SMARTBUFF_CONJREFRESHMENT = GetSpellInfo(42955); --"Conjure Refreshment"
+ SMARTBUFF_RITUALREFRESHMENT = GetSpellInfo(43987); --"Ritual Refreshment"
+ SMARTBUFF_CREATEMGEM = GetSpellInfo(759); --"Conjure Mana Gem"
+ -- Mage buff links
+ S.ChainMageArmor = { SMARTBUFF_ICEARMOR, SMARTBUFF_FROSTARMOR, SMARTBUFF_MAGEARMOR, SMARTBUFF_MOLTENARMOR };
+ S.ChainMageBuffs = { SMARTBUFF_AI, SMARTBUFF_AB, SMARTBUFF_DALARANB }
+
+
+ -- Druid - Updated 7/5/2023 ------------------------------------------------------------------------
+ -- buffs
+ SMARTBUFF_MOTW = GetSpellInfo(1126); --"Mark of the Wild"
+ SMARTBUFF_GOTW = GetSpellInfo(21849); --"Gift of the Wild"
+ SMARTBUFF_THORNS = GetSpellInfo(467); --"Thorns"
+ SMARTBUFF_BARKSKIN = GetSpellInfo(22812); --"Barkskin"
+
+ -- forms
+ SMARTBUFF_DRUID_CAT = GetSpellInfo(768); --"Cat Form"
+ SMARTBUFF_DRUID_TREE = GetSpellInfo(33891); --"Incarnation: Tree of Life"
+ SMARTBUFF_DRUID_MOONKIN = GetSpellInfo(24858); --"Moonkin Form"
+ SMARTBUFF_DRUID_BEAR = GetSpellInfo(5487); --"Bear Form"
+ SMARTBUFF_DRUID_DIREBEAR = GetSpellInfo(9634); --"Dire Bear Form"
+ -- track humanoids
+ SMARTBUFF_DRUID_TRACK = GetSpellInfo(5225); --"Track Humanoids"
- -- Priest
- SMARTBUFF_PWF = GetSpellInfo(1243); --"Power Word: Fortitude"
- SMARTBUFF_POFRB1 = GetSpellInfo(21562); --"Prayer of Fortitude"
- SMARTBUFF_SP = GetSpellInfo(976); --"Shadow Protection"
- SMARTBUFF_POSPRB1 = GetSpellInfo(27683); --"Prayer of Shadow Protection"
- SMARTBUFF_INNERFIRE = GetSpellInfo(588); --"Inner Fire"
- SMARTBUFF_DS = GetSpellInfo(14752); --"Divine Spirit"
- SMARTBUFF_POSRB1 = GetSpellInfo(27681); --"Prayer of Spirit"
- SMARTBUFF_PWS = GetSpellInfo(17); --"Power Word: Shield"
- SMARTBUFF_SHADOWFORM = GetSpellInfo(15473); --"Shadowform"
- SMARTBUFF_FEARWARD = GetSpellInfo(6346); --"Fear Ward"
- SMARTBUFF_ELUNESGRACE = GetSpellInfo(2651); --"Elune's Grace"
- SMARTBUFF_FEEDBACK = GetSpellInfo(13896); --"Feedback"
- SMARTBUFF_SHADOWGUARD = GetSpellInfo(18137); --"Shadowguard"
- SMARTBUFF_TOUCHOFWEAKNESS = GetSpellInfo(2652); --"Touch of Weakness"
- SMARTBUFF_INNERFOCUS = GetSpellInfo(14751); --"Inner Focus"
- SMARTBUFF_RENEW = GetSpellInfo(139); --"Renew"
- SMARTBUFF_VAMPIRICEMB = GetSpellInfo(15286); --"Vampiric Embrace"
-
- S.ChainPriestFortBuffs = { SMARTBUFF_PWF, SMARTBUFF_POFRB1};
- S.ChainPriestSpiritBuffs = { SMARTBUFF_DS, SMARTBUFF_POSRB1};
- S.ChainPriestShadowBuffs = { SMARTBUFF_SP, SMARTBUFF_POSPRB1};
- -- Mage
- SMARTBUFF_DALINT = GetSpellInfo(61024); --"Dalaran Intellect"
- SMARTBUFF_DALBRILL = GetSpellInfo(61316); --"Dalaran Brilliance"
- SMARTBUFF_AI = GetSpellInfo(1459); --"Arcane Intellect"
- SMARTBUFF_ABRB1 = GetSpellInfo(23028); --"Arcane Brilliance"
- SMARTBUFF_ICEARMOR = GetSpellInfo(7302); --"Ice Armor"
- SMARTBUFF_FROSTARMOR = GetSpellInfo(168); --"Frost Armor"
- SMARTBUFF_MAGEARMOR = GetSpellInfo(6117); --"Mage Armor"
- SMARTBUFF_MOLTENARMOR = GetSpellInfo(30482); --"Molten Armor"
- SMARTBUFF_DAMPENMAGIC = GetSpellInfo(604); --"Dampen Magic"
- SMARTBUFF_AMPLIFYMAGIC = GetSpellInfo(1008); --"Amplify Magic"
- SMARTBUFF_MANASHIELD = GetSpellInfo(1463); --"Mana Shield"
- SMARTBUFF_FIREWARD = GetSpellInfo(543); --"Fire Ward"
- SMARTBUFF_FROSTWARD = GetSpellInfo(6143); --"Frost Ward"
- SMARTBUFF_ICEBARRIER = GetSpellInfo(11426); --"Ice Barrier"
- SMARTBUFF_COMBUSTION = GetSpellInfo(11129); --"Combustion"
- SMARTBUFF_ARCANEPOWER = GetSpellInfo(12042); --"Arcane Power"
- SMARTBUFF_PRESENCEOFMIND = GetSpellInfo(12043); --"Presence of Mind"
- SMARTBUFF_ICYVEINS = GetSpellInfo(12472); --"Icy Veins"
- SMARTBUFF_SUMMONWATERELE = GetSpellInfo(31687); --"Summon Water Elemental"
- SMARTBUFF_FOCUSMAGIC = GetSpellInfo(54646); --"Focus Magic"
+ -- Priest - Updated 8/5/2023 ----------------------------------------------------------------------
+ -- buffs
+ SMARTBUFF_PWFORTITUDE = GetSpellInfo(1243); --"Power Word: Fortitude"
+ SMARTBUFF_PRAYERFORTITUDE = GetSpellInfo(21562); --"Prayer of Fortitude"
+ SMARTBUFF_DIVINESPIRIT = GetSpellInfo(14752); --"Divine Spirit"
+ SMARTBUFF_PRAYERSPIRIT = GetSpellInfo(27681); --"Prayer of Spirit"
+ SMARTBUFF_SHADOWPROT = GetSpellInfo(976); --"Shadow Protection"
+ SMARTBUFF_PRAYERSHADOWPROT = GetSpellInfo(27683); --"Prayer of Shadow Protection"
+ SMARTBUFF_INNERFOCUS = GetSpellInfo(14751); --"Inner Focus"
+ SMARTBUFF_INNERFIRE = GetSpellInfo(588); --"Inner Fire"
+ SMARTBUFF_FEARWARD = GetSpellInfo(6346); --"Fear Ward"
+ -- forms
+ SMARTBUFF_SHADOWFORM = GetSpellInfo(15473); --"Shadowform"
+ -- Shields
+ SMARTBUFF_PWSHIELD = GetSpellInfo(17); --"Power Word: Shield"
+ -- other
+ SMARTBUFF_ELUNESGRACE = GetSpellInfo(2651); --"Elune's Grace"
+ SMARTBUFF_FEEDBACK = GetSpellInfo(13896); --"Feedback"
+ SMARTBUFF_SHADOWGUARD = GetSpellInfo(18137); --"Shadowguard"
+ SMARTBUFF_TOUCHOFWEAKNESS = GetSpellInfo(2652); --"Touch of Weakness"
+ SMARTBUFF_RENEW = GetSpellInfo(139); --"Renew"
+ SMARTBUFF_VAMPIRICEMB = GetSpellInfo(15286); --"Vampiric Embrace"
+ -- Priest buff links
+ S.LinkPriestSpirit = { SMARTBUFF_DIVINESPIRIT, SMARTBUFF_PRAYERSPIRIT };
+ S.LinkPriestShadow = { SMARTBUFF_SHADOWPROT, SMARTBUFF_PRAYERSHADOWPROT };
+
- -- Mage chained
- S.ChainMageArmor = { SMARTBUFF_ICEARMOR, SMARTBUFF_FROSTARMOR, SMARTBUFF_MAGEARMOR, SMARTBUFF_MOLTENARMOR };
- S.ChainMageBuffs = { SMARTBUFF_DALINT, SMARTBUFF_DALBRILL, SMARTBUFF_AI, SMARTBUFF_ABRB1};
+ -- Warrior - Updated 8/5/2023 ----------------------------------------------------------------------
+ -- shouts
+ SMARTBUFF_BATTLESHOUT = GetSpellInfo(6673); --"Battle Shout"
+ SMARTBUFF_COMMANDINGSHOUT = GetSpellInfo(469); --"Commanding Shout"
+ -- stances
+ SMARTBUFF_BATSTANCE = GetSpellInfo(2457); --"Battle Stance"
+ SMARTBUFF_DEFSTANCE = GetSpellInfo(71); --"Defensive Stance"
+ SMARTBUFF_BESSTANCE = GetSpellInfo(2458); --"Beserker Stance"
+ -- other
+ SMARTBUFF_BERSERKERRAGE = GetSpellInfo(18499); --"Berserker Rage"
+ SMARTBUFF_BLOODRAGE = GetSpellInfo(2687); --"Bloodrage"
+ SMARTBUFF_RAMPAGE = GetSpellInfo(29801); --"Rampage"
+ SMARTBUFF_VIGILANCE = GetSpellInfo(50720); --"Vigilance"
+ SMARTBUFF_SHIELDBLOCK = GetSpellInfo(2565); --"Shield Block"
+ -- Warrior buff links
+ S.ChainWarriorStance = { SMARTBUFF_BATSTANCE, SMARTBUFF_DEFSTANCE, SMARTBUFF_BESSTANCE };
+ S.ChainWarriorShout = { SMARTBUFF_BATTLESHOUT, SMARTBUFF_COMMANDINGSHOUT };
- -- Warlock
- SMARTBUFF_FELARMOR = GetSpellInfo(28176); --"Fel Armor"
- SMARTBUFF_DEMONARMOR = GetSpellInfo(706); --"Demon Armor"
- SMARTBUFF_DEMONSKIN = GetSpellInfo(687); --"Demon Skin"
- SMARTBUFF_UNENDINGBREATH = GetSpellInfo(5697); --"Unending Breath"
- SMARTBUFF_DINVISIBILITY = GetSpellInfo(132); --"Detect Invisibility"
- SMARTBUFF_SOULLINK = GetSpellInfo(19028); --"Soul Link"
- SMARTBUFF_SHADOWWARD = GetSpellInfo(6229); --"Shadow Ward"
- SMARTBUFF_DARKPACT = GetSpellInfo(18220); --"Dark Pact"
- SMARTBUFF_LIFETAP = GetSpellInfo(1454); --"Life Tap"
-
- SMARTBUFF_CREATEHSMIN = GetSpellInfo(6201); --"Create Healthstone (Minor)"
- SMARTBUFF_CREATEHSLES = GetSpellInfo(6202); --"Create Healthstone (Lesser)"
- SMARTBUFF_CREATEHS = GetSpellInfo(5699); --"Create Healthstone"
- SMARTBUFF_CREATEHSGRE = GetSpellInfo(11729); --"Create Healthstone (Greater)"
- SMARTBUFF_CREATEHSMAJ = GetSpellInfo(11730); --"Create Healthstone (Major)"
- SMARTBUFF_CREATEHSMAS = GetSpellInfo(27230); --"Create Healthstone (Master)"
- SMARTBUFF_CREATEHSDEM = GetSpellInfo(47871); --"Create Healthstone (Demonic)"
- SMARTBUFF_CREATEHSFEL = GetSpellInfo(47878); --"Create Healthstone (Fel)"
-
- SMARTBUFF_CREATESSMIN = GetSpellInfo(693); --"Create Soulstone (Minor)"
- SMARTBUFF_CREATESSLES = GetSpellInfo(20752); --"Create Soulstone (Lesser)"
- SMARTBUFF_CREATESS = GetSpellInfo(20755); --"Create Soulstone"
- SMARTBUFF_CREATESSGRE = GetSpellInfo(20756); --"Create Soulstone (Greater)"
- SMARTBUFF_CREATESSMAJ = GetSpellInfo(20757); --"Create Soulstone (Major)"
- SMARTBUFF_CREATESSMAS = GetSpellInfo(27238); --"Create Soulstone (Master)"
- SMARTBUFF_CREATESSDEM = GetSpellInfo(47884); --"Create Soulstone (Demonic)"
-
- SMARTBUFF_CREATESPSTONE1 = GetSpellInfo(2362); --"Create Spellstone Rank 1"
- SMARTBUFF_CREATESPSTONE2 = GetSpellInfo(17727); --"Create Spellstone Rank 2"
- SMARTBUFF_CREATESPSTONE3 = GetSpellInfo(17728); --"Create Spellstone Rank 3"
- SMARTBUFF_CREATESPSTONE4 = GetSpellInfo(28172); --"Create Spellstone Rank 4"
- SMARTBUFF_CREATESPSTONE5 = GetSpellInfo(47886); --"Create Spellstone Rank 5"
- SMARTBUFF_CREATESPSTONE6 = GetSpellInfo(47888); --"Create Spellstone Rank 6"
-
- SMARTBUFF_CREATEFSTONE1 = GetSpellInfo(6366); --"Create Firestone Rank 1"
- SMARTBUFF_CREATEFSTONE2 = GetSpellInfo(17951); --"Create Firestone Rank 2"
- SMARTBUFF_CREATEFSTONE3 = GetSpellInfo(17952); --"Create Firestone Rank 3"
- SMARTBUFF_CREATEFSTONE4 = GetSpellInfo(17953); --"Create Firestone Rank 4"
- SMARTBUFF_CREATEFSTONE5 = GetSpellInfo(27250); --"Create Firestone Rank 5"
- SMARTBUFF_CREATEFSTONE6 = GetSpellInfo(60219); --"Create Firestone Rank 6"
- SMARTBUFF_CREATEFSTONE7 = GetSpellInfo(60220); --"Create Firestone Rank 7"
- -- Warlock chained
- S.ChainWarlockArmor = { SMARTBUFF_DEMONSKIN, SMARTBUFF_DEMONARMOR, SMARTBUFF_FELARMOR };
+ -- Shaman - Updated 8/5/2023 ----------------------------------------------------------------------
+ -- shields
+ SMARTBUFF_LIGHTNINGSHIELD = GetSpellInfo(324); --"Lightning Shield"
+ SMARTBUFF_WATERSHIELD = GetSpellInfo(24398); --"Water Shield"
+ SMARTBUFF_EARTHSHIELD = GetSpellInfo(974); --"Earth Shield"
+ -- weapons
+ SMARTBUFF_ROCKBITERW = GetSpellInfo(8017); --"Rockbiter Weapon"
+ SMARTBUFF_FROSTBRANDW = GetSpellInfo(8033); --"Frostbrand Weapon"
+ SMARTBUFF_FLAMETONGUEW = GetSpellInfo(8024); --"Flametongue Weapon"
+ SMARTBUFF_WINDFURYW = GetSpellInfo(8232); --"Windfury Weapon"
+ SMARTBUFF_EARTHLIVINGW = GetSpellInfo(51730); --"Earthliving Weapon"
+ -- buffs
+ SMARTBUFF_WATERBREATHING = GetSpellInfo(131); --"Water Breathing"
+ SMARTBUFF_WATERWALKING = GetSpellInfo(546); --"Water Walking"
+ -- Shaman chained
+ S.ChainShamanShield = { SMARTBUFF_LIGHTNINGSHIELD, SMARTBUFF_WATERSHIELD, SMARTBUFF_EARTHSHIELD };
- -- Hunter
+
+ -- Hunter - Updated 10/5/2023 ----------------------------------------------------------------------
SMARTBUFF_TRUESHOTAURA = GetSpellInfo(19506); --"Trueshot Aura"
SMARTBUFF_RAPIDFIRE = GetSpellInfo(3045); --"Rapid Fire"
SMARTBUFF_CALLPET = GetSpellInfo(883); --"Call Pet"
+ SMARTBUFF_REVIVEPET = GetSpellInfo(982); --"Revive Pet"
SMARTBUFF_AOTH = GetSpellInfo(13165); --"Aspect of the Hawk"
SMARTBUFF_AOTM = GetSpellInfo(13163); --"Aspect of the Monkey"
SMARTBUFF_AOTW = GetSpellInfo(20043); --"Aspect of the Wild"
@@ -456,105 +498,75 @@ function SMARTBUFF_InitSpellIDs()
-- Hunter chained
S.ChainAspects = { SMARTBUFF_AOTH,SMARTBUFF_AOTM,SMARTBUFF_AOTW,SMARTBUFF_AOTB,SMARTBUFF_AOTC,SMARTBUFF_AOTP,SMARTBUFF_AOTV,SMARTBUFF_AOTDH };
-
- -- Shaman
- SMARTBUFF_LIGHTNINGSHIELD = GetSpellInfo(324); --"Lightning Shield"
- SMARTBUFF_WATERSHIELD = GetSpellInfo(24398); --"Water Shield"
- SMARTBUFF_EARTHSHIELD = GetSpellInfo(974); --"Earth Shield"
- SMARTBUFF_ROCKBITERW = GetSpellInfo(8017); --"Rockbiter Weapon"
- SMARTBUFF_FROSTBRANDW = GetSpellInfo(8033); --"Frostbrand Weapon"
- SMARTBUFF_FLAMETONGUEW = GetSpellInfo(8024); --"Flametongue Weapon"
- SMARTBUFF_WINDFURYW = GetSpellInfo(8232); --"Windfury Weapon"
- SMARTBUFF_EARTHLIVINGW = GetSpellInfo(51730); --"Earthliving Weapon"
- SMARTBUFF_WATERBREATHING = GetSpellInfo(131); --"Water Breathing"
- SMARTBUFF_WATERWALKING = GetSpellInfo(546); --"Water Walking"
-
- -- Shaman chained
- S.ChainShamanShield = { SMARTBUFF_LIGHTNINGSHIELD, SMARTBUFF_WATERSHIELD, SMARTBUFF_EARTHSHIELD };
-
- -- Warrior
- SMARTBUFF_BATTLESHOUT = GetSpellInfo(6673); --"Battle Shout"
- SMARTBUFF_COMMANDINGSHOUT = GetSpellInfo(469); --"Commanding Shout"
- SMARTBUFF_BERSERKERRAGE = GetSpellInfo(18499); --"Berserker Rage"
- SMARTBUFF_BLOODRAGE = GetSpellInfo(2687); --"Bloodrage"
- SMARTBUFF_RAMPAGE = GetSpellInfo(29801); --"Rampage"
- SMARTBUFF_VIGILANCE = GetSpellInfo(50720); --"Vigilance"
- SMARTBUFF_SHIELDBLOCK = GetSpellInfo(2565); --"Shield Block"
-
- -- Warrior chained
- S.ChainWarriorShout = { SMARTBUFF_BATTLESHOUT, SMARTBUFF_COMMANDINGSHOUT };
-
-
- -- Rogue
- SMARTBUFF_BLADEFLURRY = GetSpellInfo(13877); --"Blade Flurry"
- SMARTBUFF_SAD = GetSpellInfo(5171); --"Slice and Dice"
- SMARTBUFF_EVASION = GetSpellInfo(5277); --"Evasion"
- SMARTBUFF_HUNGERFORBLOOD = GetSpellInfo(51662); --"Hunger For Blood"
- SMARTBUFF_STEALTH = GetSpellInfo(1784); --"Stealth"
-
-
- -- Paladin
- SMARTBUFF_RIGHTEOUSFURY = GetSpellInfo(25780); --"Righteous Fury"
- SMARTBUFF_HOLYSHIELD = GetSpellInfo(20925); --"Holy Shield"
- SMARTBUFF_BOM = GetSpellInfo(19740); --"Blessing of Might"
- SMARTBUFF_GBOM = GetSpellInfo(25782); --"Greater Blessing of Might"
- SMARTBUFF_BOW = GetSpellInfo(19742); --"Blessing of Wisdom"
- SMARTBUFF_GBOW = GetSpellInfo(25894); --"Greater Blessing of Wisdom"
- SMARTBUFF_BOSAL = GetSpellInfo(1038); --"Blessing of Salvation"
- SMARTBUFF_GBOSAL = GetSpellInfo(25895); --"Greater Blessing of Salvation"
- SMARTBUFF_BOK = GetSpellInfo(20217); --"Blessing of Kings"
- SMARTBUFF_GBOK = GetSpellInfo(25898); --"Greater Blessing of Kings"
- SMARTBUFF_BOSAN = GetSpellInfo(20911); --"Blessing of Sanctuary"
- SMARTBUFF_GBOSAN = GetSpellInfo(25899); --"Greater Blessing of Sanctuary"
- SMARTBUFF_SOCOMMAND = GetSpellInfo(20375); --"Seal of Command"
- SMARTBUFF_SOJUSTICE = GetSpellInfo(20164); --"Seal of Justice"
- SMARTBUFF_SOLIGHT = GetSpellInfo(20165); --"Seal of Light"
- SMARTBUFF_SORIGHTEOUSNESS = GetSpellInfo(21084); --"Seal of Righteousness"
- SMARTBUFF_SOWISDOM = GetSpellInfo(20166); --"Seal of Wisdom"
- SMARTBUFF_SOTCRUSADER = GetSpellInfo(21082); --"Seal of the Crusader"
- SMARTBUFF_SOVENGEANCE = GetSpellInfo(31801); --"Seal of Vengeance"
- SMARTBUFF_SOBLOOD = GetSpellInfo(31892); --"Seal of Blood"
- SMARTBUFF_SOCORRUPTION = GetSpellInfo(53736); --"Seal of Corruption"
- SMARTBUFF_SOMARTYR = GetSpellInfo(53720); --"Seal of the Martyr"
- SMARTBUFF_DEVOTIONAURA = GetSpellInfo(465); --"Devotion Aura"
- SMARTBUFF_RETRIBUTIONAURA = GetSpellInfo(7294); --"Retribution Aura"
- SMARTBUFF_CONCENTRATIONAURA = GetSpellInfo(19746); --"Concentration Aura"
- SMARTBUFF_SHADOWRESISTANCEAURA = GetSpellInfo(19876); --"Shadow Resistance Aura"
- SMARTBUFF_FROSTRESISTANCEAURA = GetSpellInfo(19888); --"Frost Resistance Aura"
- SMARTBUFF_FIRERESISTANCEAURA = GetSpellInfo(19891); --"Fire Resistance Aura"
- SMARTBUFF_SANCTITYAURA = GetSpellInfo(20218); --"Sanctity Aura"
- SMARTBUFF_CRUSADERAURA = GetSpellInfo(32223); --"Crusader Aura"
-
- -- Paladin chained
- S.ChainPaladinBOM = { SMARTBUFF_BOM, SMARTBUFF_GBOM };
- S.ChainPaladinBOW = { SMARTBUFF_BOW, SMARTBUFF_GBOW };
- S.ChainPaladinSAL = { SMARTBUFF_BOSAL, SMARTBUFF_GBOSAL };
- S.ChainPaladinBOK = { SMARTBUFF_BOK, SMARTBUFF_GBOK };
- S.ChainPaladinSAN = { SMARTBUFF_BOSAN, SMARTBUFF_GBOSAN };
- S.ChainPaladinSeal = { SMARTBUFF_SOCOMMAND, SMARTBUFF_SOJUSTICE, SMARTBUFF_SOLIGHT, SMARTBUFF_SORIGHTEOUSNESS, SMARTBUFF_SOWISDOM, SMARTBUFF_SOTCRUSADER, SMARTBUFF_SOVENGEANCE, SMARTBUFF_SOBLOOD, SMARTBUFF_SOCORRUPTION, SMARTBUFF_SOMARTYR };
- S.ChainPaladinAura = { SMARTBUFF_DEVOTIONAURA, SMARTBUFF_RETRIBUTIONAURA, SMARTBUFF_CONCENTRATIONAURA, SMARTBUFF_SHADOWRESISTANCEAURA, SMARTBUFF_FROSTRESISTANCEAURA, SMARTBUFF_FIRERESISTANCEAURA, SMARTBUFF_SANCTITYAURA, SMARTBUFF_CRUSADERAURA };
-
- -- Death Knight
- SMARTBUFF_DANCINGRW = GetSpellInfo(49028); --"Dancing Rune Weapon"
- SMARTBUFF_BLOODPRESENCE = GetSpellInfo(48263); --"Blood Presence"
- SMARTBUFF_FROSTPRESENCE = GetSpellInfo(48266); --"Frost Presence"
- SMARTBUFF_UNHOLYPRESENCE = GetSpellInfo(48265); --"Unholy Presence"
- SMARTBUFF_PATHOFFROST = GetSpellInfo(3714); --"Path of Frost"
- SMARTBUFF_BONESHIELD = GetSpellInfo(49222); --"Bone Shield"
- SMARTBUFF_HORNOFWINTER = GetSpellInfo(57330); --"Horn of Winter"
- SMARTBUFF_RAISEDEAD = GetSpellInfo(46584); --"Raise Dead"
--- SMARTBUFF_POTGRAVE = GetSpellInfo(155522); --"Power of the Grave" (P)
+ -- warlock - Updated 19/5/2023 --------------------------------------------------------------------
+ -- armor
+ SMARTBUFF_DEMONSKIN = GetSpellInfo(687); --"Demon Armor"
+ SMARTBUFF_DEMONARMOR = GetSpellInfo(706); --"Demon Armor"
+ SMARTBUFF_FELARMOR = GetSpellInfo(28176); --"Fel Armor"
+ -- pets
+ SMARTBUFF_SUMMONINFERNAL = GetSpellInfo(1122); --"Summon Inferno"
+ SMARTBUFF_SUMMONFELHUNTER = GetSpellInfo(691); --"Summon Fellhunter"
+ SMARTBUFF_SUMMONIMP = GetSpellInfo(688); --"Summon Imp"
+ SMARTBUFF_SUMMONSUCCUBUS = GetSpellInfo(712); --"Summon Succubus"
+ SMARTBUFF_SUMMONINCUBUS = GetSpellInfo(713); --"Summon Incubus"
+ SMARTBUFF_SUMMONVOIDWALKER = GetSpellInfo(697); --"Summon Voidwalker"
+ -- buffs
+ SMARTBUFF_UNENDINGBREATH = GetSpellInfo(5697); --"Unending Breath"
+ -- create stones
+ SMARTBUFF_CREATEHS = GetSpellInfo(6201); --"Create Healthstone"
+ SMARTBUFF_CREATESOULS = GetSpellInfo(693); --"Create Soulstone"
+ SMARTBUFF_CREATESPELLS = GetSpellInfo(2362); --"Create Spellstone"
+ SMARTBUFF_CREATEFIRES = GetSpellInfo(6366); --"Create Firestone"
+ -- other
+ SMARTBUFF_LOCKINVISIBILITY = GetSpellInfo(132); --"Detect Invisibility"
+ SMARTBUFF_LOCKSENSEDEMONS = GetSpellInfo(5500); --"Sense Demons"
+
+
+ -- Death Knight - Updated 20/5/2023 --------------------------------------------------------------------
+ SMARTBUFF_DANCINGRW = GetSpellInfo(49028); --"Dancing Rune Weapon"
+ SMARTBUFF_BLOODPRESENCE = GetSpellInfo(48263); --"Blood Presence"
+ SMARTBUFF_FROSTPRESENCE = GetSpellInfo(48266); --"Frost Presence"
+ SMARTBUFF_UNHOLYPRESENCE = GetSpellInfo(48265); --"Unholy Presence"
+ SMARTBUFF_PATHOFFROST = GetSpellInfo(3714); --"Path of Frost"
+ SMARTBUFF_BONESHIELD = GetSpellInfo(49222); --"Bone Shield"
+ SMARTBUFF_HORNOFWINTER = GetSpellInfo(57330); --"Horn of Winter"
+ SMARTBUFF_RAISEDEAD = GetSpellInfo(46584); --"Raise Dead"
-- Death Knight buff links
- S.ChainDKPresence = { SMARTBUFF_BLOODPRESENCE, SMARTBUFF_FROSTPRESENCE, SMARTBUFF_UNHOLYPRESENCE };
+ S.ChainDKPresence = { SMARTBUFF_BLOODPRESENCE, SMARTBUFF_FROSTPRESENCE, SMARTBUFF_UNHOLYPRESENCE };
+
+
+ -- Rogue - Updated 20/5/2023 --------------------------------------------------------------------
+ SMARTBUFF_STEALTH = GetSpellInfo(1784); --"Stealth"
+ SMARTBUFF_BLADEFLURRY = GetSpellInfo(13877); --"Blade Flurry"
+ SMARTBUFF_SAD = GetSpellInfo(5171); --"Slice and Dice"
+ SMARTBUFF_EVASION = GetSpellInfo(5277); --"Evasion"
+ SMARTBUFF_HUNGERFORBLOOD = GetSpellInfo(60177); --"Hunger For Blood"
+ SMARTBUFF_TRICKS = GetSpellInfo(57934); --"Tricks of the Trade"
+ SMARTBUFF_RECUPERATE = GetSpellInfo(185311); --"Crimson Vial
+ -- Poisons
+ SMARTBUFF_WOUNDPOISON = GetSpellInfo(8679); --"Wound Poison"
+ SMARTBUFF_CRIPPLINGPOISON = GetSpellInfo(3408); --"Crippling Poison"
+ SMARTBUFF_DEADLYPOISON = GetSpellInfo(2823); --"Deadly Poison"
+ SMARTBUFF_LEECHINGPOISON = GetSpellInfo(108211); --"Leeching Poison"
+ SMARTBUFF_INSTANTPOISON = GetSpellInfo(315584); --"Instant Poison"
+ SMARTBUFF_NUMBINGPOISON = GetSpellInfo(5761); --"Numbing Poison"
+ SMARTBUFF_AMPLIFYPOISON = GetSpellInfo(381664); --"Amplifying Poison"
+ SMARTBUFF_ATROPHICPOISON = GetSpellInfo(381637); --"Atrophic Poison"
+
+ -- Rogue buff links -- todo (20/5/2023)
+-- S.ChainRoguePoisonsLethal = { SMARTBUFF_DEADLYPOISON, SMARTBUFF_WOUNDPOISON, SMARTBUFF_INSTANTPOISON, SMARTBUFF_AGONIZINGPOISON, SMARTBUFF_AMPLIFYPOISON };
+-- S.ChainRoguePoisonsNonLethal = { SMARTBUFF_CRIPPLINGPOISON, SMARTBUFF_LEECHINGPOISON, SMARTBUFF_NUMBINGPOISON, SMARTBUFF_ATROPHICPOISON };
+
-
-- Tracking
SMARTBUFF_FINDMINERALS = GetSpellInfo(2580); --"Find Minerals"
SMARTBUFF_FINDHERBS = GetSpellInfo(2383); --"Find Herbs"
+ SMARTBUFF_FINDFISH = GetSpellInfo(43308); --"Find Fish"
SMARTBUFF_FINDTREASURE = GetSpellInfo(2481); --"Find Treasure"
SMARTBUFF_TRACKHUMANOIDS = GetSpellInfo(19883); --"Track Humanoids"
+ SMARTBUFF_DTRACKHUMANOIDS = GetSpellInfo(5225); --"Druid Track Humanoids"
SMARTBUFF_TRACKBEASTS = GetSpellInfo(1494); --"Track Beasts"
SMARTBUFF_TRACKUNDEAD = GetSpellInfo(19884); --"Track Undead"
SMARTBUFF_TRACKHIDDEN = GetSpellInfo(19885); --"Track Hidden"
@@ -562,8 +574,6 @@ function SMARTBUFF_InitSpellIDs()
SMARTBUFF_TRACKDEMONS = GetSpellInfo(19878); --"Track Demons"
SMARTBUFF_TRACKGIANTS = GetSpellInfo(19882); --"Track Giants"
SMARTBUFF_TRACKDRAGONKIN = GetSpellInfo(19879); --"Track Dragonkin"
- SMARTBUFF_SENSEDEMONS = GetSpellInfo(5500); --"Sense Demons"
- SMARTBUFF_SENSEUNDEAD = GetSpellInfo(5502); --"Sense Undead"
-- Racial
SMARTBUFF_STONEFORM = GetSpellInfo(20594); --"Stoneform"
@@ -571,363 +581,403 @@ function SMARTBUFF_InitSpellIDs()
SMARTBUFF_BERSERKING = GetSpellInfo(26297); --"Berserking"
SMARTBUFF_WOTFORSAKEN = GetSpellInfo(7744); --"Will of the Forsaken"
SMARTBUFF_WarStomp = GetSpellInfo(20549); --"War Stomp"
-
+
-- Food
- SMARTBUFF_FOOD_AURA = GetSpellInfo(19705); --"Well Fed"
+ SMARTBUFF_FOOD_AURA = GetSpellInfo(46899); --"Well Fed"
SMARTBUFF_FOOD_SPELL = GetSpellInfo(433); --"Food"
- SMARTBUFF_DRINK_SPELL = GetSpellInfo(430); --"Drink"
+ SMARTBUFF_DRINK_SPELL = GetSpellInfo(430); --"Drink"
+
+ -- Misc
+ SMARTBUFF_KIRUSSOV = GetSpellInfo(46302); --"K'iru's Song of Victory"
+ SMARTBUFF_FISHING = GetSpellInfo(7620) or GetSpellInfo(111541); --"Fishing"
-- Scroll
- SMARTBUFF_SBAGILITY = GetSpellInfo(8115); -- Scroll buff: Agility
- SMARTBUFF_SBINTELLECT = GetSpellInfo(8096); -- Scroll buff: Intellect
- SMARTBUFF_SBSTAMINA = GetSpellInfo(8099); -- Scroll buff: Stamina
- SMARTBUFF_SBSPIRIT = GetSpellInfo(8112); -- Scroll buff: Spirit
- SMARTBUFF_SBSTRENGHT = GetSpellInfo(8118); -- Scroll buff: Strength
- SMARTBUFF_SBPROTECTION = GetSpellInfo(58452); -- Scroll buff: Armor
-
- --- Classic - Potions / Flasks / Elixirs
- SMARTBUFF_ADEPTELIXIR_BUFF = GetSpellInfo(33740); -- Adept's Elixir
- SMARTBUFF_MAJORDEFENSE_BUFF = GetSpellInfo(28557); -- Major Defense
- SMARTBUFF_MAJORAGILITY_BUFF = GetSpellInfo(28497); -- Major Agility
- SMARTBUFF_DRAENICWISDOM_BUFF = GetSpellInfo(39638); -- Draenic Wisdom
- SMARTBUFF_MAJORFROSTPOWER_BUFF = GetSpellInfo(28549); -- Major Frost Power
- SMARTBUFF_EARTHEN_BUFF = GetSpellInfo(39637); -- Earthen Elixir
- SMARTBUFF_MASTERY_BUFF = GetSpellInfo(33741); -- Elixir of Mastery
- SMARTBUFF_CAMOUFLAGE_BUFF = GetSpellInfo(28543); -- Elixir of Camouflage
- SMARTBUFF_HEALINGPOWER_BUFF = GetSpellInfo(28491); -- Elixir of Healing Power
- SMARTBUFF_MAJORFORTITUDE_BUFF = GetSpellInfo(39636); -- Elixir of Major Fortitude
- SMARTBUFF_MAJORSTRENGTH_BUFF = GetSpellInfo(28490); -- Elixir of Major Strength
- SMARTBUFF_ONSLAUGHTELIXIR_BUFF = GetSpellInfo(33738); -- Onslaught Elixir
- SMARTBUFF_GREATERARCANE_BUFF = GetSpellInfo(17573); -- Greater Arcane
- SMARTBUFF_MONGOOSEELIXIR_BUFF = GetSpellInfo(17571); -- Elixir of Mongoose
- SMARTBUFF_BRUTEFORCE_BUFF = GetSpellInfo(17557); -- Elixir of Brute Force
- SMARTBUFF_SAGESELIXIR_BUFF = GetSpellInfo(17555); -- Elixir of Sages
- SMARTBUFF_SUPERIORDEFENSE_BUFF = GetSpellInfo(17554); -- Elixir of Superior Defense
- SMARTBUFF_DEMONSLAYING_BUFF = GetSpellInfo(11477); -- Elixir of Demon Slaying
- SMARTBUFF_MAJORFIREPOWER_BUFF = GetSpellInfo(28556); -- Elixir of Major Fire Power
- SMARTBUFF_GREATERFIREPOWER_BUFF = GetSpellInfo(26277); -- Elixir of Greater Fire Power
- SMARTBUFF_SHADOWPOWER_BUFF = GetSpellInfo(11476); -- Elixir of Shadow Power
- SMARTBUFF_GIANTSELIXIR_BUFF = GetSpellInfo(11472); -- Elixir of Giants
- SMARTBUFF_GREATERAGILITY_BUFF = GetSpellInfo(11467); -- Elixir of Greater Agility
- SMARTBUFF_GIFTOFARTHAS_BUFF = GetSpellInfo(11466); -- Gift of Arthas
- SMARTBUFF_ARANCEELIXIR_BUFF = GetSpellInfo(11461); -- Arcane Elixir
- SMARTBUFF_GREATERINTELLECT_BUFF = GetSpellInfo(11465); -- Elixir of Greater Intellect
- SMARTBUFF_MAJORNATUREPROT_BUFF = GetSpellInfo(28573); -- Major Natur Protection Potion
- SMARTBUFF_MAJORMAGEBLOOD_BUFF = GetSpellInfo(28570); -- Major Mageblood
- SMARTBUFF_MAJORSHADOWPWR_BUFF = GetSpellInfo(28558); -- Major Shadow Power
- SMARTBUFF_MAJORIRONSKIN_BUFF = GetSpellInfo(39639); -- Major Ironskin
- SMARTBUFF_BLINDINGLIGHTFLASK_BUFF = GetSpellInfo(28590); -- Flask of Blinding Light
- SMARTBUFF_FORTIFICATIONFLASK_BUFF = GetSpellInfo(28587); -- Flask of Fortification
- SMARTBUFF_RESTORATIONFLASK_BUFF = GetSpellInfo(28588); -- Flask of Restoration
- SMARTBUFF_PUREDEATHFLASK_BUFF = GetSpellInfo(28591); -- Flask of Pure Death
- SMARTBUFF_RELENTLESSFLASK_BUFF = GetSpellInfo(28589); -- Flask of Relentless Assault
- SMARTBUFF_CHROMATICFLASK_BUFF = GetSpellInfo(17638); -- Flask of Chromatic Resistance
- SMARTBUFF_DISTILLEDFLASK_BUFF = GetSpellInfo(17636); -- Flask of Distilled Wisdom
- SMARTBUFF_SUPREMEPWRFLASK_BUFF = GetSpellInfo(17637); -- Flask of Supreme Power
-
- SMARTBUFF_FLASKOFFROSTWYRM_BUFF = GetSpellInfo(53901); -- Flask of Frost Wyrm
- SMARTBUFF_FLASKOFSTONEBLOOD_BUFF = GetSpellInfo(53902); -- Flask of Stoneblood
- SMARTBUFF_FLASKOFENDLESSRAGE_BUFF = GetSpellInfo(53903); -- Flask of Endless Rage
- SMARTBUFF_FLASKOFTHENORTH_BUFF = GetSpellInfo(67019); -- Flask of the North
-
+ SMARTBUFF_SBAGILITY = GetSpellInfo(8115); --"Scroll buff: Agility"
+ SMARTBUFF_SBINTELLECT = GetSpellInfo(8096); --"Scroll buff: Intellect"
+ SMARTBUFF_SBSTAMINA = GetSpellInfo(8099); --"Scroll buff: Stamina"
+ SMARTBUFF_SBSPIRIT = GetSpellInfo(8112); --"Scroll buff: Spirit"
+ SMARTBUFF_SBSTRENGHT = GetSpellInfo(8118); --"Scroll buff: Strength"
+ SMARTBUFF_SBPROTECTION = GetSpellInfo(89344); --"Scroll buff: Armor"
+ SMARTBUFF_BMiscItem1 = GetSpellInfo(326396); --"WoW's 16th Anniversary"
+ SMARTBUFF_BMiscItem2 = GetSpellInfo(62574); --"Warts-B-Gone Lip Balm"
+ SMARTBUFF_BMiscItem3 = GetSpellInfo(98444); --"Vrykul Drinking Horn"
+ SMARTBUFF_BMiscItem4 = GetSpellInfo(127230); --"Visions of Insanity"
+ SMARTBUFF_BMiscItem5 = GetSpellInfo(124036); --"Anglers Fishing Raft"
+ SMARTBUFF_BMiscItem6 = GetSpellInfo(125167); --"Ancient Pandaren Fishing Charm"
+ SMARTBUFF_BMiscItem7 = GetSpellInfo(138927); --"Burning Essence"
+ SMARTBUFF_BMiscItem8 = GetSpellInfo(160331); --"Blood Elf Illusion"
+ SMARTBUFF_BMiscItem9 = GetSpellInfo(158486); --"Safari Hat"
+ SMARTBUFF_BMiscItem10 = GetSpellInfo(158474); --"Savage Safari Hat"
+ SMARTBUFF_BMiscItem11 = GetSpellInfo(176151); --"Whispers of Insanity"
+ SMARTBUFF_BMiscItem12 = GetSpellInfo(193456); --"Gaze of the Legion"
+ SMARTBUFF_BMiscItem13 = GetSpellInfo(193547); --"Fel Crystal Infusion"
+ SMARTBUFF_BMiscItem14 = GetSpellInfo(190668); --"Empower"
+ SMARTBUFF_BMiscItem14_1 = GetSpellInfo(175457); --"Focus Augmentation"
+ SMARTBUFF_BMiscItem14_2 = GetSpellInfo(175456); --"Hyper Augmentation"
+ SMARTBUFF_BMiscItem14_3 = GetSpellInfo(175439); --"Stout Augmentation
+ SMARTBUFF_BMiscItem16 = GetSpellInfo(181642); --"Bodyguard Miniaturization Device"
+ SMARTBUFF_BMiscItem17 = GetSpellInfo(242551); --"Fel Focus"
+
+ S.LinkSafariHat = { SMARTBUFF_BMiscItem9, SMARTBUFF_BMiscItem10 };
+ S.LinkAugment = { SMARTBUFF_BMiscItem14, SMARTBUFF_BMiscItem14_1, SMARTBUFF_BMiscItem14_2, SMARTBUFF_BMiscItem14_3, SMARTBUFF_BAugmentRune, SMARTBUFF_BVieledAugment, SMARTBUFF_BDraconicRune };
+
+ -- Flasks & Elixirs
+ SMARTBUFF_BFLASKTBC1 = GetSpellInfo(28520); --"Flask of Relentless Assault"
+ SMARTBUFF_BFLASKTBC2 = GetSpellInfo(28540); --"Flask of Pure Death"
+ SMARTBUFF_BFLASKTBC3 = GetSpellInfo(28518); --"Flask of Fortification"
+ SMARTBUFF_BFLASKTBC4 = GetSpellInfo(28521); --"Flask of Blinding Light"
+ SMARTBUFF_BFLASKTBC5 = GetSpellInfo(28519); --"Flask of Mighty Versatility"
+ SMARTBUFF_BFLASK1 = GetSpellInfo(53760); --"Flask of Endless Rage"
+ SMARTBUFF_BFLASK2 = GetSpellInfo(53755); --"Flask of the Frost Wyrm"
+ SMARTBUFF_BFLASK3 = GetSpellInfo(53758); --"Flask of Stoneblood"
+ SMARTBUFF_BFLASK4 = GetSpellInfo(54212); --"Flask of Pure Mojo"
+ SMARTBUFF_BFLASKCT1 = GetSpellInfo(79471); --"Flask of the Winds"
+ SMARTBUFF_BFLASKCT2 = GetSpellInfo(79472); --"Flask of Titanic Strength"
+ SMARTBUFF_BFLASKCT3 = GetSpellInfo(79470); --"Flask of the Draconic Mind"
+ SMARTBUFF_BFLASKCT4 = GetSpellInfo(79469); --"Flask of Steelskin"
+ SMARTBUFF_BFLASKCT5 = GetSpellInfo(94160); --"Flask of Flowing Water"
+ SMARTBUFF_BFLASKCT7 = GetSpellInfo(92679); --"Flask of Battle"
+ SMARTBUFF_BFLASKMOP1 = GetSpellInfo(105617); --"Alchemist's Flask"
+ SMARTBUFF_BFLASKMOP2 = GetSpellInfo(105694); --"Flask of the Earth"
+ SMARTBUFF_BFLASKMOP3 = GetSpellInfo(105693); --"Flask of Falling Leaves"
+ SMARTBUFF_BFLASKMOP4 = GetSpellInfo(105689); --"Flask of Spring Blossoms"
+ SMARTBUFF_BFLASKMOP5 = GetSpellInfo(105691); --"Flask of the Warm Sun"
+ SMARTBUFF_BFLASKMOP6 = GetSpellInfo(105696); --"Flask of Winter's Bite"
+ SMARTBUFF_BFLASKCT61 = GetSpellInfo(79640); --"Enhanced Intellect"
+ SMARTBUFF_BFLASKCT62 = GetSpellInfo(79639); --"Enhanced Agility"
+ SMARTBUFF_BFLASKCT63 = GetSpellInfo(79638); --"Enhanced Strength"
+ SMARTBUFF_BFLASKWOD1 = GetSpellInfo(156077); --"Draenic Stamina Flask"
+ SMARTBUFF_BFLASKWOD2 = GetSpellInfo(156071); --"Draenic Strength Flask"
+ SMARTBUFF_BFLASKWOD3 = GetSpellInfo(156070); --"Draenic Intellect Flask"
+ SMARTBUFF_BFLASKWOD4 = GetSpellInfo(156073); --"Draenic Agility Flask"
+ SMARTBUFF_BGRFLASKWOD1 = GetSpellInfo(156084); --"Greater Draenic Stamina Flask"
+ SMARTBUFF_BGRFLASKWOD2 = GetSpellInfo(156080); --"Greater Draenic Strength Flask"
+ SMARTBUFF_BGRFLASKWOD3 = GetSpellInfo(156079); --"Greater Draenic Intellect Flask"
+ SMARTBUFF_BGRFLASKWOD4 = GetSpellInfo(156064); --"Greater Draenic Agility Flask"
+ SMARTBUFF_BFLASKLEG1 = GetSpellInfo(188035); --"Flask of Ten Thousand Scars"
+ SMARTBUFF_BFLASKLEG2 = GetSpellInfo(188034); --"Flask of the Countless Armies"
+ SMARTBUFF_BFLASKLEG3 = GetSpellInfo(188031); --"Flask of the Whispered Pact"
+ SMARTBUFF_BFLASKLEG4 = GetSpellInfo(188033); --"Flask of the Seventh Demon"
+ SMARTBUFF_BFLASKBFA1 = GetSpellInfo(251837); --"Flask of Endless Fathoms"
+ SMARTBUFF_BFLASKBFA2 = GetSpellInfo(251836); --"Flask of the Currents"
+ SMARTBUFF_BFLASKBFA3 = GetSpellInfo(251839); --"Flask of the Undertow"
+ SMARTBUFF_BFLASKBFA4 = GetSpellInfo(251838); --"Flask of the Vast Horizon"
+ SMARTBUFF_BGRFLASKBFA1 = GetSpellInfo(298837); --"Greather Flask of Endless Fathoms"
+ SMARTBUFF_BGRFLASKBFA2 = GetSpellInfo(298836); --"Greater Flask of the Currents"
+ SMARTBUFF_BGRFLASKBFA3 = GetSpellInfo(298841); --"Greather Flask of teh Untertow"
+ SMARTBUFF_BGRFLASKBFA4 = GetSpellInfo(298839); --"Greater Flask of the Vast Horizon"
+ SMARTBUFF_BFLASKSL1 = GetSpellInfo(307185); --"Spectral Flask of Power"
+ SMARTBUFF_BFLASKSL2 = GetSpellInfo(307187); --"Spectral Flask of Stamina"
+
+ S.LinkFlaskTBC = { SMARTBUFF_BFLASKTBC1, SMARTBUFF_BFLASKTBC2, SMARTBUFF_BFLASKTBC3, SMARTBUFF_BFLASKTBC4, SMARTBUFF_BFLASKTBC5 };
+ S.LinkFlaskCT7 = { SMARTBUFF_BFLASKCT1, SMARTBUFF_BFLASKCT2, SMARTBUFF_BFLASKCT3, SMARTBUFF_BFLASKCT4, SMARTBUFF_BFLASKCT5 };
+ S.LinkFlaskMoP = { SMARTBUFF_BFLASKCT61, SMARTBUFF_BFLASKCT62, SMARTBUFF_BFLASKCT63, SMARTBUFF_BFLASKMOP2, SMARTBUFF_BFLASKMOP3, SMARTBUFF_BFLASKMOP4, SMARTBUFF_BFLASKMOP5, SMARTBUFF_BFLASKMOP6 };
+ S.LinkFlaskWoD = { SMARTBUFF_BFLASKWOD1, SMARTBUFF_BFLASKWOD2, SMARTBUFF_BFLASKWOD3, SMARTBUFF_BFLASKWOD4, SMARTBUFF_BGRFLASKWOD1, SMARTBUFF_BGRFLASKWOD2, SMARTBUFF_BGRFLASKWOD3, SMARTBUFF_BGRFLASKWOD4 };
+ S.LinkFlaskLeg = { SMARTBUFF_BFLASKLEG1, SMARTBUFF_BFLASKLEG2, SMARTBUFF_BFLASKLEG3, SMARTBUFF_BFLASKLEG4 };
+ S.LinkFlaskBfA = { SMARTBUFF_BFLASKBFA1, SMARTBUFF_BFLASKBFA2, SMARTBUFF_BFLASKBFA3, SMARTBUFF_BFLASKBFA4, SMARTBUFF_BGRFLASKBFA1, SMARTBUFF_BGRFLASKBFA2, SMARTBUFF_BGRFLASKBFA3, SMARTBUFF_BGRFLASKBFA4 };
+ S.LinkFlaskSL = { SMARTBUFF_BFLASKSL1, SMARTBUFF_BFLASKSL2 };
+ S.LinkFlaskDF = { SMARTBUFF_BFlaskDF1, SMARTBUFF_BFlaskDF2, SMARTBUFF_BFlaskDF3, SMARTBUFF_BFlaskDF4, SMARTBUFF_BFlaskDF5, SMARTBUFF_BFlaskDF6, SMARTBUFF_BFlaskDF7, SMARTBUFF_BFlaskDF8, SMARTBUFF_BFlaskDF9, SMARTBUFF_BFlaskDF10, SMARTBUFF_BFlaskDF11, SMARTBUFF_BFlaskDF12, SMARTBUFF_BFlaskDF13_1, SMARTBUFF_BFlaskDF13_2, SMARTBUFF_BFlaskDF13_3, SMARTBUFF_BFlaskDF13_4, SMARTBUFF_BFlaskDF14 };
+
+ SMARTBUFF_BELIXIRTBC1 = GetSpellInfo(54494); --"Major Agility" B
+ SMARTBUFF_BELIXIRTBC2 = GetSpellInfo(33726); --"Mastery" B
+ SMARTBUFF_BELIXIRTBC3 = GetSpellInfo(28491); --"Healing Power" B
+ SMARTBUFF_BELIXIRTBC4 = GetSpellInfo(28502); --"Major Defense" G
+ SMARTBUFF_BELIXIRTBC5 = GetSpellInfo(28490); --"Major Strength" B
+ SMARTBUFF_BELIXIRTBC6 = GetSpellInfo(39625); --"Major Fortitude" G
+ SMARTBUFF_BELIXIRTBC7 = GetSpellInfo(28509); --"Major Mageblood" B
+ SMARTBUFF_BELIXIRTBC8 = GetSpellInfo(39627); --"Draenic Wisdom" B
+ SMARTBUFF_BELIXIRTBC9 = GetSpellInfo(54452); --"Adept's Elixir" B
+ SMARTBUFF_BELIXIRTBC10 = GetSpellInfo(134870); --"Empowerment" B
+ SMARTBUFF_BELIXIRTBC11 = GetSpellInfo(33720); --"Onslaught Elixir" B
+ SMARTBUFF_BELIXIRTBC12 = GetSpellInfo(28503); --"Major Shadow Power" B
+ SMARTBUFF_BELIXIRTBC13 = GetSpellInfo(39628); --"Ironskin" G
+ SMARTBUFF_BELIXIRTBC14 = GetSpellInfo(39626); --"Earthen Elixir" G
+ SMARTBUFF_BELIXIRTBC15 = GetSpellInfo(28493); --"Major Frost Power" B
+ SMARTBUFF_BELIXIRTBC16 = GetSpellInfo(38954); --"Fel Strength Elixir" B
+ SMARTBUFF_BELIXIRTBC17 = GetSpellInfo(28501); --"Major Firepower" B
+ SMARTBUFF_BELIXIR1 = GetSpellInfo(28497); --"Mighty Agility" B
+ SMARTBUFF_BELIXIR2 = GetSpellInfo(60347); --"Mighty Thoughts" G
+ SMARTBUFF_BELIXIR3 = GetSpellInfo(53751); --"Elixir of Mighty Fortitude" G
+ SMARTBUFF_BELIXIR4 = GetSpellInfo(53748); --"Mighty Strength" B
+ SMARTBUFF_BELIXIR5 = GetSpellInfo(53747); --"Elixir of Spirit" B
+ SMARTBUFF_BELIXIR6 = GetSpellInfo(53763); --"Protection" G
+ SMARTBUFF_BELIXIR7 = GetSpellInfo(60343); --"Mighty Defense" G
+ SMARTBUFF_BELIXIR8 = GetSpellInfo(60346); --"Lightning Speed" B
+ SMARTBUFF_BELIXIR9 = GetSpellInfo(60344); --"Expertise" B
+ SMARTBUFF_BELIXIR10 = GetSpellInfo(60341); --"Deadly Strikes" B
+ SMARTBUFF_BELIXIR11 = GetSpellInfo(80532); --"Armor Piercing"
+ SMARTBUFF_BELIXIR12 = GetSpellInfo(60340); --"Accuracy" B
+ SMARTBUFF_BELIXIR13 = GetSpellInfo(53749); --"Guru's Elixir" B
+ SMARTBUFF_BELIXIR14 = GetSpellInfo(11334); --"Elixir of Greater Agility" B
+ SMARTBUFF_BELIXIR15 = GetSpellInfo(54452); --"Adept's Elixir" B
+ SMARTBUFF_BELIXIR16 = GetSpellInfo(33721); --"Spellpower Elixir" B
+ SMARTBUFF_BELIXIRCT1 = GetSpellInfo(79635); --"Elixir of the Master" B
+ SMARTBUFF_BELIXIRCT2 = GetSpellInfo(79632); --"Elixir of Mighty Speed" B
+ SMARTBUFF_BELIXIRCT3 = GetSpellInfo(79481); --"Elixir of Impossible Accuracy" B
+ SMARTBUFF_BELIXIRCT4 = GetSpellInfo(79631); --"Prismatic Elixir" G
+ SMARTBUFF_BELIXIRCT5 = GetSpellInfo(79480); --"Elixir of Deep Earth" G
+ SMARTBUFF_BELIXIRCT6 = GetSpellInfo(79477); --"Elixir of the Cobra" B
+ SMARTBUFF_BELIXIRCT7 = GetSpellInfo(79474); --"Elixir of the Naga" B
+ SMARTBUFF_BELIXIRCT8 = GetSpellInfo(79468); --"Ghost Elixir" B
+ SMARTBUFF_BELIXIRMOP1 = GetSpellInfo(105687); --"Elixir of Mirrors" G
+ SMARTBUFF_BELIXIRMOP2 = GetSpellInfo(105685); --"Elixir of Peace" B
+ SMARTBUFF_BELIXIRMOP3 = GetSpellInfo(105686); --"Elixir of Perfection" B
+ SMARTBUFF_BELIXIRMOP4 = GetSpellInfo(105684); --"Elixir of the Rapids" B
+ SMARTBUFF_BELIXIRMOP5 = GetSpellInfo(105683); --"Elixir of Weaponry" B
+ SMARTBUFF_BELIXIRMOP6 = GetSpellInfo(105682); --"Mad Hozen Elixir" B
+ SMARTBUFF_BELIXIRMOP7 = GetSpellInfo(105681); --"Mantid Elixir" G
+ SMARTBUFF_BELIXIRMOP8 = GetSpellInfo(105688); --"Monk's Elixir" B
+ -- Draught of Ten Lands
+ SMARTBUFF_BEXP_POTION = GetSpellInfo(289982); --Draught of Ten Lands
+
+ --if (SMARTBUFF_GOTW) then
+ -- SMARTBUFF_AddMsgD(SMARTBUFF_GOTW.." found");
+ --end
+
-- Buff map
- S.LinkStats = { SMARTBUFF_BOK, SMARTBUFF_MOTW, SMARTBUFF_LOTE, SMARTBUFF_LOTWT, SMARTBUFF_MOTWR1, SMARTBUFF_MOTWR2, SMARTBUFF_MOTWR3,
- SMARTBUFF_MOTWR4, SMARTBUFF_MOTWR5, SMARTBUFF_MOTWR6, SMARTBUFF_MOTWR7, SMARTBUFF_GOTWR1, SMARTBUFF_GOTWR2,
+ S.LinkStats = { SMARTBUFF_BOK, SMARTBUFF_GBOK, SMARTBUFF_MOTW, SMARTBUFF_GOTW, SMARTBUFF_LOTE, SMARTBUFF_LOTWT,
GetSpellInfo(159988), -- Bark of the Wild
GetSpellInfo(203538), -- Greater Blessing of Kings
GetSpellInfo(90363), -- Embrace of the Shale Spider
- GetSpellInfo(160077), -- Strength of the Earth
- SMARTBUFF_PWF, SMARTBUFF_POFRB1,
+ GetSpellInfo(160077) -- Strength of the Earth
};
- S.LinkFlaskClassic = { SMARTBUFF_BLINDINGLIGHTFLASK_BUFF, SMARTBUFF_FORTIFICATIONFLASK_BUFF, SMARTBUFF_RESTORATIONFLASK_BUFF, SMARTBUFF_PUREDEATHFLASK_BUFF,
- SMARTBUFF_RELENTLESSFLASK_BUFF, SMARTBUFF_CHROMATICFLASK_BUFF, SMARTBUFF_DISTILLEDFLASK_BUFF, SMARTBUFF_SUPREMEPWRFLASK_BUFF,
- SMARTBUFF_FLASKOFFROSTWYRM_BUFF, SMARTBUFF_FLASKOFSTONEBLOOD_BUFF, SMARTBUFF_FLASKOFENDLESSRAGE_BUFF, SMARTBUFF_FLASKOFTHENORTH_BUFF};
+ S.LinkSta = { SMARTBUFF_PWFORTITUDE, SMARTBUFF_PRAYERFORTITUDE, SMARTBUFF_COMMANDINGSHOUT, SMARTBUFF_BLOODPACT,
+ GetSpellInfo(50256), -- Invigorating Roar
+ GetSpellInfo(90364), -- Qiraji Fortitude
+ GetSpellInfo(160014), -- Sturdiness
+ GetSpellInfo(160003) -- Savage Vigor
+ };
-
- S.LinkSp = { SMARTBUFF_POSPRB1, SMARTBUFF_POSPRB2 }
S.LinkAp = { SMARTBUFF_HORNOFWINTER, SMARTBUFF_BATTLESHOUT, SMARTBUFF_TRUESHOTAURA };
-
+
S.LinkMa = { SMARTBUFF_BOM, SMARTBUFF_DRUID_MKAURA, SMARTBUFF_GRACEOFAIR, SMARTBUFF_POTGRAVE,
GetSpellInfo(93435), -- Roar of Courage
GetSpellInfo(160039), -- Keen Senses
GetSpellInfo(128997), -- Spirit Beast Blessing
GetSpellInfo(160073) -- Plainswalking
- };
-
- SMARTBUFF_AddMsgD(">>>> Spell ID's have been initialised.");
+ };
+
+ S.LinkInt = { SMARTBUFF_BOW, SMARTBUFF_AI, SMARTBUFF_AB, SMARTBUFF_DALARANB };
+ --SMARTBUFF_AddMsgD("Spell IDs initialized");
end
-----------------------------------------------------------------------------------------------------------------------------------
----
---- Initialise Spell List
----
-----------------------------------------------------------------------------------------------------------------------------------
function SMARTBUFF_InitSpellList()
+
if (SMARTBUFF_PLAYERCLASS == nil) then return; end
-
- -- Druid
- if (SMARTBUFF_PLAYERCLASS == "DRUID") then
+
+ -- Paladin
+ if (SMARTBUFF_PLAYERCLASS == "PALADIN") then -- updated 7/5/2023 Codermik
SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_MOTW, 30, SMARTBUFF_CONST_GROUP, {1,10,20,30,40,50,60,70,80}, "HPET;WPET", S.LinkDruidGOTW},
- {SMARTBUFF_GOTWRB1, 60, SMARTBUFF_CONST_GROUP, {50,60,70,80}, "HPET;WPET", S.LinkDruidGOTW, {SMARTBUFF_WILDBERRIES,SMARTBUFF_WILDTHORNROOT}},
- {SMARTBUFF_IMPTHORNS, 10, SMARTBUFF_CONST_GROUP, {6,14}, "HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;WPET;DKPET", S.LinkDruidThorns},
- {SMARTBUFF_THORNS, 10, SMARTBUFF_CONST_GROUP, {6,14,24,34,44,54, 64, 74}, "HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;WPET;DKPET", S.LinkDruidThorns},
- {SMARTBUFF_OMENOFCLARITY, 10, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_BARKSKIN, 0.25, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_NATURESGRASP, 0.75, SMARTBUFF_CONST_FORCESELF},
- {SMARTBUFF_TIGERSFURY, 0.1, SMARTBUFF_CONST_SELF, nil, SMARTBUFF_DRUID_CAT},
- {SMARTBUFF_SAVAGEROAR, 0.15, SMARTBUFF_CONST_SELF, nil, SMARTBUFF_DRUID_CAT},
- {SMARTBUFF_DRUID_MOONKIN, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_DRUID_TREE, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_CENARIONWARD, 0.5, SMARTBUFF_CONST_GROUP, {1}, "WARRIOR;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;DEATHKNIGHT"},
+ -- blessings.
+ {SMARTBUFF_GBOM, 60, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkMa},
+ {SMARTBUFF_GBOK, 60, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkStats},
+ {SMARTBUFF_GBOW, 60, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkInt},
+ {SMARTBUFF_GBOS, 60, SMARTBUFF_CONST_GROUP, {60}, nil, S.ChainPaladinBlessing},
+ {SMARTBUFF_BOM, 10, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkMa},
+ {SMARTBUFF_BOK, 10, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkStats},
+ {SMARTBUFF_BOW, 10, SMARTBUFF_CONST_GROUP, {52, 60, 70, 73, 79}, nil, S.LinkInt},
+ {SMARTBUFF_BOS, 10, SMARTBUFF_CONST_GROUP, {60}, nil, S.ChainPaladinBlessing},
+ -- hands
+ {SMARTBUFF_HOF, 0.1, SMARTBUFF_CONST_GROUP, {26}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinHand},
+ {SMARTBUFF_HOP, 0.1, SMARTBUFF_CONST_GROUP, {10, 24, 38}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinHand},
+ {SMARTBUFF_HOSAL, 0.1, SMARTBUFF_CONST_GROUP, {26}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinHand},
+ {SMARTBUFF_HOSAC, 0.1, SMARTBUFF_CONST_GROUP, {46}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinHand},
+ -- seals
+ {SMARTBUFF_SOCOMMAND, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SOVENGEANCE, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SOCORRUPTION, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SOJUSTICE, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SORIGHTEOUSNESS, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SOWISDOM, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ {SMARTBUFF_SOLIGHT, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
+ -- auras
+ {SMARTBUFF_CRUSADERAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ {SMARTBUFF_DEVOTIONAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ {SMARTBUFF_RETRIBUTIONAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ {SMARTBUFF_FIREAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ {SMARTBUFF_FROSTAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ {SMARTBUFF_SHADOWAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
+ -- other
+ {SMARTBUFF_RIGHTEOUSFURY, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_HOLYSHIELD, 8, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_SACREDSHIELD, 12, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_AVENGINGWARTH, 180, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_BEACONOFLIGHT, 60, SMARTBUFF_CONST_GROUP, {60}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET"},
};
end
-
- -- Priest
- if (SMARTBUFF_PLAYERCLASS == "PRIEST") then
- SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_PWF, 30, SMARTBUFF_CONST_GROUP, {1,12,24,36,48,60,70,80}, "HPET;WPET;DKPET", S.ChainPriestFortBuffs},
- {SMARTBUFF_POFRB1, 60, SMARTBUFF_CONST_GROUP, {48,60,70,80}, "HPET;WPET;DKPET", S.ChainPriestFortBuffs, {SMARTBUFF_SACREDCANDLE}},
- {SMARTBUFF_SP, 30, SMARTBUFF_CONST_GROUP, {30,42,56,68,76}, "HPET;WPET;DKPET", S.ChainPriestShadowBuffs},
- {SMARTBUFF_POSPRB1, 60, SMARTBUFF_CONST_GROUP, {48,60,70,80}, "HPET;WPET;DKPET", S.ChainPriestShadowBuffs, {SMARTBUFF_SACREDCANDLE}},
- {SMARTBUFF_POSRB1, 60, SMARTBUFF_CONST_GROUP, {48,60,70,80}, "HPET;WPET;DKPET", S.ChainPriestSpiritBuffs, {SMARTBUFF_SACREDCANDLE}},
- {SMARTBUFF_DS, 30, SMARTBUFF_CONST_GROUP, {30,40,50,60,70,80}, "HPET;WPET;DKPET", S.ChainPriestSpiritBuffs},
- {SMARTBUFF_VAMPIRICEMB, 30, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_INNERFIRE, 10, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_PWS, 0.5, SMARTBUFF_CONST_GROUP, {6,12,18,24,30,36,42,48,54,60,65,70,75,80}, "MAGE;WARLOCK;DEATHKNIGHT;ROGUE;PALADIN;WARRIOR;DRUID;HUNTER;SHAMAN;HPET;WPET;DKPET"},
- {SMARTBUFF_SHADOWFORM, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_FEARWARD, 10, SMARTBUFF_CONST_GROUP, {20}},
- {SMARTBUFF_ELUNESGRACE, 0.25, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_FEEDBACK, 0.25, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_SHADOWGUARD, 10, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_TOUCHOFWEAKNESS, 10, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_INNERFOCUS, -1, SMARTBUFF_CONST_SELF}
- };
- end
-
-- Mage
- if (SMARTBUFF_PLAYERCLASS == "MAGE") then
- SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_DALINT, 30, SMARTBUFF_CONST_GROUP, {1,14,28,42,56,70,80}, "ROGUE;WARRIOR;DEATHKNIGHT;HPET;WPET", S.ChainMageBuffs},
- {SMARTBUFF_DALBRILL, 60, SMARTBUFF_CONST_GROUP, {56,70,80}, "ROGUE;WARRIOR;DEATHKNIGHT;HPET;WPET;DKPET", S.ChainMageBuffs, {SMARTBUFF_ARCANEPOWDER}},
- {SMARTBUFF_AI, 30, SMARTBUFF_CONST_GROUP, {1,14,28,42,56,70,80}, "ROGUE;WARRIOR;DEATHKNIGHT;HPET;WPET;DKPET", S.ChainMageBuffs},
- {SMARTBUFF_ABRB1, 60, SMARTBUFF_CONST_GROUP, {56,70,80}, "ROGUE;WARRIOR;DEATHKNIGHT;HPET;WPET;DKPET", S.ChainMageBuffs, {SMARTBUFF_ARCANEPOWDER}},
- {SMARTBUFF_FOCUSMAGIC, 30, SMARTBUFF_CONST_GROUP, {20}, "WARRIOR;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;DEATHKNIGHT;HPET;WPET;DKPET"},
- {SMARTBUFF_ICEARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
- {SMARTBUFF_FROSTARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
- {SMARTBUFF_MAGEARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
- {SMARTBUFF_MOLTENARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
- {SMARTBUFF_DAMPENMAGIC, 10, SMARTBUFF_CONST_GROUP, {12,24,36,48,60,67,76}, "HPET;WPET;DKPET"},
- {SMARTBUFF_AMPLIFYMAGIC, 10, SMARTBUFF_CONST_GROUP, {18,30,42,54,63,69,77}, "HPET;WPET;DKPET"},
- {SMARTBUFF_MANASHIELD, 1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_FIREWARD, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_FROSTWARD, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_ICEBARRIER, 1, SMARTBUFF_CONST_SELF},
+ if (SMARTBUFF_PLAYERCLASS == "MAGE") then -- updated 7/5/2023 Codermik
+ SMARTBUFF_BUFFLIST = {
+ -- buffs
+ {SMARTBUFF_AI, 30, SMARTBUFF_CONST_GROUP, {1,14,28,42,56,70,80}, "WARRIOR;DEATHKNIGHT;ROGUE;HPET;WPET;DKPET", S.ChainMageBuffs},
+ {SMARTBUFF_AB, 60, SMARTBUFF_CONST_GROUP, {56, 70, 80}, "WARRIOR;DEATHKNIGHT;ROGUE;HPET;WPET;DKPET", S.ChainMageBuffs},
+ {SMARTBUFF_DALARANB, 60, SMARTBUFF_CONST_GROUP, {80}, "WARRIOR;DEATHKNIGHT;ROGUE;HPET;WPET;DKPET", S.ChainMageBuffs},
+ -- Armor
+ {SMARTBUFF_ICEARMOR, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
+ {SMARTBUFF_FROSTARMOR, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
+ {SMARTBUFF_MAGEARMOR, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
+ {SMARTBUFF_MOLTENARMOR, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainMageArmor},
+ -- Shields
+ {SMARTBUFF_MANASHIELD, 0.5, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_ICEBARRIER, 0.5, SMARTBUFF_CONST_SELF},
+ -- Wards
+ {SMARTBUFF_FIREWARD, 30, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_FROSTWARD, 30, SMARTBUFF_CONST_SELF},
+ -- other
+ {SMARTBUFF_FOCUSMAGIC, 30, SMARTBUFF_CONST_GROUP},
+ {SMARTBUFF_AMPLIFYMAGIC, 10, SMARTBUFF_CONST_GROUP},
+ {SMARTBUFF_DAMPENMAGIC, 10, SMARTBUFF_CONST_GROUP},
+ {SMARTBUFF_SUMMONWATERELE, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
{SMARTBUFF_COMBUSTION, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_ICYVEINS, 0.33, SMARTBUFF_CONST_SELF},
{SMARTBUFF_ARCANEPOWER, 0.25, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_PRESENCEOFMIND, 0.165, SMARTBUFF_CONST_SELF}
+ {SMARTBUFF_PRESENCEOFMIND, 0.165, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_ICYVEINS, 0.333, SMARTBUFF_CONST_SELF},
+ -- food and drink
+ {SMARTBUFF_CONJFOOD, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CONJWATER, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CONJREFRESHMENT, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_RITUALREFRESHMENT, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CREATEMGEM, -1, SMARTBUFF_CONST_SELF},
};
end
-
- -- Warlock
- if (SMARTBUFF_PLAYERCLASS == "WARLOCK") then
- SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_FELARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarlockArmor},
- {SMARTBUFF_DEMONARMOR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarlockArmor},
- {SMARTBUFF_DEMONSKIN, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarlockArmor},
- {SMARTBUFF_SOULLINK, 0, SMARTBUFF_CONST_SELF, nil, S.CheckPetNeeded},
- {SMARTBUFF_DINVISIBILITY, 10, SMARTBUFF_CONST_GROUP, {26}, "HPET;WPET;DKPET"},
- {SMARTBUFF_UNENDINGBREATH, 10, SMARTBUFF_CONST_GROUP, {16}, "HPET;WPET;DKPET"},
- {SMARTBUFF_LIFETAP, 0.025, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_SHADOWWARD, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_DARKPACT, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_SOULSTONE, 15, SMARTBUFF_CONST_GROUP, {18}, "WARRIOR;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;DEATHKNIGHT;MONK;DEMONHUNTER;HPET;WPET;DKPET"},
-
- -- healthstones.
- {SMARTBUFF_CREATEHSMIN, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM1},
- {SMARTBUFF_CREATEHSLES, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM2},
- {SMARTBUFF_CREATEHS, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM3},
- {SMARTBUFF_CREATEHSGRE, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM4},
- {SMARTBUFF_CREATEHSMAJ, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM5},
- {SMARTBUFF_CREATEHSMAS, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM6},
- {SMARTBUFF_CREATEHSDEM, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM7},
- {SMARTBUFF_CREATEHSFEL, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_HEALTHSTONEGEM8},
- -- soulstones.
- {SMARTBUFF_CREATESSMIN, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM1},
- {SMARTBUFF_CREATESSLES, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM2},
- {SMARTBUFF_CREATESS, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM3},
- {SMARTBUFF_CREATESSGRE, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM4},
- {SMARTBUFF_CREATESSMAJ, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM5},
- {SMARTBUFF_CREATESSMAS, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM6},
- {SMARTBUFF_CREATESSDEM, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_SOULSTONEGEM7},
- -- spellstones.
- {SMARTBUFF_CREATESPSTONE1, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE1},
- {SMARTBUFF_CREATESPSTONE2, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE2},
- {SMARTBUFF_CREATESPSTONE3, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE3},
- {SMARTBUFF_CREATESPSTONE4, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE4},
- {SMARTBUFF_CREATESPSTONE5, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE5},
- {SMARTBUFF_CREATESPSTONE6, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKSPELLSTONE6},
- {SMARTBUFF_LOCKSPELLSTONE6, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKSPELLSTONE5, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKSPELLSTONE4, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKSPELLSTONE3, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKSPELLSTONE2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKSPELLSTONE1, 60, SMARTBUFF_CONST_INV},
- -- firestones.
- {SMARTBUFF_CREATEFSTONE1, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE1},
- {SMARTBUFF_CREATEFSTONE2, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE2},
- {SMARTBUFF_CREATEFSTONE3, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE3},
- {SMARTBUFF_CREATEFSTONE4, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE4},
- {SMARTBUFF_CREATEFSTONE5, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE5},
- {SMARTBUFF_CREATEFSTONE6, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE6},
- {SMARTBUFF_CREATEFSTONE7, 0.03, SMARTBUFF_CONST_ITEM, nil, SMARTBUFF_LOCKFIRESTONE7},
- {SMARTBUFF_LOCKFIRESTONE7, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE6, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE5, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE4, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE3, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_LOCKFIRESTONE1, 60, SMARTBUFF_CONST_INV},
- };
+ -- Druid
+ if (SMARTBUFF_PLAYERCLASS == "DRUID") then -- updated 7/5/2023 Codermik
+ SMARTBUFF_BUFFLIST = {
+ -- buffs
+ {SMARTBUFF_MOTW, 30, SMARTBUFF_CONST_GROUP, {1,10,20,30,40,50,60,70,80}, "HPET;WPET;DKPET"},
+ {SMARTBUFF_GOTW, 60, SMARTBUFF_CONST_GROUP, {50,60,70,80}, "HPET;WPET;DKPET"},
+ {SMARTBUFF_THORNS, 10, SMARTBUFF_CONST_GROUP, nil, "MAGE;WARLOCK;ROGUE;PALADIN;WARRIOR;DRUID;HUNTER;SHAMAN;DEATHKNIGHT;MONK;DEMONHUNTER;EVOKER;HPET;WPET;DKPET"},
+ {SMARTBUFF_BARKSKIN, 0.25, SMARTBUFF_CONST_FORCESELF},
+ -- forms
+ {SMARTBUFF_DRUID_CAT, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_DRUID_TREE, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_DRUID_MOONKIN, -1, SMARTBUFF_CONST_SELF},
+ {SSMARTBUFF_DRUID_BEAR, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_DRUID_DIREBEAR, -1, SMARTBUFF_CONST_SELF},
+ -- tracking.
+ {SMARTBUFF_DRUID_TRACK, -1, SMARTBUFF_CONST_SELF, nil, SMARTBUFF_DRUID_CAT}
+ };
end
- -- Hunter
- if (SMARTBUFF_PLAYERCLASS == "HUNTER") then
+ -- Priest
+ if (SMARTBUFF_PLAYERCLASS == "PRIEST") then -- updated 8/5/2023 Codermik
+ SMARTBUFF_BUFFLIST = {
+ -- Buffs
+ {SMARTBUFF_PWFORTITUDE, 30, SMARTBUFF_CONST_GROUP, {1, 12, 24, 36, 48, 60, 70, 80}, "HPET;WPET;DKPET", S.LinkSta},
+ {SMARTBUFF_PRAYERFORTITUDE, 60, SMARTBUFF_CONST_GROUP, {48, 60, 70, 80}, "HPET;WPET;DKPET", S.LinkSta},
+ {SMARTBUFF_DIVINESPIRIT, 30, SMARTBUFF_CONST_GROUP, {30, 40, 50, 60, 70, 80}, "WARRIOR;DEATHKNIGHT;ROGUE;HPET;WPET;DKPET", S.LinkPriestSpirit},
+ {SMARTBUFF_PRAYERSPIRIT, 60, SMARTBUFF_CONST_GROUP, {60, 70, 80}, "WARRIOR;DEATHKNIGHT;ROGUE;HPET;WPET;DKPET", S.LinkPriestSpirit},
+ {SMARTBUFF_SHADOWPROT, 30, SMARTBUFF_CONST_GROUP, {30, 42, 56, 68, 76}, "HPET;WPET;DKPET", S.LinkPriestShadow},
+ {SMARTBUFF_PRAYERSHADOWPROT, 60, SMARTBUFF_CONST_GROUP, {56, 70, 77}, "HPET;WPET;DKPET", S.LinkPriestShadow},
+ {SMARTBUFF_FEARWARD, 3, SMARTBUFF_CONST_GROUP, {54}, "HPET;WPET;DKPET"},
+ {SMARTBUFF_INNERFOCUS, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_INNERFIRE, -1, SMARTBUFF_CONST_FORCESELF},
+ {SMARTBUFF_VAMPIRICEMB, 30, SMARTBUFF_CONST_SELF},
+ -- form
+ {SMARTBUFF_SHADOWFORM, -1, SMARTBUFF_CONST_FORCESELF},
+ -- shield
+ {SMARTBUFF_PWSHIELD, 0.5, SMARTBUFF_CONST_GROUP, {6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 65, 70, 75, 80}, "MAGE;WARLOCK;ROGUE;PALADIN;WARRIOR;DRUID;HUNTER;SHAMAN;DEATHKNIGHT;MONK;DEMONHUNTER;EVOKER;HPET;WPET;DKPET"},
+ -- other
+ {SMARTBUFF_ELUNESGRACE, 0.25, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_FEEDBACK, 0.25, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_SHADOWGUARD, 10, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_TOUCHOFWEAKNESS, 10, SMARTBUFF_CONST_SELF},
+ };
+ end
+
+ -- Warrior
+ if (SMARTBUFF_PLAYERCLASS == "WARRIOR") then -- updated 8/5/2023 Codermik
SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_TRUESHOTAURA, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_RAPIDFIRE, 0.2, SMARTBUFF_CONST_SELF},
-
- {SMARTBUFF_AOTDH, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTH, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTM, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTV, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTW, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTB, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTC, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_AOTP, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
- {SMARTBUFF_CALLPET, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_BATTLESHOUT, 2, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarriorShout},
+ {SMARTBUFF_COMMANDINGSHOUT, 2, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarriorShout},
+ {SMARTBUFF_BERSERKERRAGE, 0.165, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_SHIELDBLOCK, 0.1666, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_BLOODRAGE, 0.165, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_RAMPAGE, 0.5, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_VIGILANCE, 30, SMARTBUFF_CONST_GROUP, {40}, "WARRIOR;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;DEATHKNIGHT;HPET;WPET;DKPET"},
};
end
-- Shaman
- if (SMARTBUFF_PLAYERCLASS == "SHAMAN") then
+ if (SMARTBUFF_PLAYERCLASS == "SHAMAN") then -- updated 8/5/2023 Codermik
SMARTBUFF_BUFFLIST = {
+ -- shields
{SMARTBUFF_LIGHTNINGSHIELD, 10, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainShamanShield},
{SMARTBUFF_WATERSHIELD, 10, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainShamanShield},
- {SMARTBUFF_EARTHSHIELD, 10, SMARTBUFF_CONST_GROUP, {50,60}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", nil, S.ChainShamanShield},
+ {SMARTBUFF_EARTHSHIELD, 10, SMARTBUFF_CONST_GROUP, {50,60, 70, 75, 80}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;HPET;WPET;DKPET", nil, S.ChainShamanShield},
+ -- weapons
{SMARTBUFF_WINDFURYW, 30, SMARTBUFF_CONST_WEAPON},
{SMARTBUFF_FLAMETONGUEW, 30, SMARTBUFF_CONST_WEAPON},
{SMARTBUFF_FROSTBRANDW, 30, SMARTBUFF_CONST_WEAPON},
{SMARTBUFF_ROCKBITERW, 30, SMARTBUFF_CONST_WEAPON},
{SMARTBUFF_EARTHLIVINGW, 30, SMARTBUFF_CONST_WEAPON},
+ -- buffs
{SMARTBUFF_WATERBREATHING, 10, SMARTBUFF_CONST_GROUP, {22}},
{SMARTBUFF_WATERWALKING, 10, SMARTBUFF_CONST_GROUP, {28}}
};
end
- -- Warrior
- if (SMARTBUFF_PLAYERCLASS == "WARRIOR") then
+ -- Hunter
+ if (SMARTBUFF_PLAYERCLASS == "HUNTER") then -- updated 10/5/2023
SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_BATTLESHOUT, 2, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarriorShout},
- {SMARTBUFF_COMMANDINGSHOUT, 2, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainWarriorShout},
- {SMARTBUFF_BERSERKERRAGE, 0.165, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_SHIELDBLOCK, 0.1666, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_BLOODRAGE, 0.165, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_RAMPAGE, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_VIGILANCE, 30, SMARTBUFF_CONST_GROUP, {40}, "WARRIOR;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;DEATHKNIGHT;HPET;WPET;DKPET"}
+ {SMARTBUFF_TRUESHOTAURA, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_RAPIDFIRE, 0.2, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_AOTDH, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTH, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTM, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTV, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTW, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTB, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTC, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_AOTP, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainAspects},
+ {SMARTBUFF_CALLPET, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_REVIVEPET, -1, SMARTBUFF_CONST_SELF},
};
end
- -- Rogue
- if (SMARTBUFF_PLAYERCLASS == "ROGUE") then
+
+ -- Warlock
+ if (SMARTBUFF_PLAYERCLASS == "WARLOCK") then -- updated 20/5/2023
SMARTBUFF_BUFFLIST = {
- {SMARTBUFF_STEALTH, -1, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_BLADEFLURRY, 0.165, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_SAD, 0.2, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_HUNGERFORBLOOD, 0.5, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_EVASION, 0.2, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_INSTANTPOISON9, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON8, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON7, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON6, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON5, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON4, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON3, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_INSTANTPOISON1, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON7, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON6, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON5, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON4, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON3, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WOUNDPOISON1, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_MINDPOISON1, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON9, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON8, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON7, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON6, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON5, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON4, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON3, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_DEADLYPOISON1, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_CRIPPLINGPOISON1, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_ANESTHETICPOISON2, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_ANESTHETICPOISON1, 60, SMARTBUFF_CONST_INV}
+ -- buffs
+ {SMARTBUFF_DEMONSKIN, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_DEMONARMOR, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_FELARMOR, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_LOCKSENSEDEMONS, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_UNENDINGBREATH, 10, SMARTBUFF_CONST_GROUP, {16}, "HPET;WPET;DKPET"},
+ {SMARTBUFF_LOCKINVISIBILITY, 10, SMARTBUFF_CONST_GROUP, {16}, "HPET;WPET;DKPET"},
+ -- pets
+ {SMARTBUFF_SUMMONINFERNAL, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_SUMMONFELHUNTER, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_SUMMONIMP, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_SUMMONSUCCUBUS, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_SUMMONINCUBUS, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ {SMARTBUFF_SUMMONVOIDWALKER, -1, SMARTBUFF_CONST_SELF, nil, S.CheckPet},
+ -- create stones
+ {SMARTBUFF_CREATEHS, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CREATESOULS, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CREATESPELLS, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_CREATEFIRES, -1, SMARTBUFF_CONST_SELF},
+ -- use healthstones
+ {SMARTBUFF_HSMINOR, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSLESSER, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSTONE, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSGREATER, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSMAJOR, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSMASTER, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSDEMONIC, -1, SMARTBUFF_CONST_ITEM},
+ {SMARTBUFF_HSFEL, -1, SMARTBUFF_CONST_INV},
};
end
- -- Paladin
- if (SMARTBUFF_PLAYERCLASS == "PALADIN") then
- SMARTBUFF_BUFFLIST = {
-
- {SMARTBUFF_RIGHTEOUSFURY, 30, SMARTBUFF_CONST_SELF},
- {SMARTBUFF_HOLYSHIELD, 0.165, SMARTBUFF_CONST_SELF},
-
- {SMARTBUFF_BOW, 5, SMARTBUFF_CONST_GROUP, {14,24,34,44,54,60,65,71,77}, "ROGUE;WARRIOR;HPET;WPET;DKPET", S.ChainPaladinBOW},
- {SMARTBUFF_GBOW, 15, SMARTBUFF_CONST_GROUP, {54,60,65,71,77}, "ROGUE;WARRIOR;HPET;WPET;DKPET", S.ChainPaladinBOW, {SMARTBUFF_SYMBOLOFKINGS}},
- {SMARTBUFF_BOM, 5, SMARTBUFF_CONST_GROUP, {4,12,22,32,42,52,60,70,73,79}, "MAGE;PRIEST;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinBOM},
- {SMARTBUFF_GBOM, 15, SMARTBUFF_CONST_GROUP, {52,60,70,73,79}, "MAGE;PRIEST;WARLOCK;HPET;WPET;DKPET", S.ChainPaladinBOM, {SMARTBUFF_SYMBOLOFKINGS}},
- {SMARTBUFF_BOK, 5, SMARTBUFF_CONST_GROUP, {20}, "HPET;WPET;DKPET", S.ChainPaladinBOK},
- {SMARTBUFF_GBOK, 15, SMARTBUFF_CONST_GROUP, {60}, "HPET;WPET;DKPET", S.ChainPaladinBOK, {SMARTBUFF_SYMBOLOFKINGS}},
- {SMARTBUFF_BOSAL, 5, SMARTBUFF_CONST_GROUP, {26}, "TANK;HPET;WPET;DKPET", S.ChainPaladinSAL},
- {SMARTBUFF_GBOSAL, 15, SMARTBUFF_CONST_GROUP, {60}, "TANK;HPET;WPET;DKPET", S.ChainPaladinSAL, {SMARTBUFF_SYMBOLOFKINGS}},
- {SMARTBUFF_BOSAN, 5, SMARTBUFF_CONST_GROUP, {26,40,50,60}, "HPET;WPET;DKPET", S.ChainPaladinSAN},
- {SMARTBUFF_GBOSAN, 15, SMARTBUFF_CONST_GROUP, {60}, "HPET;WPET;DKPET", S.ChainPaladinSAN, {SMARTBUFF_SYMBOLOFKINGS}},
-
- {SMARTBUFF_SOCOMMAND, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOFURY, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOJUSTICE, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOLIGHT, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SORIGHTEOUSNESS, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOWISDOM, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOTCRUSADER, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOVENGEANCE, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOBLOOD, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOCORRUPTION, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
- {SMARTBUFF_SOMARTYR, 30, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinSeal},
-
- {SMARTBUFF_DEVOTIONAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_RETRIBUTIONAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_CONCENTRATIONAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_SHADOWRESISTANCEAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_FROSTRESISTANCEAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_FIRERESISTANCEAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_SANCTITYAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura},
- {SMARTBUFF_CRUSADERAURA, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainPaladinAura}
-
- };
- end
-- Deathknight
- if (SMARTBUFF_PLAYERCLASS == "DEATHKNIGHT") then
+ if (SMARTBUFF_PLAYERCLASS == "DEATHKNIGHT") then -- updated 20/5/2023
SMARTBUFF_BUFFLIST = {
{SMARTBUFF_DANCINGRW, 0.2, SMARTBUFF_CONST_SELF},
{SMARTBUFF_BLOODPRESENCE, -1, SMARTBUFF_CONST_SELF, nil, nil, nil, S.ChainDKPresence},
@@ -940,25 +990,93 @@ function SMARTBUFF_InitSpellList()
};
end
-
+
+ -- Rogue
+ if (SMARTBUFF_PLAYERCLASS == "ROGUE") then -- updated 20/5/2023
+ SMARTBUFF_BUFFLIST = {
+ {SMARTBUFF_STEALTH, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_BLADEFLURRY, -1, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_SAD, 0.2, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_TRICKS, 0.5, SMARTBUFF_CONST_GROUP, {75}, "WARRIOR;DEATHKNIGHT;DRUID;SHAMAN;HUNTER;ROGUE;MAGE;PRIEST;PALADIN;WARLOCK;MONK;DEMONHUNTER;EVOKER;HPET;WPET;DKPET"},
+ {SMARTBUFF_HUNGERFORBLOOD, 0.5, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_RECUPERATE, 0.5, SMARTBUFF_CONST_SELF},
+ {SMARTBUFF_EVASION, 0.2, SMARTBUFF_CONST_SELF},
+ };
+ end
+
-- Stones and oils
SMARTBUFF_WEAPON = {
- {SMARTBUFF_LESSERMANAOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_BRILLIANTMANAOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_BRILLIANTWIZARDOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_SUPERIORMANAOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_SUPERIORWIZARDOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_EXCEPTIONALWIZARDOIL, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_OILOFIMMOLATION, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_SOLIDWSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_SOLIDSSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_ELEMENTALSSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_ADAMANTITEWSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_ADAMANTITESSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_HEAVYWSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_HEAVYSSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_WEIGHSTONE, 60, SMARTBUFF_CONST_INV},
- {SMARTBUFF_FELSHARPENINGSTONE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSROUGH, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSCOARSE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSHEAVY, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSSOLID, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSDENSE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSELEMENTAL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSFEL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SSADAMANTITE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSROUGH, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSCOARSE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSHEAVY, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSSOLID, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSDENSE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSFEL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WSADAMANTITE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SHADOWOIL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FROSTOIL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MANAOIL4, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MANAOIL3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MANAOIL2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MANAOIL1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WIZARDOIL5, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WIZARDOIL4, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WIZARDOIL3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WIZARDOIL2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WIZARDOIL1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESLESSER, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESSTONE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESGREATER, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESMAJOR, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESMASTER, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESFEL, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_FIRESGRAND, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSTONE, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSGREATER, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSMAJOR, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSMASTER, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSDEMONIC, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_SPELLSGRAND, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON4, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON5, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON6, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON7, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON8, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_INSTANTPOISON9, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON4, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON5, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON6, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_WOUNDPOISON7, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MINDPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MINDPOISON2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_MINDPOISON3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON3, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON4, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON5, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON6, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON7, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON8, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_DEADLYPOISON9, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_CRIPPLINGPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_CRIPPLINGPOISON2, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_ANESTHETICPOISON1, 60, SMARTBUFF_CONST_INV},
+ {SMARTBUFF_ANESTHETICPOISON2, 60, SMARTBUFF_CONST_INV},
};
-- Tracking
@@ -973,9 +1091,7 @@ function SMARTBUFF_InitSpellList()
{SMARTBUFF_TRACKELEMENTALS, -1, SMARTBUFF_CONST_TRACK},
{SMARTBUFF_TRACKDEMONS, -1, SMARTBUFF_CONST_TRACK},
{SMARTBUFF_TRACKGIANTS, -1, SMARTBUFF_CONST_TRACK},
- {SMARTBUFF_TRACKDRAGONKIN, -1, SMARTBUFF_CONST_TRACK},
- {SMARTBUFF_SENSEDEMONS, -1, SMARTBUFF_CONST_TRACK},
- {SMARTBUFF_SENSEUNDEAD, -1, SMARTBUFF_CONST_TRACK}
+ {SMARTBUFF_TRACKDRAGONKIN, -1, SMARTBUFF_CONST_TRACK}
};
-- Racial
@@ -989,155 +1105,351 @@ function SMARTBUFF_InitSpellList()
};
-- FOOD
- SMARTBUFF_FOOD = {
- {SMARTBUFF_GOLDENFISHSTICKS_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_FISHERMANSFEAST_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_SKULLFISHSOUP_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_SPICYHOTTALBUK_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_BLACKENEDBASILISK_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_BLACKENEDSPOREFISH_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_BUZZARDBITES_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_CLAMBAR_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_CRUNCHYSERPENT_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_FELTAILDELIGHT_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_GRILLEDMUDFISH_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_HELBOARBACON_ITEM, 15, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_MOKNATHAKSHORTRIBS_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_POACHEDBLUEFISH_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_RAVAGERDOG_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_ROASTEDCLEFTHOOF_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_SPICYCRAWDAD_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_TALBUKSTEAK_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_WARPBURGER_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_CHARREDBEARKABOBS_ITEM, 15, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_ORONOKSTUBERSPELL_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_ORONOKSTUBERAGILITY_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_ORONOKSTUBERHEALS_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_ORONOKSTUBERSTRENGTH_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_HOTAPPLECIDER_ITEM, 30, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_SKYGUARDRATIONS_ITEM, 15, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_DIRGESKICKINCHOPS_ITEM, 15, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_JUICYBEARBURGER_ITEM, 15, SMARTBUFF_CONST_FOOD},
- {SMARTBUFF_NIGHTFINSOUP_ITEM, 10, SMARTBUFF_CONST_FOOD},
+ SMARTBUFF_FOOD = {
+ {SMARTBUFF_JUICYBEARBURGER, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CRUNCHYSPIDER, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_LYNXSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CHARREDBEARKABOBS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BATBITES, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_ROASTEDMOONGRAZE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_MOKNATHALSHORTRIBS, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CRUNCHYSERPENT, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_ROASTEDCLEFTHOOF, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_FISHERMANSFEAST, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_WARPBURGER, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_RAVAGERDOG, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SKULLFISHSOUP, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BUZZARDBITES, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_TALBUKSTEAK, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GOLDENFISHSTICKS, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SPICYHOTTALBUK, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_FELTAILDELIGHT, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BLACKENEDSPOREFISH, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_HOTAPPLECIDER, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BROILEDBLOODFIN, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SPICYCRAWDAD, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_POACHEDBLUEFISH, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BLACKENEDBASILISK, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GRILLEDMUDFISH, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CLAMBAR, 30, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SAGEFISHDELIGHT, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_HERBBAKEDEGG, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SPICEDWOLFMEAT, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BEERBASTEDBIARRIBS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CRISPYBATWING, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_KALDOREISPIDERKABOB, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_ROASTEDKODOMEAT, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BOILEDCLAMS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_COYOTESTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CRABCAKE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_DRYPORKRIBS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BLOODSAUSAGE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CROCOLISKSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_FILLETOFFRENZY, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GORETUSKLIVERPIE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_STRIDERSTEW, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GOBLINDEVILEDCLAMS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_BIGBEARSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CRISPYLIZARDTAIL, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CROCOLISKGUMBO, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CURIOUSLYTASTYOMELET, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GOOEYSPIDERCAKE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_HOTLIONCHOPS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_LEANVENISON, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_LEANWOLFSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_MURLOCFINSOUP, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_REDRIDGEGOULASH, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SEASONEDWOLFKABOB, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_CARRIONSURPRISE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GIANTCLAMSCORCHO, 15, SMARTBUF_CONST_FOOD},
+ {SMARTBUFF_HEAVYCROCOLISKSTEW, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_HOTWOLFRIBS, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_JUNGLESTEW, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_MYSTERYSTEW, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SOOTHINGTURTLEBISQUE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_TASTYLIONSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SPIDERSAUSAGE, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_HEAVYKODOSTEW, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_MONSTEROMELET, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SPICEDCHILICRAB, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_TENDERWOLFSTEAK, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SMOKEDSAGEFISH, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SAGEFISHDELIGHT, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_NIGHTFINSOUP, 15, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_GRILLEDSQUID, 10, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_RUNNTUMTUBERSURPRISE, 10, SMARTBUFF_CONST_FOOD},
+ {SMARTBUFF_SMOKEDDESERTDUMPLINGS, 15, SMARTBUFF_CONST_FOOD},
};
-
- -- additional wotlk food.
+
for n, name in pairs(S.FoodItems) do
if (name) then
+ --print("Adding: "..n..". "..name);
tinsert(SMARTBUFF_FOOD, 1, {name, 60, SMARTBUFF_CONST_FOOD});
end
end
+
-- Scrolls
SMARTBUFF_SCROLL = {
+ {SMARTBUFF_MiscItem17, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem17, S.LinkFlaskLeg},
+ {SMARTBUFF_MiscItem16, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem16},
+ {SMARTBUFF_MiscItem15, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem14, S.LinkAugment},
+ {SMARTBUFF_MiscItem14, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem14, S.LinkAugment},
+ {SMARTBUFF_MiscItem13, 10, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem13},
+ {SMARTBUFF_MiscItem12, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem12},
+ {SMARTBUFF_MiscItem11, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem11, S.LinkFlaskWoD},
+ {SMARTBUFF_MiscItem10, -1, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem10, S.LinkSafariHat},
+ {SMARTBUFF_MiscItem9, -1, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem9, S.LinkSafariHat},
+ {SMARTBUFF_MiscItem1, -1, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem1},
+ {SMARTBUFF_MiscItem2, -1, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem2},
+ {SMARTBUFF_MiscItem3, 10, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem3},
+ {SMARTBUFF_MiscItem4, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem4, S.LinkFlaskMoP},
+ {SMARTBUFF_MiscItem5, 10, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem5},
+ {SMARTBUFF_MiscItem6, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem6},
+ {SMARTBUFF_MiscItem7, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem7},
+ {SMARTBUFF_MiscItem8, 5, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BMiscItem8},
+ {SMARTBUFF_AugmentRune, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BAugmentRune, S.LinkAugment},
+ {SMARTBUFF_VieledAugment, 60, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_BVieledAugment, S.LinkAugment},
+
+ {SMARTBUFF_SOAGILITY9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
- {SMARTBUFF_SOAGILITY6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
+ {SMARTBUFF_SOAGILITY6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
{SMARTBUFF_SOAGILITY1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBAGILITY},
-
+ {SMARTBUFF_SOINTELLECT9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
- {SMARTBUFF_SOINTELLECT7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
- {SMARTBUFF_SOINTELLECT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
+ {SMARTBUFF_SOINTELLECT7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
+ {SMARTBUFF_SOINTELLECT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
{SMARTBUFF_SOINTELLECT1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBINTELLECT},
-
+ {SMARTBUFF_SOSTAMINA9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
- {SMARTBUFF_SOSTAMINA7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
- {SMARTBUFF_SOSTAMINA6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
+ {SMARTBUFF_SOSTAMINA7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
+ {SMARTBUFF_SOSTAMINA6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
{SMARTBUFF_SOSTAMINA1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTAMINA},
-
+ {SMARTBUFF_SOSPIRIT9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
- {SMARTBUFF_SOSPIRIT7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
- {SMARTBUFF_SOSPIRIT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
+ {SMARTBUFF_SOSPIRIT7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
+ {SMARTBUFF_SOSPIRIT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
{SMARTBUFF_SOSPIRIT1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSPIRIT},
-
+ {SMARTBUFF_SOSTRENGHT9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
- {SMARTBUFF_SOSTRENGHT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
+ {SMARTBUFF_SOSTRENGHT6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
{SMARTBUFF_SOSTRENGHT1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBSTRENGHT},
-
- {SMARTBUFF_SOPROTECTION8, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION7, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION6, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION5, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION4, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION3, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION2, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
- {SMARTBUFF_SOPROTECTION1, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
-
+ {SMARTBUFF_SOPROTECTION9, 30, SMARTBUFF_CONST_SCROLL, nil, SMARTBUFF_SBPROTECTION},
};
-
- --- Classic Potions / Elixirs / Flasks
-
+ -- ItemId, SpellId, Duration [min]
+ AddItem(174906, 270058, 60); -- Lightning-Forged Augment Rune
+ AddItem(153023, 224001, 60); -- Lightforged Augment Rune
+ AddItem(160053, 270058, 60); --Battle-Scarred Augment Rune
+ AddItem(164375, 281303, 10); --Bad Mojo Banana
+ AddItem(129165, 193345, 10); --Barnacle-Encrusted Gem
+ AddItem(116115, 170869, 60); -- Blazing Wings
+ AddItem(133997, 203533, 0); --Black Ice
+ AddItem(122298, 181642, 60); --Bodyguard Miniaturization Device
+ AddItem(163713, 279934, 30); --Brazier Cap
+ AddItem(128310, 189363, 10); --Burning Blade
+ AddItem(116440, 171554, 20); --Burning Defender's Medallion
+ AddItem(128807, 192225, 60); -- Coin of Many Faces
+ AddItem(138878, 217668, 5); --Copy of Daglop's Contract
+ AddItem(143662, 232613, 60); --Crate of Bobbers: Pepe
+ AddItem(142529, 231319, 60); --Crate of Bobbers: Cat Head
+ AddItem(142530, 231338, 60); --Crate of Bobbers: Tugboat
+ AddItem(142528, 231291, 60); --Crate of Bobbers: Can of Worms
+ AddItem(142532, 231349, 60); --Crate of Bobbers: Murloc Head
+ AddItem(147308, 240800, 60); --Crate of Bobbers: Enchanted Bobber
+ AddItem(142531, 231341, 60); --Crate of Bobbers: Squeaky Duck
+ AddItem(147312, 240801, 60); --Crate of Bobbers: Demon Noggin
+ AddItem(147307, 240803, 60); --Crate of Bobbers: Carved Wooden Helm
+ AddItem(147309, 240806, 60); --Crate of Bobbers: Face of the Forest
+ AddItem(147310, 240802, 60); --Crate of Bobbers: Floating Totem
+ AddItem(147311, 240804, 60); --Crate of Bobbers: Replica Gondola
+ AddItem(122117, 179872, 15); --Cursed Feather of Ikzan
+ AddItem( 54653, 75532, 30); -- Darkspear Pride
+ AddItem(108743, 160688, 10); --Deceptia's Smoldering Boots
+ AddItem(129149, 193333, 30); --Death's Door Charm
+ AddItem(159753, 279366, 5); --Desert Flute
+ AddItem(164373, 281298, 10); --Enchanted Soup Stone
+ AddItem(140780, 224992, 5); --Fal'dorei Egg
+ AddItem(122304, 138927, 10); -- Fandral's Seed Pouch
+ AddItem(102463, 148429, 10); -- Fire-Watcher's Oath
+ AddItem(128471, 190655, 30); --Frostwolf Grunt's Battlegear
+ AddItem(128462, 190653, 30); --Karabor Councilor's Attire
+ AddItem(161342, 275089, 30); --Gem of Acquiescence
+ AddItem(127659, 188228, 60); --Ghostly Iron Buccaneer's Hat
+ AddItem( 54651, 75531, 30); -- Gnomeregan Pride
+ AddItem(118716, 175832, 5); --Goren Garb
+ AddItem(138900, 217708, 10); --Gravil Goldbraid's Famous Sausage Hat
+ AddItem(159749, 277572, 5); --Haw'li's Hot & Spicy Chili
+ AddItem(163742, 279997, 60); --Heartsbane Grimoire
+ AddItem(129149, 193333, 60); -- Helheim Spirit Memory
+ AddItem(140325, 223446, 10); --Home Made Party Mask
+ AddItem(136855, 210642,0.25); --Hunter's Call
+ AddItem( 43499, 58501, 10); -- Iron Boot Flask
+ AddItem(118244, 173956, 60); --Iron Buccaneer's Hat
+ AddItem(170380, 304369, 120); --Jar of Sunwarmed Sand
+ AddItem(127668, 187174, 5); --Jewel of Hellfire
+ AddItem( 26571, 127261, 10); --Kang's Bindstone
+ AddItem( 68806, 96312, 30); -- Kalytha's Haunted Locket
+ AddItem(163750, 280121, 10); --Kovork Kostume
+ AddItem(164347, 281302, 10); --Magic Monkey Banana
+ AddItem(118938, 176180, 10); --Manastorm's Duplicator
+ AddItem(163775, 280133, 10); --Molok Morion
+ AddItem(101571, 144787, 0); --Moonfang Shroud
+ AddItem(105898, 145255, 10); --Moonfang's Paw
+ AddItem( 52201, 73320, 10); --Muradin's Favor
+ AddItem(138873, 217597, 5); --Mystical Frosh Hat
+ AddItem(163795, 280308, 10); --Oomgut Ritual Drum
+ AddItem( 1973, 16739, 5); --Orb of Deception
+ AddItem( 35275, 160331, 30); --Orb of the Sin'dorei
+ AddItem(158149, 264091, 30); --Overtuned Corgi Goggles
+ AddItem(130158, 195949, 5); --Path of Elothir
+ AddItem(127864, 188172, 60); --Personal Spotlight
+ AddItem(127394, 186842, 5); --Podling Camouflage
+ AddItem(108739, 162402, 5); --Pretty Draenor Pearl
+ AddItem(129093, 129999, 10); --Ravenbear Disguise
+ AddItem(153179, 254485, 5); --Blue Conservatory Scroll
+ AddItem(153180, 254486, 5); --Yellow Conservatory Scroll
+ AddItem(153181, 254487, 5); --Red Conservatory Scroll
+ AddItem(104294, 148529, 15); --Rime of the Time-Lost Mariner
+ AddItem(119215, 176898, 10); --Robo-Gnomebobulator
+ AddItem(119134, 176569, 30); --Sargerei Disguise
+ AddItem(129055, 62089, 60); --Shoe Shine Kit
+ AddItem(163436, 279977, 30); --Spectral Visage
+ AddItem(156871, 261981, 60); --Spitzy
+ AddItem( 66888, 6405, 3); --Stave of Fur and Claw
+ AddItem(111476, 169291, 5); --Stolen Breath
+ AddItem(140160, 222630, 10); --Stormforged Vrykul Horn
+ AddItem(163738, 279983, 30); --Syndicate Mask
+ AddItem(130147, 195509, 5); --Thistleleaf Branch
+ AddItem(113375, 166592, 5); --Vindicator's Armor Polish Kit
+ AddItem(163565, 279407, 5); --Vulpera Scrapper's Armor
+ AddItem(163924, 280632, 30); --Whiskerwax Candle
+ AddItem( 97919, 141917, 3); --Whole-Body Shrinka'
+ AddItem(167698, 293671, 60); --Secret Fish Goggles
+ AddItem(169109, 299445, 60); --Beeholder's Goggles
+ AddItem(191341, 371172, 30); -- Tepid Q3
+
+ -- Potions
SMARTBUFF_POTION = {
-
- {SMARTBUFF_ADEPTELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_ADEPTELIXIR_BUFF},
- {SMARTBUFF_MAJORDEFENSE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORDEFENSE_BUFF},
- {SMARTBUFF_MAJORAGILITY_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORAGILITY_BUFF},
- {SMARTBUFF_DRAENICWISDOM_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_DRAENICWISDOM_BUFF},
- {SMARTBUFF_MAJORFROSTPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORFROSTPOWER_BUFF},
- {SMARTBUFF_EARTHEN_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_EARTHEN_BUFF},
- {SMARTBUFF_MASTERY_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MASTERY_BUFF},
- {SMARTBUFF_CAMOUFLAGE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_CAMOUFLAGE_BUFF},
- {SMARTBUFF_HEALINGPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_HEALINGPOWER_BUFF},
- {SMARTBUFF_MAJORFORTITUDE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORFORTITUDE_BUFF},
- {SMARTBUFF_MAJORSTRENGTH_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORSTRENGTH_BUFF},
- {SMARTBUFF_ONSLAUGHTELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_ONSLAUGHTELIXIR_BUFF},
- {SMARTBUFF_GREATERARCANE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GREATERARCANE_BUFF},
- {SMARTBUFF_MONGOOSEELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MONGOOSEELIXIR_BUFF},
- {SMARTBUFF_BRUTEFORCE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BRUTEFORCE_BUFF},
- {SMARTBUFF_SAGESELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_SAGESELIXIR_BUFF},
- {SMARTBUFF_SUPERIORDEFENSE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_SUPERIORDEFENSE_BUFF},
- {SMARTBUFF_DEMONSLAYING_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_DEMONSLAYING_BUFF},
- {SMARTBUFF_MAJORFIREPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORFIREPOWER_BUFF},
- {SMARTBUFF_GREATERFIREPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GREATERFIREPOWER_BUFF},
- {SMARTBUFF_SHADOWPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_SHADOWPOWER_BUFF},
- {SMARTBUFF_GIANTSELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GIANTSELIXIR_BUFF},
- {SMARTBUFF_GREATERAGILITY_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GREATERAGILITY_BUFF},
- {SMARTBUFF_GIFTOFARTHAS_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GIFTOFARTHAS_BUFF},
- {SMARTBUFF_ARANCEELIXIR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_ARANCEELIXIR_BUFF},
- {SMARTBUFF_GREATERINTELLECT_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_GREATERINTELLECT_BUFF},
- {SMARTBUFF_MAJORNATUREPROT_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORNATUREPROT_BUFF},
- {SMARTBUFF_MAJORMAGEBLOOD_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORMAGEBLOOD_BUFF},
- {SMARTBUFF_MAJORSHADOWPWR_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORSHADOWPWR_BUFF},
- {SMARTBUFF_MAJORIRONSKIN_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_MAJORIRONSKIN_BUFF},
-
- {SMARTBUFF_BLINDINGLIGHTFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BLINDINGLIGHTFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_FORTIFICATIONFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_FORTIFICATIONFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_RESTORATIONFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_RESTORATIONFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_PUREDEATHFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_PUREDEATHFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_RELENTLESSFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_RELENTLESSFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_CHROMATICFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_CHROMATICFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_DISTILLEDFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_DISTILLEDFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_HEALINGPOWER_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_HEALINGPOWER_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_SUPREMEPWRFLASK_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_SUPREMEPWRFLASK_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_FLASKOFFROSTWYRM_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_FLASKOFFROSTWYRM_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_FLASKOFENDLESSRAGE_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_FLASKOFENDLESSRAGE_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_FLASKOFTHENORTH_ITEM, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_FLASKOFTHENORTH_BUFF, S.LinkFlaskClassic},
- {SMARTBUFF_FLASKOFSTONEBLOOD_ITEM, (60*SMARTBUFF_ALCHEMY_ADJ), SMARTBUFF_CONST_POTION, nil, SMARTBUFF_FLASKOFSTONEBLOOD_BUFF, S.LinkFlaskClassic},
+ {SMARTBUFF_ELIXIRTBC1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC1},
+ {SMARTBUFF_ELIXIRTBC2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC2},
+ {SMARTBUFF_ELIXIRTBC3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC3},
+ {SMARTBUFF_ELIXIRTBC4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC4},
+ {SMARTBUFF_ELIXIRTBC5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC5},
+ {SMARTBUFF_ELIXIRTBC6, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC6},
+ {SMARTBUFF_ELIXIRTBC7, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC7},
+ {SMARTBUFF_ELIXIRTBC8, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC8},
+ {SMARTBUFF_ELIXIRTBC9, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC9},
+ {SMARTBUFF_ELIXIRTBC10, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC10},
+ {SMARTBUFF_ELIXIRTBC11, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC11},
+ {SMARTBUFF_ELIXIRTBC12, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC12},
+ {SMARTBUFF_ELIXIRTBC13, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC13},
+ {SMARTBUFF_ELIXIRTBC14, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC14},
+ {SMARTBUFF_ELIXIRTBC15, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC15},
+ {SMARTBUFF_ELIXIRTBC16, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC16},
+ {SMARTBUFF_ELIXIRTBC17, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRTBC17},
+ {SMARTBUFF_FLASKTBC1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKTBC1}, --, S.LinkFlaskTBC},
+ {SMARTBUFF_FLASKTBC2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKTBC2},
+ {SMARTBUFF_FLASKTBC3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKTBC3},
+ {SMARTBUFF_FLASKTBC4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKTBC4},
+ {SMARTBUFF_FLASKTBC5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKTBC5},
+ {SMARTBUFF_FLASKLEG1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKLEG1, S.LinkFlaskLeg},
+ {SMARTBUFF_FLASKLEG2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKLEG2},
+ {SMARTBUFF_FLASKLEG3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKLEG3},
+ {SMARTBUFF_FLASKLEG4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKLEG4},
+ {SMARTBUFF_FLASKWOD1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKWOD1, S.LinkFlaskWoD},
+ {SMARTBUFF_FLASKWOD2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKWOD2},
+ {SMARTBUFF_FLASKWOD3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKWOD3},
+ {SMARTBUFF_FLASKWOD4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKWOD4},
+ {SMARTBUFF_GRFLASKWOD1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKWOD1},
+ {SMARTBUFF_GRFLASKWOD2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKWOD2},
+ {SMARTBUFF_GRFLASKWOD3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKWOD3},
+ {SMARTBUFF_GRFLASKWOD4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKWOD4},
+ {SMARTBUFF_FLASKMOP1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP1, S.LinkFlaskMoP},
+ {SMARTBUFF_FLASKMOP2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP2},
+ {SMARTBUFF_FLASKMOP3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP3},
+ {SMARTBUFF_FLASKMOP4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP4},
+ {SMARTBUFF_FLASKMOP5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP5},
+ {SMARTBUFF_FLASKMOP6, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKMOP6},
+ {SMARTBUFF_ELIXIRMOP1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP1},
+ {SMARTBUFF_ELIXIRMOP2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP2},
+ {SMARTBUFF_ELIXIRMOP3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP3},
+ {SMARTBUFF_ELIXIRMOP4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP4},
+ {SMARTBUFF_ELIXIRMOP5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP5},
+ {SMARTBUFF_ELIXIRMOP6, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP6},
+ {SMARTBUFF_ELIXIRMOP7, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP7},
+ {SMARTBUFF_ELIXIRMOP8, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRMOP8},
+ {SMARTBUFF_EXP_POTION, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BEXP_POTION},
+ {SMARTBUFF_FLASKCT1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT1},
+ {SMARTBUFF_FLASKCT2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT2},
+ {SMARTBUFF_FLASKCT3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT3},
+ {SMARTBUFF_FLASKCT4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT4},
+ {SMARTBUFF_FLASKCT5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT5},
+ {SMARTBUFF_FLASKCT7, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKCT7, S.LinkFlaskCT7},
+ {SMARTBUFF_ELIXIRCT1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT1},
+ {SMARTBUFF_ELIXIRCT2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT2},
+ {SMARTBUFF_ELIXIRCT3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT3},
+ {SMARTBUFF_ELIXIRCT4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT4},
+ {SMARTBUFF_ELIXIRCT5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT5},
+ {SMARTBUFF_ELIXIRCT6, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT6},
+ {SMARTBUFF_ELIXIRCT7, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT7},
+ {SMARTBUFF_ELIXIRCT8, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIRCT8},
+ {SMARTBUFF_FLASK1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASK1},
+ {SMARTBUFF_FLASK2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASK2},
+ {SMARTBUFF_FLASK3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASK3},
+ {SMARTBUFF_FLASK4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASK4},
+ {SMARTBUFF_ELIXIR1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR1},
+ {SMARTBUFF_ELIXIR2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR2},
+ {SMARTBUFF_ELIXIR3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR3},
+ {SMARTBUFF_ELIXIR4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR4},
+ {SMARTBUFF_ELIXIR5, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR5},
+ {SMARTBUFF_ELIXIR6, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR6},
+ {SMARTBUFF_ELIXIR7, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR7},
+ {SMARTBUFF_ELIXIR8, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR8},
+ {SMARTBUFF_ELIXIR9, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR9},
+ {SMARTBUFF_ELIXIR10, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR10},
+ {SMARTBUFF_ELIXIR11, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR11},
+ {SMARTBUFF_ELIXIR12, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR12},
+ {SMARTBUFF_ELIXIR13, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR13},
+ {SMARTBUFF_ELIXIR14, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR14},
+ {SMARTBUFF_ELIXIR15, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR15},
+ {SMARTBUFF_ELIXIR16, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BELIXIR16},
+ {SMARTBUFF_FLASKBFA1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKBFA1, S.LinkFlaskBfA},
+ {SMARTBUFF_FLASKBFA2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKBFA2},
+ {SMARTBUFF_FLASKBFA3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKBFA3},
+ {SMARTBUFF_FLASKBFA4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKBFA4},
+ {SMARTBUFF_GRFLASKBFA1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKBFA1},
+ {SMARTBUFF_GRFLASKBFA2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKBFA2},
+ {SMARTBUFF_GRFLASKBFA3, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKBFA3},
+ {SMARTBUFF_GRFLASKBFA4, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BGRFLASKBFA4},
+ {SMARTBUFF_FLASKSL1, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKSL1, S.LinkFlaskSL},
+ {SMARTBUFF_FLASKSL2, 60, SMARTBUFF_CONST_POTION, nil, SMARTBUFF_BFLASKSL2},
}
-
- SMARTBUFF_AddMsgD(">>>> Spell lists have been initialised.");
+ SMARTBUFF_AddMsgD("Spell list initialized");
+
+-- LoadToys();
end
diff --git a/SmartBuff.globals.lua b/SmartBuff.globals.lua
index b9cad45..2afe79e 100644
--- a/SmartBuff.globals.lua
+++ b/SmartBuff.globals.lua
@@ -1,13 +1,6 @@
-------------------------------------------------------------------------------
--- SmartBuff
--- Originally created by Aeldra (EU-Proudmoore)
--- Classic versions by Codermik (Mik/Castanova/Amarantine EU-Mirage Raceway)
--- Discord: https://discord.gg/R6EkZ94TKK
--- Cast the most important buffs on you, tanks or party/raid members/pets.
--------------------------------------------------------------------------------
-
-- Globals
-
+-------------------------------------------------------------------------------
SMARTBUFF_GLOBALS = { };
local SG = SMARTBUFF_GLOBALS;
@@ -17,7 +10,7 @@ SMARTBUFF_TTC_G = 1;
SMARTBUFF_TTC_B = 1;
SMARTBUFF_TTC_A = 1;
-SMARTBUFF_OPTIONSFRAME_HEIGHT = 820;
+SMARTBUFF_OPTIONSFRAME_HEIGHT = 800;
SMARTBUFF_OPTIONSFRAME_WIDTH = 500;
SMARTBUFF_ACTION_ITEM = "item";
@@ -28,34 +21,146 @@ SMARTBUFF_CONST_AUTOSOUND = "Deathbind Sound";
--SMARTBUFF_CONST_AUTOSOUND = "GLUECREATECHARACTERBUTTON";
--[[
-SystemFont
-GameFontNormal
-GameFontNormalSmall
-GameFontNormalLarge
-GameFontHighlight
-GameFontHighlightSmall
-GameFontHighlightSmallOutline
-GameFontHighlightLarge
-GameFontDisable
-GameFontDisableSmall
-GameFontDisableLarge
-GameFontGreen
-GameFontGreenSmall
-GameFontGreenLarge
-GameFontRed
-GameFontRedSmall
-GameFontRedLarge
-GameFontWhite
-GameFontDarkGraySmall
-NumberFontNormalYellow
-NumberFontNormalSmallGray
-QuestFontNormalSmall
+SystemFont
+GameFontNormal
+GameFontNormalSmall
+GameFontNormalLarge
+GameFontHighlight
+GameFontHighlightSmall
+GameFontHighlightSmallOutline
+GameFontHighlightLarge
+GameFontDisable
+GameFontDisableSmall
+GameFontDisableLarge
+GameFontGreen
+GameFontGreenSmall
+GameFontGreenLarge
+GameFontRed
+GameFontRedSmall
+GameFontRedLarge
+GameFontWhite
+GameFontDarkGraySmall
+NumberFontNormalYellow
+NumberFontNormalSmallGray
+QuestFontNormalSmall
DialogButtonHighlightText
-ErrorFont
-TextStatusBarText
-CombatLogFont
+ErrorFont
+TextStatusBarText
+CombatLogFont
NumberFontNormalLarge
NumberFontNormalHuge
]]--
+----------------------------------------------------------------------------
+
+-- Returns an unumerated table.
+---## Example
+---```
+---Enum.Animals = Enum.MakeEnum ( "Dog", "Cat", "Rabbit" )
+---print( Enum.Animals.Cat ) -- prints "Cat"
+---```
+---@param ... ...
+---@return table
+function Enum.MakeEnum(...)
+ return tInvert({...})
+ -- for i = 1, #t do
+ -- local v = t[i]
+ -- --t[i] = nil
+ -- t[v] = i
+ -- end
+ -- return t
+ end
+
+-- Returns an unumerated table from an existing table.
+---## Example
+---```
+---Fish = { "Loach", "Pike", "Herring" }
+---Enum.Fish = Enum.MakeEnumFromTable(Fish)
+---print(Enum.Fish.Herring) -- prints "Herring"
+---```
+function Enum.MakeEnumFromTable(t)
+ return tInvert(t)
+end
+
+-- Returns a table `t` of self-indexed values
+-- ## Example
+-- ```lua
+-- t = dict( "foo", "bar")
+-- print(t.foo) -- prints the string "foo"
+-- ```
+---@param tbl table
+---@return table
+function Enum.MakeDict(tbl)
+ local t = {};
+ for k, v in ipairs(tbl) do
+ t[v] = v;
+ end
+ return t;
+end
+
+-- Returns a copy of `list` with `keys` and `values` inverted
+-- ## Example
+---```
+---t = { "foo" = 1, "bar" = 2};
+---s = tinvert(t);
+---print(t.foo); -- prints the number 1
+---print(s[1]); -- prints the string "foo";
+---```
+---@param tbl table
+---@return table out
+function table.invert(tbl)
+ local out = {}
+ for k, v in pairs(tbl) do
+ out[v] = k
+ end
+ return out
+end
+
+local Default, Nil = {}, function () end -- for uniqueness
+---@param case any
+---@return any
+-- Implements a `switch` statement in Lua.
+-- ## Example
+-- ```
+-- switch(case) = {
+-- [1] = function() print("one") end,
+-- [2] = print,
+-- [3] = math.sin,
+-- default = function() print("default") end,
+-- }
+-- ```
+function switch (case)
+ return setmetatable({ case }, {
+ __call = function (t, cases)
+ local item = #t == 0 and Nil or t[1]
+ return (cases[item] or cases[Default] or Nil)
+ end
+ })
+end
+
+-- Prints debuggin information using a formatted version of its variable
+-- number of arguments following the description given in its first argument.
+---
+---[View documents](command:extension.lua.doc?["en-us/51/manual.html/pdf-string.format"])
+---@param s any
+---@param ... any
+function printf(s, ...)
+ print(" ",SMARTBUFF_TITLE,"::",string.format(s, ...))
+end
+
+-- Prints debug information to `stdout`. Receives any number of arguments,
+-- converting each argument to a string following the same rules of
+-- [tostring](command:extension.lua.doc?["en-us/51/manual.html/pdf-tostring"]).
+---
+--- [View documents](command:extension.lua.doc?["en-us/51/manual.html/pdf-print"])
+---
+function printd(...)
+ print(" ",SMARTBUFF_TITLE,"::",...)
+end
+--- Prints the value of any global variable, table value, frame, function result, or any valid Lua expression. Output is color coded for easier reading. Tables display up to 30 values, the rest are skipped and a message is shown.
+---@param t any
+---@param startkey? any
+function dump(t, startkey)
+ DevTools_Dump(t, startkey)
+end
diff --git a/SmartBuff.lua b/SmartBuff.lua
index 88e0638..eacf20a 100644
--- a/SmartBuff.lua
+++ b/SmartBuff.lua
@@ -1,43 +1,37 @@
-------------------------------------------------------------------------------
-- SmartBuff
-- Originally created by Aeldra (EU-Proudmoore)
--- Classic/Retail versions by Codermik (Mik/Castanova/Amarantine EU-Mirage Raceway or Castanova on EU-Aszune)
+-- Classic & Retail versions by Codermik & Speedwaystar
+-- Retail version fixes / improvements by Codermik & Speedwaystar
-- Discord: https://discord.gg/R6EkZ94TKK
-- Cast the most important buffs on you, tanks or party/raid members/pets.
-------------------------------------------------------------------------------
-SMARTBUFF_DATE = "180123";
-SMARTBUFF_VERSION = "r40."..SMARTBUFF_DATE;
-SMARTBUFF_VERSIONMIN = 11403; -- min version
-SMARTBUFF_VERSIONNR = 30401; -- max version
+SMARTBUFF_DATE = "200523";
+
+SMARTBUFF_VERSION = "r41."..SMARTBUFF_DATE;
+SMARTBUFF_VERSIONNR = 30401;
SMARTBUFF_TITLE = "SmartBuff";
-SMARTBUFF_SUBTITLE = "Supports casting buffs on tanks, selected classes in party or raids.";
-SMARTBUFF_DESC = "Cast the most important buffs on you, tanks, party or raid members/pets";
+SMARTBUFF_SUBTITLE = "Supports you in casting buffs";
+SMARTBUFF_DESC = "Cast the most important buffs on you, your tanks, party/raid members/pets";
SMARTBUFF_VERS_TITLE = SMARTBUFF_TITLE .. " " .. SMARTBUFF_VERSION;
-SMARTBUFF_OPTIONS_TITLE = SMARTBUFF_VERS_TITLE;
+SMARTBUFF_OPTIONS_TITLE = SMARTBUFF_VERS_TITLE.." WOTLK ";
--- addon and client information.
+-- addon name
local addonName = ...
-local SmartbuffPrefix = "Smartbuff";
+local SmartbuffPrefix = "SBC1.0";
+local SmartbuffHeader = "Smartbuff";
+local SmartbuffCommands = { "SBCVER", "SBCCMD", "SBCSYC" }
local SmartbuffSession = true;
-local SmartbuffVerCheck = false; -- for my use when checking guild users/testers versions :)
-local wowVersionString, wowBuild, _, wowTOC = GetBuildInfo();
-local isWOTLKC = (_G.WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC and wowTOC >= 30400);
-local SmartbuffRevision = 40;
+local SmartbuffVerCheck = false; -- for my use when checking guild users/testers versions :)
+local buildInfo = select(4, GetBuildInfo())
+local SmartbuffRevision = 41;
local SmartbuffVerNotifyList = {}
--- Smartbuff now uses LibRangeCheck-2.0 by Mitchnull, not fully implemented
--- just yet but I will be moving over to this in the near future.
+-- Using LibRangeCheck-2.0 by Mitchnull
-- https://www.wowace.com/projects/librangecheck-2-0
local LRC = LibStub("LibRangeCheck-2.0")
-local LCD = LibStub and LibStub("LibClassicDurations", true)
-if LCD then LCD:Register(SMARTBUFF_TITLE) end
-
-local UnitAuraFull = UnitAura
-if LCD and LCD.UnitAura then UnitAuraFull = function(a, b, c) return LCD:UnitAura(a, b, c) end end
-
-
local SG = SMARTBUFF_GLOBALS;
local OG = nil; -- Options global
local O = nil; -- Options local
@@ -47,12 +41,11 @@ local _;
BINDING_HEADER_SMARTBUFF = "SmartBuff";
SMARTBUFF_BOOK_TYPE_SPELL = "spell";
-
local GlobalCd = 1.5;
local maxSkipCoolDown = 3;
local maxRaid = 40;
local maxBuffs = 40;
-local maxScrollButtons = 50;
+local maxScrollButtons = 30;
local numBuffs = 0;
local isLoaded = false;
@@ -64,7 +57,6 @@ local isSetZone = false;
local isFirstError = false;
local isMounted = false;
local isCTRA = true;
-local isSetUnits = false;
local isKeyUpChanged = false;
local isKeyDownChanged = false;
local isAuraChanged = false;
@@ -86,9 +78,7 @@ local sRealmName = nil;
local sPlayerName = nil;
local sID = nil;
local sPlayerClass = nil;
-local iLastSubgroup = 0;
local tLastCheck = 0;
-local iGroupSetup = -1;
local iLastBuffSetup = -1;
local sLastTexture = "";
local iLastGroupSetup = -99;
@@ -96,7 +86,7 @@ local sLastZone = "";
local tAutoBuff = 0;
local tDebuff = 0;
local sMsgWarning = "";
-local iCurrentFont = 1;
+local iCurrentFont = 6;
local iCurrentList = -1;
local iLastPlayer = -1;
@@ -115,16 +105,17 @@ local cScrBtnBO = nil;
local cAddUnitList = { };
local cIgnoreUnitList = { };
+local cPlayerTrackers = { };
+local cDisableTrackSwitch = false;
+local cLootOpenedDisable = false;
-local cClasses = {"DRUID", "HUNTER", "MAGE", "PALADIN", "PRIEST", "ROGUE", "SHAMAN", "WARLOCK", "WARRIOR", "DEATHKNIGHT", "MONK", "DEMONHUNTER", "HPET", "WPET", "DKPET", "TANK", "HEALER", "DAMAGER"};
-local cIgnoreClasses = { 11, 12, 17, 18 };
-local cOrderGrp = {0, 1, 2, 3, 4, 5, 6, 7, 8};
-local cOrderClass = {0, "WARRIOR", "PRIEST", "DRUID", "PALADIN", "SHAMAN", "MAGE", "WARLOCK", "HUNTER", "ROGUE", "TANK", "HPET", "WPET", "DKPET"};
+local cClasses = {"DRUID", "HUNTER", "MAGE", "PALADIN", "PRIEST", "ROGUE", "SHAMAN", "WARLOCK", "WARRIOR", "DEATHKNIGHT", "MONK", "DEMONHUNTER", "EVOKER", "HPET", "WPET", "DKPET", "TANK", "HEALER", "DAMAGER"};
+local cIgnoreClasses = { 11, 12, 13, 19 };
+local cOrderGrp = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
local cFonts = {"NumberFontNormal", "NumberFontNormalLarge", "NumberFontNormalHuge", "GameFontNormal", "GameFontNormalLarge", "GameFontNormalHuge", "ChatFontNormal", "QuestFont", "MailTextFontNormal", "QuestTitleFont"};
local currentUnit = nil;
local currentSpell = nil;
-local currentRank = nil;
local currentTemplate = nil;
local currentSpec = nil;
@@ -137,7 +128,7 @@ local IconPaths = {
["Roles"] = "Interface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES",
["Classes"] = "Interface\\WorldStateFrame\\Icons-Classes",
};
-
+
local Icons = {
["WARRIOR"] = { IconPaths.Classes, 0.00, 0.25, 0.00, 0.25 },
["MAGE"] = { IconPaths.Classes, 0.25, 0.50, 0.00, 0.25 },
@@ -151,6 +142,7 @@ local Icons = {
["DEATHKNIGHT"] = { IconPaths.Classes, 0.25, 0.50, 0.50, 0.75 },
["MONK"] = { IconPaths.Classes, 0.50, 0.75, 0.50, 0.75 },
["DEMONHUNTER"] = { IconPaths.Classes, 0.75, 1.00, 0.50, 0.75 },
+ ["EVOKER"] = { IconPaths.Classes, 0.75, 1.00, 0.50, 0.75 },
["PET"] = { IconPaths.Pet, 0.08, 0.92, 0.08, 0.92},
["TANK"] = { IconPaths.Roles, 0.0, 19/64, 22/64, 41/64 },
["HEALER"] = { IconPaths.Roles, 20/64, 39/64, 1/64, 20/64 },
@@ -158,8 +150,10 @@ local Icons = {
["NONE"] = { IconPaths.Roles, 20/64, 39/64, 22/64, 41/64 },
};
--- available sounds (14)
-local Sounds = { 1141, 3784, 4574, 17318, 15262, 13830, 15273, 10042, 10720, 17316, 3337, 7894, 7914, 10033 }
+-- available sounds (34)
+local Sounds = { 1141, 3784, 4574, 17318, 15262, 13830, 15273, 10042, 10720, 17316, 3337, 15263, 13267, 8698, 3660,
+ 15712, 9203, 12279, 3273, 13179, 13327, 9632, 10590, 3322, 718, 149, 15686, 6189, 7095, 6341, 6267,
+ 7894, 7914, 10033 }
local DebugChatFrame = DEFAULT_CHAT_FRAME;
@@ -169,7 +163,7 @@ local UnitChannelInfo = _G.UnitChannelInfo or _G.ChannelInfo
local GetNumSpecGroups = _G.GetNumSpecGroups or function(...) return 1 end
local IsActiveBattlefieldArena = _G.IsActiveBattlefieldArena or function(...) return false end
--- Popup
+-- Popup to reset everything
StaticPopupDialogs["SMARTBUFF_DATA_PURGE"] = {
text = SMARTBUFF_OFT_PURGE_DATA,
button1 = SMARTBUFF_OFT_YES,
@@ -180,7 +174,16 @@ StaticPopupDialogs["SMARTBUFF_DATA_PURGE"] = {
hideOnEscape = 1
}
--- Rounds a number to the given number of decimal places.
+-- Popup to reloadui
+StaticPopupDialogs["SMARTBUFF_GUI_RELOAD"] = {
+ text = SMARTBUFF_OFT_REQ_RELOAD,
+ button1 = SMARTBUFF_OFT_OKAY,
+ OnAccept = function() ReloadUI() end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+}
+-- Rounds a number to the given number of decimal places.
local r_mult;
local function Round(num, idp)
r_mult = 10^(idp or 0);
@@ -215,6 +218,20 @@ function SMARTBUFF_PlaySpashSound()
PlaySound(Sounds[O.AutoSoundSelection]);
end
+function SMARTBUFF_ChooseSplashSound()
+ local menu = {}
+ local i = 1
+ for sound, soundpath in pairs(sounds) do
+ menu[i] = { text = sound, notCheckable = true, func = function() PlaySound(soundpath) end }
+ i = i + 1
+ end
+ local dropDown = CreateFrame("Frame", "DropDownMenuFrame", UIParent, "UIDropDownMenuTemplate")
+ dropDown:SetPoint("CENTER", UIParent, "CENTER")
+ dropDown:SetScript("OnMouseUp", function (self, button, down)
+ print("mousedown")
+ end)
+end
+
-- Reorders values in the table
local function treorder(t, i, n)
if (t and type(t) == "table" and t[i]) then
@@ -232,13 +249,13 @@ end
-- Finds a value in the table and returns the index
local function tfind(t, s)
- if (t and type(t) == "table" and s) then
- for k, v in pairs(t) do
- if (v and v == s) then
+ if (t and type(t) == "table" and s) then
+ for k, v in pairs(t) do
+ if (v and v == s) then
return k;
- end
- end
- end
+ end
+ end
+ end
return false;
end
@@ -253,10 +270,6 @@ local function tcontains(t, s)
return false;
end
-function strim(s)
- return (s:gsub("^%s*(.-)%s*$", "%1"))
-end
-
local function ChkS(text)
if (text == nil) then
text = "";
@@ -264,56 +277,10 @@ local function ChkS(text)
return text;
end
--- check for a given buff.
-local function CheckForBuff(buff)
- for i=1,40 do
- name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitAura("player",i);
- if name == buff then
- return true;
- end
- end
- return false;
-end
-
-local function IsFlying()
- if (O.WarnWhileMounted) then return false; end
- local result = GetShapeshiftForm(false)
- if ((result == 5 and not CheckForBuff(SMARTBUFF_DRUID_MOONKIN)) or result == 6) and sPlayerClass == "DRUID" then
- return true
- end
- return false
-end
-
-local function UnitInVehicle(unit)
- return false
-end
-
-local function UnitHasVehicleUI(unit)
- return false
-end
-
-local function UnitGroupRolesAssigned(unit)
- -- dont bother if we dont have assigned tanks
- if cClassGroups then
- if cClassGroups["TANK"] then
- for n = 1, maxRaid, 1 do
- local u = cClassGroups["TANK"][n]
- if u and u == unit then
- name, rank, subgroup, level, class, classeng, zone, online, isDead, role = GetRaidRosterInfo(n)
- if role and role == "MAINTANK" then
- return "TANK"
- end
- end
- end
- end
- end
- return "NONE"
-end
-
local function IsVisibleToPlayer(self)
- if (not self) then return false; end
+ if (not self) then return false; end
local w, h = UIParent:GetWidth(), UIParent:GetHeight();
- local x, y = self:GetLeft(), UIParent:GetHeight() - self:GetTop();
+ local x, y = self:GetLeft(), UIParent:GetHeight() - self:GetTop();
if (x >= 0 and x < (w - self:GetWidth()) and y >= 0 and y < (h - self:GetHeight())) then
return true;
end
@@ -321,12 +288,8 @@ local function IsVisibleToPlayer(self)
end
local function CS()
- if isWOTLKC then
- currentSpec = GetActiveTalentGroup() or nil;
- else
- if (currentSpec == nil) then
- currentSpec = GetSpecialization() or nil;
- end
+ if (currentSpec == nil) then
+ currentSpec = GetActiveTalentGroup()
end
if (currentSpec == nil) then
currentSpec = 1;
@@ -353,7 +316,7 @@ local function InitBuffSettings(cBI, reset)
cBuff = B[CS()][CT()][buff];
reset = true;
end
-
+
if (reset) then
wipe(cBuff);
cBuff.EnableS = false;
@@ -362,12 +325,12 @@ local function InitBuffSettings(cBI, reset)
cBuff.SelfNot = false;
cBuff.CIn = false;
cBuff.COut = true;
- cBuff.MH = false;
+ cBuff.MH = true; -- default to checked
cBuff.OH = false;
cBuff.RH = false;
cBuff.Reminder = true;
cBuff.RBTime = 0;
- cBuff.ManaLimit = 0;
+ cBuff.ManaLimit = 0;
if (cBI.Type == SMARTBUFF_CONST_GROUP or cBI.Type == SMARTBUFF_CONST_ITEMGROUP) then
for n in pairs(cClasses) do
if (cBI.Type == SMARTBUFF_CONST_GROUP and not tcontains(cIgnoreClasses, n) and not string.find(cBI.Params, cClasses[n])) then
@@ -377,23 +340,22 @@ local function InitBuffSettings(cBI, reset)
end
end
end
- end
-
+ end
+
-- Upgrades
if (cBuff.RBTime == nil) then cBuff.Reminder = true; cBuff.RBTime = 0; end -- to 1.10g
if (cBuff.ManaLimit == nil) then cBuff.ManaLimit = 0; end -- to 1.12b
if (cBuff.SelfNot == nil) then cBuff.SelfNot = false; end -- to 2.0i
if (cBuff.AddList == nil) then cBuff.AddList = { }; end -- to 2.1a
- if (cBuff.IgnoreList == nil) then cBuff.IgnoreList = { }; end -- to 2.1a
+ if (cBuff.IgnoreList == nil) then cBuff.IgnoreList = { }; end -- to 2.1a
if (cBuff.RH == nil) then cBuff.RH = false; end -- to 4.0b
end
local function InitBuffOrder(reset)
- if (B[CS()].Order == nil) then
- B[CS()].Order = { };
- end
-
+ if not B then B = {} end
+ if not B[CS()] then B[CS()] = {} end
+ if not B[CS()].Order then B[CS()].Order = {} end
local b;
local i;
local ord = B[CS()].Order;
@@ -401,15 +363,15 @@ local function InitBuffOrder(reset)
wipe(ord);
SMARTBUFF_AddMsgD("Reset buff order");
end
-
+
-- Remove not longer existing buffs in the order list
for k, v in pairs(ord) do
if (v and cBuffIndex[v] == nil) then
SMARTBUFF_AddMsgD("Remove from buff order: "..v);
tremove(ord, k);
end
- end
-
+ end
+
i = 1;
while (cBuffs[i] and cBuffs[i].BuffS) do
b = false;
@@ -429,7 +391,7 @@ local function InitBuffOrder(reset)
end
local function IsMinLevel(minLevel)
- if (not minLevel) then
+ if (not minLevel) then
return true;
end
if (minLevel > UnitLevel("player")) then
@@ -438,50 +400,116 @@ local function IsMinLevel(minLevel)
return true;
end
-local function IsPowerLimitOk(bs)
- -- Check for power threshold
- if (bs.ManaLimit and bs.ManaLimit > 0) then
- local powerType, powerToken = UnitPowerType("player");
- -- if bs.ManaLimit <= 100 and powertype is mana then the ManaLimit is %
- if (bs.ManaLimit <= 100 and powerType == 0) then
- if (((UnitPower("player", powerType) / UnitPowerMax("player", powerType))) * 100 < bs.ManaLimit) then
- return false;
- end
- elseif (UnitPower("player", powerType) < bs.ManaLimit) then
- return false;
- end
- end
- return true;
-end
-
local function IsPlayerInGuild()
return IsInGuild() -- and GetGuildInfo("player")
end
-local function SendSmartbuffVersion(player, unit)
- if player == UnitName("player") then return end
- for count,value in ipairs(SmartbuffVerNotifyList) do
- if value[1] == player then return end
+
+local function IsTalentSkilled(t, i, name)
+ local _, tName, _, _, tAvailable = GetTalentInfo(t, i);
+ if (tName) then
+ isTTreeLoaded = true;
+ SMARTBUFF_AddMsgD("Talent: "..tName..", Points = "..tAvailable);
+ if (name and name == tName and tAvailable > 0) then
+ SMARTBUFF_AddMsgD("Debuff talent found: "..name..", Points = "..tAvailable);
+ return true, tAvailable;
+ end
+ else
+ SMARTBUFF_AddMsgD("Talent tree not available!");
+ isTTreeLoaded = false;
+ end
+ return false, 0;
+end
+
+-- toggle the auto gathering switcher.
+function ToggleAutoGatherer()
+ if (not isInit) then return end
+ O.TrackSwitchActive = not O.TrackSwitchActive;
+ if not SmartBuffOptionsFrame:IsShown() then -- quiet while in options
+ if O.TrackSwitchActive then
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Build "..SMARTBUFF_VERSION.." (Client: "..buildInfo..")|cffffffff "..SMARTBUFF_AUTOGATHERON)
+ else
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Build "..SMARTBUFF_VERSION.." (Client: "..buildInfo..")|cffffffff "..SMARTBUFF_AUTOGATHEROFF)
+ end
+ PlaySound(15263);
+ end
+end
+
+-- Read number of tracking abilities
+function ScanPlayerTrackers()
+ if (not isInit) then return end
+ local count = C_Minimap.GetNumTrackingTypes();
+ local spellcount = 0;
+ cPlayerTrackers = { };
+ for i=1,count do
+ local name, texture, active, category = C_Minimap.GetTrackingInfo(i);
+ if category == "spell" then
+ -- only interested in minerals, herbs and fish here
+ if name == SMARTBUFF_OFT_MINERALS or name == SMARTBUFF_OFT_HERBS or name == SMARTBUFF_OFT_FINDFISH then
+ spellcount = spellcount + 1
+ tinsert(cPlayerTrackers, {i, name})
+ end
+ end
end
- local isInBattleground = UnitInBattleground("player")
- if not isInBattleground then
- tinsert(SmartbuffVerNotifyList, {player, unit, GetTime()})
- C_ChatInfo.SendAddonMessage(SmartbuffPrefix, SmartbuffRevision, "WHISPER", player)
+ O.TrackMaxPosition = spellcount
+end
+
+-- toggle trackers
+local lastFire = GetTime()
+function ToggleGatheringTrackers()
+ if (not isInit) then return end
+ local tmptable
+ if O.TrackSwitchActive and not cDisableTrackSwitch and not cLootOpenedDisable then
+ local currentTime = GetTime()
+ if (currentTime - lastFire) >= O.TrackSwitchDelay and not InCombatLockdown() then
+ ScanPlayerTrackers()
+ currentTime = GetTime()
+ lastFire = currentTime
+ if not SmartBuffOptionsFrame:IsShown() then
+ tmptable = cPlayerTrackers[O.TrackPosition]
+ local tmptablesize = #cPlayerTrackers
+ if tmptablesize <= 1 then
+ -- turn the auto switch off, it will only benefit when more than one gathering tracking is available.
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Gathering Switcher : |cffffffff"..SMARTBUFF_TRACKINGDISABLE)
+ O.TrackSwitchActive = false
+ end
+ if tmptable then
+ if tmptable[2] == "Find Fish" and O.TrackSwitchFish then
+ C_Minimap.SetTracking(tmptable[1], true)
+ elseif tmptable[2] == "Find Fish" and not O.TrackSwitchFish then
+ O.TrackPosition = O.TrackPosition + 1
+ if O.TrackPosition > O.TrackMaxPosition then
+ O.TrackPosition = 1
+ end
+ tmptable = cPlayerTrackers[O.TrackPosition]
+ C_Minimap.SetTracking(tmptable[1], true)
+ elseif tmptable[2] ~= "Find Fish" then
+ C_Minimap.SetTracking(tmptable[1], true)
+ end
+ O.TrackPosition = O.TrackPosition + 1
+ if O.TrackPosition > O.TrackMaxPosition then
+ O.TrackPosition = 1
+ end
+ end
+ end
+ end
end
end
+
-- SMARTBUFF_OnLoad
function SMARTBUFF_OnLoad(self)
-
self:RegisterEvent("ADDON_LOADED");
self:RegisterEvent("PLAYER_LOGIN");
self:RegisterEvent("PLAYER_ENTERING_WORLD");
self:RegisterEvent("UNIT_NAME_UPDATE");
- self:RegisterEvent("GROUP_ROSTER_UPDATE");
self:RegisterEvent("PLAYER_REGEN_ENABLED");
self:RegisterEvent("PLAYER_REGEN_DISABLED");
self:RegisterEvent("PLAYER_STARTED_MOVING");
self:RegisterEvent("PLAYER_STOPPED_MOVING");
+ self:RegisterEvent("LOOT_OPENED")
+ self:RegisterEvent("LOOT_CLOSED")
+ self:RegisterEvent("PLAYER_TALENT_UPDATE");
self:RegisterEvent("SPELLS_CHANGED");
self:RegisterEvent("ACTIONBAR_HIDEGRID");
self:RegisterEvent("UNIT_AURA");
@@ -490,90 +518,107 @@ function SMARTBUFF_OnLoad(self)
self:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
self:RegisterEvent("UNIT_SPELLCAST_FAILED");
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED");
-
- -- One of them allows SmartBuff to be closed with the Escape key
+ --auto template events
+ self:RegisterEvent("ZONE_CHANGED_NEW_AREA")
+ self:RegisterEvent("GROUP_ROSTER_UPDATE")
+ --One of them allows SmartBuff to be closed with the Escape key
tinsert(UISpecialFrames, "SmartBuffOptionsFrame");
UIPanelWindows["SmartBuffOptionsFrame"] = nil;
-
- -- setup command line.
+
SlashCmdList["SMARTBUFF"] = SMARTBUFF_command;
SLASH_SMARTBUFF1 = "/sbo";
SLASH_SMARTBUFF2 = "/sbuff";
SLASH_SMARTBUFF3 = "/smartbuff";
+ SLASH_SMARTBUFF4 = "/sb";
+
SlashCmdList["SMARTBUFFMENU"] = SMARTBUFF_OptionsFrame_Toggle;
- SLASH_SMARTBUFFMENU1 = "/sbm";
+ SLASH_SMARTBUFFMENU1 = "/sbm";
+
SlashCmdList["SmartReloadUI"] = function(msg) ReloadUI(); end;
SLASH_SmartReloadUI1 = "/rui";
-
+
SMARTBUFF_InitSpellIDs();
+
end
-
-- END SMARTBUFF_OnLoad
--------------------------------------------------------------------------------------------------------------------------------------
--- SmartBuff Event Handler ---------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
+-- SMARTBUFF_OnEvent
function SMARTBUFF_OnEvent(self, event, ...)
local arg1, arg2, arg3, arg4, arg5 = ...;
- -- UNIT_NAME_UPDATE / PLAYER_ENTERING_WORLD
- if ((event == "UNIT_NAME_UPDATE" and arg1 == "player") or event == "PLAYER_ENTERING_WORLD") then
- if IsPlayerInGuild() and event == "PLAYER_ENTERING_WORLD" then
- C_ChatInfo.SendAddonMessage(SmartbuffPrefix, SmartbuffRevision, "GUILD")
+ if ((event == "UNIT_NAME_UPDATE" and arg1 == "player") or event == "PLAYER_ENTERING_WORLD") then
+ if IsPlayerInGuild() and event == "PLAYER_ENTERING_WORLD" then
+ C_ChatInfo.SendAddonMessage(SmartbuffPrefix, SmartbuffHeader..""..SmartbuffCommands[1]..""..SmartbuffRevision..""..SMARTBUFF_VERSION, "GUILD")
end
- isPlayer = true;
+ isPlayer = true;
if (event == "PLAYER_ENTERING_WORLD" and isInit and O.Toggle) then
isSetZone = true;
tStartZone = GetTime();
end
- -- ADDON_LOADED
elseif(event == "ADDON_LOADED" and arg1 == SMARTBUFF_TITLE) then
isLoaded = true;
end
-- PLAYER_LOGIN
- if event == "PLAYER_LOGIN" then
- local prefixResult = C_ChatInfo.RegisterAddonMessagePrefix(SmartbuffPrefix)
+ if event == "PLAYER_LOGIN" then
+ local prefixResult = C_ChatInfo.RegisterAddonMessagePrefix(SmartbuffPrefix)
+ end
+
+ -- these two stop the tracking switcher when a loot window is opened
+ -- otherwise if autoloot isnt on it can close the loot window when it
+ -- does a switch.. gotta love these things..
+
+ if event == "LOOT_OPENED" then
+ cLootOpenedDisable = true
+ SMARTBUFF_AddMsgD("Loot window opened");
+ end
+ if event == "LOOT_CLOSED" then
+ cLootOpenedDisable = false
+ SMARTBUFF_AddMsgD("Loot window closed");
end
- -- CHAT_MSG_ADDON
+ -- CHAT_MSG_ADDON
if event == "CHAT_MSG_ADDON" then
+ local pktHeader, pktCmd, pktData1, pktData2
if arg1 == SmartbuffPrefix then
- -- its us.
if arg2 then
- arg2 = tonumber(arg2)
- if arg2 > SmartbuffRevision and SmartbuffSession then
- -- detected a newer version of the addon, lets let the player know.
- DEFAULT_CHAT_FRAME:AddMessage(SMARTBUFF_MSG_NEWVER1..SMARTBUFF_VERSION..SMARTBUFF_MSG_NEWVER2..arg2..SMARTBUFF_MSG_NEWVER3)
- SmartbuffSession = false
- end
- -- guild version check - for my use testing the addon with the guild testers. --
- if arg5 and arg5 ~= UnitName("player") and SmartbuffVerCheck then
- DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff : |cffFFFF00"..arg5.." ("..arg3..")|cffffffff has revision |cffFFFF00r"..arg2.."|cffffffff installed.")
- end
+ pktHeader, pktCmd, pktData1, pktData2 = strsplit("", arg2, 4)
+ if pktHeader == SmartbuffHeader then
+ if pktCmd == SmartbuffCommands[1] then -- version packet
+ pktData1 = tonumber(pktData1)
+ if pktData1 > SmartbuffRevision and SmartbuffSession then
+ DEFAULT_CHAT_FRAME:AddMessage(SMARTBUFF_MSG_NEWVER1..SMARTBUFF_VERSION..SMARTBUFF_MSG_NEWVER2..pktData1..SMARTBUFF_MSG_NEWVER3)
+ SmartbuffSession = false
+ end
+ if SmartbuffVerCheck then
+ if arg5 and arg5 ~= UnitName("player") then
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Versions: |cffFFFF00"..arg5.."|cffffffff has "..pktData2.." installed.")
+ end
+ end
+ elseif pktCmd == SmartbuffCommands[2] then -- command packet (future feature)
+ elseif pktCmd == SmartbuffCommands[3] then -- sync packet (future feature)
+ else
+ SMARTBUFF_AddMsgD("Warning: Received an unknown command packet to the addon.");
+ end
+ else
+ SMARTBUFF_AddMsgD("Warning: Not a valid packet header sent to the addon.");
+ end
end
end
end
-
- -- SMARTBUFF_UPDATE
+
if (event == "SMARTBUFF_UPDATE" and isLoaded and isPlayer and not isInit and not InCombatLockdown()) then
SMARTBUFF_Options_Init(self);
end
-
+
if (not isInit or O == nil) then
return;
end;
-
- -- GROUP_ROSTER_UPDATE
- if (event == "GROUP_ROSTER_UPDATE") then
- isSetUnits = true;
-
- -- PLAYER_REGEN_DISABLED
- elseif (event == "PLAYER_REGEN_DISABLED") then
+
+ if (event == "PLAYER_REGEN_DISABLED") then
SMARTBUFF_Ticker(true);
-
if (O.Toggle) then
if (O.InCombat) then
for spell, data in pairs(cBuffsCombat) do
@@ -597,11 +642,15 @@ function SMARTBUFF_OnEvent(self, event, ...)
end
SMARTBUFF_SyncBuffTimers();
SMARTBUFF_Check(1, true);
+ if SMARTBUFF_IsFishingPoleEquiped() and O.WarnCombatFishingRod then -- i'll add an option to turn this off later
+ -- warn the player he/she is in combat with a fishing pole equipped.
+ DEFAULT_CHAT_FRAME:AddMessage("|cffff0000Smartbuff Warning: |cffff6060"..SMARTBUFF_OFT_FRODWARN)
+ PlaySound(12197);
+ end
end
-
- -- PLAYER_REGEN_ENABLED
+
elseif (event == "PLAYER_REGEN_ENABLED") then
- SMARTBUFF_Ticker(true);
+ SMARTBUFF_Ticker(true);
if (O.Toggle) then
if (O.InCombat) then
SmartBuff_KeyButton:SetAttribute("type", nil);
@@ -612,14 +661,25 @@ function SMARTBUFF_OnEvent(self, event, ...)
SMARTBUFF_Check(1, true);
end
- -- PLAYER_STARTED_MOVING / PLAYER_STOPPED_MOVING
elseif (event == "PLAYER_STARTED_MOVING") then
isPlayerMoving = true;
elseif (event == "PLAYER_STOPPED_MOVING") then
isPlayerMoving = false;
- -- SPELLS_CHANGED / ACTIONBAR_HIDEGRID
+ elseif (event == "PLAYER_TALENT_UPDATE") then
+ if(SmartBuffOptionsFrame:IsVisible()) then
+ SmartBuffOptionsFrame:Hide();
+ end
+ if (currentSpec ~= GetActiveTalentGroup()) then
+ currentSpec = GetActiveTalentGroup();
+ if (B[currentSpec] == nil) then
+ B[currentSpec] = { };
+ end
+ SMARTBUFF_AddMsg(format(SMARTBUFF_MSG_SPECCHANGED, tostring(currentSpec)), true);
+ isSetBuffs = true;
+ end
+
elseif (event == "SPELLS_CHANGED" or event == "ACTIONBAR_HIDEGRID") then
isSetBuffs = true;
end
@@ -627,15 +687,14 @@ function SMARTBUFF_OnEvent(self, event, ...)
if (not O.Toggle) then
return;
end;
-
- -- UNIT_AURA
+
if (event == "UNIT_AURA") then
if (UnitAffectingCombat("player") and (arg1 == "player" or string.find(arg1, "^party") or string.find(arg1, "^raid"))) then
isSyncReq = true;
- end
+ end
-- checks if aspect of cheetah or pack is active and cancel it if someone gets dazed
if (sPlayerClass == "HUNTER" and O.AntiDaze and (arg1 == "player" or string.find(arg1, "^party") or string.find(arg1, "^raid") or string.find(arg1, "pet"))) then
- local _, _, stuntex = GetSpellInfo(1604); --get Dazed icon
+ local _, _, stuntex = GetSpellInfo(1604); --get Dazed icon
if (SMARTBUFF_IsDebuffTexture(arg1, stuntex)) then
buff = nil;
if (arg1 == "player" and SMARTBUFF_CheckBuff(arg1, SMARTBUFF_AOTC)) then
@@ -651,18 +710,16 @@ function SMARTBUFF_OnEvent(self, event, ...)
end
if (O.ToggleAutoChat) then
SMARTBUFF_AddMsgWarn("!!! CANCEL "..buff.." !!!", true);
- end
+ end
end
- end
- end
+ end
+ end
end
-
- -- UI_ERROR_MESSAGE
+
if (event == "UI_ERROR_MESSAGE") then
SMARTBUFF_AddMsgD(string.format("Error message: %s",arg1));
end
- -- UNIT_SPELLCAST_FAILED
if (event == "UNIT_SPELLCAST_FAILED") then
currentUnit = arg1;
SMARTBUFF_AddMsgD(string.format("Spell failed: %s",arg1));
@@ -670,41 +727,28 @@ function SMARTBUFF_OnEvent(self, event, ...)
if (UnitName(currentUnit) ~= sPlayerName and O.BlacklistTimer > 0) then
cBlacklist[currentUnit] = GetTime();
if (currentUnit and UnitName(currentUnit)) then
- SMARTBUFF_AddMsgD(UnitName(currentUnit).." ("..currentUnit..") blacklisted ("..O.BlacklistTimer.."sec)");
end
end
end
currentUnit = nil;
-
- -- UNIT_SPELLCAST_SUCCEEDED
- elseif (event == "UNIT_SPELLCAST_SUCCEEDED") then
+
+ elseif (event == "UNIT_SPELLCAST_SUCCEEDED") then
if (arg1 and arg1 == "player") then
local unit = nil;
local spell = nil;
local target = nil;
-
- -- temporary dirty hack to force a spell list refresh and check when a warlock stone is created.
- -- yes yes, i know its horrible but its temporary as a quick fix - i will tidy this up later.
- if (sPlayerClass == "WARLOCK") then
- -- only really interested if im a warlock, otherwise just skip over.
- if arg3 == 2362 or arg3 == 17727 or arg3 == 17728 or arg3 == 28172 or arg3 == 47886 or arg3 == 47888 or
- arg3 == 6366 or arg3 == 17951 or arg3 == 17952 or arg3 == 17954 or arg3 == 27250 or arg3 == 60219 then
- isSetBuffs = true;
- end
- end
-
if (arg1 and arg2) then
if (not arg3) then arg3 = ""; end
if (not arg4) then arg4 = ""; end
- SMARTBUFF_AddMsgD("Spellcast succeeded: " .. arg1 .. ", " .. arg2 .. ", " .. arg3 .. ", " .. arg4)
+ SMARTBUFF_AddMsgD("Spellcast succeeded: target " .. arg1 .. ", spellID " .. arg3 .. " (" ..GetSpellInfo(arg3) .. "), " .. arg4)
if (string.find(arg1, "party") or string.find(arg1, "raid")) then
spell = arg2;
- end
- end
+ end
+ end
if (currentUnit and currentSpell and currentUnit ~= "target") then
unit = currentUnit;
spell = currentSpell;
- end
+ end
if (unit) then
local name = UnitName(unit);
if (cBuffTimer[unit] == nil) then
@@ -715,81 +759,61 @@ function SMARTBUFF_OnEvent(self, event, ...)
SMARTBUFF_AddMsg(name .. ": " .. spell .. " " .. SMARTBUFF_MSG_BUFFED);
currentUnit = nil;
currentSpell = nil;
- currentRank = nil;
end
- end
+ end
if (isClearSplash) then
isClearSplash = false;
SMARTBUFF_Splash_Clear();
- end
- end
+ end
+ end
+ end
+
+ if event == "ZONE_CHANGED_NEW_AREA" or event == "GROUP_ROSTER_UPDATE" then
+ SMARTBUFF_SetTemplate()
end
end
+-- END SMARTBUFF_OnEvent
+
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_OnUpdate --------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
function SMARTBUFF_OnUpdate(self, elapsed)
- if not self.Elapsed then
+ if not self.Elapsed then
self.Elapsed = 0.2
end
self.Elapsed = self.Elapsed - elapsed
- if self.Elapsed > 0 then
- return
+ if self.Elapsed > 0 then
+ return
end
self.Elapsed = 0.2
-
if (not isInit) then
if (isLoaded and GetTime() > tAutoBuff + 0.5) then
tAutoBuff = GetTime();
- _, tName = GetTalentInfo(1, 1, 1);
- if (tName) then
+ local specID = GetActiveTalentGroup()
+ if (specID) then
SMARTBUFF_OnEvent(self, "SMARTBUFF_UPDATE");
end
- end
- else
- if (isSetZone and GetTime() > (tStartZone + 4)) then
- SMARTBUFF_CheckLocation();
end
+ else
SMARTBUFF_Ticker();
SMARTBUFF_Check(1);
+ ToggleGatheringTrackers();
end
end
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_Ticker ----------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
function SMARTBUFF_Ticker(force)
if (force or GetTime() > tTicker + 1) then
tTicker = GetTime();
-
- if (isSetUnits) then
- isSetUnits = false;
- SMARTBUFF_SetUnits();
- isSyncReq = true;
- end
-
if (isSyncReq or tTicker > tSync + 10) then
SMARTBUFF_SyncBuffTimers();
end
-
if (isAuraChanged) then
isAuraChanged = false;
SMARTBUFF_Check(1, true);
end
-
- end
+ end
end
--------------------------------------------------------------------------------------------------------------------------------------
---
--- SMARTBUFF_AddMsg
--- SMARTBUFF_AddMsgErr
--- SMARTBUFF_AddMsgWarn
--- SMARTBUFF_AddMsgD
---
--------------------------------------------------------------------------------------------------------------------------------------
+-- Will dump the value of msg to the default chat window
function SMARTBUFF_AddMsg(msg, force)
if (DEFAULT_CHAT_FRAME and (force or not O.ToggleMsgNormal)) then
DEFAULT_CHAT_FRAME:AddMessage(YLL .. msg .. "|r");
@@ -821,82 +845,85 @@ function SMARTBUFF_AddMsgD(msg, r, g, b)
end
end
+Enum.SmartBuffGroup = {
+ Solo = 1,
+ Party = 2,
+ Raid = 3,
+ Battleground = 4,
+ Arena = 5,
+ ICC = 6,
+ TOC = 7,
+ Ulduar = 7,
+ Ony = 8,
+ Naxx = 9,
+ Custom1 = 10,
+ Custom2 = 11,
+ Custom3 = 12,
+ Custom4 = 13,
+ Custom5 = 14
+}
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_SetUnits()
--- Creates a array of units in a party or raid.
--------------------------------------------------------------------------------------------------------------------------------------
-
-function SMARTBUFF_SetUnits()
- --if (not isInit or not O.Toggle) then return; end
- if (InCombatLockdown()) then
- isSetUnits = true;
- return;
- end
- if (SmartBuffOptionsFrame:IsVisible()) then return; end
-
- local i = 0;
- local n = 0;
- local j = 0;
- local s = nil;
- local psg = 0;
- local b = false;
- local iBFA = SMARTBUFF_IsActiveBattlefield();
-
- if (iBFA > 0) then
- SMARTBUFF_CheckLocation();
- end
-
- -- player
- -- pet
- -- party1-4
- -- partypet1-4
- -- raid1-40
- -- raidpet1-40
-
- iGroupSetup = -1;
- if (IsInRaid()) then
- iGroupSetup = 3;
- elseif (GetNumSubgroupMembers() ~= 0) then
- iGroupSetup = 2;
- else
- iGroupSetup = 1;
- end
-
- if (iGroupSetup ~= iLastGroupSetup) then
- iLastGroupSetup = iGroupSetup;
- wipe(cBlacklist);
- wipe(cBuffTimer);
- if (SMARTBUFF_TEMPLATES[iGroupSetup] == nil) then
- SMARTBUFF_SetBuffs();
+-- Set the current template and create an array of units
+function SMARTBUFF_SetTemplate()
+ if (InCombatLockdown()) then return end
+ if (SmartBuffOptionsFrame:IsVisible()) then return end
+ local newTemplate = currentTemplate
+ if O.AutoSwitchTemplate then
+ newTemplate = SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Solo];
+ cDisableTrackSwitch = false; -- on unless otherwise changed
+ local name, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceID, instanceGroupSize, LfgDungeonID = GetInstanceInfo()
+ if IsInRaid() then
+ newTemplate = SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Raid];
+ elseif IsInGroup() then
+ newTemplate = SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Party];
end
- local tmp = SMARTBUFF_TEMPLATES[iGroupSetup];
- if (O.AutoSwitchTemplate and currentTemplate ~= tmp and iBFA == 0) then
- SMARTBUFF_AddMsg(SMARTBUFF_OFT_AUTOSWITCHTMP .. ": " .. currentTemplate .. " -> " .. tmp);
- currentTemplate = tmp;
- SMARTBUFF_SetBuffs();
+ -- check instance type (allows solo raid clearing, etc)
+ if instanceType == "raid" then
+ newTemplate = SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Raid];
+ cDisableTrackSwitch = true;
+ elseif instanceType == "party" then
+ newTemplate = SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Party];
+ cDisableTrackSwitch = true;
end
- SMARTBUFF_MiniGroup_Show();
- end
-
+ end
+ -- if autoswitch on instance change is enabled, load new instance template if any
+ local isRaidInstanceTemplate = false
+ if O.AutoSwitchTemplateInst then
+ local zone = GetRealZoneText()
+ local instances = Enum.MakeEnumFromTable(SMARTBUFF_INSTANCES);
+ local i = instances[zone]
+ if i and SMARTBUFF_TEMPLATES[i + Enum.SmartBuffGroup.Arena] then
+ newTemplate = SMARTBUFF_TEMPLATES[i + Enum.SmartBuffGroup.Arena]
+ isRaidInstanceTemplate = true
+ end
+ end
+ if currentTemplate ~= newTemplate then
+ SMARTBUFF_AddMsgD("Current tmpl: " .. currentTemplate or "nil" .. " - new tmpl: " .. newTemplate or "nil");
+ SMARTBUFF_AddMsg(SMARTBUFF_TITLE.." :: "..SMARTBUFF_OFT_AUTOSWITCHTMP .. ": " .. currentTemplate .. " -> " .. newTemplate);
+ end
+
+ currentTemplate = newTemplate;
+
+ SMARTBUFF_SetBuffs();
+ wipe(cBlacklist);
+ wipe(cBuffTimer);
wipe(cUnits);
wipe(cGroups);
cClassGroups = nil;
wipe(cAddUnitList);
wipe(cIgnoreUnitList);
- -- Raid Setup
- if (iGroupSetup == 3) then
+ -- Raid Setup, including smart instance templates
+ if currentTemplate == (SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Raid]) or isRaidInstanceTemplate then
cClassGroups = { };
- local name, server, rank, subgroup, level, class, classeng, zone, online, isDead, role;
+ local name, server, rank, subgroup, level, class, classeng, zone, online, isDead;
local sRUnit = nil;
-
+
j = 1;
for n = 1, maxRaid, 1 do
- -- GetRaidRosterInfo role returns "MAINTANK" or "MAINASSIST"
- name, rank, subgroup, level, class, classeng, zone, online, isDead, role = GetRaidRosterInfo(n);
+ name, rank, subgroup, level, class, classeng, zone, online, isDead = GetRaidRosterInfo(n);
if (name) then
- server = nil;
+ server = nil;
i = string.find(name, "-", 1, true);
if (i and i > 0) then
server = string.sub(name, i + 1);
@@ -904,15 +931,17 @@ function SMARTBUFF_SetUnits()
SMARTBUFF_AddMsgD(name .. ", " .. server);
end
sRUnit = "raid"..n;
-
- SMARTBUFF_AddUnitToClass("raid", n, role);
+
+ --SMARTBUFF_AddMsgD(name .. ", " .. sRUnit .. ", " .. UnitName(sRUnit));
+
+ SMARTBUFF_AddUnitToClass("raid", n);
SmartBuff_AddToUnitList(1, sRUnit, subgroup);
SmartBuff_AddToUnitList(2, sRUnit, subgroup);
-
+
if (name == sPlayerName and not server) then
psg = subgroup;
- end
-
+ end
+
if (O.ToggleGrp[subgroup]) then
s = "";
if (name == UnitName(sRUnit)) then
@@ -924,65 +953,42 @@ function SMARTBUFF_SetUnits()
j = j + 1;
end
end
- -- attempt to announce the addon version (if they have it)
- if online then SendSmartbuffVersion(name, sRUnit) end
end
end --end for
-
+
if (not b or B[CS()][currentTemplate].SelfFirst) then
SMARTBUFF_AddSoloSetup();
- iLastSubgroup = psg;
end
-
- if (iLastSubgroup ~= psg) then
- SMARTBUFF_AddMsgWarn(SMARTBUFF_TITLE .. ": " .. SMARTBUFF_MSG_SUBGROUP);
- if (O.ToggleSubGrpChanged) then
- O.ToggleGrp[psg] = true;
- if (SmartBuffOptionsFrame:IsVisible()) then
- SMARTBUFF_ShowSubGroupsOptions();
- else
- SMARTBUFF_OptionsFrame_Open();
- end
- end
- iLastSubgroup = psg;
- end
-
+
SMARTBUFF_AddMsgD("Raid Unit-Setup finished");
-
+
-- Party Setup
- elseif (iGroupSetup == 2) then
-
- cClassGroups = { };
+ elseif (currentTemplate == (SMARTBUFF_TEMPLATES[Enum.SmartBuffGroup.Party])) then
+ cClassGroups = { };
if (B[CS()][currentTemplate].SelfFirst) then
SMARTBUFF_AddSoloSetup();
- end
+ end
+
cGroups[1] = { };
cGroups[1][0] = "player";
- SMARTBUFF_AddUnitToClass("player", 0, nil);
+ SMARTBUFF_AddUnitToClass("player", 0);
for j = 1, 4, 1 do
cGroups[1][j] = "party"..j;
- SMARTBUFF_AddUnitToClass("party", j, nil);
+ SMARTBUFF_AddUnitToClass("party", j);
SmartBuff_AddToUnitList(1, "party"..j, 1);
SmartBuff_AddToUnitList(2, "party"..j, 1);
- name, _, _, _, _, _, _, online, _, _ = GetRaidRosterInfo(j);
- if name and online then SendSmartbuffVersion(name, "party") end
end
SMARTBUFF_AddMsgD("Party Unit-Setup finished");
-
-- Solo Setup
- else
+ else
SMARTBUFF_AddSoloSetup();
SMARTBUFF_AddMsgD("Solo Unit-Setup finished");
end
-
- collectgarbage();
+ --collectgarbage();
end
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_AddUnitToClass --------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
-function SMARTBUFF_AddUnitToClass(unit, i, proll)
+function SMARTBUFF_AddUnitToClass(unit, i)
local u = unit;
local up = "pet";
if (unit ~= "player") then
@@ -995,42 +1001,13 @@ function SMARTBUFF_AddUnitToClass(unit, i, proll)
end
cUnits[1][i] = u;
SMARTBUFF_AddMsgD("Unit added: " .. UnitName(u) .. ", " .. u);
-
local _, uc = UnitClass(u);
if (uc and not cClassGroups[uc]) then
cClassGroups[uc] = { };
- else
- if u and uc then
- cClassGroups[uc][i] = u;
- end
end
-
- if uc and proll == "MAINTANK" then
- if (not cClassGroups["TANK"]) then
- cClassGroups["TANK"] = { };
- end
- cClassGroups["TANK"][i] = u;
- end;
-
- if (uc and uc == "HUNTER") then
- if (not cClassGroups["HPET"]) then
- cClassGroups["HPET"] = { };
- end
- cClassGroups["HPET"][i] = up;
-
- elseif (uc and uc == "DEATHKNIGHT") then
- if (not cClassGroups["DKPET"]) then
- cClassGroups["DKPET"] = { };
- end
- cClassGroups["DKPET"][i] = up;
-
- elseif (uc and (uc == "WARLOCK" or uc == "MAGE")) then
- if (not cClassGroups["WPET"]) then
- cClassGroups["WPET"] = { };
- end
- cClassGroups["WPET"][i] = up;
+ if (uc) then
+ cClassGroups[uc][i] = u;
end
-
end
end
@@ -1039,127 +1016,103 @@ function SMARTBUFF_AddSoloSetup()
cGroups[0][0] = "player";
cUnits[0] = { };
cUnits[0][0] = "player";
- if (sPlayerClass == "HUNTER" or sPlayerClass == "WARLOCK" or sPlayerClass == "MAGE") then cGroups[0][1] = "pet"; end
+ if (sPlayerClass == "HUNTER" or sPlayerClass == "WARLOCK" or sPlayerClass == "DEATHKNIGHT" or sPlayerClass == "MAGE") then cGroups[0][1] = "pet"; end
if (B[CS()][currentTemplate] and B[CS()][currentTemplate].SelfFirst) then
if (not cClassGroups) then
cClassGroups = { };
- end
+ end
cClassGroups[0] = { };
cClassGroups[0][0] = "player";
end
end
-
-- END SMARTBUFF_SetUnits
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_GetSpellID
--- Read available spells / abilities from spell book including spellid's
--------------------------------------------------------------------------------------------------------------------------------------
+-- Get Spell ID from spellbook
function SMARTBUFF_GetSpellID(spellname)
-
- if (spellname) then spellname = string.lower(spellname); else return nil; end
-
- local i = 0;
- local nSpells = 0;
- local id = nil;
+ local i, id = 1, nil;
local spellN, spellId, skillType;
-
- -- Get number of spells
- for i = 1, GetNumSpellTabs() do
- local _, _, _, n = GetSpellTabInfo(i);
- nSpells = nSpells + n;
- end
-
- i = 0;
- while (i < nSpells) do
- i = i + 1;
+ if (spellname) then
+ spellname = string.lower(spellname);
+ else
+ return nil;
+ end
+ while GetSpellBookItemName(i, BOOKTYPE_SPELL) do
spellN = GetSpellBookItemName(i, BOOKTYPE_SPELL);
skillType, spellId = GetSpellBookItemInfo(i, BOOKTYPE_SPELL);
-
if (skillType == "FLYOUT") then
for j = 1, GetNumFlyouts() do
local fid = GetFlyoutID(j);
local name, description, numSlots, isKnown = GetFlyoutInfo(fid)
- if (isKnown) then
+ if (isKnown) then
for s = 1, numSlots do
- local flySpellID, overrideSpellID, isKnown, spellN, slotSpecID = GetFlyoutSlotInfo(fid, s);
- if (isKnown and string.lower(spellN) == spellname) then
- return flySpellID;
- end
- end
- end
- end
+ local flySpellID, overrideSpellID, isKnown, spellN, slotSpecID = GetFlyoutSlotInfo(fid, s);
+ if (isKnown and string.lower(spellN) == spellname) then
+ return flySpellID;
+ end
+ end
+ end
+ end
end
-
if (spellN ~= nil and string.lower(spellN) == spellname) then
id = spellId;
break;
end
+ i = i + 1;
end
-
if (id) then
if (IsPassiveSpell(id) or skillType == "FUTURESPELL" or not IsSpellKnown(id)) then
id = nil;
i = nil;
- end
+ end
end
-
return id, i;
end
+-- END SMARTBUFF_GetSpellID
-
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_SetBuffs()
--- Setup the buff array
--------------------------------------------------------------------------------------------------------------------------------------
+-- Set the buff array
function SMARTBUFF_SetBuffs()
-
if (B == nil) then return; end
-
+
local n = 1;
- local buff = nil;
+ local buff = nil;
local ct = currentTemplate;
-
+
if (B[CS()] == nil) then
B[CS()] = { };
end
-
+
SMARTBUFF_InitItemList();
SMARTBUFF_InitSpellList();
-
+
if (B[CS()][ct] == nil) then
B[CS()][ct] = { };
B[CS()][ct].SelfFirst = false;
end
-
- if (B[CS()][ct].GrpBuffSize == nil) then
- B[CS()][ct].GrpBuffSize = 3;
- end
-
+
wipe(cBuffs);
wipe(cBuffIndex);
numBuffs = 0;
-
+
for _, buff in pairs(SMARTBUFF_BUFFLIST) do
n = SMARTBUFF_SetBuff(buff, n, true);
- end
+ end
for _, buff in pairs(SMARTBUFF_WEAPON) do
n = SMARTBUFF_SetBuff(buff, n);
- end
+ end
for _, buff in pairs(SMARTBUFF_RACIAL) do
n = SMARTBUFF_SetBuff(buff, n);
end
-
+
for _, buff in pairs(SMARTBUFF_TRACKING) do
n = SMARTBUFF_SetBuff(buff, n);
end
-
- for _, buff in pairs(SMARTBUFF_POTION) do
+
+ for _, buff in pairs(SMARTBUFF_POTION) do
n = SMARTBUFF_SetBuff(buff, n);
- end
+ end
for _, buff in pairs(SMARTBUFF_SCROLL) do
n = SMARTBUFF_SetBuff(buff, n);
@@ -1168,100 +1121,102 @@ function SMARTBUFF_SetBuffs()
for _, buff in pairs(SMARTBUFF_FOOD) do
n = SMARTBUFF_SetBuff(buff, n);
end
-
+
wipe(cBuffsCombat);
SMARTBUFF_SetInCombatBuffs();
-
+
InitBuffOrder();
-
+
numBuffs = n - 1;
isSetBuffs = false;
end
-
--------------------------------------------------------------------------------------------------------------------------------------
--- SMARTBUFF_SetBuff
--------------------------------------------------------------------------------------------------------------------------------------
function SMARTBUFF_SetBuff(buff, i, ia)
-
- if (buff == nil or buff[1] == nil or i > maxScrollButtons) then return i; end
-
+ if (buff == nil or buff[1] == nil) then return i; end
cBuffs[i] = nil;
- cBuffs[i] = { };
+ cBuffs[i] = { };
cBuffs[i].BuffS = buff[1];
cBuffs[i].DurationS = ceil(buff[2] * 60);
cBuffs[i].Type = buff[3];
- cBuffs[i].CanCharge = false;
+ cBuffs[i].CanCharge = false;
- if (SMARTBUFF_IsSpell(cBuffs[i].Type) or cBuffs[i].Type == SMARTBUFF_CONST_TRACK) then
+ if (SMARTBUFF_IsSpell(cBuffs[i].Type)) then
cBuffs[i].IDS, cBuffs[i].BookID = SMARTBUFF_GetSpellID(cBuffs[i].BuffS);
end
-
- if (cBuffs[i].IDS == nil and not(SMARTBUFF_IsItem(cBuffs[i].Type))) then
+ if (cBuffs[i].IDS == nil and not(SMARTBUFF_IsItem(cBuffs[i].Type) or cBuffs[i].Type == SMARTBUFF_CONST_TRACK)) then
cBuffs[i] = nil;
return i;
end
if (buff[4] ~= nil) then cBuffs[i].LevelsS = buff[4] else cBuffs[i].LevelsS = nil end
if (buff[5] ~= nil) then cBuffs[i].Params = buff[5] else cBuffs[i].Params = SG.NIL end
-
+ cBuffs[i].Links = buff[6];
+ cBuffs[i].Chain = buff[7];
if (cBuffs[i].IDS ~= nil) then
cBuffs[i].IconS = GetSpellTexture(cBuffs[i].BuffS);
else
if (cBuffs[i].Type == SMARTBUFF_CONST_TRACK) then
-
-
- elseif (cBuffs[i].Type == SMARTBUFF_CONST_ITEMGROUP) then
+ local b = false;
+ for n = 1, C_Minimap.GetNumTrackingTypes() do
+ local trackN, trackT, trackA, trackC = C_Minimap.GetTrackingInfo(n);
+ if (trackN ~= nil) then
+ if (trackN == cBuffs[i].BuffS) then
+ b = true;
+ cBuffs[i].IDS = nil;
+ cBuffs[i].IconS = trackT;
+ end
+ end
+ end
+ if (not b) then
+ cBuffs[i] = nil;
+ return i;
+ end
+ elseif (ia or cBuffs[i].Type == SMARTBUFF_CONST_ITEMGROUP) then
local _, _, _, _, minLevel, _, _, _, _, texture = GetItemInfo(cBuffs[i].BuffS);
if (not IsMinLevel(minLevel)) then
cBuffs[i] = nil;
- return i;
+ return i;
end
cBuffs[i].IconS = texture;
-
else
- local itemsName, _, _, _, minLevel = GetItemInfo(cBuffs[i].BuffS);
+ local _, _, _, _, minLevel = GetItemInfo(cBuffs[i].BuffS);
if (not IsMinLevel(minLevel)) then
cBuffs[i] = nil;
- return i;
+ return i;
end
-
local _, _, count, texture = SMARTBUFF_FindItem(cBuffs[i].BuffS, cBuffs[i].Chain);
- if (count <= 0) then
+
+ if count then
+ if (count <= 0) then
+ cBuffs[i] = nil;
+ return i;
+ end
+ else
cBuffs[i] = nil;
return i;
- else
--- print("Found: "..cBuffs[i].BuffS..", count: "..count)
- end
+ end
cBuffs[i].IconS = texture;
end
end
-
- cBuffs[i].Links = buff[6];
- cBuffs[i].Chain = buff[7];
- cBuffs[i].BuffG = buff[8];
- cBuffs[i].IDG = SMARTBUFF_GetSpellID(cBuffs[i].BuffG);
- if (cBuffs[i].IDG ~= nil) then
+ SMARTBUFF_AddMsgD("Add "..buff[1]);
+
+ cBuffs[i].BuffG = nil; --buff[6]; -- Disabled for Cataclysm
+ cBuffs[i].IDG = nil; --SMARTBUFF_GetSpellID(cBuffs[i].BuffG);
+ if (cBuffs[i].IDG ~= nil) then
cBuffs[i].IconG = GetSpellTexture(cBuffs[i].BuffG);
else
cBuffs[i].IconG = nil;
end
- if (buff[9] ~= nil) then cBuffs[i].DurationG = ceil(buff[9] * 60); else cBuffs[i].DurationG = nil; end
- if (buff[10] ~= nil) then cBuffs[i].LevelsG = buff[10]; else cBuffs[i].LevelsG = nil; end
- if (buff[11] ~= nil) then cBuffs[i].ReagentG = buff[11]; else cBuffs[i].ReagentG = nil; end
-
cBuffIndex[cBuffs[i].BuffS] = i;
if (cBuffs[i].IDG ~= nil) then
cBuffIndex[cBuffs[i].BuffG] = i;
end
-
InitBuffSettings(cBuffs[i]);
-
+
return i + 1;
end
-
function SMARTBUFF_SetInCombatBuffs()
local ct = currentTemplate;
if (ct == nil or B[CS()] == nil or B[CS()][ct] == nil) then
@@ -1284,10 +1239,12 @@ function SMARTBUFF_SetInCombatBuffs()
end
-- END SMARTBUFF_SetBuffs
+
function SMARTBUFF_IsTalentFrameVisible()
return PlayerTalentFrame and PlayerTalentFrame:IsVisible();
end
+
-- Main Check functions
function SMARTBUFF_PreCheck(mode, force)
if (not isInit) then return false end
@@ -1302,62 +1259,70 @@ function SMARTBUFF_PreCheck(mode, force)
end
return false;
end
-
+
if (mode == 1 and not force) then
if ((GetTime() - tLastCheck) < O.AutoTimer) then
return false;
end
end
+ tLastCheck = GetTime();
+
+ -- If buffs can't casted, hide UI elements
+ if (UnitInVehicle("player") or UnitHasVehicleUI("player")) then
+ if (not InCombatLockdown() and SmartBuff_KeyButton:IsVisible()) then
+ SmartBuff_KeyButton:Hide();
+ end
+ return false;
+ else
+ SMARTBUFF_ShowSAButton();
+ end
- tLastCheck = GetTime();
- SMARTBUFF_ShowSAButton();
- --end
-
SMARTBUFF_SetButtonTexture(SmartBuff_KeyButton, imgSB);
- if (SmartBuffOptionsFrame:IsVisible()) then return false; end
-
+ if (SmartBuffOptionsFrame:IsVisible()) then return false; end
+
-- check for mount-spells
- if (sPlayerClass == "PALADIN" and (IsMounted() or IsFlying()) and not O.WarnWhileMounted and not SMARTBUFF_CheckBuff("player", SMARTBUFF_CRUSADERAURA)) then
+ if (sPlayerClass == "PALADIN" and (IsMounted() or IsFlying()) and not SMARTBUFF_CheckBuff("player", SMARTBUFF_CRUSADERAURA)) then
+ return true;
+ elseif (sPlayerClass == "DEATHKNIGHT" and IsMounted() and not SMARTBUFF_CheckBuff("player", SMARTBUFF_PATHOFFROST)) then
return true;
end
-
- if ((mode == 1 and not O.ToggleAuto) or not O.WarnWhileMounted and (IsMounted() or IsFlying() or LootFrame:IsVisible())
+ if ((mode == 1 and not O.ToggleAuto) or IsMounted() or IsFlying() or LootFrame:IsVisible()
or UnitOnTaxi("player") or UnitIsDeadOrGhost("player") or UnitIsCorpse("player")
or (mode ~= 1 and (SMARTBUFF_IsPicnic("player") or SMARTBUFF_IsFishing("player")))
or (UnitInVehicle("player") or UnitHasVehicleUI("player"))
or (not O.BuffInCities and IsResting() and not UnitIsPVP("player"))) then
-
+
if (UnitIsDeadOrGhost("player")) then
SMARTBUFF_CheckBuffTimers();
- end
-
+ end
+
return false;
end
-
if (UnitAffectingCombat("player")) then
isCombat = true;
else
isCombat = false;
end
-
+
if (not isCombat and isSetBuffs) then
SMARTBUFF_SetBuffs();
isSyncReq = true;
- end
-
+ end
+
sMsgWarning = "";
isFirstError = true;
-
+
return true;
end
+
-- Bufftimer check functions
function SMARTBUFF_CheckBuffTimers()
local n = 0;
- local ct = currentTemplate;
+ local ct = currentTemplate;
local cGrp = cUnits;
for subgroup in pairs(cGrp) do
- n = 0;
+ n = 0;
if (cGrp[subgroup] ~= nil) then
for _, unit in pairs(cGrp[subgroup]) do
if (unit) then
@@ -1382,27 +1347,27 @@ function SMARTBUFF_CheckUnitBuffTimers(unit)
local fd = nil;
if (uc == "HUNTER") then
fd = SMARTBUFF_IsFeignDeath(unit);
- end
+ end
if (not fd) then
if (cBuffTimer[unit]) then
cBuffTimer[unit] = nil;
- SMARTBUFF_AddMsgD(UnitName(unit) .. ": unit timer reset");
+ SMARTBUFF_AddMsgD(UnitName(unit) .. ": unit timer reseted");
end
if (cBuffTimer[uc]) then
cBuffTimer[uc] = nil;
- SMARTBUFF_AddMsgD(uc .. ": class timer reset");
+ SMARTBUFF_AddMsgD(uc .. ": class timer reseted");
end
return true;
end
end
end
-
-- END SMARTBUFF_CheckUnitBuffTimers
+
-- Reset the buff timers and set them to running out soon
function SMARTBUFF_ResetBuffTimers()
if (not isInit) then return; end
-
+
local ct = currentTemplate;
local t = GetTime();
local rbTime = 0;
@@ -1414,12 +1379,12 @@ function SMARTBUFF_ResetBuffTimers()
local unit = nil;
local obj = nil;
local uc = nil;
-
+
local cGrp = cGroups;
for subgroup in pairs(cGrp) do
- n = 0;
+ n = 0;
if (cGrp[subgroup] ~= nil) then
-
+
for _, unit in pairs(cGrp[subgroup]) do
if (unit and UnitExists(unit) and UnitIsConnected(unit) and UnitIsFriend("player", unit) and UnitIsPlayer(unit) and not UnitIsDeadOrGhost(unit)) then
_, uc = UnitClass(unit);
@@ -1429,25 +1394,25 @@ function SMARTBUFF_ResetBuffTimers()
buff = nil;
rbTime = 0;
buffS = cBuffs[i].BuffS;
-
+
rbTime = B[CS()][ct][buffS].RBTime;
if (rbTime <= 0) then
rbTime = O.RebuffTimer;
end
-
+
if (cBuffs[i].BuffG and B[CS()][ct][buffS].EnableG and cBuffs[i].IDG ~= nil and cBuffs[i].DurationG > 0) then
d = cBuffs[i].DurationG;
buff = cBuffs[i].BuffG;
obj = subgroup;
end
-
+
if (d > 0 and buff) then
if (not cBuffTimer[obj]) then
cBuffTimer[obj] = { };
end
cBuffTimer[obj][buff] = t - d + rbTime - 1;
- end
-
+ end
+
buff = nil;
if (buffS and B[CS()][ct][buffS].EnableS and cBuffs[i].IDS ~= nil and cBuffs[i].DurationS > 0
and uc and B[CS()][ct][buffS][uc]) then
@@ -1455,27 +1420,27 @@ function SMARTBUFF_ResetBuffTimers()
buff = buffS;
obj = unit;
end
-
+
if (d > 0 and buff) then
if (not cBuffTimer[obj]) then
cBuffTimer[obj] = { };
end
cBuffTimer[obj][buff] = t - d + rbTime - 1;
end
-
+
i = i + 1;
end
+
end
end
end
end
- --isAuraChanged = true;
SMARTBUFF_Check(1, true);
end
function SMARTBUFF_ShowBuffTimers()
if (not isInit) then return; end
-
+
local ct = currentTemplate;
local t = GetTime();
local rbTime = 0;
@@ -1483,11 +1448,11 @@ function SMARTBUFF_ShowBuffTimers()
local d = 0;
local tl = 0;
local buffS = nil;
-
+
for unit in pairs(cBuffTimer) do
for buff in pairs(cBuffTimer[unit]) do
- if (unit and buff and cBuffTimer[unit][buff]) then
-
+ if (unit and buff and cBuffTimer[unit][buff]) then
+
d = -1;
buffS = nil;
if (cBuffIndex[buff]) then
@@ -1501,7 +1466,7 @@ function SMARTBUFF_ShowBuffTimers()
end
i = i + 1;
end
-
+
if (buffS and B[CS()][ct][buffS] ~= nil) then
if (d > 0) then
rbTime = B[CS()][ct][buffS].RBTime;
@@ -1509,7 +1474,7 @@ function SMARTBUFF_ShowBuffTimers()
rbTime = O.RebuffTimer;
end
tl = cBuffTimer[unit][buff] + d - t;
- if (tl >= 0) then
+ if (tl >= 0) then
local s = "";
if (string.find(unit, "^party") or string.find(unit, "^raid") or string.find(unit, "^player") or string.find(unit, "^pet")) then
local un = UnitName(unit);
@@ -1524,45 +1489,39 @@ function SMARTBUFF_ShowBuffTimers()
else
s = "Class " .. unit;
end
- -- SMARTBUFF_AddMsg(string.format("%s: %s, time left: %.0f, rebuff time: %.0f", s, buff, tl, rbTime));
+ SMARTBUFF_AddMsg(string.format("%s: %s, time left: %.0f, rebuff time: %.0f", s, buff, tl, rbTime));
else
cBuffTimer[unit][buff] = nil;
end
else
- --SMARTBUFF_AddMsgD("Removed: " .. buff);
cBuffTimer[unit][buff] = nil;
end
end
-
+
end
end
end
-
+
end
-- END SMARTBUFF_ResetBuffTimers
+
-- Synchronize the internal buff timers with the UI timers
function SMARTBUFF_SyncBuffTimers()
if (not isInit or isSync or isSetBuffs or SMARTBUFF_IsTalentFrameVisible()) then return; end
isSync = true;
tSync = GetTime();
-
- local ct = currentTemplate;
+
+ local ct = currentTemplate;
local rbTime = 0;
local i = 0;
local buffS = nil;
local unit = nil;
local uc = nil;
-
- local cGrp = nil;
- if (sPlayerClass == "PALADIN" and cClassGroups) then
- cGrp = cClassGroups;
- else
- cGrp = cGroups;
- end
-
+
+ local cGrp = cGroups;
for subgroup in pairs(cGrp) do
- n = 0;
+ n = 0;
if (cGrp[subgroup] ~= nil) then
for _, unit in pairs(cGrp[subgroup]) do
if (unit and UnitExists(unit) and UnitIsConnected(unit) and UnitIsFriend("player", unit) and UnitIsPlayer(unit) and not UnitIsDeadOrGhost(unit)) then
@@ -1571,46 +1530,35 @@ function SMARTBUFF_SyncBuffTimers()
while (cBuffs[i] and cBuffs[i].BuffS) do
rbTime = 0;
buffS = cBuffs[i].BuffS;
-
+
+ -- TOCHECK
rbTime = B[CS()][ct][buffS].RBTime;
if (rbTime <= 0) then
rbTime = O.RebuffTimer;
end
-
- if (cBuffs[i].BuffG and B[CS()][ct][buffS].EnableG and cBuffs[i].IDG ~= nil and cBuffs[i].DurationG > 0) then
- SMARTBUFF_SyncBuffTimer(unit, subgroup, cBuffs[i], true);
- end
-
+
if (buffS and B[CS()][ct][buffS].EnableS and cBuffs[i].IDS ~= nil and cBuffs[i].DurationS > 0) then
if (cBuffs[i].Type ~= SMARTBUFF_CONST_SELF or (cBuffs[i].Type == SMARTBUFF_CONST_SELF and SMARTBUFF_IsPlayer(unit))) then
- SMARTBUFF_SyncBuffTimer(unit, unit, cBuffs[i], false);
+ SMARTBUFF_SyncBuffTimer(unit, unit, cBuffs[i]);
end
end
-
+
i = i + 1;
end -- END while
end
end -- END for
end
end -- END for
-
+
isSync = false;
isSyncReq = false;
end
-function SMARTBUFF_SyncBuffTimer(unit, grp, cBuff, isGrpBuff)
+function SMARTBUFF_SyncBuffTimer(unit, grp, cBuff)
if (not unit or not grp or not cBuff) then return end
-
- local buff, d;
- if (isGrpBuff) then
- d = cBuff.DurationG;
- buff = cBuff.BuffG;
- else
- d = cBuff.DurationS;
- buff = cBuff.BuffS;
- end
-
+ local d = cBuff.DurationS;
+ local buff = cBuff.BuffS;
if (d and d > 0 and buff) then
local t = GetTime();
local ret, _, _, timeleft = SMARTBUFF_CheckUnitBuffs(unit, buff, cBuff.Type, cBuff.Links, cBuff.Chain);
@@ -1640,11 +1588,11 @@ function SMARTBUFF_IsShapeshifted()
local i;
for i = 1, GetNumShapeshiftForms(), 1 do
local icon, active, castable, spellId = GetShapeshiftFormInfo(i);
- local name = GetSpellInfo(spellId);
+ local name = GetSpellInfo(spellId);
if (active and castable and name ~= SMARTBUFF_DRUID_TREANT) then
return true, name;
end
- end
+ end
end
return false, nil;
end
@@ -1654,9 +1602,7 @@ end
local IsChecking = false;
function SMARTBUFF_Check(mode, force)
if (IsChecking or not SMARTBUFF_PreCheck(mode, force)) then return; end
-
IsChecking = true;
-
local ct = currentTemplate;
local unit = nil;
local units = nil;
@@ -1678,255 +1624,81 @@ function SMARTBUFF_Check(mode, force)
local rank;
local reagent;
local nGlobal = 0;
- local tmpDisabled = { };
-
- local buffs = nil;
- if (SMARTBUFF_Buffs[CS()]) then
- buffs = SMARTBUFF_Buffs[CS()][ct];
- end
-
- SMARTBUFF_checkBlacklist();
-
+
+ SMARTBUFF_checkBlacklist();
+
-- 1. check in combat buffs
if (InCombatLockdown()) then -- and O.InCombat
for spell in pairs(cBuffsCombat) do
if (spell) then
local ret, actionType, spellName, slot, unit, buffType = SMARTBUFF_BuffUnit("player", 0, mode, spell)
+ SMARTBUFF_AddMsgD("Check combat spell: " .. spell .. ", ret = " .. ret);
if (ret and ret == 0) then
IsChecking = false;
return;
end
end
- end
+ end
end
-
+
-- 2. buff target, if enabled
if ((mode == 0 or mode == 5) and O.BuffTarget) then
- local actionType, spellName, slot, buffType, rankText;
- i, actionType, spellName, slot, _, buffType, rankText = SMARTBUFF_BuffUnit("target", 0, mode);
+ local actionType, spellName, slot, buffType;
+ i, actionType, spellName, slot, _, buffType = SMARTBUFF_BuffUnit("target", 0, mode);
if (i <= 1) then
if (i == 0) then
--tLastCheck = GetTime() - O.AutoTimer + GlobalCd;
end
IsChecking = false;
- return i, actionType, spellName, slot, "target", buffType, rankText;
- end
- end
-
+ return i, actionType, spellName, slot, "target", buffType;
+ end
+ end
+
-- 3. check groups
- local cGrp = nil;
- local cOrd = nil;
- cGrp = cGroups;
- cOrd = cOrderGrp;
-
- isMounted = (IsMounted() or IsFlying()) and not O.WarnWhileMounted;
+ local cGrp = cGroups;
+ local cOrd = cOrderGrp;
+ isMounted = IsMounted() or IsFlying();
for _, subgroup in pairs(cOrd) do
if (cGrp[subgroup] ~= nil or (type(subgroup) == "number" and subgroup == 1)) then
-
+
if (cGrp[subgroup] ~= nil) then
units = cGrp[subgroup];
else
- units = nil;
- end
-
- if (cUnits and type(subgroup) == "number" and subgroup == 1) then
- unitsGrp = cUnits[1];
- else
- unitsGrp = units;
- end
-
- -- check group buff
- if (buffs and unitsGrp and not isMounted) then
-
- i = 1;
- local rbTime = 0;
- while (cBuffs[i] and cBuffs[i].BuffS) do
- local cBuff = cBuffs[i];
- local buffnS = cBuff.BuffS;
- local buffnG = cBuff.BuffG;
- local bs = buffs[buffnS];
-
- if (buffnG and tmpDisabled[buffnG] == nil and bs and bs.EnableG and cBuff.IDG ~= nil
- and ((isCombat and bs.CIn) or (not isCombat and bs.COut)) and IsPowerLimitOk(bs)
- --and UnitMana("player") >= bs.ManaLimit
- and (sPlayerClass ~= "PALADIN" or not cClassGroups or (sPlayerClass == "PALADIN" and (bs[subgroup] or (type(subgroup) == "number" and subgroup == 0))))) then
-
- local tmpUnits = { };
- local btl = 9999;
- local bExp = false;
- local target = "";
-
- if (sPlayerClass == "PALADIN" and cClassGroups) then
- for _, unit in pairs(units) do
- local u = UnitClass(unit);
- if (u) then
- target = SMARTBUFF_MSG_CLASS .. " " .. u;
- SMARTBUFF_AddMsgD(target);
- break;
- end
- end
- else
- --target = SMARTBUFF_MSG_GROUP .. " " .. subgroup;
- target = SMARTBUFF_MSG_GROUP;
- end
-
- if (type(subgroup) == "number" and subgroup == 0) then
- target = sPlayerName;
- end
-
- rbTime = bs.RBTime;
- if (rbTime <= 0) then
- rbTime = SMARTBUFF_Options.RebuffTimer;
- end
-
- if (cBuffTimer[subgroup] ~= nil and cBuffTimer[subgroup][buffnG] ~= nil) then
- btl = cBuff.DurationG - (GetTime() - cBuffTimer[subgroup][buffnG]);
- if (rbTime > 0 and rbTime >= btl) then
- bExp = true;
- if (mode == 1) then
- -- clean up buff timer, if expired
- if (btl < 0) then
- cBuffTimer[subgroup][buffnG] = nil;
- tLastCheck = GetTime() - SMARTBUFF_Options.AutoTimer + 0.5;
- return;
- end
- end
- end
- end
-
- SMARTBUFF_AddMsgD("Checking0 " .. buffnG);
- n = 0;
- m = 0;
- j = 0;
- uLevelL = 100;
- uLevelU = 0;
- unitL = nil;
- unitU = nil;
- unitB = nil;
- for _, unit in pairs(unitsGrp) do
- j = j + 1;
- SMARTBUFF_AddMsgD("Checking1 " .. buffnG .. " " .. unit);
- if (unit and UnitIsPlayer(unit) and not SMARTBUFF_IsInList(unit, UnitName(unit), bs.IgnoreList)) then
- SMARTBUFF_AddMsgD("Checking2 " .. buffnG .. " " .. unit);
- n = n + 1;
- if (UnitExists(unit) and not UnitIsDeadOrGhost(unit) and not UnitIsCorpse(unit) and UnitIsConnected(unit) and UnitIsVisible(unit) and not UnitOnTaxi(unit) and UnitInRange(unit) == 1) then
- tmpUnits[n] = unit;
- uLevel = UnitLevel(unit);
- if (uLevel < uLevelL) then
- uLevelL = uLevel;
- unitL = unit;
- end
- if (uLevel > uLevelU) then
- uLevelU = uLevel;
- unitU = unit;
- unitB = unit;
- end
- local ret, idx, buffname;
- ret, idx, buffname = SMARTBUFF_CheckUnitBuffs(unit, nil, buffnG);
- if (ret ~= nil or bExp) then
- m = m + 1;
- end
- end
- end
-
- end -- end for units
-
- if (mode == 1 and m >= buffs.GrpBuffSize and n >= buffs.GrpBuffSize) then
- SMARTBUFF_SetMissingBuffMessage(target, buffnG, false, 1, btl, bExp, false);
- SMARTBUFF_SetButtonTexture(SmartBuff_KeyButton, cBuff.IconG);
- return;
- end
-
- if (unitL ~= nil and unitU ~=nil and unitB ~= nil and cBuff.IDG ~= nil) then
- idU, rank = SMARTBUFF_CheckUnitLevel(unitU, cBuff.IDG, cBuff.LevelsG);
- idL, rank = SMARTBUFF_CheckUnitLevel(unitL, cBuff.IDG, cBuff.LevelsG);
-
- if (idL ~= nil and idU ~= nil and idL == idU and rank > 0 and m >= buffs.GrpBuffSize and n >= buffs.GrpBuffSize) then
-
- reagent = cBuff.ReagentG[rank];
- if (reagent and mode ~= 1) then
- rc = SMARTBUFF_CountReagent(reagent);
- if (rc > 0) then
- currentUnit = nil;
- currentSpell = nil;
-
- SMARTBUFF_AddMsgD("Buffing group (" .. unitB .. ") " .. subgroup .. ", " .. idU .. ", " .. j .. ", ");
- j = SMARTBUFF_doCast(unitB, idU, buffnG, nil, SMARTBUFF_CONST_ALL)
-
- if (j == 0) then
- SMARTBUFF_AddMsg(target .. ": " .. buffnG .. " " .. SMARTBUFF_MSG_BUFFED);
- SMARTBUFF_AddMsg(SMARTBUFF_MSG_STOCK .. " " .. reagent .. " = " .. (rc - 1));
-
- if (sPlayerClass == "PALADIN") then
- local _, uc = UnitClass(unitB);
- if (cBuffTimer[uc] == nil) then
- cBuffTimer[uc] = { };
- end
- cBuffTimer[uc][buffnG] = GetTime();
- else
- if (cBuffTimer[subgroup] == nil) then
- cBuffTimer[subgroup] = { };
- end
- cBuffTimer[subgroup][buffnG] = GetTime();
- end
-
- -- cleanup single buff timer
- for _, unit in pairs(tmpUnits) do
- if (cBuffTimer[unit] and cBuffTimer[unit][buffnS]) then
- cBuffTimer[unit][buffnS] = nil;
- end
- end
-
- --tLastCheck = GetTime() - SMARTBUFF_Options.AutoTimer + GlobalCd;
- return 0, SMARTBUFF_ACTION_SPELL, buffnG, -1, unitB, cBuff.Type;
- end
- else
- SMARTBUFF_AddMsgWarn(SMARTBUFF_MSG_NOREAGENT .. " " .. reagent .. "! " .. buffnG .. " " .. SMARTBUFF_MSG_DEACTIVATED);
- tmpDisabled[buffnG] = true;
- --tinsert(tmpDisabled, buffnG);
- --bs.EnableG = false;
- end
- elseif (reagent and mode == 1) then
- SMARTBUFF_SetMissingBuffMessage(target, buffnG, false, 1, btl, bExp, false);
- SMARTBUFF_SetButtonTexture(SmartBuff_KeyButton, cBuff.IconG);
- return;
- else
- --SMARTBUFF_AddMsgD("Reagent = nil");
- end
- end
- end
- end
-
- i = i + 1;
- end -- END while buffs
+ units = nil;
end
-
+
+ if (cUnits and type(subgroup) == "number" and subgroup == 1) then
+ unitsGrp = cUnits[1];
+ else
+ unitsGrp = units;
+ end
+
-- check buffs
if (units) then
for _, unit in pairs(units) do
if (isSetBuffs) then break; end
- if ((UnitInRange(unit) or unit == "player")) then -- unit range checking doesnt work with "player", and only party or raid units.
- local spellName, actionType, slot, buffType, rankText;
- i, actionType, spellName, slot, _, buffType, rankText = SMARTBUFF_BuffUnit(unit, subgroup, mode);
- if (i <= 1) then
- if (i == 0 and mode ~= 1) then
- --tLastCheck = GetTime() - O.AutoTimer + GlobalCd;
- if (actionType == SMARTBUFF_ACTION_ITEM) then
- --tLastCheck = tLastCheck + 2;
- end
- end
- IsChecking = false;
- return i, actionType, spellName, slot, unit, buffType, rankText;
+ SMARTBUFF_AddMsgD("Checking single unit = "..unit);
+ local spellName, actionType, slot, buffType;
+ i, actionType, spellName, slot, _, buffType = SMARTBUFF_BuffUnit(unit, subgroup, mode);
+
+ if (i <= 1) then
+ if (i == 0 and mode ~= 1) then
+ --tLastCheck = GetTime() - O.AutoTimer + GlobalCd;
+ if (actionType == SMARTBUFF_ACTION_ITEM) then
+ --tLastCheck = tLastCheck + 2;
end
- end
+ end
+ IsChecking = false;
+ return i, actionType, spellName, slot, unit, buffType;
+ end
end
end
-
+
end
end -- for groups
-
- if (mode == 0) then
+
+ if (mode == 0) then
if (sMsgWarning == "" or sMsgWarning == " ") then
SMARTBUFF_AddMsg(SMARTBUFF_MSG_NOTHINGTODO);
else
@@ -1934,7 +1706,6 @@ function SMARTBUFF_Check(mode, force)
sMsgWarning = "";
end
end
- --tLastCheck = GetTime();
IsChecking = false;
end
-- END SMARTBUFF_Check
@@ -1952,7 +1723,6 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
local uct = nil;
local ucf = nil;
local r;
- local rankText;
local i;
local bt = 0;
local cd = 0;
@@ -1968,35 +1738,27 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
local cBuff = nil;
local iId = nil;
local iSlot = -1;
-
+
if (UnitIsPVP("player")) then isPvP = true end
-
- SMARTBUFF_CheckUnitBuffTimers(unit);
-
- --SMARTBUFF_AddMsgD("Checking " .. unit);
-
- if (UnitExists(unit) and UnitIsFriend("player", unit) and not UnitIsDeadOrGhost(unit) and not UnitIsCorpse(unit)
- and UnitIsConnected(unit) and UnitIsVisible(unit) and not UnitOnTaxi(unit) and not cBlacklist[unit]
- and ((not UnitIsPVP(unit) and (not isPvP or O.BuffPvP)) or (UnitIsPVP(unit) and (isPvP or O.BuffPvP)))) then
- --and not SmartBuff_UnitIsIgnored(unit)
-
+
+ SMARTBUFF_CheckUnitBuffTimers(unit);
+
+ if (UnitExists(unit) and UnitIsFriend("player", unit) and not UnitIsDeadOrGhost(unit) and not UnitIsCorpse(unit) and (UnitInRange(unit) or unit == "player")
+ and UnitIsConnected(unit) and UnitIsVisible(unit) and not UnitOnTaxi(unit) and not cBlacklist[unit] and ((not UnitIsPVP(unit) and (not isPvP or O.BuffPvP))
+ or (UnitIsPVP(unit) and (isPvP or O.BuffPvP)))) then
+
_, uc = UnitClass(unit);
un = UnitName(unit);
ur = UnitGroupRolesAssigned(unit);
uct = UnitCreatureType(unit);
ucf = UnitCreatureFamily(unit);
if (uct == nil) then uct = ""; end
- if (ucf == nil) then ucf = ""; end
-
- -- debug
--- if (un) then SMARTBUFF_AddMsgD("Grp "..subgroup.." checking "..un.." ("..unit.."/"..uc.."/"..ur.."/"..uct.."/"..ucf..")", 0, 1, 0.5); end
+ if (ucf == nil) then ucf = ""; end
isShapeshifted, sShapename = SMARTBUFF_IsShapeshifted();
- --while (cBuffs[i] and cBuffs[i].BuffS) do
- for i, buffnS in pairs(B[CS()].Order) do
+ for i, buffnS in pairs(B[CS()].Order) do
if (isSetBuffs or SmartBuffOptionsFrame:IsVisible()) then break; end
cBuff = cBuffs[cBuffIndex[buffnS]];
- --buffnS = cBuff.BuffS;
bs = GetBuffSettings(buffnS);
bExpire = false;
handtype = "";
@@ -2005,103 +1767,154 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
bUsable = false;
iId = nil;
iSlot = -1;
-
- if (not cBuff or not bs) then bUsable = false end
+
if (cBuff and bs) then bUsable = bs.EnableS end
-
+
if (bUsable and spell and spell ~= buffnS) then
bUsable = false;
+ SMARTBUFF_AddMsgD("Exclusive check on " .. spell .. ", current spell = " .. buffnS);
end
-
if (bUsable and cBuff.Type == SMARTBUFF_CONST_SELF and not SMARTBUFF_IsPlayer(unit)) then bUsable = false end
if (bUsable and not cBuff.Type == SMARTBUFF_CONST_TRACK and not SMARTBUFF_IsItem(cBuff.Type) and not IsUsableSpell(buffnS)) then bUsable = false end
if (bUsable and bs.SelfNot and SMARTBUFF_IsPlayer(unit)) then bUsable = false end
if (bUsable and cBuff.Params == SG.CheckFishingPole and SMARTBUFF_IsFishingPoleEquiped()) then bUsable = false end
-
- -- Check for power threshold
- if (bUsable) then
- bUsable = IsPowerLimitOk(bs);
- end
-
+
-- Check for buffs which depends on a pet
if (bUsable and cBuff.Params == SG.CheckPet and UnitExists("pet")) then bUsable = false end
if (bUsable and cBuff.Params == SG.CheckPetNeeded and not UnitExists("pet")) then bUsable = false end
-
+
-- Check for mount auras
+ if (bUsable and (sPlayerClass == "PALADIN" or sPlayerClass == "DEATHKNIGHT")) then
isMounted = false;
- if (bUsable and sPlayerClass == "PALADIN") then
- isMounted = (IsMounted() or IsFlying()) and not O.WarnWhileMounted;
- if ((buffnS ~= SMARTBUFF_CRUSADERAURA and isMounted) or (buffnS == SMARTBUFF_CRUSADERAURA and not isMounted)) then
- bUsable = false;
- end
- end
+ if (sPlayerClass == "PALADIN") then
+ isMounted = IsMounted() or IsFlying();
+ if ((buffnS ~= SMARTBUFF_CRUSADERAURA and isMounted) or (buffnS == SMARTBUFF_CRUSADERAURA and not isMounted)) then
+ bUsable = false;
+ end
+ elseif (sPlayerClass == "DEATHKNIGHT") then
+ isMounted = IsMounted();
+ if (buffnS ~= SMARTBUFF_PATHOFFROST and isMounted) then
+ bUsable = false;
+ end
+ end
+ end
- -- check for hunter pet spawn and ignore call pet if its already active
- if (bUsable and sPlayerClass == "HUNTER") then
- if (buffnS == SMARTBUFF_CALLPET and IsPetActive()) then
- bUsable = false;
+ -- tracking switching, check if we are active and not disabled while in a raid.
+ if (bUsable and O.TrackSwitchActive and not cDisableTrackSwitch) and (buffnS == SMARTBUFF_FINDMINERALS or buffnS == SMARTBUFF_FINDHERBS or buffnS == SMARTBUFF_FINDFISH) then
+ SMARTBUFF_AddMsgD(buffnS..SMARTBUFF_TRACKSWITCHMSG)
+ bUsable = false;
+ end
+
+ -- check for mage conjured items
+ if (bUsable and sPlayerClass == "MAGE") then
+ local lookupData
+ if (buffnS == SMARTBUFF_CONJFOOD or buffnS == SMARTBUFF_CONJREFRESHMENT) then lookupData = ConjuredMageFood
+ elseif (buffnS == SMARTBUFF_CONJWATER or buffnS == SMARTBUFF_CONJREFRESHMENT) then lookupData = ConjuredMageWater
+ elseif buffnS == SMARTBUFF_CREATEMGEM then lookupData = ConjuredMageGems end
+ if lookupData then
+ for count, value in next, lookupData do
+ if value then
+ itemInfo = GetItemInfo(value)
+ if SMARTBUFF_CheckBagItem(itemInfo) then
+ bUsable = false;
+ end
+ end
+ end
end
- end
+ end
+
+ -- check for warlock conjured items
+ if (bUsable and sPlayerClass == "WARLOCK") then
+ local itemInfo, bag, slot, count, maxHealth, currentHealth, lookupData
+ itemInfo = GetItemInfo(6265) -- 6265 is id for soul shards
+ if SMARTBUFF_CheckBagItem(itemInfo) then -- only if we have soul shards
+ -- point to the correct data.
+ if buffnS == SMARTBUFF_CREATEHS then lookupData = ConjuredLockHealthStones
+ elseif buffnS == SMARTBUFF_CREATESOULS then lookupData = ConjuredLockSoulstones
+ elseif buffnS == SMARTBUFF_CREATESPELLS then lookupData = ConjuredLockSpellstones
+ elseif buffnS == SMARTBUFF_CREATEFIRES then lookupData = ConjuredLockFirestones end
+ if lookupData then
+ for count, value in next, lookupData do
+ if value then
+ itemInfo = GetItemInfo(value)
+ if SMARTBUFF_CheckBagItem(itemInfo) then
+ bUsable = false;
+ end
+ end
+ end
+ end
+ else
+ SMARTBUFF_AddMsgD(itemInfo.." is missing in bag, cannot continue.");
+ end
+ -- am i being prompted to use a healthstone,
+ -- check my health so im not spammed.
+ currentHealth = UnitHealth("player")
+ maxHealth = UnitHealthMax("player");
+ for count, value in next, ConjuredLockHealthStones do
+ if value then
+ _,itemInfo = GetItemInfo(value)
+ if buffnS == itemInfo and currentHealth == maxHealth then
+ bUsable = false;
+ end
+ end
+ end
+ end
- -- check if daily island buff is active
- if (bUsable and CheckForBuff(SMARTBUFF_KIRUSSOV) and (sPlayerClass == "PRIEST" or sPlayerClass == "MAGE")) then
- -- island buff is more powerful than the class buffs which prevents the addon moving past this.
- if (buffnS == SMARTBUFF_AI or buffnS == SMARTBUFF_ABRB1 or buffnS == SMARTBUFF_PWF or buffnS == SMARTBUFF_POFRB1) then
+ -- extra testing for revive pet on hunters,
+ -- only allow if the pet is actually dead
+ if (bUsable and sPlayerClass == "HUNTER") and buffnS == SMARTBUFF_REVIVEPET then
+ if not UnitIsDead("pet") then
+ SMARTBUFF_AddMsgD("Pet appears to be very much alive!");
bUsable = false;
+ else
+ SMARTBUFF_AddMsgD("Pet appears to be dead, revive available.");
end
end
- -- check for Fel Intelligence
- if (bUsable and CheckForBuff(SMARTBUFF_FELINTELLIGENCE) and (sPlayerClass == "PRIEST" or sPlayerClass == "MAGE")) then
- if (buffnS == SMARTBUFF_AI or buffnS == SMARTBUFF_ABRB1 or buffnS == SMARTBUFF_DS or buffnS == SMARTBUFF_POSRB1) then
- bUsable = false;
- end
- end
if (bUsable and not (cBuff.Type == SMARTBUFF_CONST_TRACK or SMARTBUFF_IsItem(cBuff.Type))) then
-- check if you have enough mana/rage/energy to cast
local isUsable, notEnoughMana = IsUsableSpell(buffnS);
if (notEnoughMana) then
bUsable = false;
- --SMARTBUFF_AddMsgD("Buff " .. cBuff.BuffS .. ", not enough mana!");
+ SMARTBUFF_AddMsgD("Buff " .. cBuff.BuffS .. ", not enough mana!");
elseif (mode ~= 1 and isUsable == nil and buffnS ~= SMARTBUFF_PWS) then
bUsable = false;
- --SMARTBUFF_AddMsgD("Buff " .. cBuff.BuffS .. " is not usable!");
+ SMARTBUFF_AddMsgD("Buff " .. cBuff.BuffS .. " is not usable!");
end
- end
-
+ end
+
if (bUsable and bs.EnableS and (cBuff.IDS ~= nil or SMARTBUFF_IsItem(cBuff.Type) or cBuff.Type == SMARTBUFF_CONST_TRACK)
and ((mode ~= 1 and ((isCombat and bs.CIn) or (not isCombat and bs.COut)))
- or (mode == 1 and bs.Reminder and ((not isCombat and bs.COut)
- or (isCombat and (bs.CIn or O.ToggleAutoCombat)))))) then
-
- --print("Check: "..buffnS)
-
+ or (mode == 1 and bs.Reminder and ((not isCombat and bs.COut)
+ or (isCombat and (bs.CIn or O.ToggleAutoCombat)))))) then
+
if (not bs.SelfOnly or (bs.SelfOnly and SMARTBUFF_IsPlayer(unit))) then
-- get current spell cooldown
cd = 0;
cds = 0;
if (cBuff.IDS) then
cds, cd = GetSpellCooldown(buffnS);
- cd = (cds + cd) - time;
+ cd = (cds + cd) - GetTime();
if (cd < 0) then
cd = 0;
end
- --SMARTBUFF_AddMsgD(buffnS.." cd = "..cd);
+ SMARTBUFF_AddMsgD(buffnS.." cd = "..cd);
end
-
+
-- check if spell has cooldown
if (cd <= 0 or (mode == 1 and cd <= 1.5)) then
if (cBuff.IDS and sMsgWarning == SMARTBUFF_MSG_CD) then
sMsgWarning = " ";
end
-
+
rbTime = bs.RBTime;
if (rbTime <= 0) then
rbTime = O.RebuffTimer;
end
-
- --SMARTBUFF_AddMsgD(uc.." "..CT());
+
+ SMARTBUFF_AddMsgD(uc.." "..CT());
+
if (not SMARTBUFF_IsInList(unit, un, bs.IgnoreList) and (((cBuff.Type == SMARTBUFF_CONST_GROUP or cBuff.Type == SMARTBUFF_CONST_ITEMGROUP)
and (bs[ur]
or (bs.SelfOnly and SMARTBUFF_IsPlayer(unit))
@@ -2112,91 +1925,80 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
or (cBuff.Type ~= SMARTBUFF_CONST_GROUP and SMARTBUFF_IsPlayer(unit))
or SMARTBUFF_IsInList(unit, un, bs.AddList))) then
buff = nil;
-
- --Tracking ability ------------------------------------------------------------------------
-
- if (cBuff.Type == SMARTBUFF_CONST_TRACK) then
- if wowTOC >= 20502 then
- -- assume we are TBC Classic or higher
- local count = (C_Minimap.GetNumTrackingTypes())+1; -- GetNumTrackingTypes doesnt count "none" so add one to include it.
- local trackingFound;
- for n = 1, count do
- local trackN, trackT, trackA, trackC = C_Minimap.GetTrackingInfo(n);
- if trackN == buffnS and trackA then
- trackingFound = true;
- break;
- else
- trackingFound = false;
- end
- end
- if not trackingFound then
- if (sPlayerClass ~= "DRUID" or ((not isShapeshifted and buffnS ~= SMARTBUFF_DRUID_TRACK) or (isShapeshifted and buffnS ~= SMARTBUFF_DRUID_TRACK) or (isShapeshifted and buffnS == SMARTBUFF_DRUID_TRACK and sShapename == SMARTBUFF_DRUID_CAT))) then
- buff = buffnS;
- end
- end
- else
- -- we are below the minimal tbc build, assume its classic era / season of mastery.
- local iconTrack = GetTrackingTexture();
- if (iconTrack ~= nil) then
- SMARTBUFF_AddMsgD("Track already enabled: " .. iconTrack);
- else
- if (sPlayerClass ~= "DRUID" or ((not isShapeshifted and buffnS ~= SMARTBUFF_DRUID_TRACK) or (isShapeshifted and buffnS ~= SMARTBUFF_DRUID_TRACK) or (isShapeshifted and buffnS == SMARTBUFF_DRUID_TRACK and sShapename == SMARTBUFF_DRUID_CAT))) then
- buff = buffnS;
- SMARTBUFF_AddMsgD("Missing tracking: "..buffnS);
- end
- end
- end
-
- -- Food, Scroll, Potion or conjured items ------------------------------------------------------------------------
- elseif (cBuff.Type == SMARTBUFF_CONST_FOOD or cBuff.Type == SMARTBUFF_CONST_SCROLL or cBuff.Type == SMARTBUFF_CONST_POTION or
- cBuff.Type == SMARTBUFF_CONST_ITEM or cBuff.Type == SMARTBUFF_CONST_ITEMGROUP) then
-
- if (cBuff.Type == SMARTBUFF_CONST_ITEM) then
- bt = nil;
- buff = nil;
- if (cBuff.Params ~= SG.NIL) then
- local cr = SMARTBUFF_CountReagent(cBuff.Params, cBuff.Chain);
- if (cr == 0) then
- buff = cBuff.Params;
- end
- end
-
- -- only prompt / apply food when I am not moving - this would constantly use food
- -- in your bags if you were moving - bugfix 03/12/2021.
+ -- Tracking ability ------------------------------------------------------------------------
+ if (cBuff.Type == SMARTBUFF_CONST_TRACK) then
+ local count = C_Minimap.GetNumTrackingTypes();
+ for n = 1, C_Minimap.GetNumTrackingTypes() do
+ local trackN, trackT, trackA, trackC = C_Minimap.GetTrackingInfo(n);
+ if (trackN ~= nil and not trackA) then
+ SMARTBUFF_AddMsgD(n..". "..trackN.." ("..trackC..")");
+ if (trackN == buffnS) then
+ if (sPlayerClass == "DRUID" and buffnS == SMARTBUFF_DRUID_TRACK) then
+ if (isShapeshifted and sShapename == SMARTBUFF_DRUID_CAT) then
+ buff = buffnS;
+ C_Minimap.SetTracking(n, 1); -- bugfix: not referencing C_Minimap. 7/5/2023
+ end
+ else
+ buff = buffnS;
+ C_Minimap.SetTracking(n, 1);
+ end
+ if (buff ~= nil) then
+ SMARTBUFF_AddMsgD("Tracking enabled: "..buff);
+ buff = nil;
+ end
+ end
+ end
+ end
+ -- Food, Scroll, Potion or conjured items ------------------------------------------------------------------------
+ elseif (cBuff.Type == SMARTBUFF_CONST_FOOD or cBuff.Type == SMARTBUFF_CONST_SCROLL or cBuff.Type == SMARTBUFF_CONST_POTION or cBuff.Type == SMARTBUFF_CONST_ITEM or
+ cBuff.Type == SMARTBUFF_CONST_ITEMGROUP) then
+
+ if (cBuff.Type == SMARTBUFF_CONST_ITEM) then
+ bt = nil;
+ buff = nil;
+ if (cBuff.Params ~= SG.NIL) then
+ local cr = SMARTBUFF_CountReagent(cBuff.Params, cBuff.Chain);
+ SMARTBUFF_AddMsgD(cr.." "..cBuff.Params.." found");
+ if (cr == 0) then
+ buff = cBuff.Params;
+ end
+ end
+
+ -- dont attempt to use food while moving or we will waste them.
elseif (cBuff.Type == SMARTBUFF_CONST_FOOD and isPlayerMoving == false) then
if (not SMARTBUFF_IsPicnic(unit)) then
buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, SMARTBUFF_FOOD_AURA, cBuff.Type, cBuff.Links, cBuff.Chain);
end
-
else
- if (cBuff.Params ~= SG.NIL) then
- if (cBuff.Links and cBuff.Links == SG.CheckFishingPole) then
- if (SMARTBUFF_IsFishingPoleEquiped()) then
- buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, cBuff.Params, cBuff.Type);
- else
- buff = nil;
- end
- else
- buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, cBuff.Params, cBuff.Type, cBuff.Links, cBuff.Chain);
- end
- else
- buff = nil;
- end
- end
-
+ if (cBuff.Params ~= SG.NIL) then
+ if (cBuff.Links and cBuff.Links == SG.CheckFishingPole) then
+ if (SMARTBUFF_IsFishingPoleEquiped()) then
+ buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, cBuff.Params, cBuff.Type);
+ else
+ buff = nil;
+ end
+ else
+ buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, cBuff.Params, cBuff.Type, cBuff.Links, cBuff.Chain);
+ end
+ SMARTBUFF_AddMsgD("Buff time ("..cBuff.Params..") = "..tostring(bt));
+ else
+ buff = nil;
+ end
+ end
+
if (buff == nil and cBuff.DurationS >= 1 and rbTime > 0) then
if (charges == nil) then charges = -1; end
if (charges > 1) then cBuff.CanCharge = true; end
bufftarget = nil;
end
-
+
if (bt and bt <= rbTime) then
buff = buffnS;
bExpire = true;
- end
-
+ end
+
if (buff) then
if (cBuff.Type ~= SMARTBUFF_CONST_ITEM) then
local cr, iid = SMARTBUFF_CountReagent(buffnS, cBuff.Chain);
@@ -2204,34 +2006,45 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
buff = buffnS;
if (cBuff.Type == SMARTBUFF_CONST_ITEMGROUP or cBuff.Type == SMARTBUFF_CONST_SCROLL) then
cds, cd = GetItemCooldown(iid);
- cd = (cds + cd) - time;
+ cd = (cds + cd) - GetTime();
+ SMARTBUFF_AddMsgD(cr.." "..buffnS.." found, cd = "..cd);
if (cd > 0) then
buff = nil;
end
end
+ SMARTBUFF_AddMsgD(cr .. " " .. buffnS .. " found");
else
+ SMARTBUFF_AddMsgD("No " .. buffnS .. " found");
buff = nil;
bExpire = false;
end
end
end
-
+
-- Weapon buff ------------------------------------------------------------------------
- elseif (cBuff.Type == SMARTBUFF_CONST_WEAPON or cBuff.Type == SMARTBUFF_CONST_INV) then
- local bMh, tMh, cMh, idMh, bOh, tOh, cOh, idOh = GetWeaponEnchantInfo();
+ elseif (cBuff.Type == SMARTBUFF_CONST_WEAPON or cBuff.Type == SMARTBUFF_CONST_INV) then
+ SMARTBUFF_AddMsgD("Check weapon Buff");
+ hasMainHandEnchant, mainHandExpiration, mainHandCharges, mainHandEnchantID, hasOffHandEnchant, offHandExpiration, offHandCharges, offHandEnchantID = GetWeaponEnchantInfo();
+ bMh = hasMainHandEnchant;
+ tMh = mainHandExpiration;
+ cMh = mainHandCharges;
+ bOh = hasOffHandEnchant;
+ tOh = offHandExpiration;
+ cOh = offHandCharges;
+
+
if (bs.MH) then
- iSlot = 16;
+ iSlot = INVSLOT_MAINHAND;
iId = GetInventoryItemID("player", iSlot);
if (iId and SMARTBUFF_CanApplyWeaponBuff(buffnS, iSlot)) then
if (bMh) then
if (rbTime > 0 and cBuff.DurationS >= 1) then
- --if (tMh == nil) then tMh = 0; end
tMh = floor(tMh/1000);
charges = cMh;
if (charges == nil) then charges = -1; end
if (charges > 1) then cBuff.CanCharge = true; end
- --SMARTBUFF_AddMsgD(un .. " (WMH): " .. buffnS .. string.format(" %.0f sec left", tMh) .. ", " .. charges .. " charges left");
+ SMARTBUFF_AddMsgD(un .. " (WMH): " .. buffnS .. string.format(" %.0f sec left", tMh) .. ", " .. charges .. " charges left");
if (tMh <= rbTime or (O.CheckCharges and cBuff.CanCharge and charges > 0 and charges <= O.MinCharges)) then
buff = buffnS;
bt = tMh;
@@ -2246,24 +2059,23 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
SMARTBUFF_AddMsgD("Weapon Buff cannot be cast, no mainhand weapon equipped or wrong weapon/stone type");
end
end
-
- if (bs.OH and not bExpire and handtype == "") then
- iSlot = 17;
+
+ if (bs.OH and not bExpire and not buffloc) then
+ iSlot = INVSLOT_OFFHAND
iId = GetInventoryItemID("player", iSlot);
if (iId and SMARTBUFF_CanApplyWeaponBuff(buffnS, iSlot)) then
if (bOh) then
if (rbTime > 0 and cBuff.DurationS >= 1) then
- --if (tOh == nil) then tOh = 0; end
tOh = floor(tOh/1000);
charges = cOh;
if (charges == nil) then charges = -1; end
if (charges > 1) then cBuff.CanCharge = true; end
- --SMARTBUFF_AddMsgD(un .. " (WOH): " .. buffnS .. string.format(" %.0f sec left", tOh) .. ", " .. charges .. " charges left");
+ SMARTBUFF_AddMsgD(un .. " (WOH): " .. buffnS .. string.format(" %.0f sec left", tOh) .. ", " .. charges .. " charges left");
if (tOh <= rbTime or (O.CheckCharges and cBuff.CanCharge and charges > 0 and charges <= O.MinCharges)) then
buff = buffnS;
bt = tOh;
- bExpire = true;
- end
+ bExpire = true;
+ end
end
else
handtype = "off";
@@ -2277,35 +2089,32 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
if (buff and cBuff.Type == SMARTBUFF_CONST_INV) then
local cr = SMARTBUFF_CountReagent(buffnS, cBuff.Chain);
if (cr > 0) then
- --SMARTBUFF_AddMsgD(cr .. " " .. buffnS .. " found");
+ SMARTBUFF_AddMsgD(cr .. " " .. buffnS .. " found");
else
- --SMARTBUFF_AddMsgD("No " .. buffnS .. " found");
+ SMARTBUFF_AddMsgD("No " .. buffnS .. " found");
buff = nil;
end
- end
-
- -- Normal buff ------------------------------------------------------------------------
+ end
+ -- Normal buff ------------------------------------------------------------------------
else
- local index = nil;
- -- check timer object
+ local index = nil;
+ -- check timer object
buff, index, buffname, bt, charges = SMARTBUFF_CheckUnitBuffs(unit, buffnS, cBuff.Type, cBuff.Links, cBuff.Chain);
if (charges == nil) then charges = -1; end
- if (charges > 1) then cBuff.CanCharge = true; end
- if (unit ~= "target" and buff == nil and cBuff.DurationS >= 1 and rbTime > 0) then
+ if (charges > 1) then cBuff.CanCharge = true; end
+ if (unit ~= "target" and buff == nil and cBuff.DurationS >= 1 and rbTime > 0) then
if (SMARTBUFF_IsPlayer(unit)) then
if (cBuffTimer[unit] ~= nil and cBuffTimer[unit][buffnS] ~= nil) then
local tbt = cBuff.DurationS - (time - cBuffTimer[unit][buffnS]);
if (not bt or bt - tbt > rbTime) then
bt = tbt;
end
- end
+ end
bufftarget = nil;
- --SMARTBUFF_AddMsgD(un .. " (P): " .. index .. ". " .. GetPlayerBuffTexture(index) .. "(" .. charges .. ") - " .. buffnS .. string.format(" %.0f sec left", bt));
elseif (cBuffTimer[unit] ~= nil and cBuffTimer[unit][buffnS] ~= nil) then
- bt = cBuff.DurationS - (time - cBuffTimer[unit][buffnS]);
+ bt = cBuff.DurationS - (time - cBuffTimer[unit][buffnS]);
bufftarget = nil;
- --SMARTBUFF_AddMsgD(un .. " (S): " .. buffnS .. string.format(" %.0f sec left", bt));
elseif (cBuff.BuffG ~= nil and cBuffTimer[subgroup] ~= nil and cBuffTimer[subgroup][cBuff.BuffG] ~= nil) then
bt = cBuff.DurationG - (time - cBuffTimer[subgroup][cBuff.BuffG]);
if (type(subgroup) == "number") then
@@ -2313,15 +2122,12 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
else
bufftarget = SMARTBUFF_MSG_CLASS .. " " .. UnitClass(unit);
end
- --SMARTBUFF_AddMsgD(bufftarget .. ": " .. cBuff.BuffG .. string.format(" %.0f sec left", bt));
elseif (cBuff.BuffG ~= nil and cBuffTimer[uc] ~= nil and cBuffTimer[uc][cBuff.BuffG] ~= nil) then
bt = cBuff.DurationG - (time - cBuffTimer[uc][cBuff.BuffG]);
bufftarget = SMARTBUFF_MSG_CLASS .. " " .. UnitClass(unit);
- --SMARTBUFF_AddMsgD(bufftarget .. ": " .. cBuff.BuffG .. string.format(" %.0f sec left", bt));
else
bt = nil;
end
-
if ((bt and bt <= rbTime) or (O.CheckCharges and cBuff.CanCharge and charges > 0 and charges <= O.MinCharges)) then
if (buffname) then
buff = buffname;
@@ -2331,51 +2137,49 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
bExpire = true;
end
end
-
+
-- check if the group buff is active, in this case it is not possible to cast the single buff
if (buffname and mode ~= 1 and buffname ~= buffnS) then
buff = nil;
- --SMARTBUFF_AddMsgD("Group buff is active, single buff canceled!");
- --print("Group buff is active, single buff canceled!");
end
end -- END normal buff
-- check if shapeshifted and cancel buff if it is not possible to cast it
if (buff and cBuff.Type ~= SMARTBUFF_CONST_TRACK and cBuff.Type ~= SMARTBUFF_CONST_FORCESELF) then
- --isShapeshifted = true;
- --sShapename = "Moonkingestalt";
if (isShapeshifted) then
if (string.find(cBuff.Params, sShapename)) then
- --SMARTBUFF_AddMsgD("Cast " .. buff .. " while shapeshifted");
else
if(cBuff.Params == SMARTBUFF_DRUID_CAT) then
buff = nil;
- end
+ end
if (buff and mode ~= 1 and not O.InShapeshift and (sShapename ~= SMARTBUFF_DRUID_MOONKIN and sShapename ~= SMARTBUFF_DRUID_TREANT)) then
- --sMsgWarning = SMARTBUFF_MSG_SHAPESHIFT .. ": " .. sShapename;
buff = nil;
end
end
- else
- if(cBuff.Params == SMARTBUFF_DRUID_CAT) then
+ elseif(cBuff.Params == SMARTBUFF_DRUID_CAT) then
buff = nil;
- end
end
end
-
- if (buff) then
+
+ if (buff) then
+
+ if (cBuff.IDS) then
+ SMARTBUFF_AddMsgD("Checking " ..i .. " - " .. cBuff.IDS .. " " .. buffnS);
+ end
+
-- Cast mode ---------------------------------------------------------------------------------------
if (mode == 0 or mode == 5) then
currentUnit = nil;
currentSpell = nil;
- --try to apply weapon buffs on main/off hand
- if (cBuff.Type == SMARTBUFF_CONST_INV) then
+
+ --try to apply weapon buffs on main/off hand
+ if (cBuff.Type == SMARTBUFF_CONST_INV) then
if (iSlot and (handtype ~= "" or bExpire)) then
local bag, slot, count = SMARTBUFF_FindItem(buffnS, cBuff.Chain);
if (count > 0) then
sMsgWarning = "";
- return 0, SMARTBUFF_ACTION_ITEM, buffnS, iSlot, "player", cBuff.Type;
+ return 0, SMARTBUFF_ACTION_ITEM, GetItemInfo(buffnS), iSlot, "player", cBuff.Type;
end
end
r = 50;
@@ -2383,9 +2187,9 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
if (iId and (handtype ~= "" or bExpire)) then
sMsgWarning = "";
return 0, SMARTBUFF_ACTION_SPELL, buffnS, iSlot, "player", cBuff.Type;
- --return 0, SMARTBUFF_ACTION_SPELL, buffnS, iId, "player", cBuff.Type;
- end
- r = 50;
+ end
+ r = 50;
+
-- eat food or use scroll or potion
elseif (cBuff.Type == SMARTBUFF_CONST_FOOD or cBuff.Type == SMARTBUFF_CONST_SCROLL or cBuff.Type == SMARTBUFF_CONST_POTION) then
local bag, slot, count = SMARTBUFF_FindItem(buffnS, cBuff.Chain);
@@ -2393,7 +2197,8 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
sMsgWarning = "";
return 0, SMARTBUFF_ACTION_ITEM, buffnS, 0, "player", cBuff.Type;
end
- r = 20;
+ r = 20;
+
-- use item on a unit
elseif (cBuff.Type == SMARTBUFF_CONST_ITEMGROUP) then
local bag, slot, count = SMARTBUFF_FindItem(buffnS, cBuff.Chain);
@@ -2401,66 +2206,65 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
sMsgWarning = "";
return 0, SMARTBUFF_ACTION_ITEM, buffnS, 0, unit, cBuff.Type;
end
- r = 20;
+ r = 20;
+
-- create item
elseif (cBuff.Type == SMARTBUFF_CONST_ITEM) then
r = 20;
- local bag, slot, count = SMARTBUFF_FindItem(buff, cBuff.Chain);
+ local bag, slot, count = SMARTBUFF_FindItem(buff, cBuff.Chain);
if (count == 0) then
r = SMARTBUFF_doCast(unit, cBuff.IDS, buffnS, cBuff.LevelsS, cBuff.Type);
if (r == 0) then
currentUnit = unit;
currentSpell = buffnS;
end
- end
+ end
+
-- cast spell
else
- r, _, rankText = SMARTBUFF_doCast(unit, cBuff.IDS, buffnS, cBuff.LevelsS, cBuff.Type);
- if (r == 0) then
+ r = SMARTBUFF_doCast(unit, cBuff.IDS, buffnS, cBuff.LevelsS, cBuff.Type);
+ if (r == 0) then
currentUnit = unit;
currentSpell = buffnS;
end
end
-
+
-- Check mode ---------------------------------------------------------------------------------------
elseif (mode == 1) then
currentUnit = nil;
currentSpell = nil;
if (bufftarget == nil) then bufftarget = un; end
-
- if (SMARTBUFF_CheckUnitLevel(unit, cBuff.IDS, cBuff.LevelsS) ~= nil or cBuff.IDS ~= nil or SMARTBUFF_IsItem(cBuff.Type) or cBuff.Type == SMARTBUFF_CONST_TRACK) then
+
+ if (cBuff.IDS ~= nil or SMARTBUFF_IsItem(cBuff.Type) or cBuff.Type == SMARTBUFF_CONST_TRACK) then
-- clean up buff timer, if expired
- if (bt and bt < 0 and bExpire) then
+ if (bt and bt < 0 and bExpire) then
bt = 0;
if (cBuffTimer[unit] ~= nil and cBuffTimer[unit][buffnS] ~= nil) then
cBuffTimer[unit][buffnS] = nil;
- --SMARTBUFF_AddMsgD(un .. " (S): " .. buffnS .. " timer reset");
end
if (cBuff.IDG ~= nil) then
if (cBuffTimer[subgroup] ~= nil and cBuffTimer[subgroup][cBuff.BuffG] ~= nil) then
cBuffTimer[subgroup][cBuff.BuffG] = nil;
- --SMARTBUFF_AddMsgD("Group " .. subgroup .. ": " .. buffnS .. " timer reset");
- end
+ end
if (cBuffTimer[uc] ~= nil and cBuffTimer[uc][cBuff.BuffG] ~= nil) then
cBuffTimer[uc][cBuff.BuffG] = nil;
- --SMARTBUFF_AddMsgD("Class " .. uc .. ": " .. cBuff.BuffG .. " timer reset");
end
end
tLastCheck = time - O.AutoTimer + 0.5;
return 0;
end
-
+
SMARTBUFF_SetMissingBuffMessage(bufftarget, buff, cBuff.IconS, cBuff.CanCharge, charges, bt, bExpire);
SMARTBUFF_SetButtonTexture(SmartBuff_KeyButton, cBuff.IconS);
return 0;
end
end
-
+
if (r == 0) then
-- target buffed
-- Message will printed in the "SPELLCAST_STOP" event
sMsgWarning = "";
- return 0, SMARTBUFF_ACTION_SPELL, buffnS, -1, unit, cBuff.Type, rankText;
+ return 0, SMARTBUFF_ACTION_SPELL, buffnS, -1, unit, cBuff.Type;
elseif (r == 1) then
-- spell cooldown
if (mode == 0) then SMARTBUFF_AddMsgWarn(buffnS .. " " .. SMARTBUFF_MSG_CD); end
@@ -2503,26 +2307,17 @@ function SMARTBUFF_BuffUnit(unit, subgroup, mode, spell)
-- no spell selected
if (mode == 0) then SMARTBUFF_AddMsgD(SMARTBUFF_MSG_CHAT); end
end
- else
- -- finished
- if (mode == 0) then SMARTBUFF_AddMsgD(un .. " nothing to buff"); end
end
- else
- -- target does not need this buff
- if (mode == 0) then SMARTBUFF_AddMsgD(un .. " does not need " .. buffnS); end
end
else
-- cooldown
if (sMsgWarning == "") then
sMsgWarning = SMARTBUFF_MSG_CD;
end
- --SMARTBUFF_AddMsgD("Spell on cd: "..buffnS);
end
end -- group or self
end
- --i = i + 1;
end -- for buff
-
end
return 3;
end
@@ -2548,8 +2343,8 @@ function SMARTBUFF_SetMissingBuffMessage(target, buff, icon, bCanCharge, nCharge
local s;
local sd = O.SplashDuration;
local si = "";
-
- if (OG.SplashIcon and icon) then
+
+ if (OG.SplashIcon and icon) then
local n = O.SplashIconSize;
if (n == nil or n <= 0) then
n = O.CurrentFontSize;
@@ -2561,7 +2356,7 @@ function SMARTBUFF_SetMissingBuffMessage(target, buff, icon, bCanCharge, nCharge
sd = 1;
f:Clear();
end
-
+
f:SetTimeVisible(sd);
if (not nCharges) then nCharges = 0; end
if (O.CheckCharges and bCanCharge and nCharges > 0 and nCharges <= O.MinCharges and bExpire) then
@@ -2585,7 +2380,7 @@ function SMARTBUFF_SetMissingBuffMessage(target, buff, icon, bCanCharge, nCharge
end
f:AddMessage(s, O.ColSplashFont.r, O.ColSplashFont.g, O.ColSplashFont.b, 1.0);
end
-
+
-- show chat buff message
if (O.ToggleAutoChat) then
if (O.CheckCharges and bCanCharge and nCharges > 0 and nCharges <= O.MinCharges and bExpire) then
@@ -2596,7 +2391,7 @@ function SMARTBUFF_SetMissingBuffMessage(target, buff, icon, bCanCharge, nCharge
SMARTBUFF_AddMsgWarn(target.." "..SMARTBUFF_MSG_NEEDS.." "..buff, true);
end
end
-
+
-- play sound
if (O.ToggleAutoSound) then
PlaySound(Sounds[O.AutoSoundSelection]);
@@ -2604,33 +2399,29 @@ function SMARTBUFF_SetMissingBuffMessage(target, buff, icon, bCanCharge, nCharge
end
-local cWeaponStandard = {0, 1, 4, 5, 6, 7, 8, 10, 13, 15, 16}; -- "Daggers", "Axes", "Swords", "Maces", "Staves", "Fist Weapons", "Polearms", "Thrown"
-local cWeaponBlunt = {4, 5, 10, 13}; -- "Maces", "Staves", "Fist Weapons"
-local cWeaponSharp = {0, 1, 6, 7, 8, 15}; -- "Daggers", "Axes", "Swords", "Polearms"
-
-- check if a spell/reagent could applied on a weapon
function SMARTBUFF_CanApplyWeaponBuff(buff, slot)
local cWeaponTypes = nil;
if (string.find(buff, SMARTBUFF_WEAPON_SHARP_PATTERN)) then
- cWeaponTypes = cWeaponSharp;
+ cWeaponTypes = SMARTBUFF_WEAPON_SHARP;
elseif (string.find(buff, SMARTBUFF_WEAPON_BLUNT_PATTERN)) then
- cWeaponTypes = cWeaponBlunt;
+ cWeaponTypes = SMARTBUFF_WEAPON_BLUNT;
else
- cWeaponTypes = cWeaponStandard;
+ cWeaponTypes = SMARTBUFF_WEAPON_STANDARD;
end
-
+
local itemLink = GetInventoryItemLink("player", slot);
- if (itemLink == nil) then return false end
-
- local itemType, itemSubType, _, _, _, _, classId, subclassId = select(6, GetItemInfo(itemLink));
- --if (itemType and itemSubType) then
- -- SMARTBUFF_AddMsgD("Type: "..itemType..", Subtype: "..itemSubType);
- --end
-
- if (tcontains(cWeaponTypes, subclassId)) then
- return true, itemSubType;
- end
+ local _, _, itemCode = string.find(itemLink, "(%d+):");
+ local _, _, _, _, _, itemType, itemSubType = GetItemInfo(itemCode);
+ if (cWeaponTypes and itemSubType) then
+ for _, weapon in pairs(cWeaponTypes) do
+ if (string.find(itemSubType, weapon)) then
+ return true, weapon;
+ end
+ end
+
+ end
return false;
end
-- END SMARTBUFF_CanApplyWeaponBuff
@@ -2651,25 +2442,22 @@ end
-- Casts a spell
function SMARTBUFF_doCast(unit, id, spellName, levels, type)
if (id == nil) then return 9; end
- if (type == SMARTBUFF_CONST_TRACK) then
- local iconTrack = GetTrackingTexture();
- if (iconTrack ~= nil and iconTrack ~= "Interface\\Minimap\\Tracking\\None") then
- SMARTBUFF_AddMsgD("Track already enabled: "..iconTrack);
- return 7;
- end
+ if (type == SMARTBUFF_CONST_TRACK and (GetTrackingTexture() ~= "Interface\\Minimap\\Tracking\\None")) then
+ return 7;
end
-
+
-- check if spell has cooldown
local _, cd = GetSpellCooldown(spellName)
if (not cd) then
-- move on
elseif (cd > maxSkipCoolDown) then
return 4;
- elseif (cd > 0) then
+ elseif (cd > 0) then
return 1;
end
- -- switched to using the LibRangeCheck-2.0 library by mitchnull for range checking.
+ -- Rangecheck
+ --SMARTBUFF_AddMsgD("Spell has range: "..spellName.." = "..ChkS(SpellHasRange(spellName)));
if ((type == SMARTBUFF_CONST_GROUP or type == SMARTBUFF_CONST_ITEMGROUP)) then
local minRange, maxRange = LRC:GetRange(unit)
if (UnitInRange(unit) or unit == "player" or (unit == "target" and O.BuffTarget)) then
@@ -2683,20 +2471,14 @@ function SMARTBUFF_doCast(unit, id, spellName, levels, type)
return 3;
end
end
-
- -- check if target is to low for this spell
- local newId, rank, rankText = SMARTBUFF_CheckUnitLevel(unit, id, levels);
- if (newId == nil) then
- return 5;
- end
-- check if you have enough mana/energy/rage to cast
local isUsable, notEnoughMana = IsUsableSpell(spellName);
if (notEnoughMana) then
return 6;
end
-
- return 0, rank, rankText;
+
+ return 0;
end
-- END SMARTBUFF_doCast
@@ -2721,13 +2503,9 @@ function UnitBuffByBuffName(target,buffname,filter)
end
end
---
--- SMARTBUFF_CheckUnitBuffs
--- Function to return the name of the buff to cast.
---
+-- Will return the name of the buff to cast
function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
if (not unit or (not buffN and not buffL)) then return end
-
local i, n, v;
local buff = nil;
local defBuff = nil;
@@ -2738,13 +2516,11 @@ function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
local icon = nil;
local time = GetTime();
local uname = UnitName(unit) or "?";
-
if (buffN) then
defBuff = buffN;
else
defBuff = buffL[1];
end
-
-- Stance/Presence/Seal check, these are not in the aura list
n = cBuffIndex[defBuff];
if (cBuffs[n] and cBuffs[n].Type == SMARTBUFF_CONST_STANCE) then
@@ -2768,9 +2544,9 @@ function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
end
end
end
- return defBuff, nil, nil, nil, nil;
+ return defBuff, nil, nil, nil, nil;
end
-
+
-- Check linked buffs
if (buffL) then
if (not O.LinkSelfBuffCheck and buffT == SMARTBUFF_CONST_SELF) then
@@ -2783,7 +2559,12 @@ function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
SMARTBUFF_AddMsgD("Check linked buff ("..uname.."): "..v);
buff, icon, count, _, duration, timeleft, caster = UnitBuffByBuffName(unit, v);
if (buff) then
- timeleft = timeleft - time;
+ timeleft = timeleft - GetTime();
+ if (timeleft > 0) then
+ timeleft = timeleft;
+ else
+ timeleft = time;
+ end
SMARTBUFF_AddMsgD("Linked buff found: "..buff..", "..timeleft..", "..icon);
return nil, n, defBuff, timeleft, count;
end
@@ -2791,17 +2572,19 @@ function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
end
end
end
-
+
-- Check chained buffs
if (defBuff and buffC and #buffC > 1) then
local t = B[CS()].Order;
if (t and #t > 1) then
+ --SMARTBUFF_AddMsgD("Check chained buff ("..uname.."): "..defBuff);
for i = 1, #t, 1 do
if (t[i] and tfind(buffC, t[i])) then
v = GetBuffSettings(t[i]);
if (v and v.EnableS) then
local b, tl, im = SMARTBUFF_CheckBuff(unit, t[i]);
if (b and im) then
+ --SMARTBUFF_AddMsgD("Chained buff found: "..t[i]..", "..tl);
if (SMARTBUFF_CheckBuffLink(unit, t[i], v.Type, v.Links)) then
return nil, i, defBuff, tl, -1;
end
@@ -2813,79 +2596,29 @@ function SMARTBUFF_CheckUnitBuffs(unit, buffN, buffT, buffL, buffC)
end
end
end
-
+
-- Check default buff
if (defBuff) then
+ SMARTBUFF_AddMsgD("Check default buff ("..uname.."): "..defBuff);
buff, icon, count, _, duration, timeleft, caster = UnitBuffByBuffName(unit, defBuff);
if (buff) then
--- print("Found buff: "..buff.. " on unit: "..unit)
- timeleft = timeleft - time;
+ timeleft = timeleft - GetTime();
+ if (timeleft > 0) then
+ timeleft = timeleft;
+ else
+ timeleft = time;
+ end
if (SMARTBUFF_IsPlayer(caster)) then
SMARTBUFF_UpdateBuffDuration(defBuff, duration);
end
SMARTBUFF_AddMsgD("Default buff found: "..buff..", "..timeleft..", "..icon);
return nil, 0, defBuff, timeleft, count;
- else
--- print("Not Found Buff: "..defBuff.. " on unit: "..unit)
end
- end
+ end
-- Buff not found, return default buff
return defBuff, nil, nil, nil, nil;
-
-end
-
-
--- Will return the lower Id of the spell, if the unit level is lower
-function SMARTBUFF_CheckUnitLevel(unit, spellId, spellLevels)
- if (spellLevels == nil or spellId == nil) then
- return spellId;
- end
-
- local Id = spellId;
- local uLevel = UnitLevel(unit);
- local spellName, _, icon, castTime, minRange, maxRange = GetSpellInfo(Id);
- local sRank = GetSpellSubtext(Id);
- if (sRank == nil or sRank == "") then
- return Id;
- end
-
- local _, _, spellRank = string.find(sRank, "(%d+)");
- if (spellRank == nil) then
- return Id;
- end
-
- spellRank = tonumber(spellRank);
- local i = spellRank;
-
- --SMARTBUFF_AddMsgD(spellName .. sRank .. ":" .. spellRank .. ", " .. spellLevels[i]);
-
- while (i >= 1) do
- if (uLevel >= (spellLevels[i] - 10)) then
- break;
- end
- i = i - 1;
- end
-
- if (i == spellRank) then
- return Id;
- end
-
- local rankText;
- if (i > 0) then
- local n = spellRank - i;
- Id = Id - n;
- rankText = "("..string.gsub(sRank, "(%d+)", n)..")";
- --SMARTBUFF_AddMsgD(uLevel .. " " .. spellName .. " Rank " .. i .. " - ID = " .. Id);
- else
- Id = nil;
- --SMARTBUFF_AddMsgD(spellName .. ": no rank available for this level");
- end;
-
- return Id, i, rankText;
end
--- END SMARTBUFF_CheckUnitLevel
-
function SMARTBUFF_CheckBuffLink(unit, defBuff, buffT, buffL)
@@ -2901,7 +2634,12 @@ function SMARTBUFF_CheckBuffLink(unit, defBuff, buffT, buffL)
SMARTBUFF_AddMsgD("Check linked buff ("..uname.."): "..v);
buff, icon, count, _, duration, timeleft, caster = UnitBuffByBuffName(unit, v);
if (buff) then
- timeleft = timeleft - time;
+ timeleft = timeleft - GetTime();
+ if (timeleft > 0) then
+ timeleft = timeleft;
+ else
+ timeleft = time;
+ end
SMARTBUFF_AddMsgD("Linked buff found: "..buff..", "..timeleft..", "..icon);
return nil, n, defBuff, timeleft, count;
end
@@ -2938,23 +2676,23 @@ function SMARTBUFF_UpdateBuffDuration(buff, duration)
if (i ~= nil and cBuffs[i] ~= nil and buff == cBuffs[i].BuffS) then
if (cBuffs[i].DurationS ~= nil and cBuffs[i].DurationS > 0 and cBuffs[i].DurationS ~= duration) then
SMARTBUFF_AddMsgD("Updated buff duration: "..buff.." = "..duration.."sec, old = "..cBuffs[i].DurationS);
- cBuffs[i].DurationS = duration;
+ cBuffs[i].DurationS = duration;
end
end
end
-function UnitAuraBySpellName(target, spellname, filter)
+function UnitAuraBySpellName(target,spellname,filter)
for i = 1,40 do
name = UnitAura(target, i, filter);
if not name then return end
if name == spellname then
- return UnitAuraFull(target, i, filter);
+ return UnitAura(target, i, filter);
end
end
end
-function SMARTBUFF_CheckBuff(unit, buffName, isMine)
+function SMARTBUFF_CheckBuff(unit, buffName, isMine)
if (not unit or not buffName) then
return false, 0;
end
@@ -2963,6 +2701,11 @@ function SMARTBUFF_CheckBuff(unit, buffName, isMine)
SMARTBUFF_AddMsgD(UnitName(unit).." buff found: "..buff, 0, 1, 0.5);
if (buff == buffName) then
timeleft = timeleft - GetTime();
+ if (timeleft > 0) then
+ timeleft = timeleft;
+ else
+ timeleft = time;
+ end
if (isMine and caster) then
if (SMARTBUFF_IsPlayer(caster)) then
return true, timeleft, caster;
@@ -2977,14 +2720,13 @@ end
-- END SMARTBUFF_CheckUnitBuffs
--- Will return the name/description of the buff
+-- Will return the name/description of the buff
function SMARTBUFF_GetBuffName(unit, buffIndex, line)
local i = buffIndex;
local name = nil;
if (i < 0 or i > maxBuffs) then
return nil;
- end
- --SmartBuffTooltip:SetOwner(SmartBuffFrame, "ANCHOR_NONE");
+ end
SmartBuffTooltip:ClearLines();
SmartBuffTooltip:SetUnitBuff(unit, i);
local obj = _G["SmartBuffTooltipTextLeft" .. line];
@@ -3018,7 +2760,6 @@ function SMARTBUFF_IsFishing(unit)
-- spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitChannelInfo("unit")
local spell = UnitChannelInfo(unit);
if (spell ~= nil and SMARTBUFF_FISHING ~= nil and spell == SMARTBUFF_FISHING) then
- --SMARTBUFF_AddMsgD("Channeling "..SMARTBUFF_FISHING);
return true;
end
return false;
@@ -3026,16 +2767,16 @@ end
function SMARTBUFF_IsFishingPoleEquiped()
if (not SG or not SG.FishingPole) then return false end
-
+
local link = GetInventoryItemLink("player", GetInventorySlotInfo("MainHandSlot"));
if (not link) then return false end
-
+
local _, _, _, _, _, _, subType = GetItemInfo(link);
if (not subType) then return false end
-
+
--print(SG.FishingPole.." - "..subType);
if (SG.FishingPole == subType) then return true end
-
+
return false;
end
-- END SMARTBUFF_IsFishing
@@ -3061,7 +2802,7 @@ function SMARTBUFF_IsDebuffTexture(unit, debufftex)
-- name,rank,icon,count,type = UnitDebuff("unit", id or "name"[,"rank"])
while (UnitDebuff(unit, i)) do
name, icon, _, _ = UnitDebuff(unit, i);
- --SMARTBUFF_AddMsgD(i .. ". " .. name .. ", " .. icon);
+ --SMARTBUFF_AddMsgD(i .. ". " .. name .. ", " .. icon);
if (string.find(icon, debufftex)) then
active = true;
break
@@ -3074,66 +2815,54 @@ end
-- Returns the number of a reagent currently in player's bag
+-- we now search on ItemLink in addition to itemText, in order to support Dragonflight item qualities
function SMARTBUFF_CountReagent(reagent, chain)
if (reagent == nil) then
return -1, nil;
end
-
- local toy = SG.Toybox[reagent];
- if (toy) then
- return 1, toy[1];
- end
-
- local n = 0;
+ local total = 0;
local id = nil;
local bag = 0;
local slot = 0;
- local itemsInfo;
- local itemLink, itemName, count;
- if (chain == nil) then chain = { reagent }; end
+ if not (chain) then chain = { reagent }; end
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, C_Container.GetContainerNumSlots(bag) do
- itemLink = C_Container.GetContainerItemLink(bag, slot);
- if (itemLink ~= nil) then
- itemName = string.match(itemLink, "%[.-%]");
+ bagItemID = C_Container.GetContainerItemID(bag, slot)
+ if bagItemID then
+ containerInfo = C_Container.GetContainerItemInfo(bag, slot);
+ --SMARTBUFF_AddMsgD("Reagent found: " .. C_Container.GetContainerItemLink(bag.slot));
for i = 1, #chain, 1 do
- if (chain[i] and string.find(itemName, chain[i], 1, true)) then
- itemsInfo = C_Container.GetContainerItemInfo(bag, slot);
- id = C_Container.GetContainerItemID(bag, slot);
- n = n + itemsInfo.stackCount;
+ local buffItemID = tonumber(string.match(chain[i], "item:(%d+)"))
+ if bagItemID == buffItemID then
+
+ id = buffItemID
+ total = total + containerInfo.stackCount;
end
end
end
end
end
- return n, id;
+ return total, id;
end
+-- these two functions are basically identical and should be merged
function SMARTBUFF_FindItem(reagent, chain)
if (reagent == nil) then
return nil, nil, -1, nil;
end
-
local n = 0;
local bag = 0;
local slot = 0;
- local itemsInfo;
- local itemLink, itemName, texture, count;
- if (chain == nil) then chain = { reagent }; end
+ if not (chain) then chain = { reagent }; end
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, C_Container.GetContainerNumSlots(bag) do
- itemLink = C_Container.GetContainerItemLink(bag, slot);
- if (itemLink ~= nil) then
- itemName = string.match(itemLink, "%[.-%]");
+ bagItemID = C_Container.GetContainerItemID(bag, slot);
+ if (bagItemID) then
+ --SMARTBUFF_AddMsgD("Reagent found: " .. C_Container.GetContainerItemLink(bag.slot));
for i = 1, #chain, 1 do
- if (chain[i] and string.find(itemLink, "["..chain[i].."]", 1, true)) then
- -- itemInfo now returns a table, thanks bliz :)
- itemsInfo = C_Container.GetContainerItemInfo(bag, slot);
- if itemsInfo then
- return bag, slot, itemsInfo.stackCount, texture;
- else
- return nil, nil, 0, nil;
- end
+ if tonumber(string.match(chain[i], "item:(%d+)")) == bagItemID then
+ containerInfo = C_Container.GetContainerItemInfo(bag, slot);
+ return bag, slot, containerInfo.stackCount, containerInfo.iconFileID;
end
end
end
@@ -3144,60 +2873,28 @@ end
-- END Reagent functions
----------------------------------------------------------------------------------------------------
--- check the current zone and set buff template
----------------------------------------------------------------------------------------------------
-function SMARTBUFF_CheckLocation()
- if (not O.AutoSwitchTemplate and not O.AutoSwitchTemplateInst) then return; end
-
- local zone = GetRealZoneText();
- if (zone == nil) then
- SMARTBUFF_AddMsgD("No zone found, try again...");
- tStartZone = GetTime();
- isSetZone = true;
- return;
- end
-
- isSetZone = false;
- local tmp = nil;
- local b = false;
-
- SMARTBUFF_AddMsgD("Current zone: "..zone..", last zone: "..sLastZone);
- if (zone ~= sLastZone) then
- sLastZone = zone;
- if (IsActiveBattlefieldArena()) then
- tmp = SMARTBUFF_TEMPLATES[5];
- elseif (SMARTBUFF_IsActiveBattlefield(zone) == 1) then
- tmp = SMARTBUFF_TEMPLATES[4];
- else
- if (O.AutoSwitchTemplateInst) then
- local i = 1;
- for _ in pairs(SMARTBUFF_INSTANCES) do
- if (string.find(string.lower(zone), string.lower(SMARTBUFF_INSTANCES[i]))) then
- b = true;
- break;
- end
- i = i + 1;
- end
- tmp = nil;
- if (b) then
- if (SMARTBUFF_TEMPLATES[i + 5] ~= nil) then
- tmp = SMARTBUFF_TEMPLATES[i + 5]
- end
- end
+-- Locate item in the bags, used to locate conjured items etc.
+function SMARTBUFF_CheckBagItem(itemName)
+ local bag = 0;
+ local slot = 0;
+ local bagItemID, bagItemName, itemQuery;
+ if not itemName then return false; end
+ itemQuery = itemName; itemName = { itemName };
+ for bag = 0, NUM_BAG_FRAMES do
+ for slot = 1, C_Container.GetContainerNumSlots(bag) do
+ bagItemID = C_Container.GetContainerItemID(bag, slot);
+ if (bagItemID) then
+ bagItemName = GetItemInfo(bagItemID)
+ if string.match(bagItemName, itemQuery) then
+ return true
+ end
end
- end
- --SMARTBUFF_AddMsgD("Current tmpl: " .. currentTemplate .. " - new tmpl: " .. tmp);
- if (tmp and currentTemplate ~= tmp) then
- SMARTBUFF_AddMsg(SMARTBUFF_OFT_AUTOSWITCHTMP .. ": " .. currentTemplate .. " -> " .. tmp);
- currentTemplate = tmp;
- SMARTBUFF_SetBuffs();
end
- end
+ end
+ return false
end
-
-- checks if the player is inside a battlefield
function SMARTBUFF_IsActiveBattlefield(zone)
local i, status, map, instanceId, teamSize;
@@ -3210,7 +2907,7 @@ function SMARTBUFF_IsActiveBattlefield(zone)
end
if (status and status == "active" and map) then
if (teamSize and type(teamSize) == "number" and teamSize > 0) then
- return 2;
+ return 2;
end
return 1;
end
@@ -3256,30 +2953,39 @@ end
-- Init the SmartBuff variables ---------------------------------------------------------------------------------------
+local smVerWarn = true
function SMARTBUFF_Options_Init(self)
+
if (isInit) then return; end
+ -- test if this is the intended client
+ if (buildInfo < SMARTBUFF_VERSIONNR) or (buildInfo > 100000) then
+ if smVerWarn then
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Build "..SMARTBUFF_VERSION.." (Client: "..buildInfo..")|cffffffff "..SMARTBUFF_NOTINTENDEDCLIENT)
+ end
+ smVerWarn = false;
+ return
+ end
+
self:UnregisterEvent("CHAT_MSG_CHANNEL");
self:UnregisterEvent("UPDATE_MOUSEOVER_UNIT");
-
- --DebugChatFrame:AddMessage("Starting init SB");
-
+
_, sPlayerClass = UnitClass("player");
sRealmName = GetRealmName();
sPlayerName = UnitName("player");
sID = sRealmName .. ":" .. sPlayerName;
- --AutoSelfCast = GetCVar("autoSelfCast");
-
+
SMARTBUFF_PLAYERCLASS = sPlayerClass;
-
+
+
if (not SMARTBUFF_Buffs) then SMARTBUFF_Buffs = { }; end
B = SMARTBUFF_Buffs;
if (not SMARTBUFF_Options) then SMARTBUFF_Options = { }; end
O = SMARTBUFF_Options;
-
- SMARTBUFF_BROKER_SetIcon(); -- bug fix, credit: SunNova
- if (O.Toggle == nil) then O.Toggle = true; end
+ SMARTBUFF_BROKER_SetIcon();
+
+ if (O.Toggle == nil) then O.Toggle = true; end
if (O.ToggleAuto == nil) then O.ToggleAuto = true; end
if (O.AutoTimer == nil) then O.AutoTimer = 5; end
if (O.BlacklistTimer == nil) then O.BlacklistTimer = 5; end
@@ -3287,60 +2993,55 @@ function SMARTBUFF_Options_Init(self)
if (O.ToggleAutoChat == nil) then O.ToggleAutoChat = false; end
if (O.ToggleAutoSplash == nil) then O.ToggleAutoSplash = true; end
if (O.ToggleAutoSound == nil) then O.ToggleAutoSound = true; end
- if (O.AutoSoundSelection == nil) then O.AutoSoundSelection = 1; end;
+ if (O.AutoSoundSelection == nil) then O.AutoSoundSelection = 4; end;
if (O.CheckCharges == nil) then O.CheckCharges = true; end
--if (O.ToggleAutoRest == nil) then O.ToggleAutoRest = true; end
if (O.RebuffTimer == nil) then O.RebuffTimer = 20; end
if (O.SplashDuration == nil) then O.SplashDuration = 2; end
- if (O.SplashIconSize == nil) then O.SplashIconSize = 12; end
-
+ if (O.SplashIconSize == nil) then O.SplashIconSize = 16; end
if (O.BuffTarget == nil) then O.BuffTarget = false; end
if (O.BuffPvP == nil) then O.BuffPvP = false; end
if (O.BuffInCities == nil) then O.BuffInCities = true; end
if (O.LinkSelfBuffCheck == nil) then O.LinkSelfBuffCheck = true; end
if (O.LinkGrpBuffCheck == nil) then O.LinkGrpBuffCheck = true; end
if (O.AntiDaze == nil) then O.AntiDaze = true; end
-
- if (O.ScrollWheel ~= nil and O.ScrollWheelUp == nil) then O.ScrollWheelUp = O.ScrollWheel; end
- if (O.ScrollWheel ~= nil and O.ScrollWheelDown == nil) then O.ScrollWheelDown = O.ScrollWheel; end
+ if (O.WarnCombatFishingRod == nil) then O.WarnCombatFishingRod = true; end
+ if (O.ScrollWheel ~= nil and O.ScrollWheelUp == nil) then O.ScrollWheelUp = O.ScrollWheel; end
+ if (O.ScrollWheel ~= nil and O.ScrollWheelDown == nil) then O.ScrollWheelDown = O.ScrollWheel; end
if (O.ScrollWheelUp == nil) then O.ScrollWheelUp = true; end
if (O.ScrollWheelDown == nil) then O.ScrollWheelDown = true; end
-
- if (O.InCombat == nil) then O.InCombat = true; end
- if (O.AutoSwitchTemplate == nil) then O.AutoSwitchTemplate = true; end
- if (O.AutoSwitchTemplateInst == nil) then O.AutoSwitchTemplateInst = true; end
- if (O.InShapeshift == nil) then O.InShapeshift = true; end
- if (O.WarnWhileMounted == nil) then O.WarnWhileMounted = false; end
-
- if (O.ToggleGrp == nil) then O.ToggleGrp = {true, true, true, true, true, true, true, true}; end
- if (O.ToggleSubGrpChanged == nil) then O.ToggleSubGrpChanged = false; end
-
- if (O.ToggleMsgNormal == nil) then O.ToggleMsgNormal = false; end
- if (O.ToggleMsgWarning == nil) then O.ToggleMsgWarning = false; end
- if (O.ToggleMsgError == nil) then O.ToggleMsgError = false; end
-
+ if (O.InCombat == nil) then O.InCombat = true; end
+ if (O.AutoSwitchTemplate == nil) then O.AutoSwitchTemplate = true; end
+ if (O.AutoSwitchTemplateInst == nil) then O.AutoSwitchTemplateInst = true; end
+ if (O.InShapeshift == nil) then O.InShapeshift = true; end
+ O.ToggleGrp = {true, true, true, true, true, true, true, true};
+ if (O.ToggleMsgNormal == nil) then O.ToggleMsgNormal = true; end
+ if (O.ToggleMsgWarning == nil) then O.ToggleMsgWarning = false; end
+ if (O.ToggleMsgError == nil) then O.ToggleMsgError = false; end
if (O.HideMmButton == nil) then O.HideMmButton = false; end
- if (O.HideSAButton == nil) then O.HideSAButton = false; end
-
- if (O.MinCharges == nil) then
+ if (O.HideSAButton == nil) then O.HideSAButton = true; end
+ -- tracking switcher, only works for herbs and minerals
+ if (O.TrackSwitchActive == nil) then O.TrackSwitchActive = true; end
+ if (O.TrackSwitchFish == nil) then O.TrackSwitchFish = false; end
+ if (O.TrackSwitchDelay == nil) then O.TrackSwitchDelay = 2; end
+ if (O.TrackMaxPosition == nil) then O.TrackMaxPosition = 1; end
+ if (O.TrackPosition == nil) then O.TrackPosition = 1; end
+ -- leaving this here in classic just in case we even need it, its possible blizzard make the same
+ -- changes to the secure action button as they did in the retail version..
+ if (O.SBButtonFix == nil) then O.SBButtonFix = false; end
+ if (O.SBButtonDownVal == nil) then O.SBButtonDownVal = GetCVarBool("ActionButtonUseKeyDown"); end
+
+ if (O.MinCharges == nil) then
if (sPlayerClass == "SHAMAN" or sPlayerClass == "PRIEST") then
O.MinCharges = 1;
else
O.MinCharges = 3;
end
end
-
- if (O.ShowMiniGrp == nil) then
- if (sPlayerClass == "DRUID" or sPlayerClass == "MAGE" or sPlayerClass == "PRIEST") then
- O.ShowMiniGrp = true;
- else
- O.ShowMiniGrp = false;
- end
- end
-
+
if (not O.AddList) then O.AddList = { }; end
if (not O.IgnoreList) then O.IgnoreList = { }; end
-
+
if (O.LastTemplate == nil) then O.LastTemplate = SMARTBUFF_TEMPLATES[1]; end
local b = false;
while (SMARTBUFF_TEMPLATES[i] ~= nil) do
@@ -3350,39 +3051,38 @@ function SMARTBUFF_Options_Init(self)
end
i = i + 1;
end
- if (not b) then
+ if (not b) then
O.LastTemplate = SMARTBUFF_TEMPLATES[1];
- end
-
+ end
+
currentTemplate = O.LastTemplate;
- --currentSpec = GetSpecialization();
- currentSpec = 1;
-
+ currentSpec = GetActiveTalentGroup()
+
if (O.OldWheelUp == nil) then O.OldWheelUp = ""; end
if (O.OldWheelDown == nil) then O.OldWheelDown = ""; end
-
+
SMARTBUFF_InitActionButtonPos();
-
+
if (O.SplashX == nil) then O.SplashX = 100; end
if (O.SplashY == nil) then O.SplashY = -100; end
- if (O.CurrentFont == nil) then O.CurrentFont = 9; end
+ if (O.CurrentFont == nil) then O.CurrentFont = 6; end
if (O.ColSplashFont == nil) then
O.ColSplashFont = { };
O.ColSplashFont.r = 1.0;
O.ColSplashFont.g = 1.0;
- O.ColSplashFont.b = 1.0;
+ O.ColSplashFont.b = 1.0;
end
iCurrentFont = O.CurrentFont;
-
+
if (O.Debug == nil) then O.Debug = false; end
-
+
-- Cosmos support
- if(EarthFeature_AddButton) then
+ if(EarthFeature_AddButton) then
EarthFeature_AddButton(
{ id = SMARTBUFF_TITLE;
name = SMARTBUFF_TITLE;
subtext = SMARTBUFF_TITLE;
- tooltip = "";
+ tooltip = "";
icon = imgSB;
callback = SMARTBUFF_OptionsFrame_Toggle;
test = nil;
@@ -3392,19 +3092,20 @@ function SMARTBUFF_Options_Init(self)
end
if (IsAddOnLoaded("Parrot")) then
- isParrot = true;
+ isParrot = true;
end
-
- SMARTBUFF_FindItem("ScanBagsForSBInit");
-
- DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ff"..SMARTBUFF_VERS_TITLE .. "|cffffffff " .. SMARTBUFF_MSG_LOADED.."|cffFFFF00 /sbm - |cffffffff"..SMARTBUFF_OFT_MENU);
+
+ SMARTBUFF_FindItem("ScanBagsForSBInit");
+
+ DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff Build "..SMARTBUFF_VERSION.." (Client: "..buildInfo..")|cffffffff "..SMARTBUFF_MSG_LOADED)
+
isInit = true;
-
+
SMARTBUFF_CheckMiniMapButton();
SMARTBUFF_MinimapButton_OnUpdate(SmartBuff_MiniMapButton);
SMARTBUFF_ShowSAButton();
SMARTBUFF_Splash_Hide();
-
+
if (O.UpgradeToDualSpec == nil) then
for n = 1, GetNumSpecGroups(), 1 do
if (B[n] == nil) then
@@ -3424,40 +3125,37 @@ function SMARTBUFF_Options_Init(self)
end
end
O.UpgradeToDualSpec = true;
- SMARTBUFF_AddMsg("Upgraded to dual spec", true);
end
-
+
for k, v in pairs(cClasses) do
if (SMARTBUFF_CLASSES[k] == nil) then
SMARTBUFF_CLASSES[k] = v;
end
end
-
- if (O.VersionNr == nil or O.VersionNr < SMARTBUFF_VERSIONNR) then
+
+ -- major version changes are backwards incompatible by definition, so trigger a RESET ALL
+ O.VersionNr = O.VersionNr or SMARTBUFF_VERSIONNR -- don't reset if O.VersionNr == nil
+ if O.VersionNr < SMARTBUFF_VERSIONNR then
O.VersionNr = SMARTBUFF_VERSIONNR;
+ StaticPopup_Show("SMARTBUFF_DATA_PURGE");
+ SMARTBUFF_SetTemplate();
SMARTBUFF_SetBuffs();
InitBuffOrder(true);
- --print("Upgrade SmartBuff to "..SMARTBUFF_VERSION);
end
-
+
if (SMARTBUFF_OptionsGlobal == nil) then SMARTBUFF_OptionsGlobal = { }; end
OG = SMARTBUFF_OptionsGlobal;
if (OG.SplashIcon == nil) then OG.SplashIcon = true; end
if (OG.SplashMsgShort == nil) then OG.SplashMsgShort = false; end
if (OG.FirstStart == nil) then OG.FirstStart = "V0"; end
-
+
SMARTBUFF_Splash_ChangeFont(0);
+ SMARTBUFF_BuffOrderReset();
if (OG.FirstStart ~= SMARTBUFF_VERSION) then
- OG.FirstStart = SMARTBUFF_VERSION;
+ SmartBuffOptionsCredits_lblText:SetText(SMARTBUFF_CREDITS);
SMARTBUFF_OptionsFrame_Open(true);
-
- if (OG.Tutorial == nil) then
- OG.Tutorial = SMARTBUFF_VERSIONNR;
- SMARTBUFF_ToggleTutorial();
- end
-
SmartBuffWNF_lblText:SetText(SMARTBUFF_WHATSNEW);
- SmartBuffWNF:Show();
+ SmartBuffWNF:Show();
else
SMARTBUFF_SetBuffs();
end
@@ -3466,22 +3164,30 @@ function SMARTBUFF_Options_Init(self)
SmartBuff_KeyButton:ClearAllPoints();
SmartBuff_KeyButton:SetPoint("CENTER", UIParent, "CENTER", 0, 100);
end
-
- SMARTBUFF_SetUnits();
+
+ SMARTBUFF_SetTemplate();
SMARTBUFF_RebindKeys();
- isSyncReq = true;
- -- finally, client version check
- if wowTOC > SMARTBUFF_VERSIONNR or wowTOC < SMARTBUFF_VERSIONMIN then
- DEFAULT_CHAT_FRAME:AddMessage("|cff00e0ffSmartbuff : |cffff6060This version was NOT intended for client version ("..wowTOC..") - you may encounter lua errors or other issues so please check for an update! - Join Discord for all the latest information at |cffFFFF00https://discord.gg/R6EkZ94TKK.")
- end
+ -- regardless of the option in settings, grab info on gathering trackers
+ ScanPlayerTrackers();
+
+ isSyncReq = true;
end
-- END SMARTBUFF_Options_Init
-function SMARTBUFF_InitActionButtonPos()
+function SMARTBUFF_ToggleWhatsNewWindow()
+ SmartBuffWNF_lblText:SetText(SMARTBUFF_WHATSNEW);
+ if SmartBuffWNF:IsShown() then
+ SmartBuffWNF:Hide();
+ else
+ SmartBuffWNF:Show();
+ end
+end
+
+function SMARTBUFF_InitActionButtonPos()
if (InCombatLockdown()) then return end
-
+
isInitBtn = true;
if (O.ActionBtnX == nil) then
SMARTBUFF_SetButtonPos(SmartBuff_KeyButton);
@@ -3489,10 +3195,9 @@ function SMARTBUFF_InitActionButtonPos()
SmartBuff_KeyButton:ClearAllPoints();
SmartBuff_KeyButton:SetPoint("TOPLEFT", UIParent, "TOPLEFT", O.ActionBtnX, O.ActionBtnY);
end
- --print(format("x = %.0f, y = %.0f", O.ActionBtnX, O.ActionBtnY));
end
-function SMARTBUFF_ResetAll()
+function SMARTBUFF_ResetAll()
wipe(SMARTBUFF_Buffs);
wipe(SMARTBUFF_Options);
ReloadUI();
@@ -3502,7 +3207,6 @@ function SMARTBUFF_SetButtonPos(self)
local x, y = self:GetLeft(), self:GetTop() - UIParent:GetHeight();
O.ActionBtnX = x;
O.ActionBtnY = y;
- --print(format("x = %.0f, y = %.0f", x, y));
end
function SMARTBUFF_RebindKeys()
@@ -3511,55 +3215,39 @@ function SMARTBUFF_RebindKeys()
for i = 1, GetNumBindings(), 1 do
local s = "";
local command, key1, key2 = GetBinding(i);
-
- --if (command and key1) then
- -- SMARTBUFF_AddMsgD(i .. " = " .. command .. " - " .. key1;
- --end
-
if (key1 and key1 == "MOUSEWHEELUP" and command ~= "SmartBuff_KeyButton") then
O.OldWheelUp = command;
- --SMARTBUFF_AddMsgD("Old wheel up: " .. command);
elseif (key1 and key1 == "MOUSEWHEELDOWN" and command ~= "SmartBuff_KeyButton") then
O.OldWheelDown = command;
- --SMARTBUFF_AddMsgD("Old wheel down: " .. command);
- end
-
+ end
if (command and command == "SMARTBUFF_BIND_TRIGGER") then
- --s = i .. " = " .. command;
if (key1) then
- --s = s .. ", key1 = " .. key1 .. " rebound";
SetBindingClick(key1, "SmartBuff_KeyButton");
end
if (key2) then
- --s = s .. ", key2 = " .. key2 .. " rebound";
SetBindingClick(key2, "SmartBuff_KeyButton");
end
- --SMARTBUFF_AddMsgD(s);
break;
end
end
-
+
if (O.ScrollWheelUp) then
isKeyUpChanged = true;
SetOverrideBindingClick(SmartBuffFrame, false, "MOUSEWHEELUP", "SmartBuff_KeyButton", "MOUSEWHEELUP");
- --SMARTBUFF_AddMsgD("Set wheel up");
else
if (isKeyUpChanged) then
isKeyUpChanged = false;
SetOverrideBinding(SmartBuffFrame, false, "MOUSEWHEELUP");
- --SMARTBUFF_AddMsgD("Set old wheel up: " .. O.OldWheelUp);
end
end
-
+
if (O.ScrollWheelDown) then
isKeyDownChanged = true;
SetOverrideBindingClick(SmartBuffFrame, false, "MOUSEWHEELDOWN", "SmartBuff_KeyButton", "MOUSEWHEELDOWN");
- --SMARTBUFF_AddMsgD("Set wheel down");
else
if (isKeyDownChanged) then
isKeyDownChanged = false;
SetOverrideBinding(SmartBuffFrame, false, "MOUSEWHEELDOWN");
- --SMARTBUFF_AddMsgD("Set old wheel down: " .. O.OldWheelDown);
end
end
isRebinding = false;
@@ -3590,10 +3278,10 @@ function SMARTBUFF_command(msg)
SMARTBUFF_AddMsgWarn(SMARTBUFF_VERS_TITLE.." not initialized correctly!", true);
return;
end
-
+
if(msg == "toggle" or msg == "t") then
SMARTBUFF_OToggle();
- SMARTBUFF_SetUnits();
+ SMARTBUFF_SetTemplate();
elseif (msg == "menu") then
SMARTBUFF_OptionsFrame_Toggle();
elseif (msg == "rbt") then
@@ -3604,9 +3292,9 @@ function SMARTBUFF_command(msg)
if (SMARTBUFF_PreCheck(0)) then
SMARTBUFF_checkBlacklist();
SMARTBUFF_BuffUnit("target", 0, 0);
- end
+ end
elseif (msg == "debug") then
- O.Debug = SMARTBUFF_toggleBool(O.Debug, "Debug active = ");
+ O.Debug = SMARTBUFF_toggleBool(O.Debug, "Debug active = ");
elseif (msg == "open") then
SMARTBUFF_OptionsFrame_Open(true);
elseif (msg == "sync") then
@@ -3623,36 +3311,14 @@ function SMARTBUFF_command(msg)
SmartBuff_KeyButton:SetPoint("CENTER", UIParent, "CENTER");
SmartBuffOptionsFrame:ClearAllPoints();
SmartBuffOptionsFrame:SetPoint("CENTER", UIParent, "CENTER");
- SmartBuff_MiniGroup:ClearAllPoints();
- SmartBuff_MiniGroup:SetPoint("CENTER", UIParent, "CENTER");
- elseif (msg == "tmg") then
- --SMARTBUFF_OToggleMiniGrp();
- O.ShowMiniGrp = SMARTBUFF_toggleBool(O.ShowMiniGrp, "MiniGrp active = ");
- SMARTBUFF_MiniGroup_Show();
-
- elseif (msg == "test") then
-
- -- Test Code ******************************************
- -- ****************************************************
-
- --SMARTBUFF_WEAPON_SHARP_PATTERN
- --Schwerer Gewichtsstein
- --Schwerer Wetzstein
- --local a, b = SMARTBUFF_CanApplyWeaponBuff("Schwerer Wetzstein", 16);
- --print(a);
- --print(b);
-
- --local spellname = "Mind--numbing Poison";
- --SMARTBUFF_AddMsg("Original: " .. spellname, true);
- --if (string.find(spellname, "%-%-") ~= nil) then
- -- spellname = string.gsub(spellname, "%-%-", "%-");
- --end
- --SMARTBUFF_AddMsg("Modified: " .. spellname, true);
- -- ****************************************************
- -- ****************************************************
-
+ elseif (msg == "changes") then
+ SMARTBUFF_OptionsFrame_Open(true);
+ SmartBuffWNF_lblText:SetText(SMARTBUFF_WHATSNEW);
+ SmartBuffWNF:Show();
+ elseif (msg == "reload") then
+ SMARTBUFF_BuffOrderReset();
+ SMARTBUFF_OptionsFrame_Open(true);
else
- --SMARTBUFF_Check(0);
SMARTBUFF_AddMsg(SMARTBUFF_VERS_TITLE, true);
SMARTBUFF_AddMsg("Syntax: /sbo [command] or /sbuff [command] or /smartbuff [command]", true);
SMARTBUFF_AddMsg("toggle - " .. SMARTBUFF_OFT, true);
@@ -3663,6 +3329,8 @@ function SMARTBUFF_command(msg)
SMARTBUFF_AddMsg("rafp - " .. "Reset all frame positions", true);
SMARTBUFF_AddMsg("sync - " .. "Sync buff timers with UI", true);
SMARTBUFF_AddMsg("rb - " .. "Reset key/mouse bindings", true);
+ SMARTBUFF_AddMsg("changes - " .. "Display changelog", true);
+ SMARTBUFF_AddMsg("reload - " .. "Reset buff list", true)
end
end
-- END SMARTBUFF_command
@@ -3674,13 +3342,8 @@ function SMARTBUFF_OToggle()
O.Toggle = SMARTBUFF_toggleBool(O.Toggle, "Active = ");
SMARTBUFF_CheckMiniMapButton();
if (O.Toggle) then
- SMARTBUFF_MiniGroup_Show();
- SMARTBUFF_SetUnits();
- else
- if (SmartBuff_MiniGroup:IsVisible()) then
- SmartBuff_MiniGroup:Hide();
- end
- end
+ SMARTBUFF_SetTemplate();
+ end
end
function SMARTBUFF_OToggleAuto()
@@ -3698,33 +3361,21 @@ end
function SMARTBUFF_OToggleAutoSound()
O.ToggleAutoSound = not O.ToggleAutoSound;
end
-
---function SMARTBUFF_OToggleCheckCharges()
--- O.ToggleCheckCharges = not O.ToggleCheckCharges;
---end
---function SMARTBUFF_OToggleAutoRest()
--- O.ToggleAutoRest = not O.ToggleAutoRest;
---end
-
function SMARTBUFF_OAutoSwitchTmp()
O.AutoSwitchTemplate = not O.AutoSwitchTemplate;
end
function SMARTBUFF_OAutoSwitchTmpInst()
O.AutoSwitchTemplateInst = not O.AutoSwitchTemplateInst;
end
-
function SMARTBUFF_OBuffTarget()
O.BuffTarget = not O.BuffTarget;
end
-
function SMARTBUFF_OBuffPvP()
O.BuffPvP = not O.BuffPvP;
end
-
function SMARTBUFF_OBuffInCities()
O.BuffInCities = not O.BuffInCities;
end
-
function SMARTBUFF_OLinkSelfBuffCheck()
O.LinkSelfBuffCheck = not O.LinkSelfBuffCheck;
end
@@ -3734,7 +3385,6 @@ end
function SMARTBUFF_OAntiDaze()
O.AntiDaze = not O.AntiDaze;
end
-
function SMARTBUFF_OScrollWheelUp()
O.ScrollWheelUp = not O.ScrollWheelUp;
isKeyUpChanged = true;
@@ -3749,20 +3399,6 @@ end
function SMARTBUFF_OInCombat()
O.InCombat = not O.InCombat;
end
-
-function SMARTBUFF_OToggleGrp(i)
- O.ToggleGrp[i] = not O.ToggleGrp[i];
- if (SmartBuff_MiniGroup:IsVisible()) then
- SMARTBUFF_SetUnits();
- end
-end
-function SMARTBUFF_OToggleMiniGrp()
- O.ShowMiniGrp = not O.ShowMiniGrp;
-end
-function SMARTBUFF_OToggleSubGrpChanged()
- O.ToggleSubGrpChanged = not O.ToggleSubGrpChanged;
-end
-
function SMARTBUFF_OToggleMsgNormal()
O.ToggleMsgNormal = not O.ToggleMsgNormal;
end
@@ -3772,7 +3408,6 @@ end
function SMARTBUFF_OToggleMsgError()
O.ToggleMsgError = not O.ToggleMsgError;
end
-
function SMARTBUFF_OHideMmButton()
O.HideMmButton = not O.HideMmButton;
SMARTBUFF_CheckMiniMapButton();
@@ -3784,25 +3419,18 @@ end
function SMARTBUFF_OSelfFirst()
B[CS()][currentTemplate].SelfFirst = not B[CS()][currentTemplate].SelfFirst;
end
-function SMARTBUFF_OWarnWhenMountedButton()
- O.WarnWhileMounted = not O.WarnWhileMounted;
+function SMARTBUFF_OTrackSwitchFish()
+ O.TrackSwitchFish = not O.TrackSwitchFish;
end
function SMARTBUFF_OToggleBuff(s, i)
local bs = GetBuffSettings(cBuffs[i].BuffS);
if (bs == nil) then
return;
- end
-
+ end
+
if (s == "S") then
bs.EnableS = not bs.EnableS;
- if (bs.IDG ~= nil) then
- bs.EnableG = bs.EnableS;
- else
- bs.EnableG = false;
- end
- SMARTBUFF_AddMsgD("OToggleBuff = "..cBuffs[i].BuffS..", "..tostring(bs.EnableS)..", "..tostring(bs.EnableG));
-
if (bs.EnableS) then
SmartBuff_BuffSetup_Show(i);
else
@@ -3813,36 +3441,45 @@ function SMARTBUFF_OToggleBuff(s, i)
elseif (s == "G") then
bs.EnableG = not bs.EnableG;
end
-
+
end
function SMARTBUFF_OToggleDebug()
O.Debug = not O.Debug;
end
+function SMARTBUFF_ToggleFixBuffing()
+ O.SBButtonFix = not O.SBButtonFix;
+ if not O.SBButtonFix then SetCVar("ActionButtonUseKeyDown", O.SBButtonDownVal ); end
+end
+
function SMARTBUFF_OptionsFrame_Toggle()
if (not isInit) then return; end
-
+
if(SmartBuffOptionsFrame:IsVisible()) then
if(iLastBuffSetup > 0) then
SmartBuff_BuffSetup:Hide();
iLastBuffSetup = -1;
SmartBuff_PlayerSetup:Hide();
- end
+ end
SmartBuffOptionsFrame:Hide();
+ -- if we were a new build then request a reloadui.
+ if (OG.FirstStart ~= SMARTBUFF_VERSION) then
+ OG.FirstStart = SMARTBUFF_VERSION;
+ StaticPopup_Show("SMARTBUFF_GUI_RELOAD");
+ end
else
SmartBuffOptionsCredits_lblText:SetText(SMARTBUFF_CREDITS);
SmartBuffOptionsFrame:Show();
SmartBuff_PlayerSetup:Hide();
end
-
+
SMARTBUFF_MinimapButton_CheckPos();
end
function SMARTBUFF_OptionsFrame_Open(force)
if (not isInit) then return; end
if(not SmartBuffOptionsFrame:IsVisible() or force) then
- SmartBuffOptionsCredits_lblText:SetText(SMARTBUFF_CREDITS);
SmartBuffOptionsFrame:Show();
end
end
@@ -3862,17 +3499,17 @@ function SmartBuff_BuffSetup_Show(i)
SmartBuff_PlayerSetup:Hide();
return;
end
-
+
if(SmartBuff_BuffSetup:IsVisible() and i == iLastBuffSetup) then
SmartBuff_BuffSetup:Hide();
iLastBuffSetup = -1;
SmartBuff_PlayerSetup:Hide();
return;
- else
+ else
if (btype == SMARTBUFF_CONST_GROUP or btype == SMARTBUFF_CONST_ITEMGROUP) then
hidden = false;
end
-
+
if (icon2 and bs.EnableG) then
SmartBuff_BuffSetup_BuffIcon2:SetNormalTexture(icon2);
SmartBuff_BuffSetup_BuffIcon2:Show();
@@ -3891,15 +3528,14 @@ function SmartBuff_BuffSetup_Show(i)
SmartBuff_BuffSetup_BuffIcon1:SetPoint("TOPLEFT", 24, -30);
SmartBuff_BuffSetup_BuffIcon1:Hide();
end
-
+
local obj = SmartBuff_BuffSetup_BuffText;
if (name) then
obj:SetText(name);
- --SMARTBUFF_AddMsgD(name);
else
obj:SetText("");
end
-
+
SmartBuff_BuffSetup_cbSelf:SetChecked(bs.SelfOnly);
SmartBuff_BuffSetup_cbSelfNot:SetChecked(bs.SelfNot);
SmartBuff_BuffSetup_cbCombatIn:SetChecked(bs.CIn);
@@ -3909,8 +3545,7 @@ function SmartBuff_BuffSetup_Show(i)
SmartBuff_BuffSetup_cbRH:SetChecked(bs.RH);
SmartBuff_BuffSetup_cbReminder:SetChecked(bs.Reminder);
SmartBuff_BuffSetup_txtManaLimit:SetNumber(bs.ManaLimit);
-
- --SMARTBUFF_AddMsgD("Test Buff setup show 1");
+
if (cBuffs[i].DurationS > 0) then
SmartBuff_BuffSetup_RBTime:SetMinMaxValues(0, cBuffs[i].DurationS);
_G[SmartBuff_BuffSetup_RBTime:GetName().."High"]:SetText(cBuffs[i].DurationS);
@@ -3929,8 +3564,7 @@ function SmartBuff_BuffSetup_Show(i)
else
SmartBuff_BuffSetup_RBTime:Hide();
end
- --SMARTBUFF_AddMsgD("Test Buff setup show 2");
-
+
SmartBuff_BuffSetup_txtManaLimit:Hide();
if (cBuffs[i].Type == SMARTBUFF_CONST_INV or cBuffs[i].Type == SMARTBUFF_CONST_WEAPON) then
SmartBuff_BuffSetup_cbMH:Show();
@@ -3942,15 +3576,14 @@ function SmartBuff_BuffSetup_Show(i)
SmartBuff_BuffSetup_cbRH:Hide();
if (cBuffs[i].Type ~= SMARTBUFF_CONST_FOOD and cBuffs[i].Type ~= SMARTBUFF_CONST_SCROLL and cBuffs[i].Type ~= SMARTBUFF_CONST_POTION) then
SmartBuff_BuffSetup_txtManaLimit:Show();
- --SMARTBUFF_AddMsgD("Show ManaLimit");
end
end
-
+
if (cBuffs[i].Type == SMARTBUFF_CONST_GROUP or cBuffs[i].Type == SMARTBUFF_CONST_ITEMGROUP) then
SmartBuff_BuffSetup_cbSelf:Show();
SmartBuff_BuffSetup_cbSelfNot:Show();
SmartBuff_BuffSetup_btnPriorityList:Show();
- SmartBuff_BuffSetup_btnIgnoreList:Show();
+ SmartBuff_BuffSetup_btnIgnoreList:Show();
else
SmartBuff_BuffSetup_cbSelf:Hide();
SmartBuff_BuffSetup_cbSelfNot:Hide();
@@ -3958,11 +3591,10 @@ function SmartBuff_BuffSetup_Show(i)
SmartBuff_BuffSetup_btnIgnoreList:Hide();
SmartBuff_PlayerSetup:Hide();
end
-
+
local cb = nil;
local btn = nil;
n = 0;
- --SMARTBUFF_AddMsgD("Test Buff setup show 3");
for _ in pairs(cClasses) do
n = n + 1;
cb = _G["SmartBuff_BuffSetup_cbClass"..n];
@@ -3977,13 +3609,12 @@ function SmartBuff_BuffSetup_Show(i)
end
end
iLastBuffSetup = i;
- --SMARTBUFF_AddMsgD("Test Buff setup show 4");
SmartBuff_BuffSetup:Show();
-
+
if (SmartBuff_PlayerSetup:IsVisible()) then
SmartBuff_PS_Show(iCurrentList);
end
- end
+ end
end
function SmartBuff_BuffSetup_ManaLimitChanged(self)
@@ -4004,7 +3635,7 @@ function SmartBuff_BuffSetup_OnClick()
end
local name = cBuffs[i].BuffS;
local cBuff = GetBuffSettings(name);
-
+
cBuff.SelfOnly = SmartBuff_BuffSetup_cbSelf:GetChecked();
cBuff.SelfNot = SmartBuff_BuffSetup_cbSelfNot:GetChecked();
cBuff.CIn = SmartBuff_BuffSetup_cbCombatIn:GetChecked();
@@ -4013,10 +3644,10 @@ function SmartBuff_BuffSetup_OnClick()
cBuff.OH = SmartBuff_BuffSetup_cbOH:GetChecked();
cBuff.RH = SmartBuff_BuffSetup_cbRH:GetChecked();
cBuff.Reminder = SmartBuff_BuffSetup_cbReminder:GetChecked();
-
+
cBuff.RBTime = SmartBuff_BuffSetup_RBTime:GetValue();
_G[SmartBuff_BuffSetup_RBTime:GetName().."Text"]:SetText(cBuff.RBTime .. "\nsec");
-
+
if (cBuffs[i].Type == SMARTBUFF_CONST_GROUP or cBuffs[i].Type == SMARTBUFF_CONST_ITEMGROUP) then
local n = 0;
local cb = nil;
@@ -4027,7 +3658,7 @@ function SmartBuff_BuffSetup_OnClick()
cBuff[cClasses[n]] = false;
else
cBuff[cClasses[n]] = cb:GetChecked();
- end
+ end
end
end
--SMARTBUFF_AddMsgD("Buff setup saved");
@@ -4041,7 +3672,7 @@ function SmartBuff_BuffSetup_ToolTip(mode)
local ids = cBuffs[i].IDS;
local idg = cBuffs[i].IDG;
local btype = cBuffs[i].Type
-
+
GameTooltip:ClearLines();
if (SMARTBUFF_IsItem(btype)) then
local bag, slot, count, texture = SMARTBUFF_FindItem(cBuffs[i].BuffS, cBuffs[i].Chain);
@@ -4054,9 +3685,11 @@ function SmartBuff_BuffSetup_ToolTip(mode)
end
else
if (mode == 1 and ids) then
- GameTooltip:SetHyperlink("spell:" .. ids);
+ local link = GetSpellLink(ids);
+ if (link) then GameTooltip:SetHyperlink(link); end
elseif (mode == 2 and idg) then
- GameTooltip:SetHyperlink("spell:" .. idg);
+ local link = GetSpellLink(idg);
+ if (link) then GameTooltip:SetHyperlink(link); end
end
end
GameTooltip:Show();
@@ -4074,16 +3707,13 @@ function SMARTBUFF_Options_OnShow()
local bottom = GetScreenHeight() - math.abs(SmartBuffOptionsFrame:GetBottom());
local left = SmartBuffOptionsFrame:GetLeft();
local right = SmartBuffOptionsFrame:GetRight();
-
- --SMARTBUFF_AddMsgD("X: " .. GetScreenWidth() .. ", " .. left .. ", " .. right);
- --SMARTBUFF_AddMsgD("Y: " .. GetScreenHeight() .. ", " .. top .. ", " .. bottom);
-
+
if (GetScreenWidth() < left + 20 or GetScreenHeight() < top + 20 or right < 20 or bottom < 20) then
SmartBuffOptionsFrame:SetPoint("TOPLEFT", UIParent, "CENTER", -SmartBuffOptionsFrame:GetWidth() / 2, SmartBuffOptionsFrame:GetHeight() / 2);
end
-
+
SmartBuff_ShowControls("SmartBuffOptionsFrame", true);
-
+
SmartBuffOptionsFrame_cbSB:SetChecked(O.Toggle);
SmartBuffOptionsFrame_cbAuto:SetChecked(O.ToggleAuto);
SmartBuffOptionsFrameAutoTimer:SetValue(O.AutoTimer);
@@ -4092,20 +3722,19 @@ function SMARTBUFF_Options_OnShow()
SmartBuffOptionsFrame_cbAutoChat:SetChecked(O.ToggleAutoChat);
SmartBuffOptionsFrame_cbAutoSplash:SetChecked(O.ToggleAutoSplash);
SmartBuffOptionsFrame_cbAutoSound:SetChecked(O.ToggleAutoSound);
- --SmartBuffOptionsFrame_cbCheckCharges:SetChecked(O.ToggleCheckCharges);
- --SmartBuffOptionsFrame_cbAutoRest:SetChecked(O.ToggleAutoRest);
+
SmartBuffOptionsFrame_cbAutoSwitchTmp:SetChecked(O.AutoSwitchTemplate);
SmartBuffOptionsFrame_cbAutoSwitchTmpInst:SetChecked(O.AutoSwitchTemplateInst);
SmartBuffOptionsFrame_cbBuffPvP:SetChecked(O.BuffPvP);
SmartBuffOptionsFrame_cbBuffTarget:SetChecked(O.BuffTarget);
SmartBuffOptionsFrame_cbBuffInCities:SetChecked(O.BuffInCities);
- SmartBuffOptionsFrame_cbInShapeshift:SetChecked(O.InShapeshift);
- SmartBuffOptionsFrame_cbWarnWhenMounted:SetChecked(O.WarnWhileMounted);
-
+ SmartBuffOptionsFrame_cbInShapeshift:SetChecked(O.InShapeshift);
+ SmartBuffOptionsFrame_cbFixBuffIssue:SetChecked(O.SBButtonFix);
+
SmartBuffOptionsFrame_cbAntiDaze:SetChecked(O.AntiDaze);
SmartBuffOptionsFrame_cbLinkGrpBuffCheck:SetChecked(O.LinkGrpBuffCheck);
SmartBuffOptionsFrame_cbLinkSelfBuffCheck:SetChecked(O.LinkSelfBuffCheck);
-
+
SmartBuffOptionsFrame_cbScrollWheelUp:SetChecked(O.ScrollWheelUp);
SmartBuffOptionsFrame_cbScrollWheelDown:SetChecked(O.ScrollWheelDown);
SmartBuffOptionsFrame_cbInCombat:SetChecked(O.InCombat);
@@ -4114,28 +3743,22 @@ function SMARTBUFF_Options_OnShow()
SmartBuffOptionsFrame_cbMsgError:SetChecked(O.ToggleMsgError);
SmartBuffOptionsFrame_cbHideMmButton:SetChecked(O.HideMmButton);
SmartBuffOptionsFrame_cbHideSAButton:SetChecked(O.HideSAButton);
-
+
+ SmartBuffOptionsFrame_cbGatherAutoSwitch:SetChecked(O.TrackSwitchActive);
+ SmartBuffOptionsFrame_cbGatherAutoSwitchFish:SetChecked(O.TrackSwitchFish);
+
SmartBuffOptionsFrameRebuffTimer:SetValue(O.RebuffTimer);
SmartBuff_SetSliderText(SmartBuffOptionsFrameRebuffTimer, SMARTBUFF_OFT_REBUFFTIMER, O.RebuffTimer, INT_SPELL_DURATION_SEC);
SmartBuffOptionsFrameBLDuration:SetValue(O.BlacklistTimer);
SmartBuff_SetSliderText(SmartBuffOptionsFrameBLDuration, SMARTBUFF_OFT_BLDURATION, O.BlacklistTimer, INT_SPELL_DURATION_SEC);
- SMARTBUFF_ShowSubGroupsOptions();
SMARTBUFF_SetCheckButtonBuffs(0);
SmartBuffOptionsFrame_cbSelfFirst:SetChecked(B[CS()][currentTemplate].SelfFirst);
-
- SMARTBUFF_Splash_Show();
-
- SMARTBUFF_AddMsgD("Option frame updated: " .. currentTemplate);
-end
-function SMARTBUFF_ShowSubGroupsMini()
- SMARTBUFF_ShowSubGroups("SmartBuff_MiniGroup", O.ToggleGrp);
-end
+ SMARTBUFF_Splash_Show();
-function SMARTBUFF_ShowSubGroupsOptions()
- SMARTBUFF_ShowSubGroups("SmartBuffOptionsFrame", O.ToggleGrp);
+ SMARTBUFF_AddMsgD("Option frame updated: " .. currentTemplate);
end
function SMARTBUFF_ShowSubGroups(frame, grpTable)
@@ -4152,23 +3775,18 @@ function SMARTBUFF_Options_OnHide()
if (SmartBuffWNF:IsVisible()) then
SmartBuffWNF:Hide();
end
- SMARTBUFF_ToggleTutorial(true);
SmartBuffOptionsFrame:SetHeight(SMARTBUFF_OPTIONSFRAME_HEIGHT);
- --SmartBuff_BuffSetup:SetHeight(SMARTBUFF_OPTIONSFRAME_HEIGHT);
wipe(cBuffsCombat);
- SMARTBUFF_SetInCombatBuffs();
+ SMARTBUFF_SetInCombatBuffs();
SmartBuff_BuffSetup:Hide();
SmartBuff_PlayerSetup:Hide();
- SMARTBUFF_SetUnits();
SMARTBUFF_Splash_Hide();
SMARTBUFF_RebindKeys();
- --collectgarbage();
end
function SmartBuff_ShowControls(sName, bShow)
local children = {_G[sName]:GetChildren()};
for i, child in pairs(children) do
- --SMARTBUFF_AddMsgD(i .. ": " .. child:GetName());
if (i > 1 and string.find(child:GetName(), "^"..sName..".+")) then
if (bShow) then
child:Show();
@@ -4195,9 +3813,9 @@ function SmartBuffOptionsFrameSlider_OnLoad(self, low, high, step, labels)
self:SetMinMaxValues(low, high);
self:SetValueStep(step);
self:SetStepsPerPage(step);
-
+
if (step < 1) then return; end
-
+
self.GetValueBase = self.GetValue;
self.GetValue = function()
local n = self:GetValueBase();
@@ -4209,7 +3827,7 @@ function SmartBuffOptionsFrameSlider_OnLoad(self, low, high, step, labels)
return r;
end
return low;
- end;
+ end;
end
function SmartBuff_SetSliderText(self, text, value, valformat, setval)
@@ -4228,7 +3846,7 @@ function SmartBuff_BuffSetup_RBTime_OnValueChanged(self)
_G[SmartBuff_BuffSetup_RBTime:GetName().."Text"]:SetText(WH..format("%.0f", self:GetValue()).."\nsec|r");
end
-function SMARTBUFF_SetCheckButtonBuffs(mode)
+function SMARTBUFF_SetCheckButtonBuffs(mode)
local objS;
local objG;
local i = 1;
@@ -4237,24 +3855,24 @@ function SMARTBUFF_SetCheckButtonBuffs(mode)
if (mode == 0) then
SMARTBUFF_SetBuffs();
end
-
+
SmartBuffOptionsFrame_cbAntiDaze:Hide();
-
- if (sPlayerClass == "HUNTER" or sPlayerClass == "ROGUE" or sPlayerClass == "WARRIOR") then
+
+ if (sPlayerClass == "HUNTER" or sPlayerClass == "ROGUE" or sPlayerClass == "WARRIOR") then
SmartBuffOptionsFrameBLDuration:Hide();
if (sPlayerClass == "HUNTER") then
SmartBuffOptionsFrame_cbLinkGrpBuffCheck:Hide();
SmartBuffOptionsFrame_cbAntiDaze:Show();
end
end
-
+
if (sPlayerClass == "DRUID" or sPlayerClass == "SHAMAN") then
SmartBuffOptionsFrame_cbInShapeshift:Show();
else
SmartBuffOptionsFrame_cbInShapeshift:Hide();
end
-
- SMARTBUFF_BuffOrderOnScroll();
+
+ SMARTBUFF_BuffOrderOnScroll();
end
@@ -4262,7 +3880,6 @@ function SMARTBUFF_DropDownTemplate_OnShow(self)
local i = 0;
for _, tmp in pairs(SMARTBUFF_TEMPLATES) do
i = i + 1;
- --SMARTBUFF_AddMsgD(i .. "." .. tmp);
if (tmp == currentTemplate) then
break;
end
@@ -4274,9 +3891,9 @@ end
function SMARTBUFF_DropDownTemplate_Initialize()
local info = UIDropDownMenu_CreateInfo();
- info.text = ALL;
- info.value = -1;
- info.func = SMARTBUFF_DropDownTemplate_OnClick;
+ info.text = ALL;
+ info.value = -1;
+ info.func = SMARTBUFF_DropDownTemplate_OnClick;
for k, v in pairs(SMARTBUFF_TEMPLATES) do
info.text = SMARTBUFF_TEMPLATES[k];
info.value = k;
@@ -4289,14 +3906,13 @@ end
function SMARTBUFF_DropDownTemplate_OnClick(self)
local i = self.value;
local tmp = nil;
- UIDropDownMenu_SetSelectedValue(SmartBuffOptionsFrame_ddTemplates, i);
+ UIDropDownMenu_SetSelectedValue(SmartBuffOptionsFrame_ddTemplates, i);
tmp = SMARTBUFF_TEMPLATES[i];
- --SMARTBUFF_AddMsgD("Selected/Current Buff-Template: " .. tmp .. "/" .. currentTemplate);
if (currentTemplate ~= tmp) then
SmartBuff_BuffSetup:Hide();
iLastBuffSetup = -1;
SmartBuff_PlayerSetup:Hide();
-
+
currentTemplate = tmp;
SMARTBUFF_Options_OnShow();
O.LastTemplate = currentTemplate;
@@ -4307,7 +3923,7 @@ end
-- Splash screen functions ---------------------------------------------------------------------------------------
function SMARTBUFF_Splash_Show()
- if (not isInit) then return; end
+ if (not isInit) then return; end
SMARTBUFF_Splash_ChangeFont(1);
SmartBuffSplashFrame:EnableMouse(true);
SmartBuffSplashFrame:Show();
@@ -4316,7 +3932,7 @@ function SMARTBUFF_Splash_Show()
end
function SMARTBUFF_Splash_Hide()
- if (not isInit) then return; end
+ if (not isInit) then return; end
SMARTBUFF_Splash_Clear();
SMARTBUFF_Splash_ChangePos();
SmartBuffSplashFrame:EnableMouse(false);
@@ -4339,9 +3955,9 @@ end
function SMARTBUFF_Splash_ChangeFont(mode)
local f = SmartBuffSplashFrame;
-
+
if (mode > 1) then
- SMARTBUFF_Splash_ChangePos();
+ SMARTBUFF_Splash_ChangePos();
iCurrentFont = iCurrentFont + 1;
end
if (not cFonts[iCurrentFont]) then
@@ -4350,7 +3966,7 @@ function SMARTBUFF_Splash_ChangeFont(mode)
O.CurrentFont = iCurrentFont;
f:ClearAllPoints();
f:SetPoint("TOPLEFT", O.SplashX, O.SplashY);
-
+
local fo = f:GetFontObject();
local fName, fHeight, fFlags = _G[cFonts[iCurrentFont]]:GetFont();
if (mode > 1 or O.CurrentFontSize == nil) then
@@ -4358,12 +3974,12 @@ function SMARTBUFF_Splash_ChangeFont(mode)
end
fo:SetFont(fName, O.CurrentFontSize, fFlags);
SmartBuffSplashFrameOptions.size:SetValue(O.CurrentFontSize);
-
+
f:SetInsertMode("TOP");
f:SetJustifyV("MIDDLE");
if (mode > 0) then
local si = "";
- if (OG.SplashIcon) then
+ if (OG.SplashIcon) then
local n = O.SplashIconSize;
if (n == nil or n <= 0) then
n = O.CurrentFontSize;
@@ -4392,7 +4008,7 @@ end
function SmartBuff_PS_GetList()
if (iLastBuffSetup <= 0) then return { } end
-
+
local name = cBuffs[iLastBuffSetup].BuffS;
if (name) then
if (iCurrentList == 1) then
@@ -4433,7 +4049,7 @@ function SmartBuff_PS_Show(i)
obj:ClearFocus();
SmartBuff_PlayerSetup_EditBox:ClearFocus();
SmartBuff_PlayerSetup:Show();
- SmartBuff_PS_SelectPlayer(0);
+ SmartBuff_PS_SelectPlayer(0);
end
function SmartBuff_PS_AddPlayer()
@@ -4442,7 +4058,7 @@ function SmartBuff_PS_AddPlayer()
if (un and UnitIsPlayer("target") and (UnitInRaid("target") or UnitInParty("target") or O.Debug)) then
if (not cList[un]) then
cList[un] = true;
- SmartBuff_PS_SelectPlayer(0);
+ SmartBuff_PS_SelectPlayer(0);
end
end
end
@@ -4456,19 +4072,18 @@ function SmartBuff_PS_RemovePlayer()
cList[player] = nil;
break;
end
- end
- SmartBuff_PS_SelectPlayer(0);
+ end
+ SmartBuff_PS_SelectPlayer(0);
end
function SmartBuff_AddToUnitList(idx, unit, subgroup)
iCurrentList = idx;
local cList = SmartBuff_PS_GetList();
- local cUnitList = SmartBuff_PS_GetUnitList();
+ local cUnitList = SmartBuff_PS_GetUnitList();
if (unit and subgroup) then
local un = UnitName(unit);
if (un and cList[un]) then
cUnitList[unit] = subgroup;
- --print("Added to UnitList:" .. un .. "(" .. unit .. ")");
end
end
end
@@ -4477,19 +4092,18 @@ function SmartBuff_PS_SelectPlayer(iOp)
local idx = iLastPlayer + iOp;
local cList = SmartBuff_PS_GetList();
local s = "";
-
+
local tn = 0;
for player in pairs(cList) do
tn = tn + 1;
s = s .. player .. "\n";
end
-
+
-- update list in textbox
if (iOp == 0) then
SmartBuff_PlayerSetup_EditBox:SetText(s);
- --SmartBuff_PlayerSetup_EditBox:ClearFocus();
end
-
+
-- highlight selected player
if (tn > 0) then
if (idx > tn) then idx = tn; end
@@ -4514,47 +4128,22 @@ end
function SmartBuff_PS_Resize()
local h = SmartBuffOptionsFrame:GetHeight();
local b = true;
-
+
if (h < 200) then
SmartBuffOptionsFrame:SetHeight(SMARTBUFF_OPTIONSFRAME_HEIGHT);
- --SmartBuff_BuffSetup:SetHeight(SMARTBUFF_OPTIONSFRAME_HEIGHT);
b = true;
else
SmartBuffOptionsFrame:SetHeight(40);
- --SmartBuff_BuffSetup:SetHeight(40);
b = false;
end
- SmartBuff_ShowControls("SmartBuffOptionsFrame", b);
+ SmartBuff_ShowControls("SmartBuffOptionsFrame", b);
if (b) then
SMARTBUFF_SetCheckButtonBuffs(1);
end
end
-- END Playerlist functions
-
--- Mini group functions ---------------------------------------------------------------------------------------
-function SMARTBUFF_MiniGroup_OnShow()
- SmartBuff_MiniGroup_Title:SetText(SMARTBUFF_TITLE.." - "..currentTemplate);
- SMARTBUFF_ShowSubGroupsMini();
-end
-
-function SMARTBUFF_MiniGroup_OnHide()
-end
-
-function SMARTBUFF_MiniGroup_Show()
- --if (O.ShowMiniGrp) then
- if (O.ShowMiniGrp and iGroupSetup == 3) then
- SmartBuff_MiniGroup:Show();
- else
- if (SmartBuff_MiniGroup:IsVisible()) then
- SmartBuff_MiniGroup:Hide();
- end
- end
-end
--- END Mini group functions
-
-
--- Secure button functions, NEW TBC ---------------------------------------------------------------------------------------
+-- Secure button functions
function SMARTBUFF_ShowSAButton()
if (not InCombatLockdown()) then
if (O.HideSAButton) then
@@ -4574,88 +4163,84 @@ end
local lastBuffType = "";
function SMARTBUFF_OnPreClick(self, button, down)
if (not isInit) then return end
-
local mode = 0;
if (button) then
if (button == "MOUSEWHEELUP" or button == "MOUSEWHEELDOWN") then
mode = 5;
end
end
-
+
if (not InCombatLockdown()) then
self:SetAttribute("type", nil);
self:SetAttribute("unit", nil);
self:SetAttribute("spell", nil);
self:SetAttribute("item", nil);
self:SetAttribute("macrotext", nil);
- self:SetAttribute("target-slot", nil);
+ self:SetAttribute("target-slot", nil);
self:SetAttribute("target-item", nil);
self:SetAttribute("action", nil);
end
-
- --sScript = self:GetScript("OnClick");
- --self:SetScript("OnClick", SMARTBUFF_OnClick);
-
+
+ -- leaving in for classic, its possible blizzard decide to make the
+ -- same changes they did in retail.. you never know!
+
+ if O.SBButtonFix then
+ -- macros really dont like the cvar set to 1 so lets test we are
+ -- actually clicking the action button rather than using the scroll
+ -- mouse to ensure buffing works for both.
+ if button == "LeftButton" or button == "RightButton" then
+ -- clicked manually either the action button or macro
+ -- using a mouse button - crazy blizzard issues strike
+ -- again :)
+ C_CVar.SetCVar("ActionButtonUseKeyDown", 0 );
+ else
+ -- assume this is a scroll mouse.
+ C_CVar.SetCVar("ActionButtonUseKeyDown", 1 );
+ end
+ end
+
local td;
if (lastBuffType == "") then
td = 0.8;
else
td = GlobalCd;
end
- --SMARTBUFF_AddMsgD("Last buff type: " .. lastBuffType .. ", set cd: " .. td);
-
- local casting = UnitCastingInfo("player") or UnitChannelInfo("player");
- --print(casting);
- if (casting ~= nil) then
- --print("Casting", casting, "-> Reset AutoBuff timer");
+
+ if (UnitCastingInfo("player")) then
tAutoBuff = GetTime() + 0.7;
return;
end
-
+
if (GetTime() < (tAutoBuff + td)) then return end
-
- --SMARTBUFF_AddMsgD("next buff check");
+
tAutoBuff = GetTime();
lastBuffType = "";
currentUnit = nil;
currentSpell = nil;
- currentRank = nil;
-
+
if (not InCombatLockdown()) then
- local ret, actionType, spellName, slot, unit, buffType, rankText = SMARTBUFF_Check(mode);
+ local ret, actionType, spellName, slot, unit, buffType = SMARTBUFF_Check(mode);
if (ret and ret == 0 and actionType and spellName and unit) then
lastBuffType = buffType;
self:SetAttribute("type", actionType);
self:SetAttribute("unit", unit);
- if (actionType == SMARTBUFF_ACTION_SPELL) then
+ if (actionType == SMARTBUFF_ACTION_SPELL) then
if (slot and slot > 0 and unit == "player") then
self:SetAttribute("type", "macro");
self:SetAttribute("macrotext", string.format("/use %s\n/use %i\n/click StaticPopup1Button1", spellName, slot));
- --self:SetAttribute("target-item", slot);
SMARTBUFF_AddMsgD("Weapon buff "..spellName..", "..slot);
else
- --rankText = "(Rang 1)";
- local name = spellName;
- if (rankText ~= nil) then
- name = spellName..rankText;
- end
- SMARTBUFF_AddMsgD("SetAttribute 'spell' = "..name);
- self:SetAttribute("spell", name);
+ self:SetAttribute("spell", spellName);
end
-
+
if (cBuffIndex[spellName]) then
currentUnit = unit;
currentSpell = spellName;
end
-
+
elseif (actionType == SMARTBUFF_ACTION_ITEM and slot) then
- --if (spellname ~= nil and string.find(spellname, "%-%-") ~= nil) then
- -- spellname = string.gsub(spellname, "%-%-", "%-");
- --end
self:SetAttribute("item", spellName);
if (slot > 0) then
- --self:SetAttribute("target-slot", slot);
-
self:SetAttribute("type", "macro");
self:SetAttribute("macrotext", string.format("/use %s\n/use %i\n/click StaticPopup1Button1", spellName, slot));
end
@@ -4664,8 +4249,6 @@ function SMARTBUFF_OnPreClick(self, button, down)
else
SMARTBUFF_AddMsgD("Preclick: not supported actiontype -> " .. actionType);
end
-
- --isClearSplash = true;
tLastCheck = GetTime() - O.AutoTimer + GlobalCd;
end
end
@@ -4673,7 +4256,6 @@ end
function SMARTBUFF_OnPostClick(self, button, down)
if (not isInit) then return end
-
if (button) then
if (button == "MOUSEWHEELUP") then
CameraZoomIn(1);
@@ -4681,54 +4263,9 @@ function SMARTBUFF_OnPostClick(self, button, down)
CameraZoomOut(1);
end
end
-
+
if (InCombatLockdown()) then return end
-
- --[[
- if (O.Toggle) then
- if (O.InCombat) then
- for spell, data in pairs(cBuffsCombat) do
- if (data and data.Unit and data.ActionType) then
- SmartBuff_KeyButton:SetAttribute("unit", data.Unit);
- SmartBuff_KeyButton:SetAttribute("type", data.ActionType);
- SmartBuff_KeyButton:SetAttribute("spell", spell);
- SmartBuff_KeyButton:SetAttribute("item", nil);
- SmartBuff_KeyButton:SetAttribute("target-slot", nil);
- SmartBuff_KeyButton:SetAttribute("action", nil);
- SMARTBUFF_AddMsgD("Enter Combat, set button: " .. spell .. " on " .. data.Unit .. ", " .. data.ActionType);
- break;
- end
- end
- end
- end
- ]]--
-
- --local posX, posY = GetPlayerMapPosition("player");
- --SMARTBUFF_AddMsgD("X = " .. posX .. ", Y = " .. posY);
- --if (UnitCreatureType("target")) then
- -- SMARTBUFF_AddMsgD(UnitCreatureType("target"));
- --end
-
- --[[
- local r = IsSpellInRange("Nachwachsen", "target")
- if(r and r == 1) then
- SMARTBUFF_AddMsgD("Spell in range");
- elseif(r and r == 0) then
- SMARTBUFF_AddMsgD("OOR");
- end
- ]]--
-
- --[[
- local s = "";
- local button = SecureStateChild_GetEffectiveButton(self);
- local type = SecureButton_GetModifiedAttribute(self, "type", button, "");
- local unit = SecureButton_GetModifiedAttribute(self, "unit", button, "");
- local spell = SecureButton_GetModifiedAttribute(self, "spell", button, "");
- if (type and unit and spell) then
- s = s .. type .. ", " .. unit .. ", " .. spell;
- end
- ]]--
-
+
self:SetAttribute("type", nil);
self:SetAttribute("unit", nil);
self:SetAttribute("spell", nil);
@@ -4737,19 +4274,21 @@ function SMARTBUFF_OnPostClick(self, button, down)
self:SetAttribute("target-item", nil);
self:SetAttribute("macrotext", nil);
self:SetAttribute("action", nil);
-
+
SMARTBUFF_SetButtonTexture(SmartBuff_KeyButton, imgSB);
- --SMARTBUFF_AddMsgD("Button reseted, " .. button);
- --self:SetScript("OnClick", sScript);
+
+ -- ensure we reset the cvar back to the original players setting
+ -- if it was previously changed due to casting issues.
+ if O.SBButtonFix then
+ C_CVar.SetCVar("ActionButtonUseKeyDown", O.SBButtonDownVal );
+ end
+
end
function SMARTBUFF_SetButtonTexture(button, texture, text)
- --if (InCombatLockdown()) then return; end
-
if (button and texture and texture ~= sLastTexture) then
sLastTexture = texture;
button:SetNormalTexture(texture);
- --SMARTBUFF_AddMsgD("Button slot texture set -> " .. texture);
if (text) then
--button.title:SetText(spell);
end
@@ -4766,41 +4305,37 @@ function SMARTBUFF_CheckMiniMapButton()
else
SmartBuff_MiniMapButton:SetNormalTexture(imgIconOff);
end
-
+
if (O.HideMmButton) then
SmartBuff_MiniMapButton:Hide();
else
SmartBuff_MiniMapButton:Show();
end
-
+
-- Update the Titan Panel icon
if (TitanPanelBarButton and TitanPanelSmartBuffButton_SetIcon ~= nil) then
TitanPanelSmartBuffButton_SetIcon();
end
-
+
-- Update the FuBar icon
if (IsAddOnLoaded("FuBar") and IsAddOnLoaded("FuBar_SmartBuffFu") and SMARTBUFF_Fu_SetIcon ~= nil) then
SMARTBUFF_Fu_SetIcon();
end
-
+
-- Update the Broker icon
- if (IsAddOnLoaded("Broker_SmartBuff") and SMARTBUFF_BROKER_SetIcon ~= nil) then
SMARTBUFF_BROKER_SetIcon();
- end
-
end
function SMARTBUFF_MinimapButton_CheckPos()
if (not isInit or not SmartBuff_MiniMapButton) then return; end
local x = SmartBuff_MiniMapButton:GetLeft();
- local y = SmartBuff_MiniMapButton:GetTop();
+ local y = SmartBuff_MiniMapButton:GetTop();
if (x == nil or y == nil) then return; end
x = x - Minimap:GetLeft();
- y = y - Minimap:GetTop();
+ y = y - Minimap:GetTop();
if (math.abs(x) < 180 and math.abs(y) < 180) then
O.MMCPosX = x;
O.MMCPosY = y;
- --SMARTBUFF_AddMsgD("x = " .. O.MMCPosX .. ", y = " .. O.MMCPosY);
end
end
@@ -4811,7 +4346,7 @@ function SMARTBUFF_MinimapButton_OnUpdate(self, move)
end
local xpos, ypos;
- self:ClearAllPoints();
+ self:ClearAllPoints()
if (move or O.MMCPosX == nil) then
local pos, r
local xmin, ymin = Minimap:GetLeft(), Minimap:GetBottom();
@@ -4820,35 +4355,29 @@ function SMARTBUFF_MinimapButton_OnUpdate(self, move)
ypos = ypos/Minimap:GetEffectiveScale()-ymin-70;
pos = math.deg(math.atan2(ypos,xpos));
r = math.sqrt(xpos*xpos + ypos*ypos);
- --SMARTBUFF_AddMsgD("x = " .. xpos .. ", y = " .. ypos .. ", r = " .. r .. ", pos = " .. pos);
-
+
if (r < 75) then
r = 75;
elseif(r > 105) then
r = 105;
end
-
+
xpos = 52-r*cos(pos);
ypos = r*sin(pos)-52;
O.MMCPosX = xpos;
O.MMCPosY = ypos;
- --SMARTBUFF_AddMsgD("Update minimap button position");
else
xpos = O.MMCPosX;
ypos = O.MMCPosY;
- --SMARTBUFF_AddMsgD("Load minimap button position");
end
- self:ClearAllPoints();
+self:ClearAllPoints()
self:SetPoint("TOPLEFT", "Minimap", "TOPLEFT", xpos, ypos);
- --SMARTBUFF_AddMsgD("x = " .. O.MMCPosX .. ", y = " .. O.MMCPosY);
- --SmartBuff_MiniMapButton:SetUserPlaced(true);
- --SMARTBUFF_AddMsgD("Update minimap button");
end
-- END Minimap button functions
-
-- Scroll frame functions ---------------------------------------------------------------------------------------
+
local ScrBtnSize = 20;
local ScrLineHeight = 18;
local function SetPosScrollButtons(parent, cBtn)
@@ -4863,39 +4392,35 @@ end
local StartY, EndY;
local function CreateScrollButton(name, parent, cBtn, onClick, onDragStop)
- local btn = CreateFrame("CheckButton", name, parent, "OptionsCheckButtonTemplate");
- btn:SetWidth(ScrBtnSize);
- btn:SetHeight(ScrBtnSize);
- --btn:RegisterForClicks("LeftButtonUp");
- btn:RegisterForClicks("AnyUp");
- btn:SetScript("OnClick", onClick);
- --btn:SetScript("OnMouseUp", onClick);
-
+ local btn = CreateFrame("CheckButton", name, parent, "UICheckButtonTemplate");
+ btn:SetWidth(ScrBtnSize);
+ btn:SetHeight(ScrBtnSize);
+ btn:SetScript("OnClick", onClick);
+
if (onDragStop ~= nil) then
btn:SetMovable(true);
btn:RegisterForDrag("LeftButton");
- btn:SetScript("OnDragStart", function(self, b)
- StartY = self:GetTop();
- self:StartMoving();
+ btn:SetScript("OnDragStart", function(self, b)
+ StartY = self:GetTop();
+ self:StartMoving();
end
);
- btn:SetScript("OnDragStop", function(self, b)
- EndY = self:GetTop();
- local i = tonumber(self:GetID()) + FauxScrollFrame_GetOffset(parent);
- local n = math.floor((StartY-EndY) / ScrLineHeight);
- self:StopMovingOrSizing();
- SetPosScrollButtons(parent, cBtn);
- onDragStop(i, n);
+ btn:SetScript("OnDragStop", function(self, b)
+ EndY = self:GetTop();
+ local i = tonumber(self:GetID()) + FauxScrollFrame_GetOffset(parent);
+ local n = math.floor((StartY-EndY) / ScrLineHeight);
+ self:StopMovingOrSizing();
+ SetPosScrollButtons(parent, cBtn);
+ onDragStop(i, n);
end
);
end
local text = btn:CreateFontString(nil, nil, "GameFontNormal");
text:SetJustifyH("LEFT");
- --text:SetAllPoints(btn);
text:SetPoint("TOPLEFT", btn, "TOPLEFT", ScrBtnSize, 0);
text:SetWidth(parent:GetWidth()-ScrBtnSize);
- text:SetHeight(ScrBtnSize);
+ text:SetHeight(ScrBtnSize);
btn:SetFontString(text);
btn:SetHighlightFontObject("GameFontHighlight");
@@ -4904,11 +4429,11 @@ local function CreateScrollButton(name, parent, cBtn, onClick, onDragStop)
highlight:SetPoint("TOPLEFT", btn, "TOPLEFT", 0, -2);
highlight:SetWidth(parent:GetWidth());
highlight:SetHeight(ScrLineHeight-3);
-
+
highlight:SetTexture("Interface/QuestFrame/UI-QuestTitleHighlight");
btn:SetHighlightTexture(highlight);
-
return btn;
+
end
@@ -4926,14 +4451,14 @@ end
local function OnScroll(self, cData, sBtnName)
local num = #cData;
local n, numToDisplay;
-
+
if (num <= maxScrollButtons) then
numToDisplay = num-1;
else
numToDisplay = maxScrollButtons;
end
-
- FauxScrollFrame_Update(self, num, numToDisplay, ScrLineHeight);
+
+ FauxScrollFrame_Update(self, num, floor(numToDisplay/3+0.5), ScrLineHeight);
local t = B[CS()][CT()];
for i = 1, maxScrollButtons, 1 do
n = i + FauxScrollFrame_GetOffset(self);
@@ -4941,7 +4466,7 @@ local function OnScroll(self, cData, sBtnName)
if (btn) then
if (n <= num) then
btn:SetNormalFontObject("GameFontNormalSmall");
- btn:SetHighlightFontObject("GameFontHighlightSmall");
+ btn:SetHighlightFontObject("GameFontHighlightSmall");
btn:SetText(cData[n]);
btn:SetChecked(t[cData[n]].EnableS);
btn:Show();
@@ -4963,11 +4488,11 @@ function SMARTBUFF_BuffOrderOnScroll(self, arg1)
cScrBtnBO = { };
CreateScrollButtons(self, cScrBtnBO, name, SMARTBUFF_BuffOrderBtnOnClick, SMARTBUFF_BuffOrderBtnOnDragStop);
end
-
+
if (B[CS()].Order == nil) then
B[CS()].Order = { };
- end
-
+ end
+
local t = { };
for _, v in pairs(B[CS()].Order) do
if (v) then
@@ -4984,8 +4509,6 @@ function SMARTBUFF_BuffOrderBtnOnClick(self, button)
if (button == "LeftButton") then
SMARTBUFF_OToggleBuff("S", i);
else
- local b = not self:GetChecked();
- self:SetChecked(b);
SmartBuff_BuffSetup_Show(i);
end
end
@@ -5000,17 +4523,3 @@ function SMARTBUFF_BuffOrderReset()
SMARTBUFF_BuffOrderOnScroll();
end
-
--- Help plate functions ---------------------------------------------------------------------------------------
-
-local HelpPlateList = {
- FramePos = { x = 20, y = -20 },
- FrameSize = { width = 480, height = 500 },
- [1] = { ButtonPos = { x = 344, y = -80 }, HighLightBox = { x = 260, y = -50, width = 204, height = 410 }, ToolTipDir = "DOWN", ToolTipText = "Spell list\nDrag'n'Drop to change the priority order" },
- [2] = { ButtonPos = { x = 105, y = -110 }, HighLightBox = { x = 10, y = -30, width = 230, height = 125 }, ToolTipDir = "DOWN", ToolTipText = "Buff reminder options" },
- [3] = { ButtonPos = { x = 105, y = -250 }, HighLightBox = { x = 10, y = -165, width = 230, height = 135 }, ToolTipDir = "DOWN", ToolTipText = "Character based options" },
- [4] = { ButtonPos = { x = 200, y = -320 }, HighLightBox = { x = 10, y = -300, width = 230, height = 90 }, ToolTipDir = "RIGHT", ToolTipText = "Additional UI options" },
-}
-
-function SMARTBUFF_ToggleTutorial(close)
-end
diff --git a/SmartBuff.toc b/SmartBuff.toc
index 3df8bb4..b48e20d 100644
--- a/SmartBuff.toc
+++ b/SmartBuff.toc
@@ -1,19 +1,19 @@
## Interface: 30401
-## Title: |TInterface\Addons\Smartbuff\Icons\IconEnabled:0|t SmartBuff |cffffffff(WOTLK Classic)|r
-## Version: 40.30401
-## Author: |cff20d2ffCodermik (Mik / Castanova on EU-Mirage Raceway) & Aeldra|r (EU-Proudmoore)
-## Notes: Cast the most important buffs on you or party, raid, pets and assigned tanks. Use /sbm for options menu.
+## Title: SmartBuff |cffffffff(Classic)|r by |cff00ff00Codermik & Aeldra|r
+## Version: 41.30401
+## Author: |cff20d2ffCodermik & Aeldra|r (EU-Proudmoore)
+## Contributing Author: |cff20d2ffSpeedwaystar
+## Notes: Cast the most important buffs on you or party/raid members/pets. Use /sbm for options menu.
## DefaultState: Enabled
## LoadOnDemand: 0
## SavedVariables: SMARTBUFF_OptionsGlobal
## SavedVariablesPerCharacter: SMARTBUFF_Options, SMARTBUFF_Buffs
-lib\LibStub\LibStub.lua
-lib\CallbackHandler-1.0\CallbackHandler-1.0.lua
-lib\LibClassicDurations\LibClassicDurations.xml
-lib\LibRangeCheck-2.0\LibRangeCheck-2.0.lua
+Libs\LibStub\LibStub.lua
+Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
+Libs\LibRangeCheck-2.0\LibRangeCheck-2.0.lua
SmartBuff.globals.lua
SmartBuff.xml
-lib\Broker_SmartBuff\LibDataBroker-1.1.lua
-lib\Broker_SmartBuff\Broker_SmartBuff.lua
+Libs\Broker_SmartBuff\LibDataBroker-1.1.lua
+Libs\Broker_SmartBuff\Broker_SmartBuff.lua
diff --git a/SmartBuff.xml b/SmartBuff.xml
index c825d24..71690fe 100644
--- a/SmartBuff.xml
+++ b/SmartBuff.xml
@@ -8,95 +8,94 @@
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
@@ -520,7 +498,7 @@
-
+
@@ -533,28 +511,30 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggle();
+ SMARTBUFF_OToggle();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
+
+
@@ -562,18 +542,18 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTO);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTO);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleAuto();
+ SMARTBUFF_OToggleAuto();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTO, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTO, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -590,33 +570,33 @@
- SmartBuffOptionsFrameSlider_OnLoad(self, 1, 60, 1);
- BackdropTemplateMixin.OnBackdropLoaded(self);
+ SmartBuffOptionsFrameSlider_OnLoad(self, 1, 60, 1);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- local o = SMARTBUFF_Options;
- if (o and o.AutoTimer) then
- SmartBuff_SetSliderText(self, SMARTBUFF_OFT_AUTOTIMER, o.AutoTimer, INT_SPELL_DURATION_SEC, true);
- end
+ local o = SMARTBUFF_Options;
+ if (o and o.AutoTimer) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_OFT_AUTOTIMER, o.AutoTimer, INT_SPELL_DURATION_SEC, true);
+ end
- local o = SMARTBUFF_Options;
- local n = self:GetValue();
- if (o and o.AutoTimer ~= n) then
- SmartBuff_SetSliderText(self, SMARTBUFF_OFT_AUTOTIMER, n, INT_SPELL_DURATION_SEC);
- o.AutoTimer = n;
- end
+ local o = SMARTBUFF_Options;
+ local n = self:GetValue();
+ if (o and o.AutoTimer ~= n) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_OFT_AUTOTIMER, n, INT_SPELL_DURATION_SEC);
+ o.AutoTimer = n;
+ end
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -632,22 +612,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOCOMBAT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOCOMBAT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleAutoCombat();
+ SMARTBUFF_OToggleAutoCombat();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOCOMBAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOCOMBAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -663,22 +643,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOCHAT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOCHAT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleAutoChat();
+ SMARTBUFF_OToggleAutoChat();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOCHAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOCHAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -694,22 +674,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSPLASH);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSPLASH);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleAutoSplash();
+ SMARTBUFF_OToggleAutoSplash();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSPLASH, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSPLASH, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -725,18 +705,18 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSOUND);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSOUND);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleAutoSound();
+ SMARTBUFF_OToggleAutoSound();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSOUND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSOUND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -746,41 +726,39 @@
-
-
-
+
- SmartBuffOptionsFrameSlider_OnLoad(self, 0, 10, 1);
- BackdropTemplateMixin.OnBackdropLoaded(self);
+ SmartBuffOptionsFrameSlider_OnLoad(self, 0, 10, 1);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- local o = SMARTBUFF_Options;
- if (o and o.MinCharges) then
- SmartBuff_SetSliderText(self, SMARTBUFF_MSG_CHARGES, o.MinCharges, "%d", true);
- end
+ local o = SMARTBUFF_Options;
+ if (o and o.MinCharges) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_MSG_CHARGES, o.MinCharges, "%d", true);
+ end
- local o = SMARTBUFF_Options;
- local n = self:GetValue();
- if (o and o.MinCharges ~= n) then
- SmartBuff_SetSliderText(self, SMARTBUFF_MSG_CHARGES, n, "%d");
- o.MinCharges = n;
- if (n == 0) then
- o.CheckCharges = false;
- else
- o.CheckCharges = true;
- end
- end
+ local o = SMARTBUFF_Options;
+ local n = self:GetValue();
+ if (o and o.MinCharges ~= n) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_MSG_CHARGES, n, "%d");
+ o.MinCharges = n;
+ if (n == 0) then
+ o.CheckCharges = false;
+ else
+ o.CheckCharges = true;
+ end
+ end
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_CHECKCHARGES, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_CHECKCHARGES, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -797,29 +775,29 @@
- SmartBuffOptionsFrameSlider_OnLoad(self, 0, 5, 0.2);
- BackdropTemplateMixin.OnBackdropLoaded(self);
+ SmartBuffOptionsFrameSlider_OnLoad(self, 0, 5, 0.2);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- local o = SMARTBUFF_Options;
- if (o and o.SplashDuration) then
- SmartBuff_SetSliderText(self, "Splash", o.SplashDuration, SPELL_DURATION_SEC, true);
- end
+ local o = SMARTBUFF_Options;
+ if (o and o.SplashDuration) then
+ SmartBuff_SetSliderText(self, "Splash", o.SplashDuration, SPELL_DURATION_SEC, true);
+ end
- local o = SMARTBUFF_Options;
- local n = self:GetValue();
- if (o and o.SplashDuration ~= n) then
- SmartBuff_SetSliderText(self, "Splash", n, SPELL_DURATION_SEC);
- o.SplashDuration = n;
- end
+ local o = SMARTBUFF_Options;
+ local n = self:GetValue();
+ if (o and o.SplashDuration ~= n) then
+ SmartBuff_SetSliderText(self, "Splash", n, SPELL_DURATION_SEC);
+ o.SplashDuration = n;
+ end
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_SPLASHDURATION, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_SPLASHDURATION, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -836,39 +814,39 @@
- SmartBuffOptionsFrameSlider_OnLoad(self, 0, 600, 10);
- BackdropTemplateMixin.OnBackdropLoaded(self);
+ SmartBuffOptionsFrameSlider_OnLoad(self, 0, 600, 10);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- local o = SMARTBUFF_Options;
- if (o and o.RebuffTimer) then
- SmartBuff_SetSliderText(self, SMARTBUFF_OFT_REBUFFTIMER, o.RebuffTimer, INT_SPELL_DURATION_SEC, true);
- end
+ local o = SMARTBUFF_Options;
+ if (o and o.RebuffTimer) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_OFT_REBUFFTIMER, o.RebuffTimer, INT_SPELL_DURATION_SEC, true);
+ end
- local o = SMARTBUFF_Options;
- local n = self:GetValue();
- if (o and o.RebuffTimer ~= n) then
- SmartBuff_SetSliderText(self, SMARTBUFF_OFT_REBUFFTIMER, n, INT_SPELL_DURATION_SEC);
- o.RebuffTimer = n;
- end
+ local o = SMARTBUFF_Options;
+ local n = self:GetValue();
+ if (o and o.RebuffTimer ~= n) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_OFT_REBUFFTIMER, n, INT_SPELL_DURATION_SEC);
+ o.RebuffTimer = n;
+ end
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_REBUFFTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_REBUFFTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
@@ -876,22 +854,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSWITCHTMP);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSWITCHTMP);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OAutoSwitchTmp();
+ SMARTBUFF_OAutoSwitchTmp();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSWITCHTMP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSWITCHTMP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -907,22 +885,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSWITCHTMPINST);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_AUTOSWITCHTMPINST);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OAutoSwitchTmpInst();
+ SMARTBUFF_OAutoSwitchTmpInst();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSWITCHTMPINST, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_AUTOSWITCHTMPINST, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -938,22 +916,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_LINKGRPBUFFCHECK);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_LINKGRPBUFFCHECK);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OLinkGrpBuffCheck();
+ SMARTBUFF_OLinkGrpBuffCheck();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_LINKGRPBUFFCHECK, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_LINKGRPBUFFCHECK, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -969,22 +947,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_ANTIDAZE);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_ANTIDAZE);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OAntiDaze();
+ SMARTBUFF_OAntiDaze();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_ANTIDAZE, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_ANTIDAZE, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1000,22 +978,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_LINKSELFBUFFCHECK);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_LINKSELFBUFFCHECK);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OLinkSelfBuffCheck();
+ SMARTBUFF_OLinkSelfBuffCheck();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_LINKSELFBUFFCHECK, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_LINKSELFBUFFCHECK, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1031,22 +1009,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFPVP);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFPVP);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OBuffPvP();
+ SMARTBUFF_OBuffPvP();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_BUFFPVP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_BUFFPVP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1062,22 +1040,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFTARGET);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFTARGET);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OBuffTarget();
+ SMARTBUFF_OBuffTarget();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_BUFFTARGET, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_BUFFTARGET, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1093,22 +1071,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_SCROLLWHEELUP);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_SCROLLWHEELUP);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OScrollWheelUp();
+ SMARTBUFF_OScrollWheelUp();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_SCROLLWHEELUP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_SCROLLWHEELUP, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1124,22 +1102,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_SCROLLWHEELDOWN);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_SCROLLWHEELDOWN);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OScrollWheelDown();
+ SMARTBUFF_OScrollWheelDown();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_SCROLLWHEELDOWN, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_SCROLLWHEELDOWN, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1155,30 +1133,28 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFINCITIES);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_BUFFINCITIES);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OBuffInCities();
+ SMARTBUFF_OBuffInCities();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_BUFFINCITIES, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_BUFFINCITIES, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
-
-
+
@@ -1186,22 +1162,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_INSHAPESHIFT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_INSHAPESHIFT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OInShapeshift();
+ SMARTBUFF_OInShapeshift();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_INSHAPESHIFT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_INSHAPESHIFT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1217,18 +1193,18 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_INCOMBAT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_INCOMBAT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OInCombat();
+ SMARTBUFF_OInCombat();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_INCOMBAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_INCOMBAT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -1238,38 +1214,38 @@
-
+
- SmartBuffOptionsFrameSlider_OnLoad(self, 0, 40, 1);
- BackdropTemplateMixin.OnBackdropLoaded(self);
+ SmartBuffOptionsFrameSlider_OnLoad(self, 0, 40, 1);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- local o = SMARTBUFF_Options;
- local n = self:GetValue();
- if (o and o.BlacklistTimer ~= n) then
- SmartBuff_SetSliderText(self, SMARTBUFF_OFT_BLDURATION, n, INT_SPELL_DURATION_SEC);
- o.BlacklistTimer = n;
- end
+ local o = SMARTBUFF_Options;
+ local n = self:GetValue();
+ if (o and o.BlacklistTimer ~= n) then
+ SmartBuff_SetSliderText(self, SMARTBUFF_OFT_BLDURATION, n, INT_SPELL_DURATION_SEC);
+ o.BlacklistTimer = n;
+ end
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_BLDURATION, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_BLDURATION, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
@@ -1290,15 +1266,15 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGNORMAL);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGNORMAL);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleMsgNormal();
+ SMARTBUFF_OToggleMsgNormal();
-
+
@@ -1314,15 +1290,15 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGERROR);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGERROR);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleMsgError();
+ SMARTBUFF_OToggleMsgError();
-
+
@@ -1338,15 +1314,15 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGWARNING);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_MSGWARNING);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OToggleMsgWarning();
+ SMARTBUFF_OToggleMsgWarning();
-
+
@@ -1362,22 +1338,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_HIDEMMBUTTON);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_HIDEMMBUTTON);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OHideMmButton();
+ SMARTBUFF_OHideMmButton();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_HIDEMMBUTTON, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_HIDEMMBUTTON, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1393,18 +1369,18 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_HIDESABUTTON);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_HIDESABUTTON);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SMARTBUFF_OHideSAButton();
+ SMARTBUFF_OHideSAButton();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_HIDESABUTTON, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_HIDESABUTTON, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -1414,25 +1390,35 @@
-
+
- SMARTBUFF_DropDownTemplate_OnShow(self);
+ SMARTBUFF_DropDownTemplate_OnShow(self);
- ToggleDropDownMenu(1, nil, self);
+ ToggleDropDownMenu(1, nil, self);
+
+
+
+
+
+
+
+
+
+ SMARTBUFF_ToggleWhatsNewWindow();
-
+
-
+
@@ -1450,22 +1436,20 @@
- FauxScrollFrame_OnVerticalScroll(self, offset, 18, SMARTBUFF_BuffOrderOnScroll);
+ FauxScrollFrame_OnVerticalScroll(self, offset, 18, SMARTBUFF_BuffOrderOnScroll);
- SMARTBUFF_BuffOrderOnScroll(self);
+ SMARTBUFF_BuffOrderOnScroll(self);
-
+
-
-
-
+
@@ -1488,125 +1472,130 @@
-
+
+
+
+
-
-
-
+
- SMARTBUFF_ResetBuffTimers();
+ SMARTBUFF_ResetBuffTimers();
-
+
+
+
+
-
+
- SMARTBUFF_OptionsFrame_Toggle();
- StaticPopup_Show("SMARTBUFF_DATA_PURGE");
+ SMARTBUFF_OptionsFrame_Toggle();
+ StaticPopup_Show("SMARTBUFF_DATA_PURGE");
-
+
+
+
+
-
+
- SMARTBUFF_BuffOrderReset();
+ SMARTBUFF_BuffOrderReset();
-
+
+
+
+
-
-
-
+
- SMARTBUFF_OptionsFrame_Toggle();
+ SMARTBUFF_OptionsFrame_Toggle();
-
+
-
+
+
+
+
+
+
+
+
+ SMARTBUFF_PlaySpashSound();
+
+
+
-
+
-
- SmartBuffOptionsFrameSlider_OnLoad(self, 1, 14, 1);
- BackdropTemplateMixin.OnBackdropLoaded(self);
-
-
- GameTooltip:Hide();
-
-
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_SOUNDSELECT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
-
local o = SMARTBUFF_Options;
local n = self:GetValue();
if (o and o.AutoSoundSelection ~= n) then
- SmartBuff_SetSliderText(self, SMARTBUFF_MSG_SOUNDS, n, "%d");
- o.AutoSoundSelection = n;
+ SmartBuff_SetSliderText(self, SMARTBUFF_MSG_SOUNDS, n, "%d");
+ o.AutoSoundSelection = n;
end
local o = SMARTBUFF_Options;
if (o and o.AutoSoundSelection) then
- SmartBuff_SetSliderText(self, SMARTBUFF_MSG_SOUNDS, o.AutoSoundSelection, "%d", true);
+ SmartBuff_SetSliderText(self, SMARTBUFF_MSG_SOUNDS, o.AutoSoundSelection, "%d", true);
end
+
+ SmartBuffOptionsFrameSlider_OnLoad(self, 1, 34, 1);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
+
+
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_SOUNDSELECT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+
-
-
-
-
-
-
-
- SMARTBUFF_PlaySpashSound();
-
-
-
-
+
-
-
+
+
@@ -1615,13 +1604,13 @@
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_OFTT_WARNWHILEMOUNTED, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetText(SMARTBUFF_OFTT_FIXBUFF, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- SMARTBUFF_OWarnWhenMountedButton();
+ SMARTBUFF_ToggleFixBuffing();
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_WARNWHILEMOUNTED);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_FIXBUFF);
getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
@@ -1629,76 +1618,117 @@
-
-
-
- Mixin(self, BackdropTemplateMixin)
- self:SetBackdrop({
- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
- insets = {left = 12, right = 12, top = 12, bottom = 11},
- });
- SMARTBUFF_Options_OnLoad(self);
-
-
- SMARTBUFF_Options_OnShow();
- --SmartBuff_MiniGroup:Hide();
-
-
- self:StopMovingOrSizing();
- SMARTBUFF_Options_OnHide();
- --SMARTBUFF_MiniGroup_Show();
-
-
- if (button == "LeftButton") then
- self:StartMoving();
- end
-
-
- if (button == "LeftButton") then
- self:StopMovingOrSizing();
- end
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_GATHERER);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+
+
+ ToggleAutoGatherer();
+
+
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_GATHERER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+
+
+ GameTooltip:Hide();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_OFTT_GATHERERFISH, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+
+
+ SMARTBUFF_OTrackSwitchFish();
+
+
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_OFT_FINDFISH);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+
+
+ GameTooltip:Hide();
+
+
+
+
+
+
+ Mixin(self, BackdropTemplateMixin)
+ self:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", insets = {left = 12, right = 12, top = 12, bottom = 11},})
+ SMARTBUFF_Options_OnLoad(self);
+
+
+ SMARTBUFF_Options_OnShow();
+
+
+ self:StopMovingOrSizing();
+ SMARTBUFF_Options_OnHide();
+
+
+ if (button == "LeftButton") then
+ self:StartMoving();
+ end
+
+
+ if (button == "LeftButton") then
+ self:StopMovingOrSizing();
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- self:EnableMouse(false);
- self:EnableKeyboard(false);
+ self:EnableMouse(false);
+ self:EnableKeyboard(false);
@@ -1716,11 +1746,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- SmartBuff_BuffSetup_ToolTip(1);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ SmartBuff_BuffSetup_ToolTip(1);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -1738,16 +1768,16 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- SmartBuff_BuffSetup_ToolTip(2);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ SmartBuff_BuffSetup_ToolTip(2);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1763,22 +1793,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_SELFONLY);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_SELFONLY);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_SELFONLY, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_SELFONLY, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1794,22 +1824,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_SELFNOT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_SELFNOT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_SELFNOT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_SELFNOT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1825,22 +1855,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_COMBATIN);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_COMBATIN);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_COMBATIN, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_COMBATIN, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1856,18 +1886,18 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_COMBATOUT);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_COMBATOUT);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_COMBATOUT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_COMBATOUT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -1897,29 +1927,29 @@
- self:SetFontObject(GameFontHighlightSmall);
- self:SetJustifyH("LEFT");
- self:SetJustifyV("MIDDLE");
+ self:SetFontObject(GameFontHighlightSmall);
+ self:SetJustifyH("LEFT");
+ self:SetJustifyV("MIDDLE");
- SmartBuff_BuffSetup_txtManaLimit:SetFocus();
+ SmartBuff_BuffSetup_txtManaLimit:SetFocus();
- self:ClearFocus();
+ self:ClearFocus();
- SmartBuff_BuffSetup_ManaLimitChanged(self);
+ SmartBuff_BuffSetup_ManaLimitChanged(self);
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_MANALIMIT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_MANALIMIT, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1935,22 +1965,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_MAINHAND);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_MAINHAND);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_MAINHAND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_MAINHAND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1966,22 +1996,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_OFFHAND);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_OFFHAND);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_OFFHAND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_OFFHAND, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -1997,22 +2027,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_RANGED);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_RANGED);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_RANGED, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_RANGED, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -2028,22 +2058,22 @@
- getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_REMINDER);
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
+ getglobal(self:GetName().."Text"):SetText(SMARTBUFF_BST_REMINDER);
+ getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_REMINDER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_REMINDER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
@@ -2056,11 +2086,11 @@
- SmartBuff_PS_Show(1);
+ SmartBuff_PS_Show(1);
-
+
@@ -2073,7 +2103,7 @@
- SmartBuff_PS_Show(2);
+ SmartBuff_PS_Show(2);
@@ -2090,11 +2120,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[1], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[1], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2112,11 +2142,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[2], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[2], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2134,11 +2164,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[3], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[3], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2156,11 +2186,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[4], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[4], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2178,11 +2208,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[5], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[5], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2200,11 +2230,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[6], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[6], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2222,11 +2252,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[7], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[7], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2244,11 +2274,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[8], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[8], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2266,11 +2296,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[9], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[9], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2288,11 +2318,11 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[10], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[10], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2302,17 +2332,19 @@
-
-
+
+
+
+
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[11], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[11], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
@@ -2330,150 +2362,178 @@
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[12], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[12], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
-
+
+
-
- t = self:GetNormalTexture();
- t:SetTexCoord(0.0, 19/64, 22/64, 41/64);
-
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[16], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[13], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
-
-
+
+
-
- t = self:GetNormalTexture();
- t:SetTexCoord(20/64, 39/64, 1/64, 20/64);
-
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[17], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[14], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
-
+
-
+
-
- t = self:GetNormalTexture();
- t:SetTexCoord(20/64, 39/64, 22/64, 41/64);
-
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[18], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[15], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
-
-
+
+
+
+
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[13], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[16], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
-
-
+
+
+
+
+
+ t = self:GetNormalTexture();
+ t:SetTexCoord(0.0, 19/64, 22/64, 41/64);
+
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[14], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[17], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
-
-
+
+
+
+
+
+ t = self:GetNormalTexture();
+ t:SetTexCoord(20/64, 39/64, 1/64, 20/64);
+
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_CLASSES[15], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[18], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
+ GameTooltip:Hide();
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t = self:GetNormalTexture();
+ t:SetTexCoord(20/64, 39/64, 22/64, 41/64);
+
+
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_CLASSES[19], SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+
+
+ GameTooltip:Hide();
+
+
+
+
+
@@ -2489,11 +2549,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2509,11 +2569,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2529,11 +2589,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2549,11 +2609,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2569,11 +2629,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2589,11 +2649,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2609,11 +2669,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2629,11 +2689,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2649,11 +2709,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2669,11 +2729,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2689,11 +2749,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2709,19 +2769,17 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
-
-
-
+
@@ -2729,11 +2787,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2749,18 +2807,18 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
-
+
@@ -2769,11 +2827,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2789,11 +2847,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2809,11 +2867,11 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
-
+
@@ -2829,53 +2887,68 @@
- SmartBuff_BuffSetup_OnClick();
+ SmartBuff_BuffSetup_OnClick();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SmartBuff_BuffSetup_OnClick();
-
+
-
+
- BackdropTemplateMixin.OnBackdropLoaded(self);
SmartBuffOptionsFrameSlider_OnLoad(self, 0, 3600, 10, true);
+ BackdropTemplateMixin.OnBackdropLoaded(self);
- SmartBuff_BuffSetup_RBTime_OnValueChanged(self);
+ SmartBuff_BuffSetup_RBTime_OnValueChanged(self);
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
- GameTooltip:SetText(SMARTBUFF_BSTT_REBUFFTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_BSTT_REBUFFTIMER, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
- GameTooltip:Hide();
- SmartBuff_BuffSetup_OnClick();
+ GameTooltip:Hide();
+ SmartBuff_BuffSetup_OnClick();
- Mixin(self, BackdropTemplateMixin);
- self:SetBackdrop({
- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
- insets = {left = 12, right = 12, top = 12, bottom = 11},
- });
- SMARTBUFF_Options_OnLoad(self);
+ Mixin(self, BackdropTemplateMixin)
+ self:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", insets = {left = 12, right = 12, top = 12, bottom = 11},})
-
+
@@ -2884,17 +2957,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -2909,13 +2971,13 @@
- self:EnableMouse(false);
- self:EnableKeyboard(false);
+ self:EnableMouse(false);
+ self:EnableKeyboard(false);
-
+
@@ -2928,11 +2990,11 @@
- SmartBuff_PS_AddPlayer();
+ SmartBuff_PS_AddPlayer();
-
+
@@ -2945,11 +3007,11 @@
- SmartBuff_PS_RemovePlayer();
+ SmartBuff_PS_RemovePlayer();
-
+
@@ -2962,11 +3024,11 @@
- SmartBuff_PS_SelectPlayer(-1);
+ SmartBuff_PS_SelectPlayer(-1);
-
+
@@ -2979,13 +3041,38 @@
- SmartBuff_PS_SelectPlayer(1);
+ SmartBuff_PS_SelectPlayer(1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SmartBuff_PS_Resize();
+
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ GameTooltip:SetText(SMARTBUFF_PSTT_RESIZE, SMARTBUFF_TTC_R, SMARTBUFF_TTC_G, SMARTBUFF_TTC_B, SMARTBUFF_TTC_A);
+
+
+ GameTooltip:Hide();
+ SmartBuff_BuffSetup_OnClick();
+
-
+
@@ -3008,17 +3095,17 @@
- self:EnableMouse(false);
- self:EnableKeyboard(false);
+ self:EnableMouse(false);
+ self:EnableKeyboard(false);
-
+
-
+
@@ -3027,302 +3114,20 @@
- Mixin(self, BackdropTemplateMixin);
- self:SetBackdrop({
- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
- insets = {left = 12, right = 12, top = 12, bottom = 11},
- });
- SmartBuffSplashFrame:SetBackdrop({
- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
- edgeFile = nil,
- });
SmartBuff_PlayerSetup_OnShow();
- SmartBuff_PlayerSetup_OnHide();
+ SmartBuff_PlayerSetup_OnHide();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- self:SetText("SmartBuff subgroups");
- self:EnableMouse(false);
- self:EnableKeyboard(false);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("1");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(1);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("2");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(2);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("3");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(3);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("4");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(4);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("5");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(5);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("6");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(6);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("7");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(7);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getglobal(self:GetName().."Text"):SetText("8");
- getglobal(self:GetName().."Text"):SetFontObject(GameFontNormalSmall);
-
-
- SMARTBUFF_OToggleGrp(8);
-
-
-
-
-
- self:RegisterForDrag("LeftButton");
+ Mixin(self, BackdropTemplateMixin)
+ self:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", insets = {left = 12, right = 12, top = 12, bottom = 11},})
-
- Mixin(self, BackdropTemplateMixin);
- SmartBuff_MiniGroup:SetBackdrop({
- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
- edgeFile = nil,
- });
- SMARTBUFF_MiniGroup_OnShow();
-
-
- self:StopMovingOrSizing();
- SMARTBUFF_MiniGroup_OnHide();
-
-
- if (button == "LeftButton" and IsShiftKeyDown()) then
- self:StartMoving();
- end
-
-
- if (button == "LeftButton") then
- self:StopMovingOrSizing();
- end
-
-
+
@@ -3331,21 +3136,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
diff --git a/code-snippets.txt b/code-snippets.txt
new file mode 100644
index 0000000..ed79922
--- /dev/null
+++ b/code-snippets.txt
@@ -0,0 +1,20 @@
+
+
+Use README.MD for updating this info.
+
+
+Handy code:
+
+-- Popup defination
+StaticPopupDialogs["SMARTBUFF_DATA_PURGE"] = {
+ text = SMARTBUFF_OFT_PURGE_DATA,
+ button1 = SMARTBUFF_OFT_YES,
+ button2 = SMARTBUFF_OFT_NO,
+ OnAccept = function() SMARTBUFF_ResetAll() end,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+}
+
+-- how to show it
+StaticPopup_Show("SMARTBUFF_DATA_PURGE");
diff --git a/lib/LibClassicDurations/LibClassicDurations.xml b/lib/LibClassicDurations/LibClassicDurations.xml
deleted file mode 100644
index 4934790..0000000
--- a/lib/LibClassicDurations/LibClassicDurations.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/lib/LibClassicDurations/classAbilities.lua b/lib/LibClassicDurations/classAbilities.lua
deleted file mode 100644
index cdd8001..0000000
--- a/lib/LibClassicDurations/classAbilities.lua
+++ /dev/null
@@ -1,1145 +0,0 @@
-local lib = LibStub and LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "SpellTable", 71
-if lib:GetDataVersion(Type) >= Version then return end -- older versions didn't have that function
-
-local Spell = lib.AddAura
-local Talent = lib.Talent
-local INFINITY = math.huge
-
-local _, class = UnitClass("player")
-local locale = GetLocale()
-
--- Temporary
--- Erases Fire Vulnerability from the name to id table in case older version of the lib written it there
-if locale == "zhCN" then
- lib.spellNameToID[GetSpellInfo(980)] = nil
-end
-if locale == "ruRU" then
- lib.spellNameToID[GetSpellInfo(12721)] = nil -- Deep Wounds conflict with Rake on ruRU
-end
-
--- https://github.com/rgd87/LibClassicDurations/issues/11
-lib.indirectRefreshSpells = {
- [GetSpellInfo(11597)] = { -- Sunder Armor
- [11597] = {
- events = {
- ["SPELL_CAST_SUCCESS"] = true
- },
- -- targetSpellID = 11597,
- rollbackMisses = true,
- }
- },
-
- [GetSpellInfo(25357)] = { -- Healing Wave
- [29203] = {
- events = {
- ["SPELL_CAST_SUCCESS"] = true
- },
- -- targetSpellID = 29203, -- Healing Way
- }
- },
-}
-
-if class == "MAGE" then
-
-
- lib.indirectRefreshSpells[GetSpellInfo(25304)] = { -- Frostbolt
- [12579] = {
- events = {
- ["SPELL_DAMAGE"] = true
- },
- targetSpellID = 12579, -- Winter's Chill
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
-
- lib.indirectRefreshSpells[GetSpellInfo(10161)] = { -- Cone of Cold
- [12579] = {
- events = {
- ["SPELL_DAMAGE"] = true
- },
- targetSpellID = 12579, -- Winter's Chill
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
-
- lib.indirectRefreshSpells[GetSpellInfo(10230)] = { -- Frost Nova
- [12579] = {
- events = {
- ["SPELL_DAMAGE"] = true
- },
- targetSpellID = 12579, -- Winter's Chill
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
-
- -- Winter's Chill = Frostbolt
- lib.indirectRefreshSpells[GetSpellInfo(12579)] = lib.indirectRefreshSpells[GetSpellInfo(25304)]
-
- lib.indirectRefreshSpells[GetSpellInfo(10)] = { -- Blizzard
- [12486] = {
- events = {
- ["SPELL_PERIODIC_DAMAGE"] = true
- },
- applyAura = true,
- targetSpellID = 12486, -- Imp Blizzard
- }
- }
-
- -- Ignite
-
- lib.indirectRefreshSpells[GetSpellInfo(10207)] = { -- Scorch
- [22959] = {
- events = {
- ["SPELL_DAMAGE"] = true
- },
- -- targetSpellID = 22959, -- Fire Vulnerability
- rollbackMisses = true,
- -- condition = function(isMine) return isMine end,
- -- it'll refresg only from mages personal casts which is fine
- -- because if mage doesn't have imp scorch then he won't even see a Fire Vulnerability timer
- },
- }
-
- local fire_spells = {133, 10207, 2136, 2120, 11113} -- Fireball, Scorch, Fireblast, Flamestrike, Blast Wave
-
- for _, spellId in ipairs(fire_spells) do
- local spellName = GetSpellInfo(spellId)
- if not lib.indirectRefreshSpells[spellName] then
- lib.indirectRefreshSpells[spellName] = {}
- end
- lib.indirectRefreshSpells[spellName][12654] = {
- events = {
- ["SPELL_DAMAGE"] = true
- },
- -- targetSpellID = 12654, -- Ignite
- rollbackMisses = true,
- condition = function(isMine, isCrit) return isCrit end,
- customAction = function(srcGUID, dstGUID, spellID)
- local lib = LibStub("LibClassicDurations")
- local spellTable = lib:GetSpellTable(srcGUID, dstGUID, spellID)
- if spellTable and not spellTable.tickExtended then
- local igniteStartTime = spellTable[2]
- spellTable[2] = igniteStartTime + 2
- spellTable.tickExtended = true
- if lib.DEBUG_IGNITE then
- print(GetTime(), "[Ignite] Extended", dstGUID, "New start time:", spellTable[2])
- end
- end
- end,
- }
- end
-
-
-
- lib.indirectRefreshSpells[GetSpellInfo(12654)] = CopyTable(lib.indirectRefreshSpells[GetSpellInfo(133)]) -- Just adding Ignite to indirectRefreshSpells table
- lib.indirectRefreshSpells[GetSpellInfo(12654)][12654].events = {}
-end
-
-if class == "PRIEST" then
- -- Shadow Weaving
- lib.indirectRefreshSpells[GetSpellInfo(10894)] = { -- SW:Pain
- [15258] = {
- events = {
- ["SPELL_AURA_APPLIED"] = true,
- ["SPELL_AURA_REFRESH"] = true,
- },
- -- targetSpellID = 15258, -- Shadow Weaving
- -- targetResistCheck = true,
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
- lib.indirectRefreshSpells[GetSpellInfo(10947)] = { -- Mind Blast
- [15258] = {
- events = {
- ["SPELL_DAMAGE"] = true,
- },
- -- targetResistCheck = true,
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
- lib.indirectRefreshSpells[GetSpellInfo(18807)] = { -- Mind Flay
- [15258] = {
- events = {
- ["SPELL_AURA_APPLIED"] = true,
- ["SPELL_AURA_REFRESH"] = true,
- },
- rollbackMisses = true,
- condition = function(isMine) return isMine end,
- }
- }
-
- -- Shadow Weaving = SW: Pain
- lib.indirectRefreshSpells[GetSpellInfo(15258)] = CopyTable(lib.indirectRefreshSpells[GetSpellInfo(10894)])
- lib.indirectRefreshSpells[GetSpellInfo(15258)][15258].events = {}
-end
-
-------------------
--- GLOBAL
-------------------
-
--- World Buffs incl. Chronoboon IDs
-Spell(349981, { duration = INFINITY }) -- World effect suspended
-Spell({ 355363, 22888 }, { duration = 7200 }) -- Rallying Cry of the Dragonslayer
-Spell({ 355365, 24425 }, { duration = 7200 }) -- Spirit of Zandalar
-Spell({ 355366, 16609 }, { duration = 3600 }) -- Warchief's Blessing
-
--- Atiesh Buffs
-Spell( 28142, { duration = INFINITY, type = "BUFF" }) -- Power of the Guardian
-Spell( 28143, { duration = INFINITY, type = "BUFF" }) -- Power of the Guardian
-Spell( 28144, { duration = INFINITY, type = "BUFF" }) -- Power of the Guardian
-Spell( 28145, { duration = INFINITY, type = "BUFF" }) -- Power of the Guardian
-
-Spell( 2479, { duration = 30 }) -- Honorless Target
-Spell(1604, { duration = 4 }) -- Common Daze
-Spell( 23605, { duration = 5 }) -- Nightfall (Axe) Proc
-Spell( 835, { duration = 3 }) -- Tidal Charm
-Spell( 11196, { duration = 60 }) -- Recently Bandaged
-Spell( 16928, { duration = 45 }) -- Armor Shatter, procced by Annihilator, axe weapon
-
-Spell({ 13099, 13138, 16566 }, {
- duration = function(spellID)
- if spellID == 13138 then return 20 -- backfire
- elseif spellID == 16566 then return 30 -- backfire
- else return 10 end
- end
-}) -- Net-o-Matic
-
-Spell( 23451, { duration = 10 }) -- Battleground speed buff
-Spell( 23493, { duration = 10 }) -- Battleground heal buff
-Spell( 23505, { duration = 60 }) -- Battleground damage buff
-Spell({ 4068 }, { duration = 3 }) -- Iron Grenade
-Spell({ 19769 }, { duration = 3 }) -- Thorium Grenade
-Spell( 6615, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Free Action Potion
-Spell( 24364, { duration = 5, type = "BUFF", buffType = "Magic" }) -- Living Action Potion
-Spell( 3169, { duration = 6, type = "BUFF", buffType = "Magic" }) -- Limited Invulnerability Potion
-Spell( 16621, { duration = 3, type = "BUFF" }) -- Invulnerable Mail
-Spell( 1090, { duration = 30 }) -- Magic Dust
-Spell( 13327, { duration = 30 }) -- Reckless Charge
-Spell({ 26740, 13181 }, { duration = 20 }) -- Mind Control Cap + Backfire
-Spell( 11359, { duration = 30, type = "BUFF" }) -- Restorative Potion
-Spell( 6727, { duration = 30 }) -- Violet Tragan
-Spell( 5024, { duration = 10, type = "BUFF" }) -- Skull of Impending Doom
-Spell( 2379, { duration = 15, type = "BUFF", buffType = "Magic" }) -- Swiftness Potion
-Spell( 5134, { duration = 10 }) -- Flash Bomb
-Spell( 23097, { duration = 5, type = "BUFF" }) -- Fire Reflector
-Spell( 23131, { duration = 5, type = "BUFF" }) -- Frost Reflector
-Spell( 23132, { duration = 5, type = "BUFF" }) -- Shadow Reflector
-Spell({ 25750, 25747, 25746, 23991 }, { duration = 15, type = "BUFF" }) -- AB Trinkets
-Spell( 23506, { duration = 20, type = "BUFF" }) -- Arena Grand Master trinket
-Spell( 29506, { duration = 20, type = "BUFF" }) -- Burrower's Shell trinket
-Spell( 12733, { duration = 30, type = "BUFF" }) -- Blacksmith trinket
--- Spell( 15753, { duration = 2 }) -- Linken's Boomerang stun
--- Spell( 15752, { duration = 10 }) -- Linken's Boomerang disarm
-Spell( 14530, { duration = 10, type = "BUFF" }) -- Nifty Stopwatch
-Spell( 13237, { duration = 3 }) -- Goblin Mortar trinket
-Spell( 21152, { duration = 3 }) -- Earthshaker, weapon proc
-Spell( 14253, { duration = 8, type = "BUFF" }) -- Black Husk Shield
-Spell( 9175, { duration = 15, type = "BUFF" }) -- Swift Boots
-Spell( 13141, { duration = 20, type = "BUFF" }) -- Gnomish Rocket Boots
-Spell( 8892, { duration = 20, type = "BUFF" }) -- Goblin Rocket Boots
-Spell( 9774, { duration = 5, type = "BUFF" }) -- Spider Belt & Ornate Mithril Boots
-Spell({ 746, 1159, 3267, 3268, 7926, 7927, 10838, 10839, 18608, 18610, 23567, 23568, 23569, 23696, 24412, 24413, 24414}, { duration = 8, type = "BUFF" }) -- First Aid
-Spell({ 21992, 27648 }, { duration = 12 }) -- Thunderfury, -Nature Resist, -Atk Spd
-
-
--------------
--- RACIALS
--------------
-
-Spell( 26635 ,{ duration = 10, type = "BUFF" }) -- Berserking
-Spell( 20600 ,{ duration = 20, type = "BUFF" }) -- Perception
-Spell( 23234 ,{ duration = 15, type = "BUFF" }) -- Blood Fury
-Spell( 23230 ,{ duration = 25 }) -- Blood Fury debuff
-Spell( 20594 ,{ duration = 8, type = "BUFF" }) -- Stoneform
-Spell( 20549 ,{ duration = 2 }) -- War Stomp
-Spell( 7744, { duration = 5, type = "BUFF" }) -- Will of the Forsaken
-
--------------
--- PRIEST
--------------
-
-Spell( 15473, { duration = INFINITY, type = "BUFF" }) -- Shadowform
-Spell( 14751, { duration = INFINITY, type = "BUFF", buffType = "Magic" }) -- Inner focus
-
--- Why long auras are disabled
--- When you first get in combat log range with a player,
--- you'll get AURA_APPLIED event as if it was just applied, when it actually wasn't.
--- That's extremely common for these long self-buffs
--- Long raid buffs now have cast filter, that is only if you directly casted a spell it'll register
--- Cast Filter is ignored for enemies, so some personal buffs have it to still show enemy buffs
-
-Spell({ 1243, 1244, 1245, 2791, 10937, 10938 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Power Word: Fortitude
-Spell({ 21562, 21564 }, { duration = 3600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Prayer of Fortitude
-Spell({ 976, 10957, 10958 }, { duration = 600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Shadow Protection
-Spell( 27683, { duration = 1200, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Prayer of Shadow Protection
-Spell({ 14752, 14818, 14819, 27841 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Divine Spirit
-Spell( 27681, { duration = 3600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Prayer of Spirit
-
-Spell({ 588, 602, 1006, 7128, 10951, 10952 }, { duration = 600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Inner Fire
-
-Spell({ 14743, 27828 }, { duration = 6, type = "BUFF", buffType = "Magic" }) -- Focused Casting (Martyrdom)
-Spell( 27827, { duration = 10, type = "BUFF" }) -- Spirit of Redemption
-Spell( 15271, { duration = 15, type = "BUFF" }) -- Spirit Tap
-
-Spell({ 2943, 19249, 19251, 19252, 19253, 19254 }, { duration = 120 }) -- Touch of Weakness Effect
-Spell({ 13896, 19271, 19273, 19274, 19275 }, { duration = 15, type = "BUFF" }) -- Feedback
-Spell({ 2651, 19289, 19291, 19292, 19293 }, { duration = 15, type = "BUFF" }) -- Elune's Grace
-Spell({ 9035, 19281, 19282, 19283, 19284, 19285 }, { duration = 120 }) -- Hex of Weakness
-
-Spell( 6346, { duration = 600, type = "BUFF", buffType = "Magic" }) -- Fear Ward
-Spell({ 14893, 15357 ,15359 }, { duration = 15, type = "BUFF", buffType = "Magic" }) -- Inspiration
-Spell({ 7001, 27873, 27874 }, { duration = 10, type = "BUFF", buffType = "Magic" }) -- Lightwell Renew
-Spell( 552, { duration = 20, type = "BUFF", buffType = "Magic" }) -- Abolish Disease
-Spell({ 17, 592, 600, 3747, 6065, 6066, 10898, 10899, 10900, 10901 }, {duration = 30, type = "BUFF", buffType = "Magic" }) -- PWS
-Spell( 6788, { duration = 15 }) -- Weakened Soul
-if class == "PRIEST" then
- lib:TrackItemSet("Garments of the Oracle", { 21349, 21350, 21348, 21352, 21351 })
- lib:RegisterSetBonusCallback("Garments of the Oracle", 5)
-end
-Spell({ 139, 6074, 6075, 6076, 6077, 6078, 10927, 10928, 10929, 25315 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer and lib:IsSetBonusActive("Garments of the Oracle", 5) then
- return 18
- else
- return 15
- end
- end,
- type = "BUFF", buffType = "Magic" }) -- Renew
-
-Spell( 15487, { duration = 5 }) -- Silence
-Spell({ 10797, 19296, 19299, 19302, 19303, 19304, 19305 }, { duration = 6, stacking = true }) -- starshards
-Spell({ 2944, 19276, 19277, 19278, 19279, 19280 }, { duration = 24, stacking = true }) --devouring plague
-Spell({ 453, 8192, 10953 }, { duration = 15 }) -- mind soothe
-
-Spell({ 9484, 9485, 10955 }, {
- duration = function(spellID)
- if spellID == 9484 then return 30
- elseif spellID == 9485 then return 40
- else return 50 end
- end
-}) -- Shackle Undead
-
-Spell( 10060, { duration = 15, type = "BUFF", buffType = "Magic" }) --Power Infusion
-Spell({ 14914, 15261, 15262, 15263, 15264, 15265, 15266, 15267 }, { duration = 10, stacking = true }) -- Holy Fire, stacking?
-Spell({ 586, 9578, 9579, 9592, 10941, 10942 }, { duration = 10, type = "BUFF" }) -- Fade
-if class == "PRIEST" then
- lib:TrackItemSet("PriestPvPSet", {
- 17604, 17603, 17605, 17608, 17607, 17602,
- 17623, 17625, 17622, 17624, 17618, 17620,
- 22869, 22859, 22882, 22885, 23261, 23262,
- 23302, 23303, 23288, 23289, 23316, 23317,
- })
- lib:RegisterSetBonusCallback("PriestPvPSet", 3)
-end
-Spell({ 8122, 8124, 10888, 10890 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local pvpSetBonus = lib:IsSetBonusActive("PriestPvPSet", 3) and 1 or 0
- return 8 + pvpSetBonus
- else
- return 8
- end
- end
-}) -- Psychic Scream
-Spell({ 589, 594, 970, 992, 2767, 10892, 10893, 10894 }, { stacking = true,
- duration = function(spellID, isSrcPlayer)
- -- Improved SWP, 2 ranks: Increases the duration of your Shadow Word: Pain spell by 3 sec.
- local talents = isSrcPlayer and 3*Talent(15275, 15317) or 0
- return 18 + talents
- end
-}) -- SW:P
-Spell( 15269 ,{ duration = 3 }) -- Blackout
-
-if class == "PRIEST" then
-Spell( 15258 ,{
- duration = function(spellID, isSrcPlayer)
- -- Only SP himself can see the timer
- if Talent(15257, 15331, 15332, 15333, 15334) > 0 then
- return 15
- else
- return nil
- end
- end
-}) -- Shadow Weaving
-end
-
-Spell( 15286 ,{ duration = 60 }) -- Vampiric Embrace
-Spell({ 15407, 17311, 17312, 17313, 17314, 18807 }, { duration = 3 }) -- Mind Flay
-Spell({ 605, 10911, 10912 }, { duration = 60 }) -- Mind Control
-
----------------
--- DRUID
----------------
-
-Spell( 768, { duration = INFINITY, type = "BUFF" }) -- Cat Form
-Spell( 783, { duration = INFINITY, type = "BUFF" }) -- Travel Form
-Spell( 5487, { duration = INFINITY, type = "BUFF" }) -- Bear Form
-Spell( 9634, { duration = INFINITY, type = "BUFF" }) -- Dire Bear Form
-Spell( 1066, { duration = INFINITY, type = "BUFF" }) -- Aquatic Form
-Spell( 24858, { duration = INFINITY, type = "BUFF" }) -- Moonkin Form
-Spell( 24932, { duration = INFINITY, type = "BUFF" }) -- Leader of the Pack
-Spell( 17116, { duration = INFINITY, type = "BUFF", buffType = "Magic" }) -- Nature's Swiftness
-
-Spell({ 1126, 5232, 5234, 6756, 8907, 9884, 9885 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Mark of the Wild
-Spell({ 21849, 21850 }, { duration = 3600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Gift of the Wild
-Spell( 19975, { duration = 12, buffType = "Magic" }) -- Nature's Grasp root
-Spell({ 16689, 16810, 16811, 16812, 16813, 17329 }, { duration = 45, type = "BUFF", buffType = "Magic" }) -- Nature's Grasp
-Spell( 16864, { duration = 600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Omen of Clarity
-Spell( 16870, { duration = 15, type = "BUFF", buffType = "Magic" }) -- Clearcasting from OoC
-
-
-
-Spell( 19675, { duration = 4 }) -- Feral Charge
-Spell({ 467, 782, 1075, 8914, 9756, 9910 }, { duration = 600, type = "BUFF", buffType = "Magic" }) -- Thorns
-Spell( 22812 ,{ duration = 15, type = "BUFF", buffType = "Magic" }) -- Barkskin
---SKIPPING: Hurricane (Channeled)
-Spell({ 339, 1062, 5195, 5196, 9852, 9853 }, {
- pvpduration = 20,
- buffType = "Magic",
- duration = function(spellID)
- if spellID == 339 then return 12
- elseif spellID == 1062 then return 15
- elseif spellID == 5195 then return 18
- elseif spellID == 5196 then return 21
- elseif spellID == 9852 then return 24
- else return 27 end
- end
-}) -- Entangling Roots
-Spell({ 2908, 8955, 9901 }, { duration = 15 }) -- Soothe Animal
-Spell({ 770, 778, 9749, 9907 }, { duration = 40 }) -- Faerie Fire
-Spell({ 16857, 17390, 17391, 17392 }, { duration = 40 }) -- Faerie Fire (Feral)
-Spell({ 2637, 18657, 18658 }, {
- pvpduration = 20,
- duration = function(spellID)
- if spellID == 2637 then return 20
- elseif spellID == 18657 then return 30
- else return 40 end
- end
-}) -- Hibernate
-Spell({ 99, 1735, 9490, 9747, 9898 }, { duration = 30 }) -- Demoralizing Roar
-Spell({ 5211, 6798, 8983 }, { stacking = true, -- stacking?
- duration = function(spellID)
- local brutal_impact = Talent(16940, 16941)*0.5
- if spellID == 5211 then return 2+brutal_impact
- elseif spellID == 6798 then return 3+brutal_impact
- else return 4+brutal_impact end
- end
-}) -- Bash
-Spell( 5209, { duration = 6 }) -- Challenging Roar
-Spell( 6795, { duration = 3, stacking = true }) -- Taunt
-
-Spell({ 1850, 9821 }, { duration = 15, type = "BUFF" }) -- Dash
-Spell( 5229, { duration = 10, type = "BUFF" }) -- Enrage
-Spell({ 22842, 22895, 22896 }, { duration = 10, type = "BUFF" }) -- Frenzied Regeneration
-Spell( 16922, { duration = 3 }) -- Imp Starfire Stun
-
-Spell({ 9005, 9823, 9827 }, { -- Pounce stun doesn't create a debuff icon, so this is not going to be used
- duration = function(spellID)
- local brutal_impact = Talent(16940, 16941)*0.5
- return 2+brutal_impact
- end
-}) -- Pounce
-Spell({ 9007, 9824, 9826 }, { duration = 18, stacking = true, }) -- Pounce Bleed
-Spell({ 8921, 8924, 8925, 8926, 8927, 8928, 8929, 9833, 9834, 9835 }, { stacking = true,
- duration = function(spellID)
- if spellID == 8921 then return 9
- else return 12 end
- end
-}) -- Moonfire
-Spell({ 1822, 1823, 1824, 9904 }, { duration = 9, stacking = true }) -- Rake
-Spell({ 1079, 9492, 9493, 9752, 9894, 9896 }, { duration = 12, stacking = true }) -- Rip
-Spell({ 5217, 6793, 9845, 9846 }, { name = "Tiger's Fury", duration = 6 })
-
-Spell( 2893 ,{ duration = 8, type = "BUFF", buffType = "Magic" }) -- Abolish Poison
-Spell( 29166 , { duration = 20, type = "BUFF", buffType = "Magic" }) -- Innervate
-
-Spell({ 8936, 8938, 8939, 8940, 8941, 9750, 9856, 9857, 9858 }, { duration = 21, type = "BUFF", buffType = "Magic" }) -- Regrowth
-
-if class == "DRUID" then
- lib:TrackItemSet("StormrageRaiment", { 16899, 16900, 16901, 16902, 16903, 16904, 16897, 16898, })
- lib:RegisterSetBonusCallback("StormrageRaiment", 8)
-end
-Spell({ 774, 1058, 1430, 2090, 2091, 3627, 8910, 9839, 9840, 9841, 25299 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer and lib:IsSetBonusActive("StormrageRaiment", 8) then
- return 15
- else
- return 12
- end
- end,
- stacking = false, type = "BUFF", buffType = "Magic" }) -- Rejuv
-Spell({ 5570, 24974, 24975, 24976, 24977 }, { duration = 12, stacking = true }) -- Insect Swarm
-
--------------
--- WARRIOR
--------------
-
-Spell( 2457 , { duration = INFINITY, type = "BUFF" }) -- Battle Stance
-Spell( 2458 , { duration = INFINITY, type = "BUFF" }) -- Berserker Stance
-Spell( 71 , { duration = INFINITY, type = "BUFF" }) -- Def Stance
-
-Spell({ 12294, 21551, 21552, 21553 }, { duration = 10 }) -- Mortal Strike Healing Reduction
-
-Spell({72, 1671, 1672}, { duration = 6 }) -- Shield Bash
-Spell( 18498, { duration = 3 }) -- Improved Shield Bash
-
-Spell( 20230, { duration = 15, type = "BUFF" }) -- Retaliation
-Spell( 1719, { duration = 15, type = "BUFF" }) -- Recklessness
-Spell( 871, { type = "BUFF", duration = 10 }) -- Shield wall, varies
-Spell( 12976, { duration = 20, type = "BUFF" }) -- Last Stand
-Spell( 12328, { duration = 30 }) -- Death Wish
-Spell({ 772, 6546, 6547, 6548, 11572, 11573, 11574 }, { stacking = true,
- duration = function(spellID)
- if spellID == 772 then return 9
- elseif spellID == 6546 then return 12
- elseif spellID == 6547 then return 15
- elseif spellID == 6548 then return 18
- else return 21 end
- end
-}) -- Rend
-if locale ~= "ruRU" or class ~= "DRUID" then
-Spell( 12721, { duration = 12, stacking = true }) -- Deep Wounds
-end
-
-Spell({ 1715, 7372, 7373 }, { duration = 15 }) -- Hamstring
-Spell( 23694 , { duration = 5 }) -- Improved Hamstring
-Spell({ 6343, 8198, 8204, 8205, 11580, 11581 }, {
- duration = function(spellID)
- if spellID == 6343 then return 10
- elseif spellID == 8198 then return 14
- elseif spellID == 8204 then return 18
- elseif spellID == 8205 then return 22
- elseif spellID == 11580 then return 26
- else return 30 end
- end
-}) -- Thunder Clap
-Spell({ 694, 7400, 7402, 20559, 20560 }, { duration = 6 }) -- Mocking Blow
-Spell( 1161 ,{ duration = 6 }) -- Challenging Shout
-Spell( 355 ,{ duration = 3, stacking = true }) -- Taunt
-Spell({ 5242, 6192, 6673, 11549, 11550, 11551, 25289 }, { type = "BUFF",
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12321, 12835, 12836, 12837, 12838) or 0
- return 120 * (1 + 0.1 * talents)
- end
-}) -- Battle Shout
-Spell({ 1160, 6190, 11554, 11555, 11556 }, {
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12321, 12835, 12836, 12837, 12838) or 0
- return 30 * (1 + 0.1 * talents)
- end
-}) -- Demoralizing Shout, varies
-Spell( 18499, { duration = 10, type = "BUFF" }) -- Berserker Rage
-Spell({ 20253, 20614, 20615 }, { duration = 3 }) -- Intercept
-Spell( 12323, { duration = 6 }) -- Piercing Howl
-Spell( 5246, { duration = 8 }) -- Intimidating Shout Fear
-Spell( 20511, { duration = 8 }) -- Intimidating Shout Main Target Cower Effect
-
-Spell( 676 ,{
- duration = function(spellID, isSrcPlayer)
- local talents = isSrcPlayer and Talent(12313, 12804, 12807) or 0
- return 10 + talents
- end,
-}) -- Disarm, varies
-Spell( 29131 ,{ duration = 10, type = "BUFF" }) -- Bloodrage
-Spell( 12798 , { duration = 3 }) -- Imp Revenge Stun
-Spell( 2565 ,{ duration = 5, type = "BUFF" }) -- Shield Block, varies BUFF
-
-Spell({ 7386, 7405, 8380, 11596, 11597 }, { duration = 30 }) -- Sunder Armor
-Spell( 12809 ,{ duration = 5 }) -- Concussion Blow
-Spell( 12292 ,{ duration = 20, type = "BUFF" }) -- Sweeping Strikes
-Spell({ 12880, 14201, 14202, 14203, 14204 }, { duration = 12, type = "BUFF" }) -- Enrage
-Spell({ 12966, 12967, 12968, 12969, 12970 }, { duration = 15, type = "BUFF" }) -- Flurry
-Spell({ 16488, 16490, 16491 }, { duration = 6, type = "BUFF" }) -- Blood Craze
-Spell({ 23885, 23886, 23887, 23888 }, { duration = 6, type = "BUFF" }) -- Bloodthirst
-Spell(7922, { duration = 1 }) -- Charge
-Spell(5530, { duration = 3 }) -- Mace Specialization
-
---------------
--- ROGUE
---------------
-
-Spell( 14177 , { duration = INFINITY, type = "BUFF" }) -- Cold Blood
-Spell({ 1784, 1785, 1786, 1787 } , { duration = INFINITY, type = "BUFF" }) -- Stealth
-
-Spell( 14278 , { duration = 7, type = "BUFF" }) -- Ghostly Strike
-Spell({ 16511, 17347, 17348 }, { duration = 15 }) -- Hemorrhage
-Spell({ 11327, 11329 }, { duration = 10 }) -- Vanish
-Spell({ 3409, 11201 }, { duration = 12 }) -- Crippling Poison
--- Spell({ 13218, 13222, 13223, 13224 }, { duration = 15 }) -- Wound Poison
--- Spell({ 2818, 2819, 11353, 11354, 25349 }, { duration = 12, stacking = true }) -- Deadly Poison
-Spell({ 5760, 8692, 11398 }, {
- duration = function(spellID)
- if spellID == 5760 then return 10
- elseif spellID == 8692 then return 12
- else return 14 end
- end
-}) -- Mind-numbing Poison
-
-Spell( 18425, { duration = 2 }) -- Improved Kick Silence
-Spell( 13750, { duration = 15, type = "BUFF" }) -- Adrenaline Rush
-Spell( 13877, { duration = 15, type = "BUFF" }) -- Blade Flurry
-Spell( 1833, { duration = 4 }) -- Cheap Shot
-Spell({ 2070, 6770, 11297 }, {
- pvpduration = 20,
- duration = function(spellID)
- if spellID == 6770 then return 25 -- yes, Rank 1 spell id is 6770 actually
- elseif spellID == 2070 then return 35
- else return 45 end
- end
-}) -- Sap
-Spell( 2094 , { duration = 10 }) -- Blind
-
-Spell({ 8647, 8649, 8650, 11197, 11198 }, { duration = 30 }) -- Expose Armor
-Spell({ 703, 8631, 8632, 8633, 11289, 11290 }, { duration = 18 }) -- Garrote
-
-Spell({ 408, 8643 }, {
- duration = function(spellID, isSrcPlayer, comboPoints)
- local duration = spellID == 8643 and 1 or 0 -- if Rank 2, add 1s
- if isSrcPlayer then
- return duration + comboPoints
- else
- return duration + 5 -- just assume 5cp i guess
- end
- end
-}) -- Kidney Shot
-
-Spell({ 1943, 8639, 8640, 11273, 11274, 11275 }, { stacking = true,
- duration = function(spellID, isSrcPlayer, comboPoints)
- if isSrcPlayer then
- return (6 + comboPoints*2)
- else
- return 16
- end
- end
-}) -- Rupture
-
-Spell({ 5171, 6774 }, { duration = nil, type = "BUFF" }) -- SnD, to prevent fallback to incorrect db values
-
-Spell({ 2983, 8696, 11305 }, { duration = 15, type = "BUFF" }) -- Sprint
-Spell( 5277 ,{ duration = 15, type = "BUFF" }) -- Evasion
-Spell({ 1776, 1777, 8629, 11285, 11286 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- return 4 + 0.5*Talent(13741, 13793, 13792)
- else
- return 5.5
- end
- end
-}) -- Gouge
-
-Spell( 14251 , { duration = 6 }) -- Riposte (disarm)
-
-------------
--- WARLOCK
-------------
-
-Spell({ 20707, 20762, 20763, 20764, 20765 }, { duration = 1800, type = "BUFF" }) -- Soulstone Resurrection
-Spell({ 687, 696 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Demon SKin
-Spell({ 706, 1086, 11733, 11734, 11735 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Demon Armor
-Spell({ 18791 }, { duration = 1800, type = "BUFF", castFilter = true }) -- Touch of Shadow
-Spell({ 18789 }, { duration = 1800, type = "BUFF", castFilter = true }) -- Burning Wish
-Spell({ 18792 }, { duration = 1800, type = "BUFF", castFilter = true }) -- Fel Energy
-Spell({ 18790 }, { duration = 1800, type = "BUFF", castFilter = true }) -- Fel Stamina
-
---SKIPPING: Drain Life, Mana, Soul, Enslave, Health funnel, kilrog
-Spell( 24259 ,{ duration = 3 }) -- Spell Lock Silence
-Spell({ 17767, 17850, 17851, 17852, 17853, 17854 }, { duration = 10 }) -- Consume Shadows (Voidwalker)
-Spell( 18118, { duration = 5 }) -- Aftermath Proc
-Spell({ 132, 2970, 11743 }, { duration = 600 }) -- Detect Invisibility
-Spell( 5697, { duration = 600 }) -- Unending Breath
-if class == "WARLOCK" then
- Spell({ 17794, 17798, 17797, 17799, 17800 }, { duration = 12 }) -- Shadow Vulnerability (Imp Shadow Bolt)
-end
-Spell({ 18288 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Amplify Curse
-Spell({ 1714, 11719 }, { duration = 30 }) -- Curse of Tongues
-Spell({ 702, 1108, 6205, 7646, 11707, 11708 },{ duration = 120 }) -- Curse of Weakness
-Spell({ 17862, 17937 }, { duration = 300 }) -- Curse of Shadows
-Spell({ 1490, 11721, 11722 }, { duration = 300 }) -- Curse of Elements
-Spell({ 704, 7658, 7659, 11717 }, { duration = 120 }) -- Curse of Recklessness
-Spell( 603 ,{ duration = 60, stacking = true }) -- Curse of Doom
-Spell( 18223 ,{ duration = 12 }) -- Curse of Exhaustion
-Spell( 6358, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local mul = 1 + Talent(18754, 18755, 18756)*0.1
- return 15*mul
- else
- return 15
- end
- end
-}) -- Seduction, varies, Improved Succubus
-Spell({ 5484, 17928 }, {
- duration = function(spellID)
- return spellID == 5484 and 10 or 15
- end
-}) -- Howl of Terror
-Spell({ 5782, 6213, 6215 }, {
- pvpduration = 20,
- duration = function(spellID)
- if spellID == 5782 then return 10
- elseif spellID == 6213 then return 15
- else return 20 end
- end
-}) -- Fear
-
-Spell({ 710, 18647 }, {
- duration = function(spellID)
- return spellID == 710 and 20 or 30
- end
-}) -- Banish
-Spell({ 6789, 17925, 17926 }, { duration = 3 }) -- Death Coil
-Spell({ 6307, 7804, 7805, 11766, 11767 }, { duration = INFINITY }) -- Blood Pact
-Spell({ 18708 }, { duration = 15, type = "BUFF", buffType = "Magic" }) -- Fel Domination
-Spell({ 19480 }, { duration = INFINITY }) -- Paranoia
-Spell({ 25228 }, { duration = INFINITY, type = "BUFF", buffType = "Magic" }) -- Soul Link
-Spell({ 23829 }, { duration = INFINITY, type = "BUFF" }) -- Master Demonologist
-Spell({ 18265, 18879, 18880, 18881}, { duration = 30, stacking = true }) -- Siphon Life
-
-if locale ~= "zhCN" or class ~= "MAGE" then
-Spell({ 980, 1014, 6217, 11711, 11712, 11713 }, { duration = 24, stacking = true }) -- Curse of Agony
-end
-
-Spell({ 172, 6222, 6223, 7648, 11671, 11672, 25311 }, { stacking = true,
- duration = function(spellID)
- if spellID == 172 then
- return 12
- elseif spellID == 6222 then
- return 15
- else
- return 18
- end
- end
-})
-Spell({ 348, 707, 1094, 2941, 11665, 11667, 11668, 25309 },{ duration = 15, stacking = true }) -- Immolate
-
-Spell({ 6229, 11739, 11740, 28610 } ,{ duration = 30, type = "BUFF", buffType = "Magic" }) -- Shadow Ward
-Spell({ 7812, 19438, 19440, 19441, 19442, 19443 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Sacrifice
-Spell({ 17877, 18867, 18868, 18869, 18870, 18871 }, { duration = 5 }) -- Shadowburn Debuff
-Spell( 18093 ,{ duration = 3 }) -- Pyroclasm
-
----------------
--- SHAMAN
----------------
-
-Spell({ 8185, 10534, 10535 }, { duration = INFINITY, type = "BUFF" }) -- Fire Resistance Totem
-Spell({ 8182, 10476, 10477 }, { duration = INFINITY, type = "BUFF" }) -- Frost Resistance Totem
-Spell({ 10596, 10598, 10599 }, { duration = INFINITY, type = "BUFF" }) -- Nature Resistance Totem
-Spell( 25909, { duration = INFINITY, type = "BUFF" }) -- Tranquil Air Totem
-Spell({ 5672, 6371, 6372, 10460, 10461 }, { duration = INFINITY, type = "BUFF" }) -- Healing Stream Totem
-Spell({ 5677, 10491, 10493, 10494 }, { duration = INFINITY, type = "BUFF" }) -- Mana Spring Totem
-Spell({ 8076, 8162, 8163, 10441, 25362 }, { duration = INFINITY, type = "BUFF" }) -- Strength of Earth Totem
-Spell({ 8836, 10626, 25360 }, { duration = INFINITY, type = "BUFF" }) -- Grace of Air Totem
-Spell({ 8072, 8156, 8157, 10403, 10404, 10405 }, { duration = INFINITY, type = "BUFF" }) -- Stoneskin Totem
-Spell({ 16191, 17355, 17360 }, { duration = 12, type = "BUFF" }) -- Mana Tide Totem
-Spell( 16166, { duration = INFINITY, type = "BUFF" }) -- Elemental Mastery
-
-Spell( 8178 ,{ duration = 45, type = "BUFF" }) -- Grounding Totem Effect, no duration, but lasts 45s. Keeping for enemy buffs
-
--- Using Druid's NS
--- Spell( 16188, { duration = INFINITY, type = "BUFF" }) -- Nature's Swiftness
-
-Spell({ 324, 325, 905, 945, 8134, 10431, 10432 }, { duration = 600, type = "BUFF", buffType = "Magic" }) -- Lightning Shield
-Spell( 546 ,{ duration = 600, type = "BUFF", buffType = "Magic" }) -- Water Walking
-Spell( 131 ,{ duration = 600, type = "BUFF", buffType = "Magic" }) -- Water Breahing
-Spell({ 16257, 16277, 16278, 16279, 16280 }, { duration = 15, type = "BUFF" }) -- Flurry
-
-Spell( 17364 ,{ duration = 12 }) -- Stormstrike
-Spell({ 16177, 16236, 16237 }, { duration = 15, type = "BUFF", buffType = "Magic" }) -- Ancestral Fortitude from Ancestral Healing
-Spell({ 8056, 8058, 10472, 10473 }, { duration = 8 }) -- Frost Shock
-Spell({ 8050, 8052, 8053, 10447, 10448, 29228 }, { duration = 12, stacking = true }) -- Flame Shock
-Spell( 29203 ,{ duration = 15, type = "BUFF", buffType = "Magic" }) -- Healing Way
-Spell({ 8034, 8037, 10458, 16352, 16353 }, { duration = 8 }) -- Frostbrand Attack
-Spell( 3600 ,{ duration = 5 }) -- Earthbind Totem
-
---------------
--- PALADIN
---------------
-
-Spell( 19746, { duration = INFINITY, type = "BUFF" }) -- Concentration Aura
-Spell({ 465, 643, 1032, 10290, 10291, 10292, 10293 }, { duration = INFINITY, type = "BUFF" }) -- Devotion Aura
-Spell({ 19891, 19899, 19900 }, { duration = INFINITY, type = "BUFF" }) -- Fire Resistance Aura
-Spell({ 19888, 19897, 19898 }, { duration = INFINITY, type = "BUFF" }) -- Frost Resistance Aura
-Spell({ 19876, 19895, 19896 }, { duration = INFINITY, type = "BUFF" }) -- Shadow Resistance Aura
-Spell({ 7294, 10298, 10299, 10300, 10301 }, { duration = INFINITY, type = "BUFF" }) -- Retribution Aura
-Spell({ 20218 }, { duration = INFINITY, type = "BUFF" }) -- Sanctity Aura
-
-
-Spell( 25780, { duration = 1800, type = "BUFF", buffType = "Magic" }) -- Righteous Fury
-
-Spell({ 19740, 19834, 19835, 19836, 19837, 19838, 25291 }, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Might
-Spell({ 25782, 25916 }, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Might
-
-Spell({ 19742, 19850, 19852, 19853, 19854, 25290 }, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Wisdom
-Spell({ 25894, 25918 }, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Might
-
-Spell(20217, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Kings
-Spell(25898, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Kings
-
-Spell({ 20911, 20912, 20913 }, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Sanctuary
-Spell(25899, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Sanctuary
-
-Spell(1038, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Salvation
-Spell(25895, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Salvation
-
-Spell({ 19977, 19978, 19979 }, { duration = 300, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Blessing of Light
-Spell(25890, { duration = 900, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Greater Blessing of Light
-
-Spell( 20066, { duration = 6 }) -- Repentance
-Spell({ 2878, 5627, 5627 }, {
- duration = function(spellID)
- if spellID == 2878 then return 10
- elseif spellID == 5627 then return 15
- else return 20 end
- end
-}) -- Turn Undead
-
-Spell( 1044, {
- duration = function(spellID, isSrcPlayer)
- local talents = 0
- if isSrcPlayer then talents = 3*Talent(20174, 20175) end
- return 10 + talents
- end, type = "BUFF", buffType = "Magic" }) -- Blessing of Freedom
-Spell({ 6940, 20729 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Blessing of Sacrifice
-Spell({ 1022, 5599, 10278 }, { type = "BUFF",
- buffType = "Magic",
- duration = function(spellID)
- if spellID == 1022 then return 6
- elseif spellID == 5599 then return 8
- else return 10 end
- end
-}) -- Blessing of Protection
-Spell(25771, { duration = 60 }) -- Forbearance
-Spell({ 498, 5573 }, { type = "BUFF",
- duration = function(spellID)
- return spellID == 498 and 6 or 8
- end
-}) -- Divine Protection
-Spell({ 642, 1020 }, { type = "BUFF",
- duration = function(spellID)
- return spellID == 642 and 10 or 12
- end
-}) -- Divine Shield
-Spell({ 20375, 20915, 20918, 20919, 20920 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of Command
-Spell({ 21084, 20287, 20288, 20289, 20290, 20291, 20292, 20293 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of Righteousness
-Spell({ 20162, 20305, 20306, 20307, 20308, 21082 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of the Crusader
-Spell({ 20165, 20347, 20348, 20349 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of Light
-Spell({ 20166, 20356, 20357 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of Wisdom
-Spell( 20164 , { duration = 30, type = "BUFF", buffType = "Magic" }) -- Seal of Justice
-
-Spell({ 21183, 20188, 20300, 20301, 20302, 20303 }, { duration = 10 }) -- Judgement of the Crusader
-Spell({ 20185, 20344, 20345, 20346 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local talents = 10*Talent(20359, 20360, 20361)
- return 10+talents
- else
- return 10
- end
- end
-}) -- Judgement of Light
-Spell({ 20186, 20354, 20355 }, {
- duration = function(spellID, isSrcPlayer)
- if isSrcPlayer then
- local talents = 10*Talent(20359, 20360, 20361)
- return 10+talents
- else
- return 10
- end
- end
-}) -- Judgement of Wisdom
-Spell(20184, { duration = 10 }) -- Judgement of Justice
-
-Spell({ 853, 5588, 5589, 10308 }, {
- duration = function(spellID)
- if spellID == 853 then return 3
- elseif spellID == 5588 then return 4
- elseif spellID == 5589 then return 5
- else return 6 end
- end
-}) -- Hammer of Justice
-
-Spell({ 20925, 20927, 20928 }, { duration = 10, type = "BUFF", buffType = "Magic" }) -- Holy Shield
-Spell({ 20128, 20131, 20132, 20133, 20134 }, { duration = 10, type = "BUFF" }) -- Redoubt
-Spell({ 67, 26017, 26018 }, { duration = 10, type = "BUFF", buffType = "Magic" }) -- Vindication
-Spell({ 20050, 20052, 20053, 20054, 20055 }, { duration = 8, type = "BUFF", buffType = "Magic" }) -- Vengeance
-Spell( 20170 ,{ duration = 2 }) -- Seal of Justice stun
-
--------------
--- HUNTER
--------------
-
-Spell( 13161, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Beast
-Spell( 5118, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Cheetah
-Spell( 13159, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Pack
-Spell( 13163, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Monkey
-Spell({ 20043, 20190 }, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Wild
-Spell({ 13165, 14318, 14319, 14320, 14321, 14322, 25296 }, { duration = INFINITY, type = "BUFF" }) -- Aspect of the Hawk
-Spell( 5384, { duration = INFINITY, type = "BUFF" }) -- Feign Death (Will it work?)
-Spell({ 19579, 24529 }, { duration = INFINITY, type = "BUFF" }) -- Spirit Bond
-
-Spell({ 19506, 20905, 20906 }, { duration = 1800, type = "BUFF", castFilter = true }) -- Trueshot Aura
-Spell(19615, { duration = 8, type = "BUFF" }) -- Frenzy
-Spell({ 1130, 14323, 14324, 14325 }, { duration = 120 }) -- Hunter's Mark
-Spell(19263, { duration = 10, type = "BUFF" }) -- Deterrence
-Spell(3045, { duration = 15, type = "BUFF" }) -- Rapid Fire
-Spell(19574, { duration = 18, type = "BUFF" }) -- Bestial Wrath
-Spell({ 1978, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 25295 }, { duration = 15, stacking = true }) -- Serpent Sting
-Spell({ 3043, 14275, 14276, 14277 }, { duration = 20 }) -- Scorpid Sting
-Spell({ 3034, 14279, 14280 }, { duration = 8 }) -- Viper Sting
-Spell({ 19386, 24132, 24133 }, { duration = 12 }) -- Wyvern Sting
-Spell({ 24131, 24134, 24135 }, { duration = 12 }) -- Wyvern Sting Dot
-Spell({ 1513, 14326, 14327 }, {
- pvpduration = 20,
- duration = function(spellID)
- if spellID == 1513 then return 10
- elseif spellID == 14326 then return 15
- else return 20 end
- end
-}) -- Scare Beast
-
-Spell(19229, { duration = 5 }) -- Wing Clip Root
-Spell({ 19306, 20909, 20910 }, { duration = 5 }) -- Counterattack
--- Spell({ 13812, 14314, 14315 }, { duration = 20, stacking = true }) -- Explosive Trap
-Spell({ 13797, 14298, 14299, 14300, 14301 }, { duration = 15, stacking = true }) -- Immolation Trap
-Spell({ 3355, 14308, 14309 }, {
- pvpduration = 20,
- duration = function(spellID, isSrcPlayer)
- local mul = 1
- if isSrcPlayer then
- mul = mul + 0.15*Talent(19239, 19245) -- Clever Traps
- end
- if spellID == 3355 then return 10*mul
- elseif spellID == 14308 then return 15*mul
- else return 20*mul end
- end
-}) -- Freezing Trap
-Spell(19503, { duration = 4 }) -- Scatter Shot
-Spell({ 2974, 14267, 14268 }, { duration = 10 }) -- Wing Clip
-Spell(5116, { duration = 4 }) -- Concussive Shot
-Spell(19410, { duration = 3 }) -- Conc Stun
-Spell(24394, { duration = 3 }) -- Intimidation
--- Spell(15571, { duration = 4 }) -- Daze from Aspect
-Spell(19185, { duration = 5 }) -- Entrapment
-Spell(25999, { duration = 1 }) -- Boar Charge
-Spell({ 23099, 23109, 23110 } , { duration = 15 }) -- Dash
-Spell(1002, { duration = 60 }) -- Eye of the Beast
-Spell(1539, { duration = 20 }) -- Feed Pet Effect
-Spell({ 136, 3111, 3661, 3662, 13542, 13543, 13544 }, { duration = 5, type = "BUFF" }) -- Mend Pet
-
--------------
--- MAGE
--------------
-
-Spell( 12043, { duration = INFINITY, type = "BUFF", buffType = "Magic" }) -- Presence of Mind
-
-Spell({ 1459, 1460, 1461, 10156, 10157 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Arcane Intellect
-Spell( 23028, { duration = 3600, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Arcane Brilliance
-Spell({ 6117, 22782, 22783 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Mage Armor
-Spell({ 168, 7300, 7301 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Frost Armor
-Spell({ 7302, 7320, 10219, 10220 }, { duration = 1800, type = "BUFF", castFilter = true, buffType = "Magic" }) -- Ice Armor
-
-Spell( 2855, { duration = 120, type = "BUFF", buffType = "Magic" }) -- Detect Magic
-Spell( 130, { duration = 1800, type = "BUFF", buffType = "Magic" }) -- Slow Fall
-
-Spell({ 133, 143, 145, 3140, 8400, 8401, 8402, 10148, 10149, 10150, 10151, 25306 }, {
- stacking = true,
- duration = function(spellID)
- if spellID == 133 then return 4
- elseif spellID == 143 then return 6
- elseif spellID == 145 then return 6
- else return 8 end
- end
-}) -- Fireball
-Spell({ 11366, 12505, 12522, 12523, 12524, 12525, 12526, 18809 }, { duration = 12, stacking = true }) -- Pyroblast
-
-Spell({ 604, 8450, 8451, 10173, 10174 }, { duration = 600, type = "BUFF", buffType = "Magic" }) -- Dampen Magic
-Spell({ 1008, 8455, 10169, 10170 }, { duration = 600, type = "BUFF", buffType = "Magic" }) -- Amplify Magic
-
-Spell(18469, { duration = 4 }) -- Imp CS Silence
-Spell({ 118, 12824, 12825, 12826, 28270, 28271, 28272 }, {
- pvpduration = 20,
- duration = function(spellID)
- if spellID == 118 then return 20
- elseif spellID == 12824 then return 30
- elseif spellID == 12825 then return 40
- else return 50 end
- end
-}) -- Polymorph
-Spell(11958, { duration = 10, type = "BUFF" }) -- Ice Block
-Spell({ 1463, 8494, 8495, 10191, 10192, 10193 }, { duration = 60, type = "BUFF", buffType = "Magic" }) -- Mana Shield
-Spell({ 11426, 13031, 13032, 13033 }, { duration = 60, type = "BUFF", buffType = "Magic" }) -- Ice Barrier
-Spell({ 543, 8457, 8458, 10223, 10225 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Fire Ward
-Spell({ 6143, 8461, 8462, 10177, 28609 }, { duration = 30, type = "BUFF", buffType = "Magic" }) -- Frost Ward
-
-Spell(12355, { duration = 2 }) -- Impact
-lib.spellNameToID[GetSpellInfo(12654)] = 12654
--- Spell(12654, { duration = 4 }) -- Ignite
-
-if class == "MAGE" then
-Spell(22959, {
- duration = function(spellID, isSrcPlayer)
- if Talent(11095, 12872, 12873) > 0 then
- return 30
- else
- return nil
- end
- end }) -- Fire Vulnerability
-end
-
-if class == "MAGE" then
-Spell(12579, {
- duration = function(spellID, isSrcPlayer)
- if Talent(11180, 28592, 28593, 28594, 28595) > 0 then
- return 15
- else
- return nil
- end
- end }) -- Winter's Chill
-end
-
-Spell({ 11113, 13018, 13019, 13020, 13021 }, { duration = 6 }) -- Blast Wave
-
-Spell({ 2120, 2121, 8422, 8423, 10215, 10216 }, { duration = 8, stacking = true }) -- Flamestrike
-
-Spell({ 120, 8492, 10159, 10160, 10161 }, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- return 8 + permafrost
- end
-}) -- Cone of Cold
-
-
-if class == "MAGE" then
--- Chilled from Imp Blizzard
-Spell({ 12484, 12485, 12486 }, {
- duration = function(spellID, isSrcPlayer)
- if Talent(11185, 12487, 12488) > 0 then -- Don't show anything if mage doesn't have imp blizzard talent
- local permafrost = Talent(11175, 12569, 12571) -- Always count player's permafost, even source isn't player.
- return 1.5 + permafrost + 0.5
- -- 0.5 compensates for delay between damage event and slow application
- else
- return nil
- end
- end
-}) -- Improved Blizzard (Chilled)
-
--- Manually setting a custom spellname for ImpBlizzard's "Chilled" aura
-lib.spellNameToID["ImpBlizzard"] = 12486
--- Frost Armor will overwrite Chilled to 7321 right after
-end
-
-Spell({6136, 7321}, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- return 5 + permafrost
- end
-}) -- Frost/Ice Armor (Chilled)
-
-Spell({ 116, 205, 837, 7322, 8406, 8407, 8408, 10179, 10180, 10181, 25304 }, {
- duration = function(spellID, isSrcPlayer)
- local permafrost = isSrcPlayer and Talent(11175, 12569, 12571) or 0
- if spellID == 116 then return 5 + permafrost
- elseif spellID == 205 then return 6 + permafrost
- elseif spellID == 837 then return 6 + permafrost
- elseif spellID == 7322 then return 7 + permafrost
- elseif spellID == 8406 then return 7 + permafrost
- elseif spellID == 8407 then return 8 + permafrost
- elseif spellID == 8408 then return 8 + permafrost
- else return 9 + permafrost end
- end
-}) -- Frostbolt
-
-Spell(12494, { duration = 5 }) -- Frostbite
-Spell({ 122, 865, 6131, 10230 }, { duration = 8 }) -- Frost Nova
--- Spell(12536, { duration = 15 }) -- Clearcasting
-Spell(12043, { duration = 15 }) -- Presence of Mind
-Spell(12042, { duration = 15 }) -- Arcane Power
-Spell(12051, { duration = 8, type = "BUFF" }) -- Evocation
-
--------------
--- MOUNTS
--------------
-
-Spell(17481, { duration = INFINITY, type = "BUFF" }) -- Deathcharger's Reins
-Spell(24252, { duration = INFINITY, type = "BUFF" }) -- Swift Zulian Tiger
-Spell(23509, { duration = INFINITY, type = "BUFF" }) -- Horn of the Frostwolf Howler
-Spell(17229, { duration = INFINITY, type = "BUFF" }) -- Reins of the Winterspring Frostsaber
-Spell(26656, { duration = INFINITY, type = "BUFF" }) -- Black Qiraji Resonating Crystal
-Spell(24242, { duration = INFINITY, type = "BUFF" }) -- Swift Razzashi Raptor
-Spell(23510, { duration = INFINITY, type = "BUFF" }) -- Stormpike Battle Charger
-Spell(470, { duration = INFINITY, type = "BUFF" }) -- Black Stallion Bridle
-Spell(22723, { duration = INFINITY, type = "BUFF" }) -- Reins of the Black War Tiger
-Spell(472, { duration = INFINITY, type = "BUFF" }) -- Pinto Bridle
-Spell(23221, { duration = INFINITY, type = "BUFF" }) -- Reins of the Swift Frostsaber
-Spell(23227, { duration = INFINITY, type = "BUFF" }) -- Swift Palomino
-Spell(23228, { duration = INFINITY, type = "BUFF" }) -- Swift White Steed
-Spell(6648, { duration = INFINITY, type = "BUFF" }) -- Chestnut Mare Bridle
-Spell(458, { duration = INFINITY, type = "BUFF" }) -- Brown Horse Bridle
-Spell(23338, { duration = INFINITY, type = "BUFF" }) -- Reins of the Swift Stormsaber
-Spell(23219, { duration = INFINITY, type = "BUFF" }) -- Reins of the Swift Mistsaber
-Spell(22721, { duration = INFINITY, type = "BUFF" }) -- Whistle of the Black War Raptor
-Spell(23229, { duration = INFINITY, type = "BUFF" }) -- Swift Brown Steed
-Spell(22717, { duration = INFINITY, type = "BUFF" }) -- Black War Steed Bridle
-Spell(10793, { duration = INFINITY, type = "BUFF" }) -- Reins of the Striped Nightsaber
-Spell(22722, { duration = INFINITY, type = "BUFF" }) -- Red Skeletal Warhorse
-Spell(18791, { duration = INFINITY, type = "BUFF" }) -- Purple Skeletal Warhorse
-Spell(10789, { duration = INFINITY, type = "BUFF" }) -- Reins of the Spotted Frostsaber
-Spell(18245, { duration = INFINITY, type = "BUFF" }) -- Horn of the Black War Wolf
-Spell(6653, { duration = INFINITY, type = "BUFF" }) -- Horn of the Dire Wolf
-Spell(23241, { duration = INFINITY, type = "BUFF" }) -- Swift Blue Raptor
-Spell(8394, { duration = INFINITY, type = "BUFF" }) -- Reins of the Striped Frostsaber
-Spell(23250, { duration = INFINITY, type = "BUFF" }) -- Horn of the Swift Brown Wolf
-Spell(22718, { duration = INFINITY, type = "BUFF" }) -- Black War Kodo
-Spell(580, { duration = INFINITY, type = "BUFF" }) -- Horn of the Timber Wolf
-Spell(17463, { duration = INFINITY, type = "BUFF" }) -- Blue Skeletal Horse
-Spell(23251, { duration = INFINITY, type = "BUFF" }) -- Horn of the Swift Timber Wolf
-Spell(23243, { duration = INFINITY, type = "BUFF" }) -- Swift Orange Raptor
-Spell(17465, { duration = INFINITY, type = "BUFF" }) -- Green Skeletal Warhorse
-Spell(22720, { duration = INFINITY, type = "BUFF" }) -- Black War Ram
-Spell(8395, { duration = INFINITY, type = "BUFF" }) -- Whistle of the Emerald Raptor
-Spell(6654, { duration = INFINITY, type = "BUFF" }) -- Horn of the Brown Wolf
-Spell(17462, { duration = INFINITY, type = "BUFF" }) -- Red Skeletal Horse
-Spell(23240, { duration = INFINITY, type = "BUFF" }) -- Swift White Ram
-Spell(23252, { duration = INFINITY, type = "BUFF" }) -- Horn of the Swift Gray Wolf
-Spell(23247, { duration = INFINITY, type = "BUFF" }) -- Great White Kodo
-Spell(23242, { duration = INFINITY, type = "BUFF" }) -- Swift Olive Raptor
-Spell(23225, { duration = INFINITY, type = "BUFF" }) -- Swift Green Mechanostrider
-Spell(10969, { duration = INFINITY, type = "BUFF" }) -- Blue Mechanostrider
-Spell(10799, { duration = INFINITY, type = "BUFF" }) -- Whistle of the Violet Raptor
-Spell(22719, { duration = INFINITY, type = "BUFF" }) -- Black Battlestrider
-Spell(6898, { duration = INFINITY, type = "BUFF" }) -- White Ram
-Spell(17464, { duration = INFINITY, type = "BUFF" }) -- Brown Skeletal Horse
-Spell(17454, { duration = INFINITY, type = "BUFF" }) -- Unpainted Mechanostrider
-Spell(23223, { duration = INFINITY, type = "BUFF" }) -- Swift White Mechanostrider
-Spell(10796, { duration = INFINITY, type = "BUFF" }) -- Whistle of the Turquoise Raptor
-Spell(23238, { duration = INFINITY, type = "BUFF" }) -- Swift Brown Ram
-Spell(23239, { duration = INFINITY, type = "BUFF" }) -- Swift Gray Ram
-Spell(6899, { duration = INFINITY, type = "BUFF" }) -- Brown Ram
-Spell(6777, { duration = INFINITY, type = "BUFF" }) -- Gray Ram
-Spell(10873, { duration = INFINITY, type = "BUFF" }) -- Red Mechanostrider
-Spell(23249, { duration = INFINITY, type = "BUFF" }) -- Great Brown Kodo
-Spell(18989, { duration = INFINITY, type = "BUFF" }) -- Gray Kodo
-Spell(18990, { duration = INFINITY, type = "BUFF" }) -- Brown Kodo
-Spell(23248, { duration = INFINITY, type = "BUFF" }) -- Great Gray Kodo
-Spell(23222, { duration = INFINITY, type = "BUFF" }) -- Swift Yellow Mechanostrider
-Spell(17453, { duration = INFINITY, type = "BUFF" }) -- Green Mechanostrider
-Spell(23214, { duration = INFINITY, type = "BUFF" }) -- Summon Charger
-Spell(13819, { duration = INFINITY, type = "BUFF" }) -- Summon Warhorse
-Spell(23161, { duration = INFINITY, type = "BUFF" }) -- Summon Dreadsteed
-Spell(5784, { duration = INFINITY, type = "BUFF" }) -- Summon Felsteed
-
--------------
--- ITEMS
--------------
-
-Spell(17670, { duration = INFINITY, type = "BUFF" }) -- Argent Dawn Commission
-
-lib:SetDataVersion(Type, Version)
diff --git a/lib/LibClassicDurations/core.lua b/lib/LibClassicDurations/core.lua
deleted file mode 100644
index 1be6e5a..0000000
--- a/lib/LibClassicDurations/core.lua
+++ /dev/null
@@ -1,1161 +0,0 @@
---[================[
-LibClassicDurations
-Author: d87
-Description: Tracks all aura applications in combat log and provides duration, expiration time.
-And additionally enemy buffs info.
-
-Usage example 1:
------------------
-
- -- Using UnitAura wrapper
- local UnitAura = _G.UnitAura
-
- local LibClassicDurations = LibStub("LibClassicDurations", true)
- if LibClassicDurations then
- LibClassicDurations:Register("YourAddon")
- UnitAura = LibClassicDurations.UnitAuraWrapper
- end
-
---]================]
-if WOW_PROJECT_ID ~= WOW_PROJECT_CLASSIC then return end
-
-local MAJOR, MINOR = "LibClassicDurations", 69
-local lib = LibStub:NewLibrary(MAJOR, MINOR)
-if not lib then return end
-
-lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
-lib.frame = lib.frame or CreateFrame("Frame")
-
-lib.guids = lib.guids or {}
-lib.spells = lib.spells or {}
-lib.npc_spells = lib.npc_spells or {}
-
-lib.spellNameToID = lib.spellNameToID or {}
-local spellNameToID = lib.spellNameToID
-
-local NPCspellNameToID = {}
-if lib.NPCSpellTableTimer then
- lib.NPCSpellTableTimer:Cancel()
-end
-
-lib.DRInfo = lib.DRInfo or {}
-local DRInfo = lib.DRInfo
-
-lib.buffCache = lib.buffCache or {}
-local buffCache = lib.buffCache
-
-local buffCacheValid = {}
-
-lib.nameplateUnitMap = lib.nameplateUnitMap or {}
-local nameplateUnitMap = lib.nameplateUnitMap
-
-lib.castLog = lib.castLog or {}
-local castLog = lib.castLog
-
-lib.guidAccessTimes = lib.guidAccessTimes or {}
-local guidAccessTimes = lib.guidAccessTimes
-
-local f = lib.frame
-local callbacks = lib.callbacks
-local guids = lib.guids
-local spells = lib.spells
-local npc_spells = lib.npc_spells
-local indirectRefreshSpells = lib.indirectRefreshSpells
-
-local INFINITY = math.huge
-local PURGE_INTERVAL = 900
-local PURGE_THRESHOLD = 1800
-local UNKNOWN_AURA_DURATION = 3600 -- 60m
-local BUFF_CACHE_EXPIRATION_TIME = 40
-
-local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
-local UnitGUID = UnitGUID
-local UnitAura = UnitAura
-local GetSpellInfo = GetSpellInfo
-local GetTime = GetTime
-local tinsert = table.insert
-local unpack = unpack
-local GetGUIDAuraTime
-local time = time
-
-if lib.enableEnemyBuffTracking == nil then lib.enableEnemyBuffTracking = false end
-local enableEnemyBuffTracking = lib.enableEnemyBuffTracking
-
-local COMBATLOG_OBJECT_CONTROL_PLAYER = COMBATLOG_OBJECT_CONTROL_PLAYER
-
-f:SetScript("OnEvent", function(self, event, ...)
- return self[event](self, event, ...)
-end)
-
-lib.dataVersions = lib.dataVersions or {}
-local SpellDataVersions = lib.dataVersions
-
-function lib:SetDataVersion(dataType, version)
- SpellDataVersions[dataType] = version
- npc_spells = lib.npc_spells
- indirectRefreshSpells = lib.indirectRefreshSpells
-end
-
-function lib:GetDataVersion(dataType)
- return SpellDataVersions[dataType] or 0
-end
-
-lib.AddAura = function(id, opts)
- if not opts then return end
-
- local lastRankID
- if type(id) == "table" then
- local clones = id
- lastRankID = clones[#clones]
- else
- lastRankID = id
- end
-
- local spellName = GetSpellInfo(lastRankID)
- if not spellName then
- -- print(MINOR, lastRankID, spellName)
- return
- end
- spellNameToID[spellName] = lastRankID
-
- if type(id) == "table" then
- for _, spellID in ipairs(id) do
- spells[spellID] = opts
- end
- else
- spells[id] = opts
- end
-end
-
-
-lib.Talent = function (...)
- for i=1, 5 do
- local spellID = select(i, ...)
- if not spellID then break end
- if IsPlayerSpell(spellID) then return i end
- end
- return 0
-end
-
-local prevID
-local counter = 0
-local function processNPCSpellTable()
- local dataTable = lib.npc_spells
- counter = 0
- local id = next(dataTable, prevID)
- while (id and counter < 300) do
- local spellName = GetSpellInfo(id)
- if spellName then
- NPCspellNameToID[GetSpellInfo(id)] = id
- end
-
- counter = counter + 1
- prevID = id
- id = next(dataTable, prevID)
- end
- if (id) then
- C_Timer.After(1, processNPCSpellTable)
- end
-end
-lib.NPCSpellTableTimer = C_Timer.NewTimer(10, processNPCSpellTable)
-
-
-local function isHunterGUID(guid)
- return select(2, GetPlayerInfoByGUID(guid)) == "HUNTER"
-end
-local function isFriendlyFeigning(guid)
- if IsInRaid() then
- for i = 1, MAX_RAID_MEMBERS do
- local unitID = "raid"..i
- if (UnitGUID(unitID) == guid) and UnitIsFeignDeath(unitID) then
- return true
- end
- end
- elseif IsInGroup() then
- for i = 1, MAX_PARTY_MEMBERS do
- local unitID = "party"..i
- if (UnitGUID(unitID) == guid) and UnitIsFeignDeath(unitID) then
- return true
- end
- end
- end
-end
---------------------------
--- OLD GUIDs PURGE
---------------------------
-
-local function purgeOldGUIDsArgs(dataTable, accessTimes)
- local now = time()
- local deleted = {}
- for guid, lastAccessTime in pairs(accessTimes) do
- if lastAccessTime + PURGE_THRESHOLD < now then
- dataTable[guid] = nil
- nameplateUnitMap[guid] = nil
- buffCacheValid[guid] = nil
- buffCache[guid] = nil
- DRInfo[guid] = nil
- castLog[guid] = nil
- tinsert(deleted, guid)
- end
- end
- for _, guid in ipairs(deleted) do
- accessTimes[guid] = nil
- end
-end
-
-local function purgeOldGUIDs()
- purgeOldGUIDsArgs(guids, guidAccessTimes)
-end
-if lib.purgeTicker then
- lib.purgeTicker:Cancel()
-end
-lib.purgeTicker = C_Timer.NewTicker( PURGE_INTERVAL, purgeOldGUIDs)
-
-------------------------------------
--- Restore data if using standalone
-f:RegisterEvent("PLAYER_LOGIN")
-function f:PLAYER_LOGIN()
- if LCD_Data and LCD_GUIDAccess then
- purgeOldGUIDsArgs(LCD_Data, LCD_GUIDAccess)
-
- local function MergeTableNoOverwrite(t1, t2)
- if not t2 then return false end
- for k,v in pairs(t2) do
- if type(v) == "table" then
- if t1[k] == nil then
- t1[k] = CopyTable(v)
- else
- MergeTableNoOverwrite(t1[k], v)
- end
- elseif t1[k] == nil then
- t1[k] = v
- end
- end
- return t1
- end
-
- local curSessionData = lib.guids
- local restoredSessionData = LCD_Data
- MergeTableNoOverwrite(curSessionData, restoredSessionData)
-
- local curSessionAccessTimes = lib.guidAccessTimes
- local restoredSessionAccessTimes = LCD_GUIDAccess
- MergeTableNoOverwrite(curSessionAccessTimes, restoredSessionAccessTimes)
- end
-
- f:RegisterEvent("PLAYER_LOGOUT")
- function f:PLAYER_LOGOUT()
- LCD_Data = guids
- LCD_GUIDAccess = guidAccessTimes
- end
-end
-
-
---------------------------
--- DIMINISHING RETURNS
---------------------------
-local bit_band = bit.band
-local DRResetTime = 18.4
-local COMBATLOG_OBJECT_TYPE_PLAYER = COMBATLOG_OBJECT_TYPE_PLAYER
-local COMBATLOG_OBJECT_REACTION_FRIENDLY = COMBATLOG_OBJECT_REACTION_FRIENDLY
-
-local DRMultipliers = { 0.5, 0.25, 0}
-local function addDRLevel(dstGUID, category)
- local guidTable = DRInfo[dstGUID]
- if not guidTable then
- DRInfo[dstGUID] = {}
- guidTable = DRInfo[dstGUID]
- end
-
- local catTable = guidTable[category]
- if not catTable then
- guidTable[category] = { level = 0, expires = 0}
- catTable = guidTable[category]
- end
-
- local now = GetTime()
- local isExpired = (catTable.expires or 0) <= now
- local oldDRLevel = catTable.level
- if isExpired or oldDRLevel >= 3 then
- catTable.level = 0
- end
- catTable.level = catTable.level + 1
- catTable.expires = now + DRResetTime
-end
-local function clearDRs(dstGUID)
- DRInfo[dstGUID] = nil
-end
-local function getDRMul(dstGUID, spellID)
- local category = lib.DR_CategoryBySpellID[spellID]
- if not category then return 1 end
-
- local guidTable = DRInfo[dstGUID]
- if guidTable then
- local catTable = guidTable[category]
- if catTable then
- local now = GetTime()
- local isExpired = (catTable.expires or 0) <= now
- if isExpired then
- return 1
- else
- local mul = DRMultipliers[catTable.level]
- return mul or 1
- end
- end
- end
- return 1
-end
-
-local function CountDiminishingReturns(eventType, srcGUID, srcFlags, dstGUID, dstFlags, spellID, auraType)
- if auraType == "DEBUFF" then
- if eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_REFRESH" then
- local category = lib.DR_CategoryBySpellID[spellID]
- if not category then return end
-
- local isDstPlayer = bit_band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) > 0
- -- local isFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
-
- if not isDstPlayer then
- if not lib.DR_TypesPVE[category] then return end
- end
-
- addDRLevel(dstGUID, category)
- end
- if eventType == "UNIT_DIED" then
- if not isHunterGUID(dstGUID) then
- clearDRs(dstGUID)
- end
- end
- end
-end
-
-------------------------
--- COMBO POINTS
-------------------------
-
-local GetComboPoints = GetComboPoints
-local _, playerClass = UnitClass("player")
-local cpWas = 0
-local cpNow = 0
-local function GetCP()
- if not cpNow then return GetComboPoints("player", "target") end
- return cpWas > cpNow and cpWas or cpNow
-end
-
-function f:PLAYER_TARGET_CHANGED(event)
- return self:UNIT_POWER_UPDATE(event, "player", "COMBO_POINTS")
-end
-function f:UNIT_POWER_UPDATE(event,unit, ptype)
- if ptype == "COMBO_POINTS" then
- cpWas = cpNow
- cpNow = GetComboPoints(unit, "target")
- end
-end
-
----------------------------
--- COMBAT LOG
----------------------------
-
-local function cleanDuration(duration, spellID, srcGUID, comboPoints)
- if type(duration) == "function" then
- local isSrcPlayer = srcGUID == UnitGUID("player")
- -- Passing startTime for the sole reason of identifying different Rupture/KS applications for Rogues
- -- Then their duration func will cache one actual duration calculated at the moment of application
- return duration(spellID, isSrcPlayer, comboPoints)
- end
- return duration
-end
-
-local function GetSpellTable(srcGUID, dstGUID, spellID)
- local guidTable = guids[dstGUID]
- if not guidTable then return end
-
- local spellTable = guidTable[spellID]
- if not spellTable then return end
-
- local applicationTable
- if spellTable.applications then
- applicationTable = spellTable.applications[srcGUID]
- else
- applicationTable = spellTable
- end
- if not applicationTable then return end
- return applicationTable
-end
-
-local function RefreshTimer(srcGUID, dstGUID, spellID, overrideTime)
- local applicationTable = GetSpellTable(srcGUID, dstGUID, spellID)
- if not applicationTable then return end
-
- local oldStartTime = applicationTable[2]
- applicationTable[2] = overrideTime or GetTime() -- set start time to now
- return true, oldStartTime
-end
-
-local function SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, doRemove)
- if not opts then return end
-
- local guidTable = guids[dstGUID]
- if not guidTable then
- guids[dstGUID] = {}
- guidTable = guids[dstGUID]
- end
-
- local isStacking = opts.stacking
- -- local auraUID = MakeAuraUID(spellID, isStacking and srcGUID)
-
- if doRemove then
- if guidTable[spellID] then
- if isStacking then
- if guidTable[spellID].applications then
- guidTable[spellID].applications[srcGUID] = nil
- end
- else
- guidTable[spellID] = nil
- end
- end
- return
- end
-
- local spellTable = guidTable[spellID]
- if not spellTable then
- guidTable[spellID] = {}
- spellTable = guidTable[spellID]
- if isStacking then
- spellTable.applications = {}
- end
- end
-
- local applicationTable
- if isStacking then
- applicationTable = spellTable.applications[srcGUID]
- if not applicationTable then
- spellTable.applications[srcGUID] = {}
- applicationTable = spellTable.applications[srcGUID]
- end
- else
- applicationTable = spellTable
- end
-
- local duration = opts.duration
- local isDstPlayer = bit_band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) > 0
- if isDstPlayer and opts.pvpduration then
- duration = opts.pvpduration
- end
-
- if not duration then
- return SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, true)
- end
- -- local mul = getDRMul(dstGUID, spellID)
- -- duration = duration * mul
- local now = GetTime()
- -- local expirationTime
- -- if duration == 0 then
- -- expirationTime = now + UNKNOWN_AURA_DURATION -- 60m
- -- else
- -- -- local temporaryDuration = cleanDuration(opts.duration, spellID, srcGUID)
- -- expirationTime = now + duration
- -- end
-
- applicationTable[1] = duration
- applicationTable[2] = now
- -- applicationTable[2] = expirationTime
- applicationTable[3] = auraType
-
- local isSrcPlayer = srcGUID == UnitGUID("player")
- local comboPoints
- if isSrcPlayer and playerClass == "ROGUE" then
- comboPoints = GetCP()
- end
- applicationTable[4] = comboPoints
-
- guidAccessTimes[dstGUID] = time()
-end
-
-local function FireToUnits(event, dstGUID)
- if dstGUID == UnitGUID("target") then
- callbacks:Fire(event, "target")
- end
- local nameplateUnit = nameplateUnitMap[dstGUID]
- if nameplateUnit then
- callbacks:Fire(event, nameplateUnit)
- end
-end
-
-local function GetLastRankSpellID(spellName)
- local spellID = spellNameToID[spellName]
- if not spellID then
- spellID = NPCspellNameToID[spellName]
- end
- return spellID
-end
-
-local eventSnapshot
-castLog.SetLastCast = function(self, srcGUID, spellID, timestamp)
- self[srcGUID] = { spellID, timestamp }
- guidAccessTimes[srcGUID] = time()
-end
-castLog.IsCurrent = function(self, srcGUID, spellID, timestamp, timeWindow)
- local entry = self[srcGUID]
- if entry then
- local lastSpellID, lastTimestamp = entry[1], entry[2]
- return lastSpellID == spellID and (timestamp - lastTimestamp < timeWindow)
- end
-end
-
-local lastResistSpellID
-local lastResistTime = 0
----------------------------
--- COMBAT LOG HANDLER
----------------------------
-function f:COMBAT_LOG_EVENT_UNFILTERED(event)
- return self:CombatLogHandler(CombatLogGetCurrentEventInfo())
-end
-
-local rollbackTable = setmetatable({}, { __mode="v" })
-local function ProcIndirectRefresh(eventType, spellName, srcGUID, srcFlags, dstGUID, dstFlags, dstName, isCrit)
- if indirectRefreshSpells[spellName] then
- local targetSpells = indirectRefreshSpells[spellName]
-
- for targetSpellID, refreshTable in pairs(targetSpells) do
- if refreshTable.events[eventType] then
-
-
- local condition = refreshTable.condition
- if condition then
- local isMine = bit_band(srcFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) == COMBATLOG_OBJECT_AFFILIATION_MINE
- if not condition(isMine, isCrit) then return end
- end
-
- if refreshTable.targetResistCheck then
- local now = GetTime()
- if lastResistSpellID == targetSpellID and now - lastResistTime < 0.4 then
- return
- end
- end
-
- if refreshTable.applyAura then
- local opts = spells[targetSpellID]
- if opts then
- local targetAuraType = "DEBUFF"
- local targetSpellName = GetSpellInfo(targetSpellID)
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, targetSpellID, targetSpellName, opts, targetAuraType)
- end
- elseif refreshTable.customAction then
- refreshTable.customAction(srcGUID, dstGUID, targetSpellID)
- else
- local _, oldStartTime = RefreshTimer(srcGUID, dstGUID, targetSpellID)
-
- if refreshTable.rollbackMisses and oldStartTime then
- rollbackTable[srcGUID] = rollbackTable[srcGUID] or {}
- rollbackTable[srcGUID][dstGUID] = rollbackTable[srcGUID][dstGUID] or {}
- local now = GetTime()
- rollbackTable[srcGUID][dstGUID][targetSpellID] = {now, oldStartTime}
- end
- end
- end
- end
- end
-end
-
-local igniteName = GetSpellInfo(12654)
-do
- local igniteOpts = { duration = 4 }
- function f:IgniteHandler(...)
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType, _, _, _, _, _, isCrit = ...
-
- spellID = 12654
- local opts = igniteOpts
-
- if eventType == "SPELL_AURA_APPLIED" then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType)
- local spellTable = GetSpellTable(srcGUID, dstGUID, spellID)
- spellTable.tickExtended = true -- skipping first tick by treating it as already extended
- if lib.DEBUG_IGNITE then
- print(GetTime(), "[Ignite] Applied", dstGUID, "StartTime:", spellTable[2])
- end
- elseif eventType == "SPELL_PERIODIC_DAMAGE" then
- local spellTable = GetSpellTable(srcGUID, dstGUID, spellID)
- if spellTable then
- if lib.DEBUG_IGNITE then
- print(GetTime(), "[Ignite] Tick", dstGUID)
- end
- spellTable.tickExtended = false -- unmark tick
- end
- elseif eventType == "SPELL_AURA_REMOVED" then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, true)
- if lib.DEBUG_IGNITE then
- print(GetTime(), "[Ignite] Removed", dstGUID)
- end
- end
- end
- -- if playerClass ~= "MAGE" then
- -- f.IgniteHandler = function() end
- -- end
- function lib:GetSpellTable(...)
- return GetSpellTable(...)
- end
-end
-
-function f:CombatLogHandler(...)
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType, _, _, _, _, _, isCrit = ...
-
- ProcIndirectRefresh(eventType, spellName, srcGUID, srcFlags, dstGUID, dstFlags, dstName, isCrit)
-
- if spellName == igniteName then
- self:IgniteHandler(...)
- end
-
- if eventType == "SPELL_MISSED" and
- bit_band(srcFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) == COMBATLOG_OBJECT_AFFILIATION_MINE
- then
- local missType = auraType
- -- ABSORB BLOCK DEFLECT DODGE EVADE IMMUNE MISS PARRY REFLECT RESIST
- if not (missType == "ABSORB" or missType == "BLOCK") then -- not sure about those two
-
- local refreshTable = indirectRefreshSpells[spellName]
- -- This is just for Sunder Armor misses
- if refreshTable and refreshTable.rollbackMisses then
- local rollbacksFromSource = rollbackTable[srcGUID]
- if rollbacksFromSource then
- local rollbacks = rollbacksFromSource[dstGUID]
- if rollbacks then
- local targetSpellID = refreshTable.targetSpellID
- local snapshot = rollbacks[targetSpellID]
- if snapshot then
- local timestamp, oldStartTime = unpack(snapshot)
- local now = GetTime()
- if now - timestamp < 0.5 then
- RefreshTimer(srcGUID, dstGUID, targetSpellID, oldStartTime)
- end
- end
- end
- end
- end
-
- spellID = GetLastRankSpellID(spellName)
- if not spellID then
- return
- end
-
- lastResistSpellID = spellID
- lastResistTime = GetTime()
- end
- end
-
- if auraType == "BUFF" or auraType == "DEBUFF" or eventType == "SPELL_CAST_SUCCESS" then
- if spellID == 0 then
- -- so not to rewrite the whole thing to spellnames after the combat log change
- -- just treat everything as max rank id of that spell name
- spellID = GetLastRankSpellID(spellName)
- if not spellID then
- return
- end
- end
-
- CountDiminishingReturns(eventType, srcGUID, srcFlags, dstGUID, dstFlags, spellID, auraType)
-
- local isDstFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
-
- local opts = spells[spellID]
-
- if not opts then
- local npcDurationForSpellName = npc_spells[spellID]
- if npcDurationForSpellName then
- opts = { duration = npcDurationForSpellName }
- -- elseif enableEnemyBuffTracking and not isDstFriendly and auraType == "BUFF" then
- -- opts = { duration = 0 } -- it'll be accepted but as an indefinite aura
- end
- end
-
- if opts then
- local castEventPass
- if opts.castFilter then
- -- Buff and Raidwide Buff events arrive in the following order:
- -- 1571716930.161 ID: 21562 SPELL_AURA_APPLIED/REFRESH to Caster himself (if selfcast or raidwide)
- -- 1571716930.161 ID: 21562 SPELL_CAST_SUCCESS on Cast Target
- -- 1571716930.161 ID: 21562 SPELL_AURA_APPLIED/REFRESH to everyone else
-
- -- For spells that have cast filter enabled:
- -- First APPLIED event gets snapshotted and otherwise ignored
- -- CAST event effectively sets castEventPass to true
- -- Snapshotted event now gets handled with cast pass
- -- All the following APPLIED events are accepted while cast pass is valid
- -- (Unconfirmed whether timestamp is the same even for a 40m raid)
- local now = GetTime()
- castEventPass = castLog:IsCurrent(srcGUID, spellID, now, 0.8)
- if not castEventPass and (eventType == "SPELL_AURA_REFRESH" or eventType == "SPELL_AURA_APPLIED") then
- eventSnapshot = { timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType }
- return
- end
-
- if eventType == "SPELL_CAST_SUCCESS" then
- -- Aura spell ID can be different from cast spell id
- -- But all buffs are usually simple spells and it's the same for them
- castLog:SetLastCast(srcGUID, spellID, now)
- if eventSnapshot then
- self:CombatLogHandler(unpack(eventSnapshot))
- eventSnapshot = nil
- end
- end
- end
-
- local isEnemyBuff = not isDstFriendly and auraType == "BUFF"
- -- print(eventType, srcGUID, "=>", dstName, spellID, spellName, auraType )
- if eventType == "SPELL_AURA_REFRESH" or
- eventType == "SPELL_AURA_APPLIED" or
- eventType == "SPELL_AURA_APPLIED_DOSE"
- then
- if not opts.castFilter or
- castEventPass or
- isEnemyBuff
- then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType)
- end
- elseif eventType == "SPELL_AURA_REMOVED" then
- SetTimer(srcGUID, dstGUID, dstName, dstFlags, spellID, spellName, opts, auraType, true)
- -- elseif eventType == "SPELL_AURA_REMOVED_DOSE" then
- -- self:RemoveDose(srcGUID, dstGUID, spellID, spellName, auraType, amount)
- end
- if enableEnemyBuffTracking and isEnemyBuff then
- -- invalidate buff cache
- buffCacheValid[dstGUID] = nil
-
- FireToUnits("UNIT_BUFF", dstGUID)
- if eventType == "SPELL_AURA_REFRESH" or
- eventType == "SPELL_AURA_APPLIED" or
- eventType == "SPELL_AURA_APPLIED_DOSE"
- then
- FireToUnits("UNIT_BUFF_GAINED", dstGUID, spellID)
- end
- end
- end
- end
- if eventType == "UNIT_DIED" then
- if isHunterGUID(dstGUID) then
- local isDstFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
- if not isDstFriendly or isFriendlyFeigning(dstGUID) then
- return
- end
- end
-
- guids[dstGUID] = nil
- buffCache[dstGUID] = nil
- buffCacheValid[dstGUID] = nil
- guidAccessTimes[dstGUID] = nil
- local isDstFriendly = bit_band(dstFlags, COMBATLOG_OBJECT_REACTION_FRIENDLY) > 0
- if enableEnemyBuffTracking and not isDstFriendly then
- FireToUnits("UNIT_BUFF", dstGUID)
- end
- nameplateUnitMap[dstGUID] = nil
- end
-end
-
----------------------------
--- ENEMY BUFFS
----------------------------
-local makeBuffInfo = function(spellID, applicationTable, dstGUID, srcGUID)
- local name, rank, icon, castTime, minRange, maxRange, _spellId = GetSpellInfo(spellID)
- local durationFunc, startTime, auraType, comboPoints = unpack(applicationTable)
- local duration = cleanDuration(durationFunc, spellID, srcGUID, comboPoints) -- srcGUID isn't needed actually
- -- no DRs on buffs
- local expirationTime = startTime + duration
- if duration == INFINITY then
- duration = 0
- expirationTime = 0
- end
- local now = GetTime()
- if expirationTime > now then
- local buffType = spells[spellID] and spells[spellID].buffType
- return { name, icon, 0, buffType, duration, expirationTime, nil, nil, nil, spellID, false, false, false, false, 1 }
- end
-end
-
-local shouldDisplayAura = function(auraTable)
- if auraTable[3] == "BUFF" then
- local now = GetTime()
- local expirationTime = auraTable[2]
- return expirationTime > now
- end
- return false
-end
-
-lib.scanTip = lib.scanTip or CreateFrame("GameTooltip", "LibClassicDurationsScanTip", nil, "GameTooltipTemplate")
-local scanTip = lib.scanTip
-scanTip:SetOwner(WorldFrame, "ANCHOR_NONE")
-local function RegenerateBuffList(unit, dstGUID)
- local buffs = {}
- local spellName
- for i=1, 32 do
- scanTip:ClearLines()
- scanTip:SetUnitAura(unit, i, "HELPFUL")
- spellName = LibClassicDurationsScanTipTextLeft1:GetText()
- if spellName then
- local spellID = GetLastRankSpellID(spellName)
- if spellID then
- local icon = GetSpellTexture(spellID)
- local opts = spells[spellID]
- local buffInfo = { spellName, icon, 0, (opts and opts.buffType), 0, 0, nil, nil, nil, spellID, false, false, false, false, 1 }
- local isStacking = opts and opts.stacking
- local srcGUID = nil
- local duration, expirationTime = GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, isStacking)
- if duration then
- buffInfo[5] = duration
- buffInfo[6] = expirationTime
- end
-
- tinsert(buffs, buffInfo)
- end
- else
- break
- end
- end
-
- buffCache[dstGUID] = buffs
- buffCacheValid[dstGUID] = GetTime() + BUFF_CACHE_EXPIRATION_TIME -- Expiration timestamp
-end
-
-local FillInDuration = function(unit, buffName, icon, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nps, spellId, ...)
- if buffName then
- local durationNew, expirationTimeNew = lib.GetAuraDurationByUnitDirect(unit, spellId, caster, buffName)
- if duration == 0 and durationNew then
- duration = durationNew
- expirationTime = expirationTimeNew
- end
- return buffName, icon, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nps, spellId, ...
- end
-end
-lib.FillInDuration = FillInDuration
-
-function lib.UnitAuraDirect(unit, index, filter)
- if enableEnemyBuffTracking and filter == "HELPFUL" and not UnitIsFriend("player", unit) and not UnitAura(unit, 1, filter) then
- local unitGUID = UnitGUID(unit)
- if not unitGUID then return end
- local isValid = buffCacheValid[unitGUID]
- if not isValid or isValid < GetTime() then
- RegenerateBuffList(unit, unitGUID)
- end
-
- local buffCacheHit = buffCache[unitGUID]
- if buffCacheHit then
- local buffReturns = buffCache[unitGUID][index]
- if buffReturns then
- return unpack(buffReturns)
- end
- end
- else
- return FillInDuration(unit, UnitAura(unit, index, filter))
- end
-end
-
-function lib.UnitAuraWithBuffs(...)
- return lib.UnitAuraDirect(...)
-end
-
-function lib.UnitAuraWrapper(unit, ...)
- return lib.FillInDuration(unit, UnitAura(unit, ...))
-end
-
-function lib:UnitAura(...)
- return self.UnitAuraDirect(...)
-end
-
-function f:NAME_PLATE_UNIT_ADDED(event, unit)
- local unitGUID = UnitGUID(unit)
- nameplateUnitMap[unitGUID] = unit
-end
-function f:NAME_PLATE_UNIT_REMOVED(event, unit)
- local unitGUID = UnitGUID(unit)
- if unitGUID then -- it returns correctly on death, but just in case
- nameplateUnitMap[unitGUID] = nil
- end
-end
-
-function callbacks.OnUsed()
- lib.enableEnemyBuffTracking = true
- enableEnemyBuffTracking = lib.enableEnemyBuffTracking
- f:RegisterEvent("NAME_PLATE_UNIT_ADDED")
- f:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
-end
-function callbacks.OnUnused()
- lib.enableEnemyBuffTracking = false
- enableEnemyBuffTracking = lib.enableEnemyBuffTracking
- f:UnregisterEvent("NAME_PLATE_UNIT_ADDED")
- f:UnregisterEvent("NAME_PLATE_UNIT_REMOVED")
-end
-
-if next(callbacks.events) then
- callbacks.OnUsed()
-end
-
----------------------------
--- PUBLIC FUNCTIONS
----------------------------
-GetGUIDAuraTime = function(dstGUID, spellName, spellID, srcGUID, isStacking, forcedNPCDuration)
- local guidTable = guids[dstGUID]
- if guidTable then
-
- local lastRankID = GetLastRankSpellID(spellName)
-
- local spellTable = guidTable[lastRankID]
- if spellTable then
- local applicationTable
-
- -- Return when player spell and npc spell have the same name and the player spell is stacking
- -- NPC spells are always assumed to not stack, so it won't find startTime
- if forcedNPCDuration and spellTable.applications then return nil end
-
- if isStacking then
- if srcGUID and spellTable.applications then
- applicationTable = spellTable.applications[srcGUID]
- elseif spellTable.applications then -- return some duration
- applicationTable = select(2,next(spellTable.applications))
- end
- else
- applicationTable = spellTable
- end
- if not applicationTable then return end
- local durationFunc, startTime, auraType, comboPoints = unpack(applicationTable)
- local duration = forcedNPCDuration or cleanDuration(durationFunc, spellID, srcGUID, comboPoints)
- if duration == INFINITY then return nil end
- if not duration then return nil end
- if not startTime then return nil end
- local mul = getDRMul(dstGUID, spellID)
- -- local mul = getDRMul(dstGUID, lastRankID)
- duration = duration * mul
- local expirationTime = startTime + duration
- if GetTime() <= expirationTime then
- return duration, expirationTime
- end
- end
- end
-end
-
-if playerClass == "MAGE" then
- local NormalGetGUIDAuraTime = GetGUIDAuraTime
- local Chilled = GetSpellInfo(12486)
- GetGUIDAuraTime = function(dstGUID, spellName, spellID, ...)
-
- -- Overriding spellName for Improved blizzard's spellIDs
- if spellName == Chilled and
- spellID == 12486 or spellID == 12484 or spellID == 12485
- then
- spellName = "ImpBlizzard"
- end
- return NormalGetGUIDAuraTime(dstGUID, spellName, spellID, ...)
- end
-end
-
-function lib.GetAuraDurationByUnitDirect(unit, spellID, casterUnit, spellName)
- assert(spellID, "spellID is nil")
- local opts = spells[spellID]
- local isStacking
- local npcDurationById
- if opts then
- isStacking = opts.stacking
- else
- npcDurationById = npc_spells[spellID]
- if not npcDurationById then return end
- end
- local dstGUID = UnitGUID(unit)
- local srcGUID = casterUnit and UnitGUID(casterUnit)
- if not spellName then spellName = GetSpellInfo(spellID) end
- return GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, isStacking, npcDurationById)
-end
-
-function lib:GetAuraDurationByUnit(...)
- return self.GetAuraDurationByUnitDirect(...)
-
-end
-function lib:GetAuraDurationByGUID(dstGUID, spellID, srcGUID, spellName)
- local opts = spells[spellID]
- if not opts then return end
- if not spellName then spellName = GetSpellInfo(spellID) end
- return GetGUIDAuraTime(dstGUID, spellName, spellID, srcGUID, opts.stacking)
-end
-
-function lib:GetLastRankSpellIDByName(spellName)
- return GetLastRankSpellID(spellName)
-end
-
--- Will not work for cp-based durations, KS and Rupture
-function lib:GetDurationForRank(spellName, spellID, srcGUID)
- local lastRankID = spellNameToID[spellName]
- local opts = spells[lastRankID]
- if opts then
- return cleanDuration(opts.duration, spellID, srcGUID)
- end
-end
-
-lib.activeFrames = lib.activeFrames or {}
-local activeFrames = lib.activeFrames
-function lib:RegisterFrame(frame)
- activeFrames[frame] = true
- if next(activeFrames) then
- f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- if playerClass == "ROGUE" then
- f:RegisterEvent("PLAYER_TARGET_CHANGED")
- f:RegisterUnitEvent("UNIT_POWER_UPDATE", "player")
- end
- end
-end
-lib.Register = lib.RegisterFrame
-
-function lib:UnregisterFrame(frame)
- activeFrames[frame] = nil
- if not next(activeFrames) then
- f:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- if playerClass == "ROGUE" then
- f:UnregisterEvent("PLAYER_TARGET_CHANGED")
- f:UnregisterEvent("UNIT_POWER_UPDATE")
- end
- end
-end
-lib.Unregister = lib.UnregisterFrame
-
-
-function lib:ToggleDebug()
- if not lib.debug then
- lib.debug = CreateFrame("Frame")
- lib.debug:SetScript("OnEvent",function( self, event )
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType, amount = CombatLogGetCurrentEventInfo()
- local isSrcPlayer = (bit_band(srcFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) == COMBATLOG_OBJECT_AFFILIATION_MINE)
- if isSrcPlayer then
- print (GetTime(), "ID:", spellID, spellName, eventType, srcFlags, srcGUID,"|cff00ff00==>|r", dstGUID, dstFlags, auraType, amount)
- end
- end)
- end
- if not lib.debug.enabled then
- lib.debug:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- lib.debug.enabled = true
- print("[LCD] Enabled combat log event display")
- else
- lib.debug:UnregisterAllEvents()
- lib.debug.enabled = false
- print("[LCD] Disabled combat log event display")
- end
-end
-
-function lib:MonitorUnit(unit)
- if not lib.debug then
- lib.debug = CreateFrame("Frame")
- local debugGUID = UnitGUID(unit)
- lib.debug:SetScript("OnEvent",function( self, event )
- local timestamp, eventType, hideCaster,
- srcGUID, srcName, srcFlags, srcFlags2,
- dstGUID, dstName, dstFlags, dstFlags2,
- spellID, spellName, spellSchool, auraType, amount = CombatLogGetCurrentEventInfo()
- if srcGUID == debugGUID or dstGUID == debugGUID then
- print (GetTime(), "ID:", spellID, spellName, eventType, srcFlags, srcGUID,"|cff00ff00==>|r", dstGUID, dstFlags, auraType, amount)
- end
- end)
- end
- if not lib.debug.enabled then
- lib.debug:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
- lib.debug.enabled = true
- print("[LCD] Enabled combat log event display")
- else
- lib.debug:UnregisterAllEvents()
- lib.debug.enabled = false
- print("[LCD] Disabled combat log event display")
- end
-end
-
-------------------
--- Set Tracking
-------------------
-
-
-local itemSets = {}
-
-function lib:TrackItemSet(setname, itemArray)
- itemSets[setname] = itemSets[setname] or {}
- if not itemSets[setname].items then
- itemSets[setname].items = {}
- itemSets[setname].callbacks = {}
- local bitems = itemSets[setname].items
- for _, itemID in ipairs(itemArray) do
- bitems[itemID] = true
- end
- end
-end
-function lib:RegisterSetBonusCallback(setname, pieces, handle_on, handle_off)
- local set = itemSets[setname]
- if not set then error(string.format("Itemset '%s' is not registered", setname)) end
- set.callbacks[pieces] = {}
- set.callbacks[pieces].equipped = false
- set.callbacks[pieces].on = handle_on
- set.callbacks[pieces].off = handle_off
-end
-
-function lib:IsSetBonusActive(setname, bonusLevel)
- local set = itemSets[setname]
- if not set then return false end
- local setCallbacks = set.callbacks
- if setCallbacks[bonusLevel] and setCallbacks[bonusLevel].equipped then
- return true
- end
- return false
-end
-
-
-function lib:IsSetBonusActiveFullCheck(setname, bonusLevel)
- local set = itemSets[setname]
- if not set then return false end
- local set_items = set.items
- local pieces_equipped = 0
- for slot=1,17 do
- local itemID = GetInventoryItemID("player", slot)
- if set_items[itemID] then pieces_equipped = pieces_equipped + 1 end
- end
- return (pieces_equipped >= bonusLevel)
-end
-
-
-lib.setwatcher = lib.setwatcher or CreateFrame("Frame", nil, UIParent)
-local setwatcher = lib.setwatcher
-setwatcher:SetScript("OnEvent", function(self, event, ...)
- return self[event](self, event, ...)
-end)
-setwatcher:RegisterEvent("PLAYER_LOGIN")
-function setwatcher:PLAYER_LOGIN()
- if next(itemSets) then
- self:RegisterUnitEvent("UNIT_INVENTORY_CHANGED", "player")
- self:UNIT_INVENTORY_CHANGED(nil, "player")
- end
-end
-function setwatcher:UNIT_INVENTORY_CHANGED(event, unit)
- for setname, set in pairs(itemSets) do
- local set_items = set.items
- local pieces_equipped = 0
- for slot=1,17 do -- That excludes ranged slot in classic
- local itemID = GetInventoryItemID("player", slot)
- if set_items[itemID] then pieces_equipped = pieces_equipped + 1 end
- end
- for bp, bonus in pairs(set.callbacks) do
- if pieces_equipped >= bp then
- if not bonus.equipped then
- if bonus.on then bonus.on() end
- bonus.equipped = true
- end
- else
- if bonus.equipped then
- if bonus.off then bonus.off() end
- bonus.equipped = false
- end
- end
- end
- end
-end
diff --git a/lib/LibClassicDurations/diminishingReturns.lua b/lib/LibClassicDurations/diminishingReturns.lua
deleted file mode 100644
index 27cff17..0000000
--- a/lib/LibClassicDurations/diminishingReturns.lua
+++ /dev/null
@@ -1,176 +0,0 @@
-local lib = LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "DRTable", 7
-if lib:GetDataVersion(Type) >= Version then return end
-
-local FEAR = "FEAR"
-local SILENCE = "SILENCE"
-local INCAP = "INCAP"
-local STUN = "STUN"
-local HORROR = "HORROR"
-local ROOT = "ROOT"
--- local OPENER_STUN = "OPENER_STUN"
-local RANDOM_STUN = "RANDOM_STUN"
-local RANDOM_ROOT = "RANDOM_ROOT"
-local FROST_SHOCK = "FROST_SHOCK"
-local KIDNEY_SHOT = "KIDNEY_SHOT"
-
-lib.DR_TypesPVE = {
- [KIDNEY_SHOT] = true,
- [STUN] = true,
-}
-
-lib.DR_CategoryBySpellID = {
- -- Silences weren't on DR until 3.0.8
- -- Are random stuns even diminished at all among themselves?
- -- Random roots?
-
- [835] = STUN, -- Tidal Charm
- [20549] = STUN, -- War Stomp
- [16566] = ROOT, -- Net-o-Matic
- [1090] = INCAP, -- Magic Dust
- [13327] = INCAP, -- Goblin Rocket Helm, Reckless Charge
- [5134] = FEAR, -- Flash Bomb
-
- [5782] = FEAR, -- Fear 3 ranks
- [6213] = FEAR,
- [6215] = FEAR,
- [5484] = FEAR, -- Howl of Terror 2 ranks
- [17928] = FEAR,
- [6358] = FEAR, -- Seduction
-
- -- [24259] = SILENCE, -- Spell Lock
-
- -- Coil wasn't on DR in classic
- -- [6789] = HORROR, -- Death Coil 3 ranks
- -- [17925] = HORROR,
- -- [17926] = HORROR,
- [22703] = STUN, -- Infernal Summon Stun
-
-
- [20066] = INCAP, -- Repentance
-
- [853] = STUN, -- Hammer of Justice 4 ranks
- [5588] = STUN,
- [5589] = STUN,
- [10308] = STUN,
-
- [20170] = RANDOM_STUN, -- Seal of Justice Stun
-
-
-
- [3355] = INCAP, -- Freezing Trap Effect 3 ranks
- [14308] = INCAP,
- [14309] = INCAP,
-
- [19386] = INCAP, -- Wyvern Sting 3 ranks
- [24132] = INCAP,
- [24133] = INCAP,
-
- [19503] = INCAP, -- Scatter Shot
- -- [19229] = RANDOM_ROOT, -- Improved Wing Clip Root
-
- [19306] = ROOT, -- Counterattack
-
- [19410] = RANDOM_STUN, -- Conc stun
- [24394] = STUN, -- Intimidation
-
-
- [2637] = INCAP, -- Hibernate 3 ranks
- [18657] = INCAP,
- [18658] = INCAP,
-
- [5211] = STUN, -- Bash 3 ranks
- [6798] = STUN,
- [8983] = STUN,
-
- [339] = ROOT, -- Entangling Roots 6 ranks
- [1062] = ROOT,
- [5195] = ROOT,
- [5196] = ROOT,
- [9852] = ROOT,
- [9853] = ROOT,
- [16922] = RANDOM_STUN, -- Improved Starfire
-
- [9005] = STUN, -- Pounce 3 ranks
- [9823] = STUN,
- [9827] = STUN,
-
-
- -- [18469] = SILENCE, -- Silence (Improved Counterspell)
-
- [118] = INCAP, -- Polymorph 7 variants
- [12824] = INCAP,
- [12825] = INCAP,
- [12826] = INCAP,
- [28270] = INCAP,
- [28271] = INCAP,
- [28272] = INCAP,
-
- -- Frostbite wasn't on DR until 2.1.0
- -- [12494] = RANDOM_ROOT, -- Frostbite
- [12355] = RANDOM_STUN, -- Impact
-
- [122] = ROOT, -- Frost Nova 4 rank
- [865] = ROOT,
- [6131] = ROOT,
- [10230] = ROOT,
-
- [8056] = FROST_SHOCK, -- Frost Shock 4 ranks
- [8058] = FROST_SHOCK,
- [10472] = FROST_SHOCK,
- [10473] = FROST_SHOCK,
-
-
- -- [15487] = SILENCE, -- Silence (Priest)
- [15269] = RANDOM_STUN, -- Blackout
-
- -- MIND CONTROL ???
- -- No Undeads for Shackle in classic
-
- [8122] = FEAR, -- Psychic Scream
- [8124] = FEAR,
- [10888] = FEAR,
- [10890] = FEAR,
-
-
- -- [18425] = SILENCE, -- Imp Kick
- [1833] = STUN, -- Cheap Shot
- -- Blind wasn't on Fear until some time in 3.0, and before that it was with Cyclone,
- -- and in classic probably with itself
- -- [2094] = FEAR, -- Blind
-
- [2070] = INCAP, -- Sap 3 ranks
- [6770] = INCAP,
- [11297] = INCAP,
-
- [1776] = INCAP, -- Gouge 5 ranks
- [1777] = INCAP,
- [8629] = INCAP,
- [11285] = INCAP,
- [11286] = INCAP,
-
- [408] = KIDNEY_SHOT, -- Kidney Shot 2 ranks
- [8643] = KIDNEY_SHOT,
-
- [5530] = RANDOM_STUN, -- Mace Spec Stun, shared by both Rogue and Warrior
-
-
- -- [18498] = SILENCE, -- Imp Shield Bash Silence
- -- [23694] = RANDOM_ROOT, -- Improved Hamstring Root
-
- -- Disarm wasn't on DR until 2.3.0
- -- [676] = "DISARM", -- Disarm
-
- [12809] = STUN, -- Concussion Blow
- [12798] = RANDOM_STUN, -- Improved Revenge
- [5246] = FEAR, -- Intimidating Shout
- [7922] = STUN, -- Charge
-
- [20253] = STUN, -- Intercept Stun 3 ranks
- [20614] = STUN,
- [20615] = STUN,
-}
-
-lib:SetDataVersion(Type, Version)
\ No newline at end of file
diff --git a/lib/LibClassicDurations/npcAbilities.lua b/lib/LibClassicDurations/npcAbilities.lua
deleted file mode 100644
index 0c50193..0000000
--- a/lib/LibClassicDurations/npcAbilities.lua
+++ /dev/null
@@ -1,576 +0,0 @@
-local lib = LibStub and LibStub("LibClassicDurations", true)
-if not lib then return end
-
-local Type, Version = "NPCSpellTable", 2
-if lib:GetDataVersion(Type) >= Version then return end
-
-lib.npc_spells = {
- [11]=30,[12]=10,[13]=30,[16]=15,[17]=30,[22]=10,[25]=5,[43]=30,[47]=10,[56]=3,
- [65]=30,[66]=120,[67]=10,[89]=20,[91]=30,[96]=10,[99]=30,[101]=3,[111]=10,
- [112]=10,[113]=15,[116]=5,[118]=20,[120]=8,[122]=8,[126]=45,[128]=60,[130]=30,
- [131]=600,[132]=600,[133]=4,[134]=60,[136]=5,[139]=15,[143]=6,[145]=6,[168]=1800,
- [172]=12,[184]=60,[205]=6,[228]=10,[246]=10,[302]=30,[324]=600,[325]=600,
- [339]=12,[348]=15,[355]=3,[379]=60,[409]=60,[410]=60,[411]=60,[430]=18,[431]=21,
- [432]=24,[433]=18,[434]=21,[435]=24,[450]=5,[453]=15,[454]=10,[457]=30,[467]=600,
- [474]=30,[498]=6,[507]=30,[509]=30,[512]=20,[543]=30,[546]=600,[550]=30,[552]=20,
- [553]=30,[568]=8,[586]=10,[588]=600,[589]=18,[592]=30,[594]=18,[595]=30,[600]=30,
- [602]=600,[603]=60,[604]=600,[605]=60,[606]=30,[642]=10,[673]=3600,[676]=10,
- [687]=1800,[689]=5,[692]=10,[694]=6,[696]=1800,[699]=5,[700]=20,[702]=120,
- [703]=18,[704]=120,[706]=1800,[707]=15,[709]=5,[710]=20,[720]=8,[731]=8,[742]=30,
- [744]=30,[745]=10,[746]=6,[755]=10,[770]=40,[772]=9,[774]=12,[775]=8,[776]=5,
- [778]=40,[782]=600,[785]=20,[800]=0.25,[802]=240,[804]=4,[806]=60,[822]=60,
- [829]=30,[830]=30,[833]=10,[834]=3600,[835]=3,[837]=6,[839]=30,[849]=60,[851]=10,
- [853]=3,[855]=30,[863]=60,[865]=8,[867]=30,[871]=10,[877]=30,[885]=120,[905]=600,
- [945]=600,[970]=18,[976]=600,[980]=24,[992]=18,[994]=30,[1002]=60,[1006]=600,
- [1008]=600,[1009]=5,[1010]=120,[1014]=24,[1020]=12,[1022]=6,[1038]=300,[1044]=10,
- [1056]=30,[1058]=12,[1062]=15,[1075]=600,[1079]=12,[1086]=1800,[1090]=30,
- [1094]=15,[1098]=300,[1108]=120,[1120]=15,[1121]=8,[1126]=1800,[1127]=27,
- [1129]=30,[1130]=120,[1131]=30,[1132]=30,[1133]=27,[1135]=30,[1137]=30,[1138]=60,
- [1139]=15,[1159]=6,[1160]=30,[1161]=6,[1179]=10,[1243]=1800,[1244]=1800,
- [1245]=1800,[1302]=45,[1430]=12,[1450]=1800,[1451]=1800,[1452]=1800,[1453]=1800,
- [1459]=1800,[1460]=1800,[1461]=1800,[1462]=30,[1463]=60,[1490]=300,[1513]=10,
- [1515]=20,[1528]=1,[1539]=20,[1604]=4,[1663]=30,[1664]=30,[1665]=30,[1706]=120,
- [1714]=30,[1715]=15,[1719]=15,[1731]=15,[1732]=15,[1735]=30,[1776]=4,[1777]=4,
- [1822]=9,[1823]=9,[1824]=9,[1833]=4,[1834]=180,[1849]=30,[1850]=15,[1864]=300,
- [1906]=8,[1943]=6,[1949]=15,[1953]=1,[1978]=15,[2070]=35,[2090]=12,[2091]=12,
- [2094]=10,[2096]=60,[2140]=15,[2313]=20,[2351]=30,[2353]=30,[2354]=30,[2361]=300,
- [2367]=3600,[2374]=3600,[2376]=3600,[2378]=3600,[2379]=15,[2380]=180,[2381]=600,
- [2425]=5,[2479]=30,[2537]=30,[2564]=5,[2565]=5,[2601]=30,[2602]=15,[2637]=20,
- [2639]=21,[2647]=5,[2651]=15,[2652]=600,[2691]=0.001,[2766]=30,[2767]=18,
- [2791]=1800,[2818]=12,[2819]=12,[2855]=120,[2871]=30,[2878]=10,[2880]=10,
- [2893]=8,[2908]=15,[2941]=15,[2943]=120,[2944]=24,[2947]=180,[2969]=15,
- [2970]=600,[2974]=10,[2983]=15,[3019]=15,[3023]=30,[3034]=8,[3043]=20,[3045]=15,
- [3105]=600,[3109]=10,[3111]=5,[3120]=5,[3130]=6,[3132]=12,[3133]=30,[3136]=10,
- [3140]=8,[3143]=3,[3145]=5,[3146]=30,[3147]=12,[3148]=20,[3149]=15,[3150]=600,
- [3151]=6,[3157]=3600,[3158]=3600,[3159]=3600,[3160]=3600,[3161]=3600,[3162]=3600,
- [3163]=3600,[3164]=3600,[3165]=3600,[3166]=3600,[3167]=3600,[3168]=3600,[3169]=6,
- [3219]=3600,[3220]=3600,[3221]=3600,[3222]=3600,[3223]=3600,[3229]=5,[3232]=60,
- [3237]=240,[3238]=8,[3242]=2,[3247]=15,[3248]=6,[3252]=12,[3256]=240,[3258]=4,
- [3260]=8,[3261]=20,[3263]=5,[3264]=15,[3267]=7,[3268]=7,[3269]=8,[3271]=2,
- [3288]=10,[3329]=60,[3332]=30,[3335]=300,[3355]=10,[3356]=45,[3358]=40,
- [3369]=120,[3385]=4,[3387]=120,[3388]=45,[3389]=6,[3396]=30,[3409]=12,[3416]=10,
- [3419]=6,[3424]=120,[3427]=300,[3429]=600,[3436]=300,[3439]=300,[3442]=15,
- [3443]=15,[3446]=6,[3485]=15,[3490]=5,[3510]=3,[3514]=3,[3542]=30,[3547]=8,
- [3551]=2,[3574]=8,[3583]=120,[3584]=120,[3586]=180,[3589]=8,[3593]=3600,[3600]=5,
- [3602]=30,[3603]=15,[3604]=8,[3609]=8,[3618]=300,[3627]=12,[3635]=6,[3636]=15,
- [3639]=6,[3648]=45,[3650]=15,[3651]=10,[3661]=5,[3662]=5,[3671]=180,[3672]=180,
- [3673]=180,[3674]=30,[3680]=15,[3698]=10,[3699]=10,[3700]=10,[3719]=30,[3742]=15,
- [3747]=30,[3815]=45,[3826]=3,[4057]=60,[4058]=3,[4060]=12,[4063]=30,[4064]=1,
- [4065]=1,[4066]=2,[4067]=2,[4068]=3,[4069]=3,[4077]=60,[4079]=10,[4083]=30,
- [4092]=10,[4101]=6,[4102]=15,[4104]=15,[4105]=15,[4107]=10,[4108]=10,[4109]=12,
- [4111]=12,[4134]=10,[4135]=10,[4137]=10,[4139]=10,[4146]=15,[4147]=30,[4148]=300,
- [4149]=10,[4150]=12,[4153]=30,[4154]=8,[4159]=5,[4166]=3,[4167]=8,[4168]=10,
- [4169]=12,[4238]=120,[4240]=8,[4242]=15,[4243]=3,[4244]=8,[4246]=15,[4282]=10,
- [4285]=8,[4286]=15,[4316]=30,[4318]=1800,[4320]=12,[4321]=5,[4504]=30,[4505]=30,
- [4507]=5,[4514]=12,[4524]=3,[4538]=12,[4539]=10,[4805]=15,[4932]=20,[4940]=30,
- [4941]=90,[4948]=15,[4952]=5,[4955]=12,[4962]=6,[4970]=10,[4974]=120,[4979]=10,
- [4980]=10,[5003]=90,[5004]=18,[5005]=21,[5006]=24,[5007]=27,[5020]=300,
- [5021]=300,[5024]=10,[5101]=30,[5105]=60,[5106]=15,[5115]=6,[5116]=4,[5119]=180,
- [5120]=60,[5121]=60,[5122]=60,[5123]=60,[5124]=60,[5134]=10,[5137]=60,[5138]=5,
- [5143]=3,[5144]=4,[5145]=5,[5159]=20,[5164]=2,[5165]=8,[5171]=6,[5195]=18,
- [5196]=21,[5202]=1800,[5208]=60,[5209]=6,[5211]=2,[5213]=15,[5217]=6,[5219]=8,
- [5220]=15,[5229]=10,[5232]=1800,[5234]=1800,[5242]=120,[5246]=8,[5250]=30,
- [5254]=30,[5256]=20,[5257]=300,[5259]=15,[5260]=15,[5262]=10,[5271]=20,[5276]=15,
- [5277]=15,[5280]=45,[5302]=5,[5306]=120,[5320]=1800,[5321]=1800,[5322]=1800,
- [5323]=1800,[5324]=1800,[5325]=1800,[5337]=8,[5363]=20,[5365]=20,[5366]=20,
- [5367]=20,[5376]=8,[5384]=360,[5402]=300,[5403]=10,[5413]=120,[5416]=45,[5422]=8,
- [5424]=4,[5426]=6,[5480]=15,[5484]=10,[5508]=15,[5514]=12,[5515]=8,[5530]=3,
- [5543]=2,[5567]=5,[5570]=12,[5573]=8,[5579]=0.1,[5588]=4,[5589]=5,[5597]=10,
- [5598]=10,[5599]=8,[5627]=15,[5628]=6,[5648]=3,[5649]=5,[5665]=600,[5697]=600,
- [5703]=4,[5708]=2,[5726]=5,[5727]=8,[5759]=240,[5760]=10,[5781]=30,[5782]=10,
- [5810]=6,[5858]=300,[5862]=1800,[5884]=12,[5909]=600,[5915]=60,[5917]=10,
- [5918]=5,[5934]=6,[5951]=2,[5990]=8,[6016]=20,[6065]=30,[6066]=30,[6074]=15,
- [6075]=15,[6076]=15,[6077]=15,[6078]=15,[6114]=300,[6115]=60,[6117]=1800,
- [6131]=8,[6136]=5,[6143]=30,[6146]=15,[6150]=12,[6190]=30,[6192]=120,[6196]=60,
- [6197]=60,[6205]=120,[6213]=15,[6215]=20,[6217]=24,[6222]=15,[6223]=18,[6226]=5,
- [6229]=30,[6238]=20,[6240]=0.001,[6253]=2,[6257]=30,[6264]=8,[6266]=3,[6268]=3,
- [6272]=60,[6277]=120,[6278]=60,[6298]=300,[6304]=3,[6306]=30,[6343]=10,
- [6346]=600,[6355]=10,[6358]=15,[6405]=180,[6409]=5,[6410]=21,[6411]=21,[6422]=3,
- [6431]=30,[6432]=10,[6434]=10,[6435]=3,[6466]=3,[6467]=180,[6468]=6,[6495]=300,
- [6507]=60,[6512]=600,[6513]=60,[6524]=2,[6528]=0.001,[6530]=10,[6531]=60,
- [6533]=10,[6538]=60,[6546]=12,[6547]=15,[6548]=18,[6576]=5,[6580]=3,[6581]=10,
- [6584]=10,[6600]=5,[6601]=5,[6602]=5,[6605]=4,[6607]=2,[6608]=5,[6614]=30,
- [6615]=30,[6634]=8,[6664]=2,[6669]=2,[6673]=120,[6685]=15,[6711]=360,[6713]=6,
- [6714]=4,[6716]=3,[6724]=10,[6726]=6,[6727]=30,[6728]=10,[6730]=2,[6741]=20,
- [6742]=30,[6749]=5,[6751]=12,[6754]=3,[6756]=1800,[6758]=120,[6767]=600,
- [6770]=25,[6772]=3,[6774]=6,[6788]=15,[6789]=3,[6793]=6,[6795]=3,[6798]=3,
- [6814]=45,[6816]=4,[6817]=4,[6818]=4,[6819]=4,[6844]=10,[6864]=8,[6866]=180,
- [6869]=2,[6870]=180,[6873]=120,[6894]=10,[6902]=120,[6903]=10,[6907]=120,
- [6909]=180,[6917]=10,[6921]=6,[6922]=300,[6927]=5,[6940]=30,[6942]=6,[6945]=5,
- [6946]=180,[6950]=60,[6951]=300,[6955]=300,[6957]=180,[6960]=180,[6965]=4,
- [6969]=1,[6974]=1,[6982]=4,[6984]=10,[6985]=10,[7001]=10,[7020]=15,[7022]=300,
- [7023]=1,[7035]=5,[7036]=5,[7038]=60,[7039]=60,[7040]=60,[7041]=60,[7042]=60,
- [7043]=60,[7044]=60,[7045]=60,[7046]=60,[7047]=60,[7048]=60,[7049]=60,[7050]=60,
- [7051]=60,[7053]=60,[7054]=300,[7057]=300,[7068]=15,[7072]=60,[7074]=5,
- [7081]=300,[7082]=3,[7090]=300,[7093]=4,[7098]=180,[7102]=240,[7103]=240,
- [7104]=10,[7120]=1800,[7121]=10,[7124]=300,[7125]=120,[7127]=60,[7128]=600,
- [7136]=10,[7137]=6,[7139]=3,[7140]=5,[7144]=15,[7164]=180,[7178]=1800,[7184]=300,
- [7211]=10,[7230]=3600,[7231]=3600,[7232]=3600,[7233]=3600,[7234]=3600,
- [7235]=3600,[7236]=3600,[7237]=3600,[7238]=3600,[7239]=3600,[7240]=3600,
- [7241]=3600,[7242]=3600,[7243]=3600,[7244]=3600,[7245]=3600,[7246]=3600,
- [7247]=3600,[7248]=3600,[7249]=3600,[7250]=3600,[7251]=3600,[7252]=3600,
- [7253]=3600,[7254]=3600,[7267]=3,[7272]=12,[7279]=120,[7288]=20,[7289]=120,
- [7290]=10,[7291]=30,[7295]=10,[7300]=1800,[7301]=1800,[7302]=1800,[7320]=1800,
- [7321]=5,[7322]=7,[7336]=1,[7337]=1.5,[7338]=2,[7339]=2.5,[7353]=60,[7357]=15,
- [7358]=60,[7365]=30,[7366]=240,[7367]=180,[7371]=4,[7372]=15,[7373]=15,[7383]=30,
- [7386]=30,[7389]=15,[7396]=30,[7399]=4,[7400]=6,[7402]=6,[7405]=30,[7481]=300,
- [7483]=300,[7484]=300,[7586]=10,[7587]=10,[7621]=10,[7638]=3,[7645]=10,
- [7646]=120,[7648]=18,[7651]=5,[7656]=30,[7657]=30,[7658]=120,[7659]=120,
- [7670]=2.5,[7713]=6,[7737]=15,[7739]=10,[7744]=5,[7750]=12,[7761]=4,[7764]=1800,
- [7803]=5,[7806]=180,[7807]=180,[7808]=180,[7812]=30,[7840]=20,[7844]=1800,
- [7870]=300,[7901]=300,[7914]=9,[7922]=1,[7926]=8,[7927]=8,[7947]=60,[7948]=20,
- [7950]=3,[7961]=5,[7964]=4,[7965]=300,[7967]=15,[7992]=25,[7997]=300,[7998]=10,
- [8014]=1200,[8016]=1200,[8034]=8,[8037]=8,[8040]=15,[8041]=10,[8050]=12,
- [8052]=12,[8053]=12,[8056]=8,[8058]=8,[8064]=30,[8066]=120,[8067]=120,
- [8068]=1800,[8070]=12,[8078]=10,[8091]=1800,[8094]=1800,[8095]=1800,[8096]=1800,
- [8097]=1800,[8098]=1800,[8099]=1800,[8100]=1800,[8101]=1800,[8112]=1800,
- [8113]=1800,[8114]=1800,[8115]=1800,[8116]=1800,[8117]=1800,[8118]=1800,
- [8119]=1800,[8120]=1800,[8122]=8,[8124]=8,[8134]=600,[8137]=1800,[8138]=2700,
- [8139]=1800,[8140]=15,[8142]=10,[8147]=10,[8150]=2.5,[8151]=2.5,[8191]=15,
- [8192]=15,[8198]=14,[8202]=1200,[8204]=18,[8205]=22,[8208]=10,[8212]=120,
- [8215]=120,[8219]=3600,[8220]=3600,[8221]=3600,[8222]=3600,[8223]=10,[8224]=600,
- [8225]=5,[8226]=300,[8233]=1.5,[8236]=1.5,[8242]=2,[8245]=300,[8255]=10,
- [8256]=180,[8257]=30,[8260]=4,[8267]=600,[8269]=120,[8272]=600,[8275]=75,
- [8277]=120,[8281]=10,[8282]=600,[8285]=2.5,[8288]=15,[8289]=15,[8312]=10,
- [8313]=20,[8314]=3600,[8316]=180,[8317]=180,[8338]=2,[8345]=60,[8346]=20,
- [8348]=12,[8359]=300,[8361]=2,[8362]=20,[8363]=75,[8365]=60,[8377]=4,[8379]=10,
- [8380]=30,[8382]=45,[8383]=3600,[8384]=3600,[8385]=3600,[8391]=3,[8392]=10,
- [8398]=8,[8399]=10,[8400]=8,[8401]=8,[8402]=8,[8406]=7,[8407]=8,[8408]=8,
- [8416]=5,[8417]=5,[8450]=600,[8451]=600,[8455]=600,[8457]=30,[8458]=30,[8461]=30,
- [8462]=30,[8492]=8,[8494]=60,[8495]=60,[8510]=2,[8511]=2,[8516]=1.5,[8552]=120,
- [8553]=600,[8554]=2,[8599]=120,[8600]=180,[8602]=10,[8609]=3,[8611]=6,[8629]=4,
- [8631]=18,[8632]=18,[8633]=18,[8639]=6,[8640]=6,[8643]=1,[8646]=2,[8647]=30,
- [8649]=30,[8650]=30,[8672]=30,[8692]=12,[8696]=15,[8699]=20,[8715]=3,[8716]=12,
- [8733]=3600,[8788]=600,[8806]=60,[8817]=3,[8818]=18,[8822]=30,[8823]=30,
- [8824]=30,[8892]=20,[8893]=2,[8898]=1200,[8899]=1200,[8900]=1200,[8901]=20,
- [8902]=20,[8907]=1800,[8909]=600,[8910]=12,[8914]=600,[8921]=9,[8924]=12,
- [8925]=12,[8926]=12,[8927]=12,[8928]=12,[8929]=12,[8936]=21,[8938]=21,[8939]=21,
- [8940]=21,[8941]=21,[8955]=15,[8983]=4,[8988]=10,[8989]=10,[8994]=15,[9005]=2,
- [9007]=18,[9032]=30,[9034]=21,[9035]=120,[9080]=10,[9095]=600,[9128]=120,
- [9159]=10,[9175]=15,[9176]=60,[9177]=24,[9178]=120,[9179]=3,[9192]=120,
- [9199]=300,[9220]=120,[9234]=1800,[9256]=10,[9275]=21,[9373]=12,[9438]=8,
- [9458]=3,[9459]=60,[9462]=8,[9482]=30,[9484]=30,[9485]=40,[9490]=30,[9492]=12,
- [9493]=12,[9552]=9,[9574]=45,[9576]=10,[9578]=10,[9579]=10,[9587]=180,[9592]=10,
- [9612]=15,[9614]=60,[9616]=20,[9632]=9,[9657]=10,[9658]=45,[9672]=4,[9712]=5,
- [9733]=4,[9735]=1200,[9736]=30,[9738]=120,[9741]=6,[9747]=30,[9749]=40,[9750]=21,
- [9752]=12,[9756]=600,[9773]=8,[9774]=5,[9775]=60,[9779]=8,[9791]=20,[9796]=60,
- [9800]=60,[9806]=20,[9810]=10,[9821]=15,[9823]=2,[9824]=18,[9826]=18,[9827]=2,
- [9833]=12,[9834]=12,[9835]=12,[9839]=12,[9840]=12,[9841]=12,[9845]=6,[9846]=6,
- [9852]=24,[9853]=27,[9856]=21,[9857]=21,[9858]=21,[9884]=1800,[9885]=1800,
- [9894]=12,[9896]=12,[9898]=30,[9901]=15,[9904]=9,[9906]=5,[9907]=40,[9910]=600,
- [9915]=10,[9930]=30,[9991]=604800,[9992]=10,[10017]=10,[10018]=10,[10060]=15,
- [10072]=3600,[10093]=1,[10096]=120,[10134]=7,[10136]=1200,[10148]=8,[10149]=8,
- [10150]=8,[10151]=8,[10156]=1800,[10157]=1800,[10159]=8,[10160]=8,[10161]=8,
- [10169]=600,[10170]=600,[10173]=600,[10174]=600,[10177]=30,[10179]=9,[10180]=9,
- [10181]=9,[10191]=60,[10192]=60,[10193]=60,[10211]=5,[10212]=5,[10219]=1800,
- [10220]=1800,[10223]=30,[10225]=30,[10228]=120,[10230]=8,[10236]=180,[10238]=180,
- [10240]=180,[10241]=180,[10242]=180,[10250]=30,[10251]=180,[10252]=5,[10253]=10,
- [10256]=30,[10257]=30,[10259]=2,[10260]=20,[10263]=90,[10266]=2,[10268]=180,
- [10278]=10,[10308]=6,[10326]=20,[10336]=30,[10337]=30,[10342]=15,[10345]=20,
- [10348]=20,[10351]=5,[10368]=15,[10370]=60,[10371]=10,[10431]=600,[10432]=600,
- [10447]=12,[10448]=12,[10452]=20,[10455]=0.001,[10458]=8,[10472]=8,[10473]=8,
- [10484]=1.5,[10576]=6,[10578]=8,[10608]=1.5,[10610]=1.5,[10618]=120,[10651]=120,
- [10653]=120,[10654]=10,[10667]=3600,[10668]=3600,[10669]=3600,[10670]=3600,
- [10671]=3600,[10672]=3600,[10690]=3600,[10691]=3600,[10692]=3600,[10693]=3600,
- [10730]=10,[10732]=10,[10734]=3,[10737]=10,[10767]=1800,[10794]=30,[10797]=6,
- [10805]=3,[10831]=5,[10834]=3,[10835]=3,[10836]=3,[10838]=8,[10839]=8,
- [10849]=300,[10851]=15,[10852]=10,[10855]=10,[10856]=8,[10857]=35,[10888]=8,
- [10890]=8,[10892]=18,[10893]=18,[10894]=18,[10898]=30,[10899]=30,[10900]=30,
- [10901]=30,[10909]=60,[10911]=60,[10912]=60,[10927]=15,[10928]=15,[10929]=15,
- [10937]=1800,[10938]=1800,[10941]=10,[10942]=10,[10951]=600,[10952]=600,
- [10953]=15,[10955]=50,[10957]=600,[10958]=600,[10967]=20,[10968]=30,[10987]=5,
- [11013]=120,[11014]=15,[11020]=8,[11089]=30,[11113]=6,[11131]=10,[11196]=60,
- [11197]=30,[11198]=30,[11201]=12,[11206]=600,[11264]=10,[11273]=6,[11274]=6,
- [11275]=6,[11285]=4,[11286]=4,[11289]=18,[11290]=18,[11297]=45,[11305]=15,
- [11319]=1800,[11327]=10,[11328]=3600,[11329]=10,[11330]=3600,[11331]=3600,
- [11332]=3600,[11333]=3600,[11334]=3600,[11348]=3600,[11349]=3600,[11350]=15,
- [11353]=12,[11354]=12,[11359]=30,[11363]=180,[11364]=180,[11366]=12,[11371]=1800,
- [11374]=180,[11389]=3600,[11390]=1800,[11391]=30,[11392]=18,[11393]=3600,
- [11394]=3600,[11395]=3600,[11396]=3600,[11397]=300,[11398]=14,[11403]=120,
- [11404]=3600,[11405]=3600,[11406]=300,[11407]=3600,[11426]=60,[11428]=2,
- [11430]=2,[11436]=10,[11442]=180,[11443]=15,[11444]=20,[11445]=60,[11446]=300,
- [11469]=12,[11470]=12,[11471]=12,[11474]=1800,[11481]=11,[11534]=20,[11538]=4,
- [11539]=12,[11549]=120,[11550]=120,[11551]=120,[11554]=30,[11555]=30,[11556]=30,
- [11572]=21,[11573]=21,[11574]=21,[11580]=26,[11581]=30,[11596]=30,[11597]=30,
- [11639]=18,[11640]=15,[11641]=10,[11647]=30,[11650]=3,[11657]=20,[11658]=15,
- [11665]=15,[11667]=15,[11668]=15,[11671]=18,[11672]=18,[11675]=15,[11683]=15,
- [11684]=15,[11693]=10,[11694]=10,[11695]=10,[11699]=5,[11700]=5,[11703]=5,
- [11704]=5,[11707]=120,[11708]=120,[11711]=24,[11712]=24,[11713]=24,[11717]=120,
- [11719]=30,[11721]=300,[11722]=300,[11725]=300,[11726]=300,[11733]=1800,
- [11734]=1800,[11735]=1800,[11739]=30,[11740]=30,[11743]=600,[11770]=180,
- [11771]=180,[11790]=15,[11791]=30,[11820]=10,[11826]=3,[11831]=8,[11835]=30,
- [11836]=10,[11841]=600,[11876]=5,[11877]=5,[11879]=5,[11892]=120,[11918]=15,
- [11920]=20,[11922]=15,[11958]=10,[11960]=60,[11962]=21,[11963]=120,[11971]=30,
- [11974]=30,[11977]=15,[11980]=120,[11983]=10,[12001]=240,[12020]=60,[12021]=10,
- [12023]=5,[12024]=5,[12040]=30,[12042]=15,[12051]=8,[12054]=15,[12096]=8,
- [12097]=20,[12098]=20,[12134]=12,[12160]=12,[12166]=5,[12169]=5,[12174]=1800,
- [12175]=1800,[12176]=1800,[12177]=1800,[12178]=1800,[12179]=1800,[12241]=4,
- [12242]=3,[12245]=300,[12248]=10,[12251]=30,[12252]=10,[12255]=900,[12257]=5,
- [12279]=600,[12280]=60,[12292]=20,[12294]=10,[12323]=6,[12328]=30,[12355]=2,
- [12421]=2,[12438]=10,[12461]=2,[12479]=10,[12480]=15,[12483]=15,[12484]=1.5,
- [12485]=1.5,[12486]=1.5,[12493]=120,[12494]=5,[12505]=12,[12509]=3,[12520]=4,
- [12521]=3,[12522]=12,[12523]=12,[12524]=12,[12525]=12,[12526]=12,[12528]=10,
- [12530]=60,[12531]=8,[12533]=45,[12536]=15,[12540]=4,[12541]=600,[12542]=4,
- [12543]=3,[12544]=1800,[12545]=20,[12548]=8,[12550]=600,[12551]=10,[12557]=8,
- [12561]=60,[12562]=5,[12579]=15,[12608]=600,[12611]=8,[12613]=6,[12654]=4,
- [12655]=4,[12674]=8,[12675]=4,[12685]=10,[12686]=15,[12705]=6,[12721]=12,
- [12731]=8,[12733]=30,[12734]=3,[12737]=4,[12738]=10,[12741]=120,[12742]=21,
- [12747]=10,[12748]=5,[12766]=45,[12795]=120,[12798]=3,[12809]=5,[12824]=30,
- [12825]=40,[12826]=50,[12843]=60,[12844]=0.001,[12845]=30,[12880]=12,[12884]=45,
- [12888]=6,[12889]=15,[12890]=15,[12891]=45,[12941]=15,[12942]=10,[12943]=10,
- [12946]=10,[12966]=15,[12967]=15,[12968]=15,[12969]=15,[12970]=15,[12976]=20,
- [13003]=20,[13004]=30,[13005]=4,[13007]=8,[13010]=30,[13013]=20,[13018]=6,
- [13019]=6,[13020]=6,[13021]=6,[13031]=60,[13032]=60,[13033]=60,[13099]=10,
- [13119]=20,[13138]=20,[13141]=20,[13158]=5,[13168]=10,[13181]=20,[13183]=10,
- [13218]=15,[13222]=15,[13223]=15,[13224]=15,[13234]=600,[13235]=20,[13237]=3,
- [13238]=3,[13278]=4,[13298]=30,[13318]=30,[13322]=2,[13323]=20,[13326]=1800,
- [13327]=30,[13338]=15,[13360]=2,[13424]=30,[13438]=6,[13439]=5,[13443]=15,
- [13444]=30,[13445]=15,[13459]=30,[13466]=7,[13488]=50,[13490]=30,[13493]=4,
- [13494]=30,[13496]=10,[13518]=15,[13524]=60,[13526]=30,[13528]=30,[13530]=3,
- [13532]=10,[13533]=10,[13534]=10,[13542]=5,[13543]=5,[13544]=5,[13549]=15,
- [13550]=15,[13551]=15,[13552]=15,[13553]=15,[13554]=15,[13555]=15,[13566]=8,
- [13578]=8,[13579]=4,[13582]=120,[13583]=120,[13585]=600,[13608]=10,[13619]=180,
- [13692]=15,[13704]=6,[13729]=12,[13730]=30,[13736]=2,[13737]=5,[13738]=15,
- [13744]=15,[13747]=10,[13750]=15,[13752]=30,[13787]=1800,[13797]=15,[13808]=3,
- [13835]=3,[13847]=15,[13864]=1800,[13874]=8,[13877]=15,[13880]=30,[13884]=180,
- [13896]=15,[13902]=5,[13903]=30,[13907]=5,[13910]=0.001,[13951]=20,[14030]=10,
- [14032]=18,[14087]=30,[14100]=5,[14102]=2,[14110]=30,[14118]=30,[14120]=30,
- [14130]=600,[14143]=20,[14147]=30,[14149]=20,[14180]=4,[14183]=10,[14201]=12,
- [14202]=12,[14203]=12,[14204]=12,[14207]=5,[14251]=6,[14253]=8,[14267]=10,
- [14268]=10,[14275]=20,[14276]=20,[14277]=20,[14278]=7,[14279]=8,[14280]=8,
- [14296]=30,[14298]=15,[14299]=15,[14300]=15,[14301]=15,[14308]=15,[14309]=20,
- [14323]=120,[14324]=120,[14325]=120,[14326]=15,[14327]=20,[14331]=15,[14514]=1,
- [14515]=15,[14517]=30,[14518]=30,[14530]=10,[14532]=300,[14533]=300,[14534]=300,
- [14535]=300,[14538]=300,[14539]=300,[14621]=20,[14743]=6,[14744]=180,
- [14752]=1800,[14792]=30,[14795]=12,[14797]=21,[14818]=1800,[14819]=1800,
- [14821]=15,[14822]=15,[14823]=15,[14868]=30,[14870]=3,[14871]=1,[14872]=15,
- [14874]=10,[14875]=30,[14888]=1800,[14890]=0.001,[14893]=15,[14897]=25,[14902]=4,
- [14903]=2,[14907]=8,[14914]=10,[15039]=12,[15041]=60,[15042]=600,[15043]=4,
- [15044]=60,[15056]=7,[15061]=5,[15062]=10,[15063]=8,[15087]=15,[15089]=8,
- [15091]=6,[15096]=12,[15123]=3600,[15128]=120,[15229]=15,[15231]=1800,
- [15233]=1800,[15235]=120,[15244]=8,[15258]=15,[15261]=10,[15262]=10,[15263]=10,
- [15264]=10,[15265]=10,[15266]=10,[15267]=10,[15269]=3,[15271]=15,[15277]=30,
- [15279]=600,[15280]=20,[15283]=8,[15286]=60,[15288]=1800,[15346]=30,[15357]=15,
- [15359]=15,[15366]=3600,[15398]=8,[15407]=3,[15470]=15,[15471]=8,[15474]=10,
- [15475]=120,[15487]=5,[15494]=10,[15497]=4,[15499]=8,[15502]=30,[15505]=21,
- [15507]=600,[15529]=10,[15530]=4,[15531]=8,[15532]=8,[15534]=20,[15535]=10,
- [15548]=10,[15570]=21,[15571]=4,[15572]=30,[15583]=10,[15588]=10,[15593]=8,
- [15595]=10,[15602]=30,[15604]=10,[15609]=10,[15616]=12,[15618]=2,[15621]=2,
- [15636]=10,[15642]=5,[15646]=10,[15652]=2,[15654]=18,[15655]=2,[15656]=15,
- [15660]=10,[15661]=21,[15662]=6,[15664]=10,[15708]=5,[15716]=120,[15727]=30,
- [15728]=240,[15730]=180,[15732]=21,[15735]=5,[15742]=3,[15744]=6,[15752]=10,
- [15753]=2,[15784]=60,[15790]=5,[15798]=12,[15802]=120,[15822]=12,[15848]=1800,
- [15850]=5,[15852]=600,[15859]=5,[15860]=9,[15878]=3,[15970]=10,[15971]=30,
- [15976]=10,[15981]=12,[16001]=9,[16037]=2,[16045]=30,[16046]=6,[16048]=60,
- [16049]=604800,[16050]=10,[16051]=2,[16053]=60,[16071]=300,[16075]=2,[16094]=10,
- [16095]=15,[16096]=5,[16097]=10,[16098]=600,[16099]=10,[16104]=6,[16122]=4,
- [16128]=180,[16143]=600,[16145]=30,[16147]=21,[16168]=20,[16170]=30,[16172]=20,
- [16177]=15,[16186]=180,[16231]=120,[16236]=15,[16237]=15,[16244]=30,[16246]=15,
- [16247]=180,[16249]=4,[16257]=15,[16277]=15,[16278]=15,[16279]=15,[16280]=15,
- [16310]=3,[16321]=10,[16322]=20,[16323]=1800,[16325]=600,[16326]=600,
- [16327]=1800,[16329]=600,[16333]=120,[16336]=300,[16337]=300,[16340]=10,
- [16350]=10,[16352]=8,[16353]=8,[16359]=30,[16361]=1.5,[16366]=60,[16373]=30,
- [16391]=30,[16392]=30,[16393]=30,[16400]=15,[16401]=30,[16402]=3,[16403]=30,
- [16404]=10,[16406]=30,[16412]=6,[16413]=6,[16415]=8,[16420]=0.5,[16427]=30,
- [16429]=1800,[16430]=12,[16431]=60,[16432]=8,[16448]=1800,[16449]=1800,
- [16451]=10,[16452]=3,[16454]=30,[16458]=1800,[16460]=1800,[16461]=1800,
- [16469]=10,[16470]=10,[16488]=6,[16490]=6,[16491]=6,[16497]=5,[16498]=60,
- [16499]=1800,[16508]=8,[16509]=15,[16511]=15,[16528]=10,[16532]=600,[16536]=45,
- [16551]=3,[16552]=10,[16555]=300,[16557]=10,[16560]=15,[16561]=21,[16566]=30,
- [16567]=600,[16568]=3,[16569]=10,[16573]=45,[16587]=600,[16591]=600,[16593]=120,
- [16595]=600,[16597]=10,[16598]=20,[16599]=20,[16600]=5,[16601]=8,[16603]=25,
- [16608]=4,[16609]=3600,[16610]=600,[16612]=1800,[16617]=600,[16618]=300,
- [16621]=3,[16627]=9,[16628]=9,[16629]=30,[16637]=20,[16689]=45,[16707]=20,
- [16708]=20,[16709]=20,[16711]=300,[16712]=300,[16713]=60,[16714]=60,[16716]=5,
- [16717]=5,[16727]=5,[16739]=300,[16789]=15,[16790]=2,[16791]=60,[16798]=10,
- [16799]=4,[16803]=5,[16804]=12,[16805]=10,[16810]=45,[16811]=45,[16812]=45,
- [16813]=45,[16834]=6,[16835]=6,[16838]=5,[16843]=4,[16856]=5,[16857]=40,
- [16864]=600,[16866]=10,[16867]=12,[16869]=10,[16870]=15,[16871]=60,[16873]=1800,
- [16874]=600,[16875]=1800,[16876]=1800,[16877]=600,[16878]=1800,[16881]=600,
- [16882]=600,[16883]=1200,[16884]=3600,[16885]=3600,[16886]=15,[16887]=3600,
- [16888]=3600,[16889]=1800,[16890]=3600,[16891]=3600,[16892]=3600,[16893]=3600,
- [16894]=3600,[16895]=3600,[16898]=30,[16916]=30,[16922]=3,[16927]=5,[16928]=45,
- [16939]=20,[17008]=5,[17011]=5,[17013]=1800,[17014]=10,[17038]=1200,[17052]=300,
- [17057]=3,[17105]=12,[17134]=60,[17139]=30,[17140]=8,[17141]=8,[17142]=8,
- [17145]=6,[17146]=18,[17148]=30,[17150]=1800,[17151]=600,[17152]=10,[17153]=30,
- [17154]=30,[17158]=10,[17165]=3,[17168]=10,[17170]=12,[17172]=5,[17173]=5,
- [17174]=3,[17175]=3600,[17177]=8,[17179]=20,[17183]=15,[17189]=20,[17196]=30,
- [17197]=6,[17205]=1200,[17207]=2,[17213]=900,[17227]=120,[17230]=300,[17238]=5,
- [17243]=5,[17244]=120,[17246]=120,[17250]=120,[17252]=1800,[17272]=2,[17273]=12,
- [17274]=12,[17275]=300,[17276]=4,[17277]=6,[17281]=30,[17286]=4,[17292]=30,
- [17293]=8,[17307]=6,[17308]=2,[17311]=3,[17312]=3,[17313]=3,[17314]=3,[17315]=30,
- [17329]=45,[17330]=20,[17331]=10,[17333]=10,[17347]=15,[17348]=15,[17351]=10,
- [17352]=10,[17364]=12,[17368]=3,[17390]=40,[17391]=40,[17392]=40,[17398]=5,
- [17405]=15,[17407]=25,[17445]=20,[17446]=10,[17447]=10,[17473]=12,[17483]=6,
- [17484]=30,[17492]=5,[17494]=30,[17499]=30,[17500]=2,[17503]=4,[17504]=30,
- [17505]=60,[17506]=30,[17510]=3,[17511]=20,[17528]=20,[17535]=3600,[17537]=3600,
- [17538]=3600,[17539]=3600,[17540]=120,[17543]=3600,[17544]=3600,[17545]=3600,
- [17546]=3600,[17547]=5,[17548]=3600,[17549]=3600,[17620]=5,[17624]=60,
- [17626]=7200,[17627]=7200,[17628]=7200,[17629]=7200,[17633]=30,[17639]=12,
- [17651]=6,[17668]=1,[17680]=60,[17682]=5,[17686]=10,[17687]=15,[17691]=300,
- [17692]=5,[17697]=5,[17715]=15,[17716]=1.5,[17729]=60,[17730]=60,[17734]=3600,
- [17738]=14,[17740]=60,[17741]=60,[17743]=120,[17745]=10,[17767]=10,[17771]=30,
- [17772]=5,[17774]=8,[17794]=12,[17797]=12,[17798]=12,[17799]=12,[17800]=12,
- [17820]=15,[17831]=60,[17850]=10,[17851]=10,[17852]=10,[17853]=10,[17854]=10,
- [17862]=300,[17877]=5,[17883]=21,[17925]=3,[17926]=3,[17928]=15,[17937]=300,
- [17941]=10,[17961]=1800,[17963]=30,[18070]=30,[18075]=30,[18077]=15,[18078]=30,
- [18082]=6,[18088]=3,[18093]=3,[18097]=30,[18099]=10,[18100]=1800,[18101]=5,
- [18103]=2,[18105]=8,[18106]=30,[18108]=8,[18118]=5,[18124]=27,[18125]=600,
- [18137]=600,[18140]=30,[18141]=600,[18144]=2,[18149]=120,[18151]=120,[18159]=900,
- [18163]=1800,[18165]=8,[18172]=300,[18173]=20,[18191]=600,[18192]=600,
- [18193]=600,[18194]=600,[18197]=15,[18199]=6,[18200]=30,[18202]=30,[18203]=30,
- [18208]=25,[18209]=604800,[18210]=604800,[18222]=600,[18223]=12,[18229]=27,
- [18230]=27,[18231]=27,[18232]=27,[18233]=27,[18234]=27,[18265]=30,[18266]=15,
- [18267]=30,[18270]=90,[18278]=6,[18288]=30,[18289]=15,[18327]=10,[18328]=60,
- [18347]=600,[18364]=15,[18371]=10,[18376]=24,[18377]=300,[18381]=30,[18395]=2,
- [18396]=0.001,[18425]=2,[18431]=3,[18461]=1,[18469]=4,[18498]=3,[18499]=10,
- [18501]=5,[18502]=120,[18503]=10,[18520]=30,[18543]=21,[18545]=20,[18546]=6,
- [18557]=5,[18608]=8,[18610]=8,[18633]=30,[18647]=30,[18652]=15,[18654]=15,
- [18656]=3,[18657]=30,[18658]=40,[18671]=30,[18702]=60,[18708]=15,[18733]=5,
- [18747]=300,[18763]=15,[18765]=20,[18787]=30,[18789]=1800,[18790]=1800,
- [18791]=1800,[18792]=1800,[18796]=6,[18798]=5,[18802]=10,[18803]=4,[18807]=3,
- [18809]=12,[18810]=3600,[18811]=2,[18812]=2,[18820]=10,[18826]=10,[18828]=20,
- [18867]=5,[18868]=5,[18869]=5,[18870]=5,[18871]=5,[18874]=7,[18879]=30,
- [18880]=30,[18881]=30,[18942]=3600,[18946]=30,[18948]=300,[18949]=30,[18956]=30,
- [18957]=30,[18958]=45,[18968]=600,[18972]=20,[18977]=10,[19030]=300,[19128]=2,
- [19133]=8,[19134]=8,[19135]=15,[19136]=5,[19137]=20,[19185]=5,[19229]=5,
- [19231]=300,[19249]=120,[19251]=120,[19252]=120,[19253]=120,[19254]=120,
- [19261]=600,[19262]=600,[19263]=10,[19264]=600,[19265]=600,[19266]=600,
- [19271]=15,[19273]=15,[19274]=15,[19275]=15,[19276]=24,[19277]=24,[19278]=24,
- [19279]=24,[19280]=24,[19281]=120,[19282]=120,[19283]=120,[19284]=120,
- [19285]=120,[19289]=15,[19291]=15,[19292]=15,[19293]=15,[19296]=6,[19299]=6,
- [19302]=6,[19303]=6,[19304]=6,[19305]=6,[19306]=5,[19308]=600,[19309]=600,
- [19310]=600,[19311]=600,[19312]=600,[19364]=5,[19365]=900,[19366]=900,
- [19367]=900,[19369]=5,[19372]=900,[19386]=12,[19393]=16,[19397]=60,[19408]=8,
- [19410]=3,[19428]=8,[19438]=30,[19440]=30,[19441]=30,[19442]=30,[19443]=30,
- [19448]=30,[19450]=30,[19451]=8,[19463]=10,[19469]=15,[19478]=60,[19479]=10,
- [19482]=2,[19486]=20,[19496]=15,[19503]=4,[19514]=600,[19516]=1800,[19548]=20,
- [19574]=18,[19577]=15,[19597]=900,[19615]=8,[19631]=60,[19634]=15,[19635]=60,
- [19636]=6,[19638]=30,[19641]=6,[19643]=5,[19645]=10,[19652]=10,[19653]=10,
- [19654]=10,[19655]=60,[19656]=60,[19659]=300,[19660]=60,[19674]=20,[19675]=4,
- [19676]=900,[19677]=900,[19678]=900,[19679]=900,[19680]=900,[19681]=900,
- [19682]=900,[19683]=900,[19684]=900,[19685]=900,[19686]=900,[19687]=20,
- [19688]=20,[19689]=20,[19690]=900,[19692]=20,[19693]=20,[19694]=20,[19695]=8,
- [19696]=20,[19697]=20,[19699]=20,[19700]=20,[19702]=10,[19703]=300,[19705]=900,
- [19706]=900,[19708]=900,[19709]=900,[19710]=900,[19711]=900,[19713]=300,
- [19714]=30,[19716]=300,[19725]=20,[19727]=3600,[19740]=300,[19742]=300,
- [19753]=180,[19755]=60,[19769]=3,[19771]=30,[19776]=18,[19778]=30,[19779]=10,
- [19780]=2,[19784]=4,[19812]=8,[19820]=20,[19821]=5,[19822]=10,[19832]=90,
- [19834]=300,[19835]=300,[19836]=300,[19837]=300,[19838]=300,[19850]=300,
- [19852]=300,[19853]=300,[19854]=300,[19872]=30,[19937]=900,[19952]=10,[19953]=10,
- [19970]=27,[19971]=24,[19972]=21,[19973]=18,[19974]=15,[19975]=12,[19977]=300,
- [19978]=300,[19979]=300,[20005]=5,[20006]=12,[20007]=15,[20019]=6,[20050]=8,
- [20052]=8,[20053]=8,[20054]=8,[20055]=8,[20066]=6,[20128]=10,[20131]=10,
- [20132]=10,[20133]=10,[20134]=10,[20154]=30,[20162]=30,[20164]=30,[20165]=30,
- [20166]=30,[20170]=2,[20184]=10,[20185]=10,[20186]=10,[20188]=10,[20217]=300,
- [20223]=10,[20228]=12,[20229]=8,[20230]=15,[20233]=120,[20236]=120,[20253]=3,
- [20276]=2,[20277]=4,[20287]=30,[20288]=30,[20289]=30,[20290]=30,[20291]=30,
- [20292]=30,[20293]=30,[20294]=21,[20297]=4,[20300]=10,[20301]=10,[20302]=10,
- [20303]=10,[20305]=30,[20306]=30,[20307]=30,[20308]=30,[20310]=2,[20344]=10,
- [20345]=10,[20346]=10,[20347]=30,[20348]=30,[20349]=30,[20354]=10,[20355]=10,
- [20356]=30,[20357]=30,[20375]=30,[20436]=30,[20475]=8,[20478]=8,[20481]=1800,
- [20507]=1,[20508]=0.001,[20510]=15,[20511]=8,[20512]=20,[20541]=0.1,[20542]=15,
- [20544]=2,[20545]=600,[20547]=8,[20548]=3,[20549]=2,[20553]=2,[20559]=6,
- [20560]=6,[20564]=8,[20570]=10,[20578]=10,[20586]=20,[20587]=600,[20590]=600,
- [20594]=8,[20600]=20,[20604]=15,[20612]=8,[20614]=3,[20615]=3,[20619]=10,
- [20620]=300,[20624]=3600,[20629]=10,[20631]=10,[20654]=15,[20655]=60,[20656]=60,
- [20663]=10,[20664]=12,[20665]=21,[20667]=30,[20668]=10,[20669]=10,[20672]=3,
- [20683]=5,[20685]=8,[20690]=12,[20697]=30,[20699]=15,[20701]=12,[20706]=30,
- [20707]=1800,[20716]=10,[20717]=10,[20729]=30,[20733]=60,[20740]=15,[20743]=5,
- [20753]=30,[20762]=1800,[20763]=1800,[20764]=1800,[20765]=1800,[20785]=1800,
- [20786]=10,[20787]=21,[20792]=4,[20798]=1800,[20800]=21,[20806]=4,[20812]=15,
- [20819]=4,[20822]=4,[20826]=21,[20828]=8,[20875]=900,[20882]=300,[20909]=5,
- [20910]=5,[20911]=300,[20912]=300,[20913]=300,[20914]=300,[20915]=30,[20918]=30,
- [20919]=30,[20920]=30,[20925]=10,[20927]=10,[20928]=10,[20988]=4,[20989]=10,
- [21007]=120,[21008]=6,[21030]=8,[21047]=10,[21048]=1800,[21049]=30,[21055]=30,
- [21056]=60,[21060]=10,[21062]=30,[21063]=45,[21066]=10,[21067]=10,[21068]=24,
- [21069]=6,[21075]=10,[21081]=30,[21082]=30,[21084]=30,[21086]=1800,[21087]=1800,
- [21090]=1800,[21091]=10,[21095]=5,[21098]=30,[21099]=5,[21141]=30,[21149]=18,
- [21151]=30,[21152]=3,[21153]=10,[21159]=8,[21162]=10,[21163]=1800,[21165]=10,
- [21167]=1,[21171]=120,[21172]=10,[21174]=10,[21183]=10,[21188]=2,[21307]=7200,
- [21330]=2,[21331]=15,[21335]=600,[21337]=600,[21340]=600,[21354]=3,[21369]=4,
- [21401]=8,[21403]=1800,[21425]=120,[21540]=10,[21546]=900,[21547]=5,[21551]=10,
- [21552]=10,[21553]=10,[21556]=1800,[21562]=3600,[21564]=3600,[21566]=1800,
- [21655]=1,[21669]=12,[21670]=60,[21687]=15,[21708]=15,[21736]=7200,[21740]=4,
- [21748]=2,[21749]=2,[21787]=120,[21793]=10,[21794]=16,[21808]=8,[21827]=600,
- [21833]=8,[21840]=6,[21847]=6,[21849]=3600,[21850]=3600,[21860]=5,[21863]=600,
- [21866]=16,[21869]=8,[21878]=15,[21887]=10,[21892]=2,[21896]=5,[21898]=2,
- [21909]=8,[21920]=1800,[21921]=4,[21925]=4,[21927]=4,[21929]=4,[21932]=4,
- [21936]=60,[21949]=30,[21952]=20,[21955]=10,[21956]=10,[21961]=30,[21970]=60,
- [21971]=10,[21976]=4,[21980]=60,[21990]=4,[21992]=12,[22008]=10,[22009]=15,
- [22011]=30,[22067]=10,[22127]=10,[22128]=600,[22168]=20,[22187]=30,[22206]=12,
- [22247]=6,[22272]=5,[22274]=20,[22284]=5,[22289]=6,[22290]=6,[22291]=5,
- [22335]=30,[22356]=10,[22357]=2,[22371]=120,[22373]=21,[22412]=30,[22415]=10,
- [22417]=30,[22418]=1800,[22419]=4,[22420]=60,[22423]=12,[22424]=6,[22426]=30,
- [22427]=5,[22428]=8,[22433]=20,[22438]=30,[22440]=0.001,[22442]=6,[22478]=15,
- [22479]=6,[22519]=2,[22558]=5,[22559]=6,[22561]=1,[22566]=8,[22570]=2,[22572]=5,
- [22582]=8,[22592]=2,[22639]=30,[22640]=5,[22642]=6,[22643]=4,[22645]=8,
- [22646]=0.001,[22651]=8,[22652]=10,[22660]=30,[22661]=10,[22662]=21,[22666]=6,
- [22667]=15,[22678]=6,[22682]=10,[22685]=1800,[22686]=4,[22687]=6,[22688]=30,
- [22689]=20,[22690]=4,[22691]=6,[22692]=8,[22693]=10,[22695]=21,[22703]=2,
- [22707]=1.7,[22710]=30,[22713]=20,[22730]=600,[22731]=27,[22734]=30,[22735]=7200,
- [22736]=600,[22739]=8,[22742]=20,[22744]=10,[22746]=8,[22751]=120,[22752]=900,
- [22782]=1800,[22783]=1800,[22788]=604800,[22789]=900,[22790]=900,[22800]=8,
- [22807]=3600,[22812]=15,[22817]=7200,[22818]=7200,[22820]=7200,[22822]=6,
- [22823]=6,[22833]=10,[22835]=60,[22839]=15,[22842]=10,[22850]=10,[22857]=15,
- [22859]=5,[22863]=10,[22884]=4,[22888]=7200,[22895]=10,[22896]=10,[22901]=30,
- [22909]=4,[22911]=2,[22914]=3,[22915]=3,[22917]=240,[22919]=3,[22924]=10,
- [22935]=3,[22937]=10,[22948]=5,[22959]=30,[22969]=5,[22992]=11,[22994]=10,
- [22997]=40,[22998]=3,[23006]=3,[23009]=2,[23010]=1,[23015]=18,[23016]=18,
- [23023]=10,[23028]=3600,[23038]=12,[23039]=6,[23055]=2,[23060]=240,[23097]=5,
- [23099]=15,[23102]=4,[23103]=10,[23108]=10,[23109]=15,[23110]=15,[23113]=6,
- [23115]=8,[23120]=6,[23126]=300,[23128]=8,[23131]=5,[23132]=5,[23145]=15,
- [23147]=15,[23148]=15,[23153]=600,[23154]=600,[23155]=600,[23162]=10,[23164]=20,
- [23165]=30,[23169]=600,[23170]=600,[23171]=4,[23174]=300,[23175]=300,[23177]=300,
- [23179]=1200,[23182]=900,[23183]=12,[23186]=90,[23187]=15,[23189]=15,[23205]=45,
- [23207]=10,[23224]=8,[23226]=6,[23230]=25,[23234]=15,[23244]=4,[23257]=30,
- [23260]=20,[23262]=30,[23268]=18,[23269]=4,[23270]=20,[23271]=15,[23273]=0.1,
- [23274]=0.1,[23275]=5,[23276]=0.1,[23277]=0.1,[23279]=30,[23298]=45,[23299]=18,
- [23303]=5,[23310]=8,[23312]=8,[23313]=15,[23314]=15,[23315]=60,[23316]=60,
- [23331]=8,[23340]=8,[23341]=20,[23342]=10,[23355]=20,[23364]=2,[23365]=8,
- [23379]=30,[23380]=12,[23387]=1,[23388]=2,[23397]=30,[23398]=30,[23401]=30,
- [23402]=30,[23410]=30,[23411]=8,[23412]=9,[23414]=30,[23415]=5,[23417]=6,
- [23418]=30,[23425]=30,[23427]=0.001,[23444]=10,[23445]=7200,[23447]=5,[23449]=24,
- [23451]=10,[23452]=90,[23454]=1,[23456]=10,[23457]=10,[23461]=15,[23492]=5,
- [23493]=10,[23505]=60,[23506]=20,[23511]=30,[23513]=180,[23537]=600,[23552]=600,
- [23567]=8,[23568]=8,[23569]=8,[23577]=7,[23580]=6,[23600]=6,[23601]=4,[23603]=20,
- [23605]=5,[23618]=10,[23619]=15,[23620]=20,[23684]=15,[23693]=120,[23694]=5,
- [23696]=8,[23697]=600,[23698]=30,[23719]=8,[23720]=30,[23721]=10,[23723]=20,
- [23724]=20,[23726]=20,[23733]=20,[23734]=20,[23735]=7200,[23736]=7200,
- [23737]=7200,[23738]=7200,[23766]=7200,[23767]=7200,[23768]=7200,[23769]=7200,
- [23770]=14400,[23780]=20,[23782]=20,[23790]=3600,[23848]=10,[23850]=10,[23860]=8,
- [23862]=10,[23865]=10,[23885]=8,[23886]=8,[23887]=8,[23888]=8,[23895]=15,
- [23918]=10,[23919]=2,[23931]=10,[23947]=3600,[23948]=3600,[23951]=15,[23952]=18,
- [23953]=10,[23958]=60,[23964]=600,[23978]=10,[23991]=15,[24002]=8,[24003]=8,
- [24004]=10,[24005]=25,[24011]=10,[24018]=10,[24020]=2,[24021]=8,[24043]=6,
- [24048]=2,[24049]=10,[24053]=5,[24054]=120,[24057]=2,[24065]=5,[24066]=4,
- [24086]=604800,[24087]=20,[24097]=30,[24099]=10,[24109]=60,[24110]=8,[24111]=30,
- [24131]=12,[24132]=12,[24133]=12,[24134]=12,[24135]=12,[24152]=15,[24170]=18,
- [24178]=20,[24185]=30,[24192]=6,[24193]=2,[24203]=30,[24210]=120,[24212]=18,
- [24213]=2,[24217]=30,[24221]=60,[24223]=10,[24225]=6,[24236]=2,[24238]=12,
- [24244]=300,[24255]=12,[24259]=3,[24268]=30,[24300]=7,[24306]=20,[24312]=604800,
- [24314]=6,[24317]=20,[24318]=90,[24321]=90,[24322]=8,[24323]=8,[24324]=8,
- [24327]=10,[24328]=10,[24331]=9,[24332]=9,[24333]=2,[24335]=12,[24336]=12,
- [24339]=180,[24345]=5,[24348]=4,[24352]=20,[24354]=20,[24355]=30,[24360]=12,
- [24361]=3600,[24363]=3600,[24364]=5,[24375]=5,[24378]=60,[24379]=10,[24382]=7200,
- [24383]=7200,[24388]=30,[24389]=60,[24390]=10,[24394]=3,[24395]=15,[24396]=15,
- [24397]=15,[24408]=2,[24412]=8,[24413]=8,[24414]=8,[24415]=20,[24417]=7200,
- [24423]=4,[24425]=7200,[24427]=60,[24435]=5,[24438]=20,[24498]=15,[24499]=20,
- [24542]=15,[24543]=20,[24544]=20,[24546]=15,[24573]=5,[24574]=20,[24575]=20,
- [24577]=4,[24578]=4,[24579]=4,[24583]=10,[24586]=10,[24587]=10,[24594]=7,
- [24596]=120,[24597]=10,[24600]=7,[24603]=10,[24604]=10,[24605]=10,[24610]=15,
- [24611]=9,[24614]=15,[24615]=1.5,[24617]=10,[24618]=5,[24619]=12,[24640]=10,
- [24646]=15,[24647]=2,[24648]=10,[24658]=20,[24659]=20,[24661]=20,[24662]=20,
- [24664]=6,[24671]=2,[24672]=20,[24673]=600,[24674]=10,[24686]=6,[24687]=5,
- [24688]=10,[24689]=8,[24690]=2,[24692]=604800,[24698]=4,[24699]=20,[24700]=2,
- [24701]=15,[24705]=7200,[24707]=25,[24708]=3600,[24709]=3600,[24710]=3600,
- [24711]=3600,[24712]=3600,[24713]=3600,[24716]=3,[24723]=3600,[24725]=15,
- [24732]=3600,[24734]=4,[24735]=3600,[24736]=3600,[24740]=3600,[24742]=18,
- [24743]=5,[24744]=4,[24745]=1,[24747]=1,[24752]=1800,[24753]=45,[24754]=6,
- [24755]=3600,[24756]=4,[24757]=1,[24758]=4,[24759]=1,[24760]=4,[24761]=1,
- [24762]=1,[24763]=4,[24765]=4,[24766]=1,[24768]=4,[24769]=1,[24770]=4,[24771]=1,
- [24772]=4,[24773]=1,[24776]=0.001,[24778]=5,[24783]=4,[24784]=4,[24785]=1,
- [24786]=4,[24787]=1,[24788]=4,[24789]=4,[24790]=4,[24791]=1,[24792]=1,[24793]=1,
- [24798]=900,[24799]=900,[24800]=30,[24803]=4,[24811]=5,[24818]=30,[24828]=3,
- [24832]=5,[24833]=600,[24839]=45,[24865]=25,[24869]=24,[24870]=900,[24871]=5,
- [24884]=10,[24893]=11,[24906]=10,[24910]=10,[24918]=120,[24919]=5,[24920]=2,
- [24924]=1200,[24925]=1200,[24926]=1200,[24927]=1200,[24928]=120,[24935]=300,
- [24937]=300,[24942]=4,[24948]=5,[24957]=12,[24974]=12,[24975]=12,[24976]=12,
- [24977]=12,[24984]=15,[24991]=7200,[24992]=15,[24998]=15,[25006]=300,[25020]=600,
- [25022]=6,[25023]=1800,[25029]=2,[25037]=900,[25040]=900,[25042]=12,[25043]=90,
- [25049]=6,[25050]=120,[25051]=20,[25053]=30,[25056]=2,[25057]=10,[25058]=15,
- [25098]=8,[25101]=900,[25102]=60,[25161]=1,[25164]=30,[25165]=15,[25174]=30,
- [25177]=45,[25178]=45,[25180]=45,[25181]=45,[25183]=45,[25185]=8,[25187]=30,
- [25189]=10,[25195]=15,[25199]=1800,[25260]=6,[25262]=10,[25282]=6,[25289]=120,
- [25290]=300,[25291]=300,[25295]=15,[25299]=12,[25304]=9,[25306]=8,[25309]=15,
- [25311]=18,[25315]=15,[25345]=5,[25348]=12,[25349]=12,[25371]=15,[25374]=15,
- [25410]=15,[25424]=10,[25425]=2,[25462]=60,[25471]=10,[25473]=10,[25495]=8,
- [25497]=8,[25503]=10,[25515]=5,[25516]=30,[25565]=0.1,[25605]=15,[25645]=30,
- [25646]=15,[25651]=20,[25654]=2,[25655]=8,[25656]=20,[25660]=30,[25661]=900,
- [25668]=20,[25678]=180,[25685]=604800,[25688]=1800,[25694]=900,[25695]=30,
- [25696]=30,[25697]=30,[25698]=7,[25700]=21,[25701]=21,[25702]=21,[25703]=21,
- [25722]=900,[25725]=10,[25746]=15,[25747]=15,[25748]=10,[25750]=15,[25751]=30,
- [25752]=10,[25756]=2,[25757]=10,[25768]=8,[25771]=60,[25772]=120,[25773]=120,
- [25774]=3,[25780]=1800,[25782]=900,[25790]=600,[25794]=3600,[25795]=3600,
- [25796]=3600,[25797]=3600,[25798]=3600,[25799]=3600,[25804]=900,[25805]=15,
- [25806]=30,[25809]=12,[25810]=12,[25811]=10,[25812]=16,[25815]=6,[25816]=120,
- [25821]=2,[25824]=604800,[25838]=20,[25839]=12,[25851]=30,[25852]=2,[25864]=1,
- [25886]=21,[25887]=21,[25888]=21,[25889]=21,[25890]=900,[25891]=20,
- [25893]=604800,[25894]=900,[25895]=900,[25898]=900,[25899]=900,[25907]=10,
- [25916]=900,[25918]=900,[25937]=15,[25941]=900,[25942]=10,[25945]=10,
- [25947]=1800,[25990]=20,[25991]=10,[25999]=1,[26004]=1800,[26008]=1800,
- [26009]=300,[26013]=900,[26015]=1,[26017]=10,[26018]=10,[26025]=8,[26030]=27,
- [26035]=1800,[26038]=8,[26041]=10,[26042]=4,[26043]=30,[26044]=8,[26049]=8,
- [26050]=30,[26051]=8,[26053]=8,[26064]=12,[26068]=3600,[26069]=10,[26070]=8,
- [26071]=15,[26072]=12,[26077]=8,[26078]=30,[26079]=10,[26083]=15,[26099]=30,
- [26102]=5,[26108]=3,[26121]=8,[26129]=20,[26132]=8,[26136]=300,[26141]=10,
- [26143]=10,[26157]=1800,[26166]=30,[26168]=30,[26177]=4,[26178]=4,[26179]=4,
- [26180]=12,[26195]=20,[26196]=15,[26197]=20,[26198]=30,[26199]=1800,[26201]=4,
- [26211]=10,[26218]=3600,[26222]=1.5,[26226]=4,[26235]=45,[26258]=20,[26259]=12,
- [26260]=30,[26261]=30,[26263]=25,[26272]=1800,[26273]=1800,[26274]=1800,
- [26276]=1800,[26331]=20,[26332]=3.8,[26379]=6,[26381]=10,[26382]=3,[26386]=12,
- [26387]=1200,[26390]=10,[26393]=3600,[26400]=20,[26401]=30,[26402]=30,[26419]=10,
- [26462]=1800,[26463]=60,[26464]=60,[26467]=30,[26470]=8,[26472]=30,[26473]=30,
- [26474]=30,[26475]=30,[26480]=30,[26522]=1800,[26525]=20,[26527]=120,[26542]=10,
- [26548]=8,[26552]=8,[26556]=40,[26580]=8,[26592]=15,[26601]=10,[26613]=6,
- [26615]=3600,[26619]=45,[26634]=604800,[26635]=10,[26637]=1.7,[26641]=3,
- [26650]=0.1,[26651]=1,[26652]=10,[26662]=300,[26664]=3600,[26680]=3600,
- [26681]=3600,[26682]=3600,[26740]=20,[26787]=0.001,[26802]=3600,[26898]=3600,
- [26977]=60,[27039]=4,[27042]=4,[27177]=10,[27183]=300,[27192]=300,[27193]=300,
- [27194]=300,[27195]=300,[27196]=300,[27197]=300,[27198]=300,[27199]=300,
- [27200]=300,[27205]=4,[27208]=4,[27420]=3,[27499]=10,[27532]=12,[27533]=6,
- [27534]=6,[27535]=6,[27536]=6,[27538]=6,[27540]=6,[27543]=10,[27545]=10,
- [27551]=30,[27553]=2,[27555]=10,[27556]=15,[27559]=3,[27564]=5,[27565]=10,
- [27568]=604800,[27569]=604800,[27571]=120,[27572]=3600,[27575]=600,[27578]=120,
- [27579]=30,[27580]=10,[27581]=10,[27582]=30,[27584]=15,[27603]=8,[27605]=18,
- [27606]=15,[27607]=30,[27610]=8,[27615]=5,[27616]=600,[27619]=10,[27620]=4,
- [27633]=10,[27634]=3,[27636]=6,[27637]=21,[27638]=15,[27640]=3,[27641]=6,
- [27648]=12,[27652]=1800,[27653]=1800,[27664]=3600,[27665]=3600,[27666]=3600,
- [27669]=3600,[27670]=3600,[27671]=3600,[27672]=5,[27673]=30,[27675]=15,
- [27680]=600,[27681]=3600,[27683]=1200,[27685]=4,[27688]=300,[27689]=30,
- [27720]=3600,[27721]=3600,[27722]=3600,[27723]=3600,[27737]=12,[27758]=5,
- [27759]=30,[27760]=15,[27775]=10,[27779]=30,[27807]=20,[27808]=5,[27813]=6,
- [27814]=6,[27817]=6,[27818]=6,[27819]=5,[27825]=15,[27827]=10,[27828]=6,
- [27841]=1800,[27852]=0.1,[27857]=300,[27861]=2700,[27863]=600,[27864]=300,
- [27865]=60,[27868]=3,[27873]=10,[27874]=10,[27880]=3,[27891]=20,[27897]=600,
- [27965]=1,[27990]=4,[27991]=30,[27993]=12,[27994]=5,[27995]=20,[28007]=230,
- [28009]=180,[28011]=120,[28018]=7200,[28059]=60,[28084]=60,[28095]=3600,
- [28127]=8,[28131]=300,[28134]=10,[28137]=3,[28158]=60,[28169]=10,[28190]=30,
- [28200]=20,[28225]=300,[28270]=50,[28271]=50,[28272]=50,[28310]=8,[28311]=10,
- [28314]=3,[28315]=2,[28316]=3,[28323]=2,[28333]=2,[28334]=6,[28335]=2,[28342]=90,
- [28350]=7,[28362]=604800,[28371]=8,[28374]=3,[28391]=1,[28406]=8,[28409]=20,
- [28410]=20,[28412]=3,[28413]=8,[28418]=120,[28419]=120,[28420]=120,[28431]=9,
- [28434]=1,[28440]=6,[28445]=3,[28450]=0.1,[28456]=6,[28467]=15,[28478]=4,
- [28479]=4,[28498]=300,[28522]=25,[28531]=5,[28542]=12,[28608]=24,[28609]=30,
- [28610]=30,[28616]=30,[28618]=1,[28619]=2,[28620]=2,[28621]=2,[28622]=60,
- [28627]=55,[28679]=60,[28681]=1800,[28701]=20,[28725]=5,[28727]=30,[28732]=30,
- [28747]=600,[28750]=4,[28754]=15,[28757]=4,[28762]=8,[28765]=30,[28766]=30,
- [28768]=30,[28769]=30,[28770]=30,[28772]=30,[28773]=20,[28776]=30,[28777]=20,
- [28778]=20,[28779]=20,[28780]=30,[28785]=20,[28786]=6,[28790]=8,[28791]=8,
- [28793]=8,[28795]=8,[28796]=8,[28798]=1800,[28804]=30,[28810]=30,[28824]=8,
- [28825]=8,[28826]=8,[28827]=8,[28832]=75,[28833]=75,[28834]=75,[28835]=75,
- [28846]=5,[28858]=15,[28862]=20,[28866]=15,[28882]=8,[28911]=18,[28913]=10,
- [28969]=10,[28991]=10,[28995]=6,[29001]=3600,[29002]=3600,[29003]=3600,
- [29006]=1800,[29007]=30,[29008]=30,[29035]=15,[29038]=21,[29039]=21,[29040]=900,
- [29041]=30,[29042]=20,[29051]=60,[29055]=25,[29060]=20,[29061]=20,[29063]=6,
- [29073]=30,[29104]=5,[29124]=20,[29131]=10,[29134]=5,[29163]=5,[29164]=5,
- [29166]=20,[29168]=6,[29169]=10,[29175]=3600,[29177]=10,[29178]=10,[29183]=60,
- [29184]=60,[29185]=120,[29194]=120,[29195]=60,[29196]=120,[29197]=60,[29198]=120,
- [29199]=60,[29203]=15,[29204]=10,[29207]=1,[29208]=1,[29209]=1,[29210]=1,
- [29211]=1,[29212]=15,[29213]=10,[29214]=10,[29220]=300,[29228]=12,[29232]=90,
- [29233]=4,[29235]=3600,[29252]=5,[29261]=5,[29265]=5,[29270]=5,[29274]=1,
- [29296]=2,[29306]=60,[29325]=25,[29330]=25,[29331]=3600,[29332]=3600,
- [29333]=3600,[29334]=3600,[29335]=3600,[29338]=3600,[29350]=45,[29388]=12,
- [29407]=10,[29419]=10,[29432]=3600,[29484]=10,[29506]=20,[29530]=1,[29534]=1800,
- [29544]=8,[29602]=20,[29607]=0.001,[29685]=5,[29825]=30,[29846]=3600,[29848]=20,
- [29849]=8,[29851]=2,[29865]=12,[29871]=5,[29910]=1,[29915]=10,[29943]=8,
- [29998]=21,[30001]=8,[30002]=6,[30003]=7200,[30020]=10,[30080]=300,[30081]=300,
- [30082]=3,[30088]=3600,[30089]=3600,[30090]=3600,[30092]=8,[30094]=8,[30095]=8,
- [30109]=5,[30110]=604800,[30112]=2,[30113]=30,[30165]=10,[30167]=600,[30225]=8,
- [30238]=1800,[30285]=15,[30297]=1800,[30331]=7200,[30336]=7200,[30338]=7200,
- [30440]=30,[30441]=30,[30803]=10,[30804]=10,[30805]=10,[30806]=10,[30807]=10,
- [30918]=1,[31248]=1,[31316]=0.1,[31362]=1,[31466]=1,[31562]=6,[31800]=27,
- [301100]=3,[301101]=3,
-}
-
-lib:SetDataVersion(Type, Version)
\ No newline at end of file
diff --git a/localization.cn.lua b/localization.cn.lua
index 0f70c68..64b618d 100644
--- a/localization.cn.lua
+++ b/localization.cn.lua
@@ -15,8 +15,31 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "炼金术";
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "是的";
+SMARTBUFF_OFT_NO = "不";
+SMARTBUFF_OFT_OKAY = "继续"
+SMARTBUFF_OFT_PURGE_DATA = "您确定要重置所有 SmartBuff 数据吗?\n此操作将强制重新加载 UI!";
+SMARTBUFF_OFT_REQ_RELOAD = "新版本需要重新加载 GUI\n准备就绪后单击继续。";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "您正在使用装备好的钓鱼竿进行战斗。";
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " 已检测到,但自动切换跟踪已打开。 键入 /sbm 以查看选项并关闭个人跟踪或自动切换。";
+SMARTBUFF_TRACKINGDISABLE = "如果你有两个或更多收集能力,你将只能从这个功能中受益,该选项已被禁用。"
+SMARTBUFF_AUTOGATHERON = "自动曲目切换开启"
+SMARTBUFF_AUTOGATHEROFF = "自动跟踪关闭"
+SMARTBUFF_OFT_GATHERER = "汽车开关收集跟踪"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "在“寻找草药”、“寻找矿物质”和“寻找鱼”之间切换(如果可用并已选择)。"
+SMARTBUFF_OFTT_GATHERERFISH = "切换收集追踪器时包括“寻找鱼”。"
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "此版本的 Smartbuff 不适用于此客户端,请下载正确的版本。";
+
-- 德鲁伊
SMARTBUFF_DRUID_CAT = "猎豹形态";
@@ -266,7 +289,7 @@ SMARTBUFF_ELEMENTAL = "元素生物";
SMARTBUFF_DEMONTYPE = "小鬼";
-- 职业
-SMARTBUFF_CLASSES = {"德鲁伊", "猎人", "法师", "圣骑士", "牧师", "潜行者", "萨满祭司", "术士", "战士", "死亡骑士", "武僧", "恶魔猎手", "猎人宠物", "术士宠物", "Death Knight Pet", "Tank", "Healer", "Damage Dealer"};
+SMARTBUFF_CLASSES = {"德鲁伊", "猎人", "法师", "圣骑士", "牧师", "潜行者", "萨满祭司", "术士", "战士", "死亡骑士", "武僧", "恶魔猎手", "唤魔者", "猎人宠物", "术士宠物", "Death Knight Pet", "Tank", "Healer", "Damage Dealer"};
-- 模板和地图
SMARTBUFF_TEMPLATES = {"Solo", "组队", "团队", "战场", "卡拉赞", "祖阿曼", "地狱火堡垒", "盘牙水库", "奥金顿", "风暴要塞", "格鲁尔巢穴", "时光之穴", "黑暗神庙", "自定义 1", "自定义 2", "自定义 3"};
@@ -282,6 +305,11 @@ BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "设置窗口";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "重新设定BUFF定时器";
-- 设置窗口
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "修复 铸造"
+SMARTBUFF_OFTT_FIXBUFF = "如果施放 buff 失败,请勾选此选项。"
+
SMARTBUFF_OFT = "启用SmartBuff";
SMARTBUFF_OFT_MENU = "显示/隐藏配置菜单";
SMARTBUFF_OFT_AUTO = "提醒";
@@ -307,6 +335,7 @@ SMARTBUFF_OFT_MSGNORMAL = "正常";
SMARTBUFF_OFT_MSGWARNING = "警告";
SMARTBUFF_OFT_MSGERROR = "错误";
SMARTBUFF_OFT_HIDEMMBUTTON = "隐藏小地图按钮";
+SMARTBUFF_OFT_INCLUDETOYS = "展示玩具";
SMARTBUFF_OFT_REBUFFTIMER = "提醒时间";
SMARTBUFF_OFT_AUTOSWITCHTMP = "自动开启配置";
SMARTBUFF_OFT_SELFFIRST = "首选自身";
@@ -328,8 +357,6 @@ SMARTBUFF_OFT_COMPMODE = "兼容模式";
SMARTBUFF_OFT_MINIGRP = "迷你团队";
SMARTBUFF_OFT_ANTIDAZE = "自动切换守护";
SMARTBUFF_OFT_HIDESABUTTON = "隐藏动作按钮";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "在坐骑上发出警告";
-SMARTBUFF_OFTT_SOUNDSELECT = "选择所需的飞溅声.";
SMARTBUFF_OFT_INCOMBAT = "战斗中触发";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
@@ -348,6 +375,7 @@ SMARTBUFF_OFTT_ARULES = "设定以下情况不施法:法师、牧师和
SMARTBUFF_OFTT_SUBGRPCHANGED = "当你所在队伍发生变动后,自动开启Smartbuff配置窗口。";
SMARTBUFF_OFTT_GRPBUFFSIZE = "设定所在小队中玩家的BUFF消失的人数上限,来触发群体BUFF的施放。";
SMARTBUFF_OFTT_HIDEMMBUTTON = "隐藏小地图按钮。";
+SMARTBUFF_OFTT_INCLUDETOYS = "将玩具与您的咒语和食物一起列入清单。";
SMARTBUFF_OFTT_REBUFFTIMER = "设定当BUFF消失前多少秒,提示你重新施法。0 = 不提示";
SMARTBUFF_OFTT_SELFFIRST = "优先给自己施放BUFF。";
SMARTBUFF_OFTT_SCROLLWHEELUP = "当鼠标滚轴向上滚动时触发技能。";
@@ -368,10 +396,11 @@ SMARTBUFF_OFTT_MINIGRP = "用迷你团队模式显示合理化的团队框
SMARTBUFF_OFTT_ANTIDAZE = "当自己队伍中有成员晕眩时,自动取消猎豹守护/豹群守护。";
SMARTBUFF_OFTT_SPLASHSTYLE = "改变BUFF提示信息的字体。";
SMARTBUFF_OFTT_HIDESABUTTON = "隐藏SmartBuff动作按钮。";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "在坐骑时检查并警告丢失的增益。";
SMARTBUFF_OFTT_INCOMBAT = "目前只能用于你自己身上。\n你设定的第一个战斗中可释放的BUFF将在战斗前放置到动作按钮上,\n因此你可以在战斗中施放这个法术。\n警告:战斗中所有逻辑判断都将不可用!";
SMARTBUFF_OFTT_SMARTDEBUFF = "显示SmartDebuff窗口。";
SMARTBUFF_OFTT_SPLASHDURATION= "设定多少秒后提示信息消失。";
+SMARTBUFF_OFTT_SOUNDSELECT = "选择所需的飞溅声.";
+
-- BUFF设置内容
SMARTBUFF_BST_SELFONLY = "仅对自身施法";
@@ -398,7 +427,7 @@ SMARTBUFF_BSTT_MANALIMIT = "当魔法值/怒气值/能量值低于你设置
SMARTBUFF_PSTT_RESIZE = "最小化/最大化\n主设置窗口";
-- 命令行信息提示内容
-SMARTBUFF_MSG_LOADED = "已加载";
+SMARTBUFF_MSG_LOADED = "初始化! - 请在我的 Discord 上报告任何问题 |cffffff00discord.gg/R6EkZ94TKK|cffffffff 以获得更好的支持。";
SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff 有可用的新版本,您正在使用 |cffFFFF00";
SMARTBUFF_MSG_NEWVER2 = "|cffffffff 和修订 |cffFFFF00r"
SMARTBUFF_MSG_NEWVER3 = "|cffffffff 目前可供下载。 加入 Discord 以获取所有最新信息: https://discord.gg/R6EkZ94TKK.";
@@ -425,9 +454,9 @@ SMARTBUFF_MSG_CHARGES = "次数";
SMARTBUFF_MSG_SOUNDS = "飞溅声音选择: "
-- Support
-SMARTBUFF_MINIMAP_TT = "左键:选项菜单\n右键:开/关\nAlt+左键:SmartDebuff\n按Shift拖拽:移动按钮";
-SMARTBUFF_TITAN_TT = "左键:选项菜单\n右键:开/关\nAlt+左键:SmartDebuff";
-SMARTBUFF_FUBAR_TT = "左键:选项菜单\n右键:开/关\nAlt+左键:SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪\nShift 拖动:移动按钮";
+SMARTBUFF_TITAN_TT = "鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪";
+SMARTBUFF_FUBAR_TT = "\n鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪";
SMARTBUFF_DEBUFF_TT = "按Shift和左键拖拽:移动窗口\n|cff20d2ff- S按钮 -|r\n左键:按职业显示\nShift和左键:职业颜色\nAlt和左键:高亮左/右\n|cff20d2ff- P按钮 -|r\n左键:开/关隐藏宠物";
diff --git a/localization.de.lua b/localization.de.lua
index c465bbf..a81d9b4 100644
--- a/localization.de.lua
+++ b/localization.de.lua
@@ -4,7 +4,7 @@
if (GetLocale() == "deDE") then
--- addon credits
+-- credits
SMARTBUFF_CREDITS = "|cffffffff"
.."Classic-Version von Codermik. Bitte melde alle Probleme auf CurseForge oder meinem Discord unter:\n\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
@@ -14,9 +14,6 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "Alchemie";
-
-- Weapon types
SMARTBUFF_WEAPON_STANDARD = {"Dolche", "äxte", "schwerter", "streitkolben", "Stäbe", "Faustwaffen", "Stangenwaffen", "Wurfwaffe"};
SMARTBUFF_WEAPON_BLUNT = {"streitkolben", "Faustwaffen", "Stäbe"};
@@ -33,7 +30,7 @@ SMARTBUFF_DEMONTYPE = "Wichtel";
SMARTBUFF_UNDEAD = "Untot";
-- Classes
-SMARTBUFF_CLASSES = {"Druide", "Jäger", "Magier", "Paladin", "Priester", "Schurke", "Schamane", "Hexenmeister", "Krieger", "Todesritter", "Mönch", "Dämonenjäger", "Jäger Pet", "Hexer Pet", "Todesritter Pet", "Tank", "Heiler", "Schadensverursacher"};
+SMARTBUFF_CLASSES = {"Druide", "Jäger", "Magier", "Paladin", "Priester", "Schurke", "Schamane", "Hexenmeister", "Krieger", "Todesritter", "Mönch", "Dämonenjäger", "Evoker", "Jäger Pet", "Hexer Pet", "Todesritter Pet", "Tank", "Heiler", "Schadensverursacher"};
-- Templates and Instances
SMARTBUFF_TEMPLATES = {"Solo", "Gruppe", "Raid", "Schlachtfeld", "Arena", "ICC", "PDK", "Ulduar", "MC", "Ony", "BWL", "Naxx", "AQ", "ZG", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
@@ -51,7 +48,39 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "Ziel";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "Optionen";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "Buff Timer löschen";
+
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "Ja";
+SMARTBUFF_OFT_NO = "NEIN";
+SMARTBUFF_OFT_OKAY = "Neu laden"
+SMARTBUFF_OFT_PURGE_DATA = "Sind Sie sicher, dass Sie ALLE SmartBuff-Daten zurücksetzen möchten?\nDiese Aktion erzwingt ein Neuladen der Benutzeroberfläche!";
+SMARTBUFF_OFT_REQ_RELOAD = "Neue Versionen erfordern ein Neuladen der GUI\nKlicke um Fortzufahren";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "Sie befinden sich mit ausgerüsteter Angelrute im Kampf.";
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " wurde erkannt, aber die automatische Umschaltverfolgung ist aktiviert. Geben Sie /sbm ein, um Optionen anzuzeigen und die individuelle Nachverfolgung oder automatische Umschaltung zu deaktivieren.";
+SMARTBUFF_TRACKINGDISABLE = "Sie profitieren von dieser Funktion nur, wenn Sie über zwei oder mehr Sammelfähigkeiten verfügen. Die Option wurde deaktiviert."
+SMARTBUFF_AUTOGATHERON = "Die automatische Umschaltung ist eingeschaltet"
+SMARTBUFF_AUTOGATHEROFF = "Die automatische Umschaltung ist AUS"
+SMARTBUFF_OFT_GATHERER = "Automatischer Wechsel von Sammel-Trackern"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "Wechselt zwischen „Kräuter suchen“, „Mineralien suchen“ und „Fisch suchen“ (falls verfügbar und ausgewählt)."
+SMARTBUFF_OFTT_GATHERERFISH = "Schließen Sie „Fische finden“ ein, wenn Sie durch Gathering Trackers wechseln."
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "Diese Version von Smartbuff ist nicht für diesen Client gedacht. Bitte laden Sie die richtige Version herunter.";
+
+
-- Options Frame Text
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "Gießen reparieren"
+SMARTBUFF_OFTT_FIXBUFF = "Ankreuzen, wenn Smartbuff keine Buffs wirkt."
+
SMARTBUFF_OFT = "SmartBuff An/Aus";
SMARTBUFF_OFT_MENU = "Zeige/verberge Optionen Menü";
SMARTBUFF_OFT_AUTO = "Erinnerung";
@@ -77,6 +106,7 @@ SMARTBUFF_OFT_MSGNORMAL = "Normal";
SMARTBUFF_OFT_MSGWARNING = "Warnung";
SMARTBUFF_OFT_MSGERROR = "Fehler";
SMARTBUFF_OFT_HIDEMMBUTTON = "Verberge Minimap-Knopf";
+SMARTBUFF_OFT_INCLUDETOYS = "Spielzeug einbeziehen";
SMARTBUFF_OFT_REBUFFTIMER = "Rebuff Timer";
SMARTBUFF_OFT_AUTOSWITCHTMP = "Vorlagenwechsel";
SMARTBUFF_OFT_SELFFIRST = "Mich zuerst";
@@ -95,8 +125,7 @@ SMARTBUFF_OFT_COMPMODE = "Komp. Modus";
SMARTBUFF_OFT_MINIGRP = "Mini Gruppe";
SMARTBUFF_OFT_ANTIDAZE = "Anti-Daze";
SMARTBUFF_OFT_HIDESABUTTON = "Verberge Action-Knopf";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "Warnen, während montiert";
-SMARTBUFF_OFT_INCOMBAT = "Bufft im Kampf";
+SMARTBUFF_OFT_INCOMBAT = "im Kampf";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "Verwandelt";
SMARTBUFF_OFT_LINKGRPBUFFCHECK = "Grp Link";
@@ -124,6 +153,7 @@ SMARTBUFF_OFTT_ARULES = "Bufft nicht:\n- Dornen auf Magier, Priester und
SMARTBUFF_OFTT_SUBGRPCHANGED = "Öffnet automatisch das SmartBuff Menü,\nwenn du die Sub-Gruppe gewechselt hast.";
SMARTBUFF_OFTT_GRPBUFFSIZE = "Anzahl Spieler die in der Gruppe/Raid sein\nmüssen und den Gruppen-Buff nicht haben,\ndamit der Gruppen-Buff verwendet wird.";
SMARTBUFF_OFTT_HIDEMMBUTTON = "Verbirgt den SmartBuff Minimap-Knopf.";
+SMARTBUFF_OFTT_INCLUDETOYS = "Fügen Sie neben Ihren Zaubersprüchen und Lebensmitteln auch Spielzeuge in die Liste ein.";
SMARTBUFF_OFTT_REBUFFTIMER = "Wieviele Sekunden vor Ablauf der Buffs,\nsoll daran erinnert werden.\n0 = Deaktivert";
SMARTBUFF_OFTT_SELFFIRST = "Bufft den eigenen Charakter immer zuerst.";
SMARTBUFF_OFTT_SCROLLWHEELUP = "Bufft beim Bewegen des Scrollrads nach vorne.";
@@ -142,14 +172,13 @@ SMARTBUFF_OFTT_MINIGRP = "Zeigt die Raid-Subgruppen Einstellungen in einem
SMARTBUFF_OFTT_ANTIDAZE = "Bricht automatisch den\nAspekt des Geparden/Rudels ab,\nwenn jemand betäubt wird\n(Selbst oder Gruppe).";
SMARTBUFF_OFTT_SPLASHSTYLE = "Wechselt die Schriftart\nder Buff-Meldungen.";
SMARTBUFF_OFTT_HIDESABUTTON = "Verbirgt den SmartBuff Action-Knopf.";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "Überprüfen und warnen Sie vor fehlenden Buffs, während Sie auf einem Reittier sind.";
-SMARTBUFF_OFTT_SOUNDSELECT = "Wählen Sie den gewünschten Splash.";
SMARTBUFF_OFTT_INCOMBAT = "Funktioniert nur auf dich selbst.\nDer erste Buff, welcher als 'im Kampf'\ngesetzt ist, wird verwendet\nund kann im Kampf benutzt werden.\n!!! Achtung !!!\nSämtliche Buff-Logik ist inaktiv im Kampf!";
SMARTBUFF_OFTT_SMARTDEBUFF = "Zeigt das SmartDebuff Fenster.";
SMARTBUFF_OFTT_SPLASHDURATION= "Wieviele Sekunden die Splash Meldung angezeigt wird,\nbevor sie ausgeblendet wird.";
SMARTBUFF_OFTT_INSHAPESHIFT = "Bufft auch wenn du\nverwandelt bist.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "Prüft ob schon ein Buff\nmit gleichem Effekt von einer\nanderen Klasse aktiv ist.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "Prüft ob ein Eigen-Buff\naktiv ist, von welchen jeweils\nnur einer aktiv sein kann.";
+SMARTBUFF_OFTT_SOUNDSELECT = "Wählen Sie den gewünschten Splash.";
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "Nur mich";
@@ -178,10 +207,10 @@ SMARTBUFF_BSTT_MANALIMIT = "Mana/Wut/Energie Grenzwert\nWenn du unter diesen
SMARTBUFF_PSTT_RESIZE = "Minimiert/Maximiert\ndas Optionenfenster";
-- Messages
-SMARTBUFF_MSG_LOADED = "geladen. Classic von Codermik - bitte alle gefundenen Fehler melden.";
-SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Es ist eine neue Version verfügbar, Sie verwenden |cffFFFF00";
+SMARTBUFF_MSG_LOADED = "geladen! - Bitte melden Sie alle Probleme auf Curse oder treten Sie Discord bei |cffffff00discord.gg/R6EkZ94TKK|cffffffff für eine verbesserte Unterstützung.";
+SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Es ist eine neue Version verfügbar. Du benutzt |cffFFFF00";
SMARTBUFF_MSG_NEWVER2 = "|cffffffff und Überarbeitung |cffFFFF00r"
-SMARTBUFF_MSG_NEWVER3 = "|cffffffff ist derzeit zum Download verfügbar. Treten Sie Discord bei, um alle aktuellen Informationen zu erhalten unter https://discord.gg/R6EkZ94TKK.";
+SMARTBUFF_MSG_NEWVER3 = "|cffffffff steht aktuell zum Download bereit. Tritt Discord bei, um die neuesten Informationen zu erhalten https://discord.gg/R6EkZ94TKK.";
SMARTBUFF_MSG_DISABLED = "SmartBuff ist deaktiviert!";
SMARTBUFF_MSG_SUBGROUP = "Du hast die Subgruppe gewechselt, bitte überprüfe die Einstellungen!";
SMARTBUFF_MSG_NOTHINGTODO = "Nichts zu buffen";
@@ -206,9 +235,9 @@ SMARTBUFF_MSG_SOUNDS = "Splash-Sound-Auswahl: "
SMARTBUFF_MSG_SPECCHANGED = "Spec gewechselt (%s), lade Buff-Vorlagen...";
-- Support
-SMARTBUFF_MINIMAP_TT = "Links Klick: Optionen Menü\nRechts Klick: An/Aus\nAlt-Links Klick: SmartDebuff\nShift-Ziehen: Knopf verschieben";
-SMARTBUFF_TITAN_TT = "Links Klick: Optionen Menü\nRechts Klick: An/Aus\nAlt-Links Klick: SmartDebuff";
-SMARTBUFF_FUBAR_TT = "\nLinks Klick: Optionen Menü\nShift-Links Klick: An/Aus\nAlt-Links Klick: SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "Linke Maustaste für Optionen\nRechte Maustaste zum Ein-/Ausschalten\nAlt-Links-Maustaste zum Umschalten der automatischen Verfolgung\nUmschalttaste ziehen: Schaltfläche „Verschieben“.";
+SMARTBUFF_TITAN_TT = "Linke Maustaste für Optionen\nRechte Maustaste zum Ein-/Ausschalten\nAlt-Links-Maustaste zum Umschalten der automatischen Verfolgung";
+SMARTBUFF_FUBAR_TT = "\nLinke Maustaste für Optionen\nRechte Maustaste zum Ein-/Ausschalten\nAlt-Links-Maustaste zum Umschalten der automatischen Verfolgung";
SMARTBUFF_DEBUFF_TT = "Shift-Links ziehen: Fenster verschieben\n|cff20d2ff- S Knopf -|r\nLinks Klick: Ordne nach Klassen\nShift-Links Klick: Klassen-Farben\nAlt-Links Klick: Zeige L/R\n|cff20d2ff- P Knopf -|r\nLinks Klick: Verberge Pets";
diff --git a/localization.en.lua b/localization.en.lua
index 6595398..4947245 100644
--- a/localization.en.lua
+++ b/localization.en.lua
@@ -3,44 +3,39 @@
-------------------------------------------------------------------------------
-- Whats new info
-SMARTBUFF_WHATSNEW = "\n\n|cffffffff Whats new:|r\n\n"
- .." |cffffffffClassic version by Codermik\n"
- .." Please report any issues on Curse or Discord.|r\n\n\n"
- .." Changes in r40:\n\n"
- .." * Fixed LUA errors caused by recent API changes \n"
- .." in client 30401.\n\n\n\n"
- .." Note that this is a quick fix to get addon working,\n"
- .." there are additional fixes incoming later today or\n"
- .." tomorrow.. please be patient.\n"
+SMARTBUFF_WHATSNEW = "\n\n|cffffffff Whats new:|r\n\n"
+ .." |cffffffffClassic version by Codermik, additional coding\n"
+ .." by Speedwaystar.|cff00e0ff\n\n\n"
+ .." Changes in r41.200523:\n\n"
+ .." * Classic versions now use the codebase from the\n"
+ .." retail version with other additional changes to\n"
+ .." correctly work under this client.\n\n"
+ .." * Added prompt to do a GUI reload when new versions\n"
+ .." release to ensure addon is initialised correctly.\n\n"
+ .." * Added support for a mage's conjured food, water\n"
+ .." and their mana gems.\n\n"
+ .." * Added support for hunters revive pet.\n\n"
+ .." * Added more missing food and consumables, please\n"
+ .." report if you find anything not showing up.\n\n"
+ .." * Added automatic gathering switcher toggled by\n"
+ .." alt-left clicking minimap icon or in options.\n\n"
.."\n"
.." |c0000FF96Many thanks to Chris S., Samantha R. and\n"
- .." Twilight's Sundries for their kind donations.\n\n\n"
- .." |cffffffffIf you appreciate my work on the various addons\n"
- .." for wow then please consider supporting me, you\n"
- .." can do this several ways which include:\n\n"
- .." |cffffffffPatreon: |cff00e0ffhttps://www.patreon.com/codermik\n"
- .." |cffffffffTwitch: |cff00e0ffhttps://www.twitch.tv/codermik\n"
- .." |cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n\n"
-
- .." |cff00e0ffHuge thanks to Aeldra for creating the original\n"
- .." addon and the framework for this working release.\n\n"
+ .." Twilight's Sundries for their kind donations.\n"
+ .."\n\n"
;
--- addon credits
SMARTBUFF_CREDITS = "|cffffffff"
- .."Classic version by Codermik. Please report any issues on CurseForge or my discord at:\n\n"
+ .."Retail & Classic by Codermik & Speedwaystar. Please join to get support on our discord server:\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
- .."|cffffffffIf you appreciate the amount of work involved and the time taken to bring you these various addons please consider supporting me by:\n\n"
+ .."|cffffffffIf you want to help support us and the development of this addon then please always download from Curse or use one of the following links:\n\n(We only ever upload to Curseforge)\n\n"
.."|cffffffffPatreon: |cff00e0ffhttps://www.patreon.com/codermik\n"
.."|cffffffffTwitch: |cff00e0ffhttps://www.twitch.tv/codermik\n"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "Alchemy";
-
-- Weapon types
-SMARTBUFF_WEAPON_STANDARD = {"Daggers", "Axes", "Swords", "Maces", "Staves", "Fist Weapons", "Polearms", "Thrown"};
+SMARTBUFF_WEAPON_STANDARD = {"Daggers", "Axes", "Swords", "Maces", "Staves", "Fist Weapons", "Polearms", "Thrown", "Crossbows", "Bows"};
SMARTBUFF_WEAPON_BLUNT = {"Maces", "Staves", "Fist Weapons"};
SMARTBUFF_WEAPON_BLUNT_PATTERN = "Weightstone$";
SMARTBUFF_WEAPON_SHARP = {"Daggers", "Axes", "Swords", "Polearms"};
@@ -55,11 +50,13 @@ SMARTBUFF_DEMONTYPE = "Imp";
SMARTBUFF_UNDEAD = "Undead";
-- Classes
-SMARTBUFF_CLASSES = {"Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlock", "Warrior", "Death Knight", "Monk", "Demon Hunter", "Hunter Pet", "Warlock Pet", "Death Knight Pet", "Tank", "Healer", "Damage Dealer"};
+SMARTBUFF_CLASSES = {"Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlock", "Warrior", "Death Knight", "Monk", "Demon Hunter", "Evoker", "Hunter Pet", "Warlock Pet", "Death Knight Pet", "Tank", "Healer", "Damage Dealer"};
-- Templates and Instances
-SMARTBUFF_TEMPLATES = {"Solo", "Party", "Raid", "Battleground", "Arena", "ICC", "TOC", "Ulduar", "MC", "Ony", "BWL", "Naxx", "AQ", "ZG", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
-SMARTBUFF_INSTANCES = {"Icecrown Citadel", "Trial of the Crusader", "Ulduar", "Molten Core", "Onyxia's Lair", "Blackwing Lair", "Naxxramas", "Ahn'Qiraj", "Zul'Gurub"};
+--SMARTBUFF_TEMPLATES = {"Solo", "Party", "LFR", "Raid", "Mythic Keystone", "Battleground", "Arena", "Castle Nathria", "Sanctum of Domination", "Sepulcher of the First Ones", "Vault of the Incarnates", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
+--SMARTBUFF_INSTANCES = {"Castle Nathria", "Sanctum of Domination", "Sepulcher of the First Ones", "Vault of the Incarnates"};
+SMARTBUFF_TEMPLATES = {"Solo", "Party", "Raid", "Battleground", "Arena", "ICC", "TOC", "Ulduar", "Ony", "Naxx", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
+SMARTBUFF_INSTANCES = {"Icecrown Citadel", "Trial of the Crusader", "Ulduar", "Onyxia's Lair", "Naxxramas"};
-- Mount
SMARTBUFF_MOUNT = "Increases speed by (%d+)%%.";
@@ -73,7 +70,28 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "Target";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "Option menu";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "Reset buff timers";
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "This version of Smartbuff is not intended for this client, please download the correct version.";
+
-- Options Frame Text
+
+-- Fix casting.
+SMARTBUFF_OFT_FIXBUFF = "Fix Casting"
+SMARTBUFF_OFTT_FIXBUFF = "Only tick this option if Smartbuff is failing to cast buffs while using the\nscroll mouse, action button or macro. Combat buffing will not work with\nthis setting active but you will be notified its missing for manual buffing."
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " has been detected but the auto switch find herbs, minerals and fish is turned on in the options. type /sbm to open options and either turn off the individual trackers or the automatic switching.";
+SMARTBUFF_TRACKINGDISABLE = "You will only get benefit from this feature if you have 2 or more gathering tracking abilities, option has been disabled."
+SMARTBUFF_AUTOGATHERON = "Automatic gathering switch is ON"
+SMARTBUFF_AUTOGATHEROFF = "Automatic gathering switch is OFF"
+SMARTBUFF_OFT_GATHERER = "Auto Switch Gathering Trackers"
+SMARTBUFF_OFT_FINDFISH = "Find Fish"
+SMARTBUFF_OFT_MINERALS = "Find Minerals"
+SMARTBUFF_OFT_HERBS = "Find Herbs"
+SMARTBUFF_OFTT_GATHERER = "Switches through your Find Herbs, Find Minerals and Find Fish (if available and selected)."
+SMARTBUFF_OFTT_GATHERERFISH = "Include Find Fish when switching through Gathering Trackers."
+
+
SMARTBUFF_OFT = "SmartBuff On/Off";
SMARTBUFF_OFT_MENU = "Show/hide options menu";
SMARTBUFF_OFT_AUTO = "Reminder";
@@ -96,6 +114,7 @@ SMARTBUFF_OFT_MSGNORMAL = "normal";
SMARTBUFF_OFT_MSGWARNING = "warning";
SMARTBUFF_OFT_MSGERROR = "error";
SMARTBUFF_OFT_HIDEMMBUTTON = "Hide minimap button";
+SMARTBUFF_OFT_INCLUDETOYS = "Include toys";
SMARTBUFF_OFT_REBUFFTIMER = "Rebuff Timer";
SMARTBUFF_OFT_AUTOSWITCHTMP = "Switch template";
SMARTBUFF_OFT_SELFFIRST = "Self first";
@@ -111,8 +130,7 @@ SMARTBUFF_OFT_BUFFINCITIES = "Buff in cities";
SMARTBUFF_OFT_BLDURATION = "Blacklisted";
SMARTBUFF_OFT_ANTIDAZE = "Anti daze";
SMARTBUFF_OFT_HIDESABUTTON = "Hide action button";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "Warn while mounted";
-SMARTBUFF_OFT_INCOMBAT = "Buff in combat";
+SMARTBUFF_OFT_INCOMBAT = "in combat";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "Shapeshift";
SMARTBUFF_OFT_LINKGRPBUFFCHECK = "Grp link";
@@ -121,12 +139,15 @@ SMARTBUFF_OFT_RESETALL = "Reset All";
SMARTBUFF_OFT_RESETLIST = "Reset List";
SMARTBUFF_OFT_YES = "Yes";
SMARTBUFF_OFT_NO = "No";
+SMARTBUFF_OFT_OKAY = "Continue"
SMARTBUFF_OFT_PURGE_DATA = "Are you sure you want to reset ALL SmartBuff data?\nThis action will force a reload of the UI!";
+SMARTBUFF_OFT_REQ_RELOAD = "New versions require a reload of the GUI\nClick Continue when ready.";
SMARTBUFF_OFT_SPLASHICON = "Show Icon";
SMARTBUFF_OFT_SPLASHMSGSHORT = "Short Message";
SMARTBUFF_OFT_FONTSTYLE = "Font";
SMARTBUFF_OFT_FONTSIZE = "Font Size";
SMARTBUFF_OFT_ICONSIZE = "Icon Size";
+SMARTBUFF_OFT_FRODWARN = "You are in combat with your fishing rod equipped.";
-- Options Frame Tooltip Text
@@ -142,6 +163,7 @@ SMARTBUFF_OFTT_HUNTERPETS = "Buff the Hunter pets as well.";
SMARTBUFF_OFTT_WARLOCKPETS = "Buff the Warlock pets as well, except the " .. SMARTBUFF_DEMONTYPE .. ".";
SMARTBUFF_OFTT_ARULES = "Does not cast:\n- Thorns on Mages, Priests and Warlocks\n- Arcane Intellect on units without Mana\n- Divine Spirit on units without Mana";
SMARTBUFF_OFTT_HIDEMMBUTTON = "Hides the SmartBuff minimap button.";
+SMARTBUFF_OFTT_INCLUDETOYS = "Include toys in the list alongside your spells and food.";
SMARTBUFF_OFTT_REBUFFTIMER = "How many seconds before a buff expires,\nthe reminder should alert you.\n0 = Deactivated";
SMARTBUFF_OFTT_SELFFIRST = "Buffs your character first of all others.";
SMARTBUFF_OFTT_SCROLLWHEELUP = "Cast buffs when you roll your\nscrollwheel forward.";
@@ -157,18 +179,17 @@ SMARTBUFF_OFTT_BLDURATION = "How many seconds, players will be blacklisted.\n
SMARTBUFF_OFTT_ANTIDAZE = "Automatically cancels the\naspect of the cheetah/pack\nif someone gets dazed\n(self or group).";
SMARTBUFF_OFTT_SPLASHSTYLE = "Changes the fontstyle of\nthe buff messages.";
SMARTBUFF_OFTT_HIDESABUTTON = "Hides the SmartBuff action button.";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "Check and warn for missing buffs while you are mounted.";
-SMARTBUFF_OFTT_SOUNDSELECT = "Select the required splash sound.";
SMARTBUFF_OFTT_INCOMBAT = "At the moment it only works on yourself.\nThe first buff you mark as in combat,\nwill set on the button before combat\nand you can use it in combat.\n!!! Warning !!!\nAll logic is disabled in combat!";
SMARTBUFF_OFTT_SMARTDEBUFF = "Shows the SmartDebuff frame.";
SMARTBUFF_OFTT_SPLASHDURATION= "How many seconds the splash\nmessage will displayed,\nbefore it fades.";
SMARTBUFF_OFTT_INSHAPESHIFT = "Cast buffs also if you\nare shapeshifted.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "Checks if a buff of an other\nclass with similar effect\nis already active.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "Checks if a self buff is active,\nwhose only one can be\nactive at a time.";
+SMARTBUFF_OFTT_SOUNDSELECT = "Select the required splash sound.";
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "Myself only";
-SMARTBUFF_BST_SELFNOT = "Not myself";
+SMARTBUFF_BST_SELFNOT = "Myself not";
SMARTBUFF_BST_COMBATIN = "In combat";
SMARTBUFF_BST_COMBATOUT = "Out of combat";
SMARTBUFF_BST_MAINHAND = "Main Hand";
@@ -193,7 +214,7 @@ SMARTBUFF_BSTT_MANALIMIT = "Mana/Rage/Energy threshold\nIf you are below thi
SMARTBUFF_PSTT_RESIZE = "Minimize/maximize\nthe main options frame";
-- Messages
-SMARTBUFF_MSG_LOADED = "loaded! - Classic version by Codermik - please report any errors found.";
+SMARTBUFF_MSG_LOADED = "loaded! - Please report any problems on Curse or join discord at |cffffff00discord.gg/R6EkZ94TKK|cffffffff for improved support.";
SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff There is a new version available, you are using |cffFFFF00";
SMARTBUFF_MSG_NEWVER2 = "|cffffffff and revision |cffFFFF00r"
SMARTBUFF_MSG_NEWVER3 = "|cffffffff is currently available for download. Join Discord for all the latest information at https://discord.gg/R6EkZ94TKK.";
@@ -206,7 +227,7 @@ SMARTBUFF_MSG_OOR = "is out of range to buff!";
SMARTBUFF_MSG_CD = "Global cooldown!";
SMARTBUFF_MSG_CHAT = "not possible in chat mode!";
SMARTBUFF_MSG_SHAPESHIFT = "Casting is not allowed in shapeshift form!";
-SMARTBUFF_MSG_NOACTIONSLOT = "needs a slot in an actionbar to work properly!";
+SMARTBUFF_MSG_NOACTIONSLOT = "needs a slot in an actionbar to working properly!";
SMARTBUFF_MSG_GROUP = "Group";
SMARTBUFF_MSG_NEEDS = "needs";
SMARTBUFF_MSG_OOM = "Not enough mana/rage/energy!";
@@ -221,24 +242,24 @@ SMARTBUFF_MSG_SOUNDS = "Splash Sound Selection: "
SMARTBUFF_MSG_SPECCHANGED = "Spec changed (%s), loading buff templates...";
-- Support
-SMARTBUFF_MINIMAP_TT = "Left click: options menu\nRight click: On/Off\nAlt-Left Click: SmartDebuff\nShift drag: Move button";
-SMARTBUFF_TITAN_TT = "Left Click: Open options\nRight Click: On/Off\nAlt-Left Click: SmartDebuff";
-SMARTBUFF_FUBAR_TT = "\nLeft Click: Open options\nShift-Left Click: On/Off\nAlt-Left Click: SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "Left mouse for options\nRight mouse to toggle On/Off\nAlt-Left mouse to toggle auto tracking\nShift drag: Move button";
+SMARTBUFF_TITAN_TT = "Left mouse for options\nRight mouse to toggle On/Off\nAlt-Left mouse to toggle auto tracking";
+SMARTBUFF_FUBAR_TT = "\nLeft mouse for options\nRight mouse to toggle On/Off\nAlt-Left mouse to toggle auto tracking";
SMARTBUFF_DEBUFF_TT = "Shift-Left drag: Move frame\n|cff20d2ff- S button -|r\nLeft click: Show by classes\nShift-Left click: Class colors\nAlt-Left click: Highlight L/R\n|cff20d2ff- P button -|r\nLeft click: Hide pets on/off";
-- Code table
--- : \195\160 : \195\168 : \195\172 : \195\178 : \195\185
--- : \195\161 : \195\169 : \195\173 : \195\179 : \195\186
--- : \195\162 : \195\170 : \195\174 : \195\180 : \195\187
--- : \195\163 : \195\171 : \195\175 : \195\181 : \195\188
--- : \195\164 : \195\177 : \195\182
--- : \195\166 : \195\184
--- : \195\167 : \197\147
---
--- : \195\132
--- : \195\150
--- : \195\156
--- : \195\159
+-- à : \195\160 è : \195\168 ì : \195\172 ò : \195\178 ù : \195\185
+-- á : \195\161 é : \195\169 í : \195\173 ó : \195\179 ú : \195\186
+-- â : \195\162 ê : \195\170 î : \195\174 ô : \195\180 û : \195\187
+-- ã : \195\163 ë : \195\171 ï : \195\175 õ : \195\181 ü : \195\188
+-- ä : \195\164 ñ : \195\177 ö : \195\182
+-- æ : \195\166 ø : \195\184
+-- ç : \195\167 : \197\147
+--
+-- Ä : \195\132
+-- Ö : \195\150
+-- Ü : \195\156
+-- ß : \195\159
diff --git a/localization.es.lua b/localization.es.lua
index 44ef9bc..5dd1452 100644
--- a/localization.es.lua
+++ b/localization.es.lua
@@ -5,7 +5,7 @@
if (GetLocale() == "esES") then
--- addon credits
+-- credits
SMARTBUFF_CREDITS = "|cffffffff"
.."Versin de Classic por Codermik. Informe cualquier problema en CurseForge o mi discordia en:\n\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
@@ -15,9 +15,6 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "Alquimia";
-
-- Weapon types
SMARTBUFF_WEAPON_STANDARD = {"Dagas", "Hachas", "Espadas", "Mazas", "Bastones", "Armas de pu\195\177o", "Lanzas", "Arma arrojadiza"};
SMARTBUFF_WEAPON_BLUNT = {"Mazas", "Bastones", "Armas de pu\195\177o"};
@@ -34,7 +31,7 @@ SMARTBUFF_DEMONTYPE = "Diablillo";
SMARTBUFF_UNDEAD = "No-muerto";
-- Classes
-SMARTBUFF_CLASSES = {"Druida", "Cazador", "Mago", "Palad\195\173n", "Sacerdote", "P\195\173caro", "Cham\195\161n", "Brujo", "Guerrero", "Caballero de la Muerte", "Monje", "Cazador de demonios", "Mascota de cazador", "Mascota de brujo", "Mascota de caballero de la Muerte", "Tanque", "Sanador", "Infligir da\195\177o"};
+SMARTBUFF_CLASSES = {"Druida", "Cazador", "Mago", "Palad\195\173n", "Sacerdote", "P\195\173caro", "Cham\195\161n", "Brujo", "Guerrero", "Caballero de la Muerte", "Monje", "Cazador de demonios", "Evoker", "Mascota de cazador", "Mascota de brujo", "Mascota de caballero de la Muerte", "Tanque", "Sanador", "Infligir da\195\177o"};
-- Templates and Instances
SMARTBUFF_TEMPLATES = {"Solo", "Grupo", "Banda", "Campos de batalla", "Arena", "CCH", "PdC", "Ulduar", "MC", "Ony", "BWL", "Naxx", "AQ", "ZG", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
@@ -49,7 +46,38 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "Objetivo";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "Men\195\186 de opciones";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "Restaurar temporizador de buffs";
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "S";
+SMARTBUFF_OFT_NO = "No";
+SMARTBUFF_OFT_OKAY = "Continuar"
+SMARTBUFF_OFT_PURGE_DATA = "Est seguro de que desea restablecer TODOS los datos de SmartBuff?\nEsta accin forzar una recarga de la interfaz de usuario!";
+SMARTBUFF_OFT_REQ_RELOAD = "Las nuevas versiones requieren una recarga de la GUI\nHaga clic en Continuar cuando est lista.";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "Ests en combate con tu caa de pescar equipada.";
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " ha sido detectado pero el seguimiento de cambio automtico est activado. Escriba /sbm para ver las opciones y desactivar el seguimiento individual o el cambio automtico.";
+SMARTBUFF_TRACKINGDISABLE = "Solo se beneficiar de esta funcin si tiene dos o ms habilidades de recoleccin, la opcin ha sido deshabilitada."
+SMARTBUFF_AUTOGATHERON = "El seguimiento automtico est activado"
+SMARTBUFF_AUTOGATHEROFF = "El seguimiento automtico est desactivado"
+SMARTBUFF_OFT_GATHERER = "Rastreadores de recopilacin de cambios automticos"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "Cambia entre Buscar hierbas, Buscar minerales y Buscar pescado (si est disponible y seleccionado)."
+SMARTBUFF_OFTT_GATHERERFISH = "Incluya Find Fish cuando cambie a travs de Gathering Trackers."
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "Esta versin de Smartbuff no est diseada para este cliente, descargue la versin correcta.";
+
+
-- Options Frame Text
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "Corregir fundicin"
+SMARTBUFF_OFTT_FIXBUFF = "Marque si Smartbuff falla al lanzar beneficios."
+
SMARTBUFF_OFT = "SmartBuff On/Off";
SMARTBUFF_OFT_MENU = "Mostrar/Ocultar men\195\186 de opciones";
SMARTBUFF_OFT_AUTO = "Recordatorio";
@@ -75,6 +103,7 @@ SMARTBUFF_OFT_MSGNORMAL = "normal";
SMARTBUFF_OFT_MSGWARNING = "aviso";
SMARTBUFF_OFT_MSGERROR = "error";
SMARTBUFF_OFT_HIDEMMBUTTON = "Ocultar bot\195\179n de minimapa";
+SMARTBUFF_OFT_INCLUDETOYS = "Incluir juguetes";
SMARTBUFF_OFT_REBUFFTIMER = "Temporizador de Rebuff";
SMARTBUFF_OFT_AUTOSWITCHTMP = "Cambiar plantilla";
SMARTBUFF_OFT_SELFFIRST = "Primero uno mismo";
@@ -93,8 +122,6 @@ SMARTBUFF_OFT_COMPMODE = "Modo Comp.";
SMARTBUFF_OFT_MINIGRP = "Mini grupo";
SMARTBUFF_OFT_ANTIDAZE = "Anti aturdimiento";
SMARTBUFF_OFT_HIDESABUTTON = "Ocultar bot\195\179n de acci\195\179n";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "Advertencia mientras est montado";
-SMARTBUFF_OFTT_SOUNDSELECT = "Select the required splash sound.";
SMARTBUFF_OFT_INCOMBAT = "en combate";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "Shapeshift";
@@ -121,6 +148,7 @@ SMARTBUFF_OFTT_ARULES = "No lanzar:\n- Espinas en Magos, Sacerdotes y Bru
SMARTBUFF_OFTT_SUBGRPCHANGED = "Abrir autom\195\161ticamente el men\195\186 de opciones,\ncuando has cambiado de subgrupo.";
SMARTBUFF_OFTT_GRPBUFFSIZE = "A cu\195\161ntos jugadores con el buff de grupo\nperdido y que deber\195\173an estar en el grupo,\n va a buffar el buff de grupo.";
SMARTBUFF_OFTT_HIDEMMBUTTON = "Oculta el bot\195\179n de SmartBuff del minimapa.";
+SMARTBUFF_OFTT_INCLUDETOYS = "Incluye juguetes en la lista junto con tus hechizos y comida.";
SMARTBUFF_OFTT_REBUFFTIMER = "Cu\195\161ntos segundos antes de que el buff expire,\nte debe alertar el recordatorio.\n0 = Desactivado";
SMARTBUFF_OFTT_SELFFIRST = "Buffar tu personaje antes que los dem\195\161s.";
SMARTBUFF_OFTT_SCROLLWHEELUP = "Lanzar buffs cuando muevas tu\nrueda del rat\195\179n adelante.";
@@ -139,14 +167,14 @@ SMARTBUFF_OFTT_MINIGRP = "Mostrar los ajustes del subgrupo de banda en un\
SMARTBUFF_OFTT_ANTIDAZE = "Autom\195\161ticamente cancela el\naspecto del mono/manada\nsi alguien est\195\161 aturdido\n(\195\169l mismo o el grupo).";
SMARTBUFF_OFTT_SPLASHSTYLE = "Cambia la fuente de\nlos mensajes de buff.";
SMARTBUFF_OFTT_HIDESABUTTON = "Oculta el bot\195\179n de acci\195\179n de SmartBuff.";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "Comprueba y avisa mientras ests montado.";
-SMARTBUFF_OFTT_SOUNDSELECT = "Seleccione el sonido de advertencia.";
SMARTBUFF_OFTT_INCOMBAT = "De momento s\195\179lo funciona sobre t\195\173 mismo.\nEl primer buff que marcas para combate,\nse establecer\195\161 en el bot\195\179n antes del combate\ny puede ser usado en combate.\nAviso! Toda l\195\179gica se inutiliza en combate";
SMARTBUFF_OFTT_SMARTDEBUFF = "Muestra la pesta\195\177a de SmartDeBuff";
SMARTBUFF_OFTT_SPLASHDURATION= "Cu\195\161ntos segundos estar\195\161 en pantalla el\nmensaje,\nantes de atenuarse.";
SMARTBUFF_OFTT_INSHAPESHIFT = "Cast buffs also if you\nare shapeshifted.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "Checks if a buff of an other\nclass with similar effect\nis already active.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "Checks if a self buff is active,\nwhose only one can be\nactive at a time.";
+SMARTBUFF_OFTT_SOUNDSELECT = "Seleccione el sonido de advertencia.";
+
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "Uno mismo s\195\179lo";
@@ -175,10 +203,10 @@ SMARTBUFF_BSTT_MANALIMIT = "Umbral de Man\195\161/Ira/Energ\195\173a\nSi tie
SMARTBUFF_PSTT_RESIZE = "Minimiza/maximiza\nla ventana principal de opciones";
-- Messages
-SMARTBUFF_MSG_LOADED = "cargado";
-SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Una nueva versin est disponible para descargar, usted est usando la versin |cffFFFF00";
-SMARTBUFF_MSG_NEWVER2 = "|cffffffff y la versin |cffFFFF00r"
-SMARTBUFF_MSG_NEWVER3 = "|cffffffff ya est disponible para su descarga. nase a Discord para obtener toda la informacin ms reciente en https://discord.gg/R6EkZ94TKK.";
+SMARTBUFF_MSG_LOADED = "cargado! - Informe cualquier problema en Curse o nase a Discord en |cffffff00discord.gg/R6EkZ94TKK|cffffffff para un soporte mejorado.";
+SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Hay una nueva versin disponible, ests usando |cffFFFF00";
+SMARTBUFF_MSG_NEWVER2 = "|cffffffff y construir |cffFFFF00r"
+SMARTBUFF_MSG_NEWVER3 = "|cffffffff est actualmente disponible para su descarga. nase a Discord para obtener la informacin ms reciente en https://discord.gg/R6EkZ94TKK.";
SMARTBUFF_MSG_DISABLED = "SmartBuff est\195\161 deshabilitado!";
SMARTBUFF_MSG_SUBGROUP = "Te has unido a un nuevo subgrupo, por favor comprueba las opciones!";
SMARTBUFF_MSG_NOTHINGTODO = "Nada que hacer";
@@ -203,9 +231,9 @@ SMARTBUFF_MSG_SOUNDS = "Selecci
SMARTBUFF_MSG_SPECCHANGED = "Spec changed (%s), loading buff templates...";
-- Support
-SMARTBUFF_MINIMAP_TT = "Click izquierdo: men\195\186 de opciones\nClick derecho: On/Off\nAlt-Click izquierdo: SmartDebuff\nMay\195\186scuals arrastrar: Mover bot\195\179n";
-SMARTBUFF_TITAN_TT = "Click izquierdo: Abrir opciones\nClick derecho: On/Off\nAlt-Click izquierdo: SmartDebuff";
-SMARTBUFF_FUBAR_TT = "\nClick izquierdo: Abrir opciones\nMay\195\186sulas-Click izquierdo: On/Off\nAlt-Click izquierdo: SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "Ratn izquierdo para opciones\nRatn derecho para activar/desactivar\nAlt-Ratn izquierdo para alternar el seguimiento automtico\nShift arrastrar: botn Mover";
+SMARTBUFF_TITAN_TT = "Ratn izquierdo para opciones\nRatn derecho para activar/desactivar\nAlt-Ratn izquierdo para alternar el seguimiento automtico";
+SMARTBUFF_FUBAR_TT = "\nRatn izquierdo para opciones\nRatn derecho para activar/desactivar\nAlt-Ratn izquierdo para alternar el seguimiento automtico";
SMARTBUFF_DEBUFF_TT = "May\195\186sculas-arrastrar bot\195\179n izquierdo: Mover marco\n|cff20d2ff- S bot\195\179n -|r\nClick izquierdo: Mostrar por clases\nMay\195\186sculas-Click izquierdo: Clases por colores\nAlt-Click izquierdo: Destacar L/R\n|cff20d2ff- P bot\195\179n -|r\nLeft click: Hide pets on/off";
diff --git a/localization.fr.lua b/localization.fr.lua
index ffffd37..1656f44 100644
--- a/localization.fr.lua
+++ b/localization.fr.lua
@@ -6,7 +6,7 @@
if (GetLocale() == "frFR") then
--- addon credits
+-- credits
SMARTBUFF_CREDITS = "|cffffffff"
.."Version Classic par Codermik. Veuillez signaler tout problème sur CurseForge ou mon discord:\n\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
@@ -16,8 +16,15 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "Alchimie";
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "Oui";
+SMARTBUFF_OFT_NO = "Non";
+SMARTBUFF_OFT_OKAY = "Continuer"
+SMARTBUFF_OFT_PURGE_DATA = "Voulez-vous vraiment réinitialiser TOUTES les données SmartBuff ?\nCette action forcera un rechargement de l'interface utilisateur !";
+SMARTBUFF_OFT_REQ_RELOAD = "Les nouvelles versions nécessitent un rechargement de l'interface graphique\nCliquez sur Continuer lorsque vous êtes prêt.";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "Vous êtes au combat avec votre canne à pêche équipée.";
-- Weapon types
SMARTBUFF_WEAPON_STANDARD = {"Dagues", "Haches", "Ep\195\169es", "Masses", "B\195\162tons", "Armes de pugilat", "Armes d\'hast", "Armes de jet"};
@@ -35,7 +42,7 @@ SMARTBUFF_DEMONTYPE = "Diablotin";
SMARTBUFF_UNDEAD = "Mort-vivant";
-- Classes
-SMARTBUFF_CLASSES = {"Druide", "Chasseur", "Mage", "Paladin", "Pr\195\170tre", "Voleur", "Chaman", "D\195\169moniste", "Guerrier", "Chevalier de la mort", "Moine", "Chasseur de démons", "Chasseur Pet", "D\195\169moniste Pet", "Chevalier de la mort Pet", "Tank", "Gu\195\169risseur", "Sp\195\169cialiste des d\195\169g\195\162ts"};
+SMARTBUFF_CLASSES = {"Druide", "Chasseur", "Mage", "Paladin", "Pr\195\170tre", "Voleur", "Chaman", "D\195\169moniste", "Guerrier", "Chevalier de la mort", "Moine", "Chasseur de démons", "Evoker", "Chasseur Pet", "D\195\169moniste Pet", "Chevalier de la mort Pet", "Tank", "Gu\195\169risseur", "Sp\195\169cialiste des d\195\169g\195\162ts"};
-- Templates and Instances
SMARTBUFF_TEMPLATES = {"Seul", "Groupe", "Raid", "Champs de Bataille", "Ar\195\168ne", "CCG", "EdC", "Ulduar", "MC", "Ony", "BWL", "Naxx", "AQ", "ZG", "Custom 1", "Custom 2", "Custom 3", "Custom 4", "Custom 5"};
@@ -50,7 +57,27 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "Cible";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "Menu d\'Options";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "Reset buff timers";
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " a été détecté mais le suivi de commutation automatique est activé. Tapez /sbm pour afficher les options et désactiver le suivi individuel ou la commutation automatique.";
+SMARTBUFF_TRACKINGDISABLE = "Vous ne bénéficierez de cette fonctionnalité que si vous avez au moins deux capacités de collecte, l'option a été désactivée."
+SMARTBUFF_AUTOGATHERON = "Le suivi automatique est activé"
+SMARTBUFF_AUTOGATHEROFF = "Le suivi automatique est désactivé"
+SMARTBUFF_OFT_GATHERER = "Changer automatiquement les trackers de collecte"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "Bascule entre vos options Trouver des herbes, Trouver des minéraux et Trouver du poisson (si disponible et sélectionné)."
+SMARTBUFF_OFTT_GATHERERFISH = "Inclure Find Fish lors du passage à Gathering Trackers."
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "Cette version de Smartbuff n'est pas destinée à ce client, veuillez télécharger la bonne version.";
+
-- Options Frame Text
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "buff Correctif "
+SMARTBUFF_OFTT_FIXBUFF = "Cochez si Smartbuff ne parvient pas à lancer des buffs."
+
SMARTBUFF_OFT = "ON/OFF SmartBuff";
SMARTBUFF_OFT_MENU = "Afficher/Cacher le menu d\'options";
SMARTBUFF_OFT_AUTO = "Rappel";
@@ -76,6 +103,7 @@ SMARTBUFF_OFT_MSGNORMAL = "Normal";
SMARTBUFF_OFT_MSGWARNING = "Avertissement";
SMARTBUFF_OFT_MSGERROR = "Erreur";
SMARTBUFF_OFT_HIDEMMBUTTON = "Cacher: Bouton Minimap";
+SMARTBUFF_OFT_INCLUDETOYS = "Inclure des jouets";
SMARTBUFF_OFT_REBUFFTIMER = "Timer: Rebuff";
SMARTBUFF_OFT_AUTOSWITCHTMP = "Changer de config";
SMARTBUFF_OFT_SELFFIRST = "Moi en premier";
@@ -94,8 +122,6 @@ SMARTBUFF_OFT_COMPMODE = "Comp. mode";
SMARTBUFF_OFT_MINIGRP = "Mini groupe";
SMARTBUFF_OFT_ANTIDAZE = "Anti daze"; -- NOT TRANSLATED
SMARTBUFF_OFT_HIDESABUTTON = "Cacher: Bouton action";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "Avertir sur une monture";
-SMARTBUFF_OFTT_SOUNDSELECT = "Sélectionnez le son d'éclaboussure requis.";
SMARTBUFF_OFT_INCOMBAT = "en combat";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "Shapeshift";
@@ -122,6 +148,7 @@ SMARTBUFF_OFTT_ARULES = "Ne peut \195\170tre lanc\195\169:\n- Epines sur
SMARTBUFF_OFTT_SUBGRPCHANGED = "Ouvre Automatiquement le menu d\'options de SmartBuff,\nlorsque vous changez de sous groupe.";
SMARTBUFF_OFTT_GRPBUFFSIZE = "Le nombre de joueurs que vous avez \ndans le groupe pour utiliser le Buff de groupe.";
SMARTBUFF_OFTT_HIDEMMBUTTON = "Cache le bouton SmartBuff de la Minimap.";
+SMARTBUFF_OFTT_INCLUDETOYS = "Incluez des jouets dans la liste à côté de vos sorts et de votre nourriture.";
SMARTBUFF_OFTT_REBUFFTIMER = "Indique le temps en secondes avant que le Buff expire,\nle rappel vous lancera une alerte.\n0 = D\195\169sactiv\195\169";
SMARTBUFF_OFTT_SELFFIRST = "Buffs votre personnage en premier avant tous les autres.";
SMARTBUFF_OFTT_SCROLLWHEELUP = "Applique les buffs \nlorsque vous utilisez la molette de la souris.";
@@ -140,13 +167,14 @@ SMARTBUFF_OFTT_MINIGRP = "Show raid subgoup settings in an\nown movable mi
SMARTBUFF_OFTT_ANTIDAZE = "Automatically cancels the\naspect of the cheetah/pack\nif someone gets dazed\n(self or group)."; -- NOT TRANSLATED
SMARTBUFF_OFTT_SPLASHSTYLE = "Changes the fontstyle of\nthe buff messages."; -- NOT TRANSLATED
SMARTBUFF_OFTT_HIDESABUTTON = "Cache le bouton SmartBuff de action."; -- NOT TRANSLATED
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "Vérifiez et avertissez les buffs manquants pendant que vous êtes sur une monture.";
SMARTBUFF_OFTT_INCOMBAT = "At the moment it only works on yourself.\nThe first buff you mark as in combat,\nwill set on the button before combat\nand you can use it in combat.\nWarning! All logic is disabled in combat!";
SMARTBUFF_OFTT_SMARTDEBUFF = "Shows the SmartDebuff frame.";
SMARTBUFF_OFTT_SPLASHDURATION= "How many seconds the splash\nmessage will displayed,\nbefore it fades.";
SMARTBUFF_OFTT_INSHAPESHIFT = "Cast buffs also if you\nare shapeshifted.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "Checks if a buff of an other\nclass with similar effect\nis already active.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "Checks if a self buff is active,\nwhose only one can be\nactive at a time.";
+SMARTBUFF_OFTT_SOUNDSELECT = "Sélectionnez le son d'éclaboussure requis.";
+
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "Sur Soi";
@@ -175,10 +203,10 @@ SMARTBUFF_BSTT_MANALIMIT = "Mana/Rage/Energy threshold\nIf you are below thi
SMARTBUFF_PSTT_RESIZE = "Minimize/maximize\nthe main options frame";
-- Messages
-SMARTBUFF_MSG_LOADED = "chargée. Classic de Codermik - veuillez signaler toute erreur trouvée.";
-SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Il y a une nouvelle version disponible, vous utilisez |cffFFFF00";
-SMARTBUFF_MSG_NEWVER2 = "|cffffffff et révision |cffFFFF00r"
-SMARTBUFF_MSG_NEWVER3 = "|cffffffff est actuellement disponible en téléchargement. Rejoignez Discord pour toutes les dernières informations à https://discord.gg/R6EkZ94TKK.";
+SMARTBUFF_MSG_LOADED = "initialisé ! - Veuillez signaler tout problème sur Curse ou rejoindre le discord à |cffffff00discord.gg/R6EkZ94TKK|cffffffff pour une meilleure prise en charge.";
+SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Une nouvelle version est disponible, vous utilisez |cffFFFF00";
+SMARTBUFF_MSG_NEWVER2 = "|cffffffff et construire |cffFFFF00r"
+SMARTBUFF_MSG_NEWVER3 = "|cffffffff est actuellement disponible en téléchargement. Rejoignez Discord pour toutes les dernières informations sur https://discord.gg/R6EkZ94TKK.";
SMARTBUFF_MSG_DISABLED = "SmartBuff est d\195\169sactiv\195\169 !";
SMARTBUFF_MSG_SUBGROUP = "Vous venez de rejoindre un nouveau sous groupe, merci de v\195\169rifier les options !";
SMARTBUFF_MSG_NOTHINGTODO = "STOP, IL N\'Y A PLUS RIEN A LANCER !!! Tous les Buffs sont deja lanc\195\169s ;-)";
@@ -203,9 +231,9 @@ SMARTBUFF_MSG_SOUNDS = "Son Splash sélectionné: "
SMARTBUFF_MSG_SPECCHANGED = "Spec changed (%s), loading buff templates...";
-- Support
-SMARTBUFF_MINIMAP_TT = "Left Click: Menu d\'options\nRight Click: ON/OFF\nAlt-Left Click: SmartDebuff\nShift drag: Move button"; -- NOT TRANSLATED
-SMARTBUFF_TITAN_TT = "Left Click: Menu d\'options\nRight Click: ON/OFF\nAlt-Left Click: SmartDebuff"; -- NOT TRANSLATED
-SMARTBUFF_FUBAR_TT = "\nLeft Click: Menu d\'options\nShift-Left Click: ON/OFF\nAlt-Left Click: SmartDebuff"; -- NOT TRANSLATED
+SMARTBUFF_MINIMAP_TT = "Souris gauche pour les options\nSouris droite pour activer/désactiver\nAlt-gauche de la souris pour basculer le suivi automatique\nGlisser Maj : bouton Déplacer";
+SMARTBUFF_TITAN_TT = "Souris gauche pour les options\nSouris droite pour activer/désactiver\nAlt-gauche de la souris pour basculer le suivi automatique";
+SMARTBUFF_FUBAR_TT = "\nSouris gauche pour les options\nSouris droite pour activer/désactiver\nAlt-gauche de la souris pour basculer le suivi automatique";
SMARTBUFF_DEBUFF_TT = "Shift-Left drag: Move frame\n|cff20d2ff- S button -|r\nLeft click: Show by classes\nShift-Left click: Class colors\nAlt-Left click: Highlight L/R\n|cff20d2ff- P button -|r\nLeft click: Hide pets on/off"; -- NOT TRANSLATED
diff --git a/localization.ru.lua b/localization.ru.lua
index 9cb03c6..01a67aa 100644
--- a/localization.ru.lua
+++ b/localization.ru.lua
@@ -4,7 +4,7 @@
if (GetLocale() == "ruRU") then
--- addon credits
+-- credits
SMARTBUFF_CREDITS = "|cffffffff"
.."Версия Classic от Codermik. Пожалуйста, сообщайте о любых проблемах на CurseForge или в моем разногласии по адресу:\n\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
@@ -14,9 +14,6 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "Алхимия";
-
-- Weapon types
SMARTBUFF_WEAPON_STANDARD = {"Кинжалы", "топоры", "мечи", "дробящее", "Посохи", "Кистевое", "Древковое", "Метательное"};
SMARTBUFF_WEAPON_BLUNT = {"дробящее", "Посохи", "Кистевое"};
@@ -33,7 +30,7 @@ SMARTBUFF_DEMONTYPE = "Бес";
SMARTBUFF_UNDEAD = "Undead";
-- Classes
-SMARTBUFF_CLASSES = {"Друид", "Охотник", "Маг", "Паладин", "Жрец", "Разбойник", "Шаман", "Чернокнижник", "Воин", "Монах", "Питомец Охотника", "Охотник на демонов", "Прислужник Чернокнижника", "DK Pet", "танка", "целителя", "Бойцы"};
+SMARTBUFF_CLASSES = {"Друид", "Охотник", "Маг", "Паладин", "Жрец", "Разбойник", "Шаман", "Чернокнижник", "Воин", "Рыцарь смерти", "Монах", "Охотник на демонов", "Эвокер", "Питомец Охотника", "Прислужник Чернокнижника", "DK Pet", "танка", "целителя", "Бойцы"};
-- Templates and Instances
SMARTBUFF_TEMPLATES = {"Соло", "Группа", "Рейд", "Поле битвы", "Арена", "ЦЛК", "Ик", "Ульдуар", "ОБ", "Оня", "ЛКТ", "Накс", "АК", "ЗГ", "Своё 1", "Своё 2", "Своё 3", "Своё 4", "Своё 5"};
@@ -48,7 +45,38 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "Цель";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "Меню опций";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "Сбросить таймеры баффов";
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "Да";
+SMARTBUFF_OFT_NO = "Нет";
+SMARTBUFF_OFT_OKAY = "Продолжать"
+SMARTBUFF_OFT_PURGE_DATA = "Вы уверены, что хотите сбросить ВСЕ данные SmartBuff?\nЭто действие приведет к перезагрузке пользовательского интерфейса!";
+SMARTBUFF_OFT_REQ_RELOAD = "Новые версии требуют перезагрузки графического интерфейса.\nНажмите «Продолжить», когда будете готовы.";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "Вы находитесь в бою со своей удочкой.";
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " был обнаружен, но включено отслеживание автоматического переключения. Введите /sbm, чтобы просмотреть параметры и отключить индивидуальное отслеживание или автоматическое переключение.";
+SMARTBUFF_TRACKINGDISABLE = "Вы получите выгоду от этой функции, только если у вас есть две или более способностей сбора, опция отключена."
+SMARTBUFF_AUTOGATHERON = "Автоматическое отслеживание включено"
+SMARTBUFF_AUTOGATHEROFF = "Автоматическое отслеживание выключено"
+SMARTBUFF_OFT_GATHERER = "Switch Сбор трекеров"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "Переключение между функциями «Найти травы», «Найти минералы» и «Найти рыбу» (если они доступны и выбраны)."
+SMARTBUFF_OFTT_GATHERERFISH = "Включите функцию «Найти рыбу» при переключении через средства отслеживания сбора."
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "Эта версия Smartbuff не предназначена для этого клиента, загрузите правильную версию.";
+
+
-- Options Frame Text
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "Исправить кастинг"
+SMARTBUFF_OFTT_FIXBUFF = "Отметьте, если применение баффа не удается."
+
SMARTBUFF_OFT = "Вкл/Выкл";
SMARTBUFF_OFT_MENU = "Меню опций";
SMARTBUFF_OFT_AUTO = "Напоминалка";
@@ -74,6 +102,7 @@ SMARTBUFF_OFT_MSGNORMAL = "обычные";
SMARTBUFF_OFT_MSGWARNING = "предупреждения";
SMARTBUFF_OFT_MSGERROR = "ошибки";
SMARTBUFF_OFT_HIDEMMBUTTON = "Спрятать кнопку у карты";
+SMARTBUFF_OFT_INCLUDETOYS = "Включить игрушки";
SMARTBUFF_OFT_REBUFFTIMER = "Таймер ребаффа";
SMARTBUFF_OFT_AUTOSWITCHTMP = "Менять настройки";
SMARTBUFF_OFT_SELFFIRST = "Сначала себя";
@@ -92,8 +121,6 @@ SMARTBUFF_OFT_COMPMODE = "Комп.режим";
SMARTBUFF_OFT_MINIGRP = "Мини-группа";
SMARTBUFF_OFT_ANTIDAZE = "Анти-стоп";
SMARTBUFF_OFT_HIDESABUTTON = "Спрятать кнопку действия";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "Предупреждать, находясь на маунте";
-SMARTBUFF_OFTT_SOUNDSELECT = "Выберите звук всплеска.";
SMARTBUFF_OFT_INCOMBAT = "в бою";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "Shapeshift";
@@ -120,6 +147,7 @@ SMARTBUFF_OFTT_ARULES = "Не кастовать:\n- Шипы на Маг
SMARTBUFF_OFTT_SUBGRPCHANGED = "Автоматически открывать меню опций SmartBuff,\nкогда вы меняете подгруппу.";
SMARTBUFF_OFTT_GRPBUFFSIZE = "Сколько игроков без группового баффа должно\nбыть в группе, чтобы кастовать групповой бафф.";
SMARTBUFF_OFTT_HIDEMMBUTTON = "Спрятать кнопку SmartBuff рядом с мини-картой.";
+SMARTBUFF_OFTT_INCLUDETOYS = "Включите в список игрушки вместе с вашими заклинаниями и едой.";
SMARTBUFF_OFTT_REBUFFTIMER = "За сколько секунд до спадения баффа,\nнапоминака должна предупреждать.\n0 = Отключить";
SMARTBUFF_OFTT_SELFFIRST = "Баффать сначала себя, потом других.";
SMARTBUFF_OFTT_SCROLLWHEELUP = "Баффать, когда вы прокручиваете\nколесо мыши вперёд.";
@@ -138,13 +166,14 @@ SMARTBUFF_OFTT_MINIGRP = "Показывать выбор подгрупп
SMARTBUFF_OFTT_ANTIDAZE = "Автоматически прерывать\nДух Гепарда/Стаи\nесли на ком-то из группы\nповисло замедление.";
SMARTBUFF_OFTT_SPLASHSTYLE = "Изменить шрифт сообщений о баффах.";
SMARTBUFF_OFTT_HIDESABUTTON = "Спрятать кнопку действия SmartBuff.";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "Проверьте и предупредите об отсутствии баффов, пока вы находитесь на ездовом животном.";
SMARTBUFF_OFTT_INCOMBAT = "At the moment it only works on yourself.\nThe first buff you mark as in combat,\nwill set on the button before combat\nand you can use it in combat.\nWarning! All logic is disabled in combat!";
SMARTBUFF_OFTT_SMARTDEBUFF = "Shows the SmartDebuff frame.";
SMARTBUFF_OFTT_SPLASHDURATION= "Сколько секунд будут отображаться\nвсплывающие сообщения.";
SMARTBUFF_OFTT_INSHAPESHIFT = "Cast buffs also if you\nare shapeshifted.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "Checks if a buff of an other\nclass with similar effect\nis already active.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "Checks if a self buff is active,\nwhose only one can be\nactive at a time.";
+SMARTBUFF_OFTT_SOUNDSELECT = "Выберите звук всплеска.";
+
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "Только себя";
@@ -173,10 +202,10 @@ SMARTBUFF_BSTT_MANALIMIT = "Уровень Маны/Ярости/Энерг
SMARTBUFF_PSTT_RESIZE = "Свернуть/развернуть\nосновное окно опций";
-- Messages
-SMARTBUFF_MSG_LOADED = "загружен. Версия Classic от Codermik - сообщайте обо всех обнаруженных ошибках.";
+SMARTBUFF_MSG_LOADED = "загружен! - Пожалуйста, сообщайте о любых проблемах в Discord на |cffffff00discord.gg/R6EkZ94TKK|cffffffff для улучшения поддержки.";
SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff Доступна новая версия, вы используете |cffFFFF00";
-SMARTBUFF_MSG_NEWVER2 = "|cffffffff и версия |cffFFFF00r"
-SMARTBUFF_MSG_NEWVER3 = "|cffffffff в настоящее время доступна для загрузки. Присоединяйтесь к Discord для получения последней информации по адресу https://discord.gg/R6EkZ94TKK.";
+SMARTBUFF_MSG_NEWVER2 = "|cffffffff и ревизия |cffFFFF00r"
+SMARTBUFF_MSG_NEWVER3 = "|cffffffff в настоящее время доступен для скачивания. Присоединяйтесь к Discord для получения всей последней информации на https://discord.gg/R6EkZ94TKK.";
SMARTBUFF_MSG_DISABLED = "SmartBuff отключен!";
SMARTBUFF_MSG_SUBGROUP = "Вы присоединились к новой группе, проверьте опции!";
SMARTBUFF_MSG_NOTHINGTODO = "Нечего делать";
@@ -200,9 +229,9 @@ SMARTBUFF_MSG_SOUNDS = "Выбранный звук всплеска: "
SMARTBUFF_MSG_SPECCHANGED = "Spec changed (%s), loading buff templates...";
-- Support
-SMARTBUFF_MINIMAP_TT = "Левой кнопкой: меню опций\nПравой кнопкой: Вкл/Выкл\nAlt+Левой Кнопкой: SmartDebuff\nТащить с Shift-ом: Двигать кнопку";
-SMARTBUFF_TITAN_TT = "Левой кнопкой: меню опций\nПравой кнопкой: Вкл/Выкл\nAlt+Левой Кнопкой: SmartDebuff";
-SMARTBUFF_FUBAR_TT = "Левой кнопкой: меню опций\nShift+Левой кнопкой: Вкл/Выкл\nAlt+Левой Кнопкой: SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "Левая мышь для опций\nПравая мышь для включения/выключения\nAlt-Left мышь для переключения автоматического отслеживания\nShift drag: кнопка перемещения";
+SMARTBUFF_TITAN_TT = "Левая мышь для опций\nПравая мышь для включения/выключения\nAlt-Left мышь для переключения автоматического отслеживания";
+SMARTBUFF_FUBAR_TT = "\nЛевая мышь для опций\nПравая мышь для включения/выключения\nAlt-Left мышь для переключения автоматического отслеживания";
SMARTBUFF_DEBUFF_TT = "Shift+тащить: Двигать рамку\n|cff20d2ff- S button -|r\nЛевой кнопкой: Показать по классам\nShift+левой кнопкой: Классовые цвета\nAlt+Левой кнопкой: Подсветить L/R\n|cff20d2ff- P button -|r\nЛевой кнопкой: Спрятать петов (да/нет)";
diff --git a/localization.tw.lua b/localization.tw.lua
index b1cc563..b4eb11f 100644
--- a/localization.tw.lua
+++ b/localization.tw.lua
@@ -7,7 +7,7 @@ if (GetLocale() == "zhTW") then
-- smartbuff credits
SMARTBUFF_CREDITS = "|cffffffff"
- .."Classic 的 Shadowlands 版本。 请在 CurseForge 或我的 discord 上报告任何问题:\n\n"
+ .."Codermik 的 Classic 版本。 请在 CurseForge 或我的 discord 上报告任何问题:\n\n"
.."|cff00e0ffhttps://discord.gg/R6EkZ94TKK\n\n"
.."|cffffffff如果您感谢所涉及的工作量以及为您带来这些各种插件所花费的时间,请考虑通过以下方式支持我:\n\n"
.."|cffffffffPatreon: |cff00e0ffhttps://www.patreon.com/codermik\n"
@@ -15,9 +15,6 @@ SMARTBUFF_CREDITS = "|cffffffff"
.."|cffffffffPayPal.Me: |cff00e0ffhttps://paypal.me/codermik\n\n"
;
--- Alchemy
-SMARTBUFF_ALCHEMY_TITLE = "鍊金術";
-
-- Weapon types
SMARTBUFF_WEAPON_STANDARD = {"匕首", "斧", "劍", "錘", "法杖", "拳套", "長柄武器", "投擲武器"};
SMARTBUFF_WEAPON_BLUNT = {"錘", "法杖", "拳套"};
@@ -34,7 +31,7 @@ SMARTBUFF_DEMONTYPE = "小鬼";
SMARTBUFF_UNDEAD = "不死";
-- Classes
-SMARTBUFF_CLASSES = {"德魯伊", "獵人", "法師", "聖騎士", "牧師", "盜賊", "薩滿", "術士", "戰士", "死亡騎士", "武僧", "恶魔猎手", "獵人寵物", "術士寵物", "死騎寵物", "坦克", "補師", "DD"};
+SMARTBUFF_CLASSES = {"德魯伊", "獵人", "法師", "聖騎士", "牧師", "盜賊", "薩滿", "術士", "戰士", "死亡騎士", "武僧", "恶魔猎手", "喚魔者", "獵人寵物", "術士寵物", "死騎寵物", "坦克", "補師", "DD"};
-- Templates and Instances
SMARTBUFF_TEMPLATES = {"自我", "隊伍", "團隊", "戰場", "競技場", "ICC", "TOC", "Ulduar", "MC", "Ony", "BWL", "Naxx", "AQ", "ZG", "自定義 1", "自定義 2", "自定義 3", "自定義 4", "自定義 5"};
@@ -52,7 +49,38 @@ BINDING_NAME_SMARTBUFF_BIND_TARGET = "目標";
BINDING_NAME_SMARTBUFF_BIND_OPTIONS = "選項視窗";
BINDING_NAME_SMARTBUFF_BIND_RESETBUFFTIMERS = "重置 Buff 時間";
+-- purge/reload messages
+SMARTBUFF_OFT_YES = "是的";
+SMARTBUFF_OFT_NO = "不";
+SMARTBUFF_OFT_OKAY = "继续"
+SMARTBUFF_OFT_PURGE_DATA = "您确定要重置所有 SmartBuff 数据吗?\n此操作将强制重新加载 UI!";
+SMARTBUFF_OFT_REQ_RELOAD = "新版本需要重新加载 GUI\n准备就绪后单击继续。";
+
+-- fishing rod check
+SMARTBUFF_OFT_FRODWARN = "您正在使用装备好的钓鱼竿进行战斗。";
+
+-- tracking switcher
+SMARTBUFF_TRACKSWITCHMSG = " 已检测到,但自动切换跟踪已打开。 键入 /sbm 以查看选项并关闭个人跟踪或自动切换。";
+SMARTBUFF_TRACKINGDISABLE = "如果你有两个或更多收集能力,你将只能从这个功能中受益,该选项已被禁用。"
+SMARTBUFF_AUTOGATHERON = "自动曲目切换开启"
+SMARTBUFF_AUTOGATHEROFF = "自动跟踪关闭"
+SMARTBUFF_OFT_GATHERER = "収集追跡を自動的に切り替える"
+SMARTBUFF_OFT_FINDFISH = GetSpellInfo(43308)
+SMARTBUFF_OFT_MINERALS = GetSpellInfo(2580)
+SMARTBUFF_OFT_HERBS = GetSpellInfo(2383)
+SMARTBUFF_OFTT_GATHERER = "[ハーブの検索]、[ミネラルの検索]、[魚の検索] (利用可能で選択されている場合) を切り替えます。"
+SMARTBUFF_OFTT_GATHERERFISH = "収集トラッカーを切り替えるときに「魚を探す」を含めます。"
+
+-- wrong version
+SMARTBUFF_NOTINTENDEDCLIENT = "此版本的 Smartbuff 不適用於此客戶端,請下載正確的版本。";
+
+
-- Options Frame Text
+
+-- experimental feature - for testing.
+SMARTBUFF_OFT_FIXBUFF = "修復演員表"
+SMARTBUFF_OFTT_FIXBUFF = "如果施放增益失败,请勾选。"
+
SMARTBUFF_OFT = "SmartBuff 開/關";
SMARTBUFF_OFT_MENU = "選項視窗 顯示/隱藏";
SMARTBUFF_OFT_AUTO = "啟用提示";
@@ -78,6 +106,7 @@ SMARTBUFF_OFT_MSGNORMAL = "一般";
SMARTBUFF_OFT_MSGWARNING = "警告";
SMARTBUFF_OFT_MSGERROR = "錯誤";
SMARTBUFF_OFT_HIDEMMBUTTON = "隱藏小地圖按鈕";
+SMARTBUFF_OFT_INCLUDETOYS = "包括玩具";
SMARTBUFF_OFT_REBUFFTIMER = "重新buff計時器";
SMARTBUFF_OFT_AUTOSWITCHTMP = "自動切換方案";
SMARTBUFF_OFT_SELFFIRST = "自己優先";
@@ -96,8 +125,6 @@ SMARTBUFF_OFT_COMPMODE = "相容模式";
SMARTBUFF_OFT_MINIGRP = "小團隊";
SMARTBUFF_OFT_ANTIDAZE = "防眩暈";
SMARTBUFF_OFT_HIDESABUTTON = "隱藏動作按鈕";
-SMARTBUFF_OFT_WARNWHILEMOUNTED = "掛載時發出警告";
-SMARTBUFF_OFTT_SOUNDSELECT = "選擇所需的飛濺聲。";
SMARTBUFF_OFT_INCOMBAT = "戰鬥中";
SMARTBUFF_OFT_SMARTDEBUFF = "SmartDebuff";
SMARTBUFF_OFT_INSHAPESHIFT = "變身型態下";
@@ -127,6 +154,7 @@ SMARTBUFF_OFTT_ARULES = "設定以下情況不施法:\n法師、牧師和
SMARTBUFF_OFTT_SUBGRPCHANGED = "所在小隊變動後,自動開啟Smartbuff選項視窗.";
SMARTBUFF_OFTT_GRPBUFFSIZE = "小隊補充群體buff的人數門檻.";
SMARTBUFF_OFTT_HIDEMMBUTTON = "隱藏小地圖按鈕.";
+SMARTBUFF_OFTT_INCLUDETOYS = "將玩具與你的咒語和食物一起列入清單。";
SMARTBUFF_OFTT_REBUFFTIMER = "Buff消失前多少秒,\n提示你重新施法.\n0 = 不提示";
SMARTBUFF_OFTT_SELFFIRST = "優先對自己施放buff";
SMARTBUFF_OFTT_SCROLLWHEELUP = "當滑鼠滾輪向前滾動時buff";
@@ -145,13 +173,14 @@ SMARTBUFF_OFTT_MINIGRP = "以獨立可移動小視窗顯示Raid各小隊
SMARTBUFF_OFTT_ANTIDAZE = "若小隊中有人眩暈,\n自動取消獵豹/豹群守護";
SMARTBUFF_OFTT_SPLASHSTYLE = "更換 buff 訊息字型.";
SMARTBUFF_OFTT_HIDESABUTTON = "隱藏SmartBuff動作按鈕.";
-SMARTBUFF_OFTT_WARNWHILEMOUNTED = "在坐騎時檢查並警告丟失的增益.";
SMARTBUFF_OFTT_INCOMBAT = "只對自己作用.\n被勾選為'戰鬥中'的第一個buff會在戰鬥前被設定在按鈕上,\n並能在戰鬥中使用.\n注意: 戰鬥中禁用邏輯判斷.";
SMARTBUFF_OFTT_SMARTDEBUFF = "顯示SmartDebuff視窗.";
SMARTBUFF_OFTT_SPLASHDURATION= "閃爍訊息持續秒數.";
SMARTBUFF_OFTT_INSHAPESHIFT = "在變身型態下是否也施放buff.";
SMARTBUFF_OFTT_LINKGRPBUFFCHECK = "檢查其他職業\n是否已經施放\n相同類型的buff.";
SMARTBUFF_OFTT_LINKSELFBUFFCHECK = "檢查自己身上\n是否有只能\n單一存在的Buff.";
+SMARTBUFF_OFTT_SOUNDSELECT = "選擇所需的飛濺聲。";
+
-- Buffsetup Frame Text
SMARTBUFF_BST_SELFONLY = "僅對自己施法";
@@ -180,10 +209,10 @@ SMARTBUFF_BSTT_MANALIMIT = "設定魔法/怒氣/能量保留門檻.";
SMARTBUFF_PSTT_RESIZE = "最小化/最大化 設定視窗";
-- Messages
-SMARTBUFF_MSG_LOADED = "已載入";
-SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff 有一个新的版本可用,你目前使用的版本是 |cffFFFF00";
+SMARTBUFF_MSG_LOADED = "初始化! - 请在我的 Discord 上报告任何问题 |cffffff00discord.gg/R6EkZ94TKK|cffffffff 以获得更好的支持。";
+SMARTBUFF_MSG_NEWVER1 = "|cff00e0ffSmartbuff : |cffffffff 有可用的新版本,您正在使用 |cffFFFF00";
SMARTBUFF_MSG_NEWVER2 = "|cffffffff 和修订 |cffFFFF00r"
-SMARTBUFF_MSG_NEWVER3 = "|cffffffff 目前可供下载。 加入Discord,了解所有最新信息 https://discord.gg/R6EkZ94TKK.";
+SMARTBUFF_MSG_NEWVER3 = "|cffffffff 目前可供下载。 加入 Discord 以获取所有最新信息: https://discord.gg/R6EkZ94TKK.";
SMARTBUFF_MSG_DISABLED = "SmarBuff已停用!";
SMARTBUFF_MSG_SUBGROUP = "你已經加入一個新的小隊,請檢查你的設定!";
SMARTBUFF_MSG_NOTHINGTODO = "不需執行任何指令";
@@ -208,9 +237,9 @@ SMARTBUFF_MSG_SOUNDS = "飛濺聲音選擇: "
SMARTBUFF_MSG_SPECCHANGED = "天賦已更改(%s), 重設buff模組...";
-- Support
-SMARTBUFF_MINIMAP_TT = "左鍵: 選項視窗\n右鍵: 開/關\nAlt-左鍵: SmartDebuff\nShift拖曳: 移動按鈕";
-SMARTBUFF_TITAN_TT = "左鍵: 開啟選項\n右鍵: 開/關\nAlt-左鍵: SmartDebuff";
-SMARTBUFF_FUBAR_TT = "\n左鍵: 開啟選項\nShift-左鍵: 開/關\nAlt-左鍵: SmartDebuff";
+SMARTBUFF_MINIMAP_TT = "鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪\nShift 拖动:移动按钮";
+SMARTBUFF_TITAN_TT = "鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪";
+SMARTBUFF_FUBAR_TT = "\n鼠标左键设置\n鼠标右键切换开/关\nAlt-左鼠标切换自动跟踪";
SMARTBUFF_DEBUFF_TT = "Shift-左鍵拖曳: 移動視窗\n|cff20d2ff- S 按鈕 -|r\n左鍵: 依職業顯示\nShift-左鍵: 職業顏色\nAlt-左鍵: 高亮度 L/R\n|cff20d2ff- P 按鈕 -|r\n左鍵: 隱藏寵物 開/關";