WoWInterface SVN DotIt

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 6 to Rev 7
    Reverse comparison

Rev 6 → Rev 7

trunk/DotIt/spells.lua New file
0,0 → 1,51
if not DotIt then
error("DotIt has to be loaded first")
end
DotIt.Spells = {}
local newList, del, deepDel, deepCopy = DotIt.sb:GetRecyclingFunctions()
local spells = DotIt:NewModule("spells")
 
function spells:OnInitialize()
 
end
function spells:insertSpells(struct, name)
DotIt.Spells[name] = struct
end
-- returns the duration of a debuff (only YOUR debuffs)
function spells:GMTD(id)
local name = GetSpellInfo(id)
local dur, mine = select(7, UnitDebuff("target", name))
if not dur then
dur = 0
else
dur = dur-GetTime()
end
if not mine then
dur = 0
end
return dur
end
-- returns the duration of a debuff (also ones not from you!)
function spells:GTD(id)
local name = GetSpellInfo(id)
local bname, rank, icon, count, debuffType, duration, expirationTime, isMine, dur
dur = 0
for i = 1, 40 do
bname, rank, icon, count, debuffType, duration, expirationTime, isMine = UnitDebuff("target", name)
if isMine and bname == name then
dur = expirationTime - GetTime()
end
end
return dur
end
-- get player buffs
function spells:GPB(id)
local name = GetSpellInfo(id)
local dur = select(7, UnitBuff("player", name))
if not dur then
dur = 0
else
dur = dur-GetTime()
end
return dur
end
\ No newline at end of file
trunk/DotIt/config.lua New file
0,0 → 1,1003
if not DotIt then
error("DotIt has to be loaded first")
end
local newList, del, deepDel, deepCopy = DotIt.sb:GetRecyclingFunctions()
local config = DotIt:NewModule("config")
local aceconfig = LibStub:GetLibrary("AceConfig-3.0")
local acedialog = LibStub:GetLibrary("AceConfigDialog-3.0")
local acedboptions = LibStub:GetLibrary("AceDBOptions-3.0")
local tmp = newList()
local lsm = LibStub:GetLibrary("LibSharedMedia-3.0")
DotIt.sp = DotIt:GetModule("spells")
 
local function refreshScale()
DotIt.sb:RedrawScale(DotIt.db.profile.width, DotIt.db.profile.maxtime, DotIt.db.profile.steps,
DotIt.db.profile.maxneg, DotIt.db.profile.position,DotIt.db.profile.horizontal,
DotIt.db.profile.loflag, DotIt.db.profile.scaletexture, DotIt.db.profile.locked, DotIt.db.profile.scale,
DotIt.db.profile.height, DotIt.db.profile.fonts, DotIt.db.profile.scaletext, DotIt.db.profile.amaxtimes,
DotIt.db.profile.ehidescale, DotIt.db.profile.eiconpos)
end
local function isSpell(id)
if GetSpellInfo(id) then return true end
end
local function isAV(id, typ)
if DotIt.db.profile.spells[id..typ] then return true end
end
local function insertDefaultSpell(info, db)
db.defaults.profile.spells[info.spellid..info.typ] = deepCopy(info)
end
function config:insertSpell(info, db)
if info and info.typ then
if not (info.typ == "Dots" or info.typ == "Shortbuffs" or info.typ == "Debuffs" or info.typ == "CCs" or info.typ == "Cooldowns" or info.typ == "ItemCooldowns" or info.typ == "SharedDebuffs" or info.typ == "InternalCooldowns") then
return
end
else
return
end
db.profile.spells[info.spellid..info.typ] = deepCopy(info)
 
if not DotItConfig.args.spells.args[info.typ].args then DotItConfig.args.spells.args[info.typ].args = {} end
DotItConfig.args.spells.args[info.typ].args[tostring(info.spellid)] = {
name = function()
if select(2, GetSpellInfo(info.spellid)) then
if select(2, GetSpellInfo(info.spellid)) ~= "" then
return GetSpellInfo(info.spellid) .. " (" .. select(2, GetSpellInfo(info.spellid)) .. ")"
else
return GetSpellInfo(info.spellid)
end
else
return GetSpellInfo(info.spellid)
end
end,
type = "group"
}
DotItConfig.args.spells.args[info.typ].args[tostring(info.spellid)].args = {
duration = {
name = "Duration",
desc = "This should return the time. For example if you want that this spell is 10 seconds then type: return 10 (you can use any lua code here).",
multiline = true,
type = "input",
get = function() return tostring(DotIt.db.profile.spells[info.spellid..info.typ].duration or "") end,
set = function(self, inp)
if tonumber(inp) then
DotIt.db.profile.spells[info.spellid..info.typ].duration = tonumber(inp)
else
DotIt.db.profile.spells[info.spellid..info.typ].duration = inp
end
end,
},
disabled = {
name = "Disabled",
type = "toggle",
get = function() return DotIt.db.profile.spells[info.spellid..info.typ].disabled end,
set = function(self, inp) DotIt.db.profile.spells[info.spellid..info.typ].disabled = inp end,
},
applications = {
name = "Applications",
desc = "The maximum number of applications that are possible for this spell. This leads to a changing alpha value. If you want that your spell always uses the alpha value (instead of actual_applications/maxapplications) from the color input then leave this at one.",
type = "range",
min = 1,
max = 10,
step = 1,
get = function() return DotIt.db.profile.spells[info.spellid..info.typ].applications or 1 end,
set = function(self, inp)
if inp == 0 then inp = 1 end
DotIt.db.profile.spells[info.spellid..info.typ].applications = tonumber(inp) end,
},
color = {
name = "Positive color",
desc = "This value overrides the default values for this spell. For the default values see the color dialogue.",
type = "color",
hasAlpha = true,
get = function() if DotIt.db.profile.spells[info.spellid..info.typ].color then
return DotIt.db.profile.spells[info.spellid..info.typ].color.r, DotIt.db.profile.spells[info.spellid..info.typ].color.g, DotIt.db.profile.spells[info.spellid..info.typ].color.b, DotIt.db.profile.spells[info.spellid..info.typ].color.a
end
end,
set = function(self, r, g, b, a) DotIt.db.profile.spells[info.spellid..info.typ].color = {r = r, g = g, b = b, a = a} end,
 
},
colorzero = {
name = "Negative color",
desc = "This value overrides the default values for this spell. For the default values see the color dialogue.",
type = "color",
hasAlpha = true,
get = function() if DotIt.db.profile.spells[info.spellid..info.typ].colorzero then
return DotIt.db.profile.spells[info.spellid..info.typ].colorzero.r, DotIt.db.profile.spells[info.spellid..info.typ].colorzero.g, DotIt.db.profile.spells[info.spellid..info.typ].colorzero.b, DotIt.db.profile.spells[info.spellid..info.typ].colorzero.a
end
end,
set = function(self, rc, gc, bc, ac) DotIt.db.profile.spells[info.spellid..info.typ].colorzero = {r = rc, g = gc, b = bc, a = ac} end,
 
},
typ = {
name = "Type",
desc = "The type of the Spell",
type = "select",
values = {Dots = "Dots", Shortbuffs = "Short Buffs", Debuffs = "Debuffs", SharedDebuffs = "Shared debuffs", InternalCooldowns = "Internal cooldowns", CCs = "CCs", Cooldowns = "Spell cooldowns", ItemCooldowns = "Item cooldowns"},
get = function() return DotIt.db.profile.spells[info.spellid..info.typ].typ end,
set = function(self, inp) DotIt.db.profile.spells[info.spellid..info.typ].typ = inp end,
},
class = {
name = "Type",
desc = "The type of the Spell",
type = "select",
values = {["DEATHKNIGHT"] = "Death Knight", ["DRUID"] = "Druid", ["HUNTER"] = "Hunter", ["MAGE"] = "Mage", ["PALADIN"] = "Paladin", ["ROGUE"] = "Rogue", ["SHAMAN"] = "Shaman", ["WARLOCK"] = "Warlock", ["WARRIOR"] = "Warrior" , ["GENERAL"] = "General"},
get = function()
if not DotIt.db.profile.spells[info.spellid..info.typ].class then DotIt.db.profile.spells[info.spellid..info.typ].class = select(2, UnitClass("player")) end
return DotIt.db.profile.spells[info.spellid..info.typ].class
end,
set = function(self, inp) DotIt.db.profile.spells[info.spellid..info.typ].class = inp end,
},
 
}
end
function config:insertConfigSpell()
if isSpell(tmp.spellid) and not isAV(tmp.spellid, tmp.typ) then
if not tmp.spellid or tmp.spellid == "" then error("Insert a spell ID!") end
if not GetSpellInfo(tmp.spellid) then error("Invalid spell ID!") end
if not tmp.duration or tmp.duration == "" then error("Insert a duration!") end
if type(tmp.duration) == "number" then tmp.duration = DotIt.db.profile.spells[tmp.typ..tmp.duration] end
loadstring(tmp.duration)
config:insertSpell(deepCopy(tmp), DotIt.db)
end
deepDel(tmp)
tmp = newList()
end
 
 
DotItConfig = {
type = "group",
args = {
general = {
name = "General",
desc = "General options",
type = "group",
get = function(info)
local leaf = info[#info]
if leaf ~= "owndots" then
leaf = "e"..leaf
end
return DotIt.db.profile[leaf]
end,
set = function(info, inp)
local leaf = info[#info]
if leaf ~= "owndots" then
leaf = "e"..leaf
end
DotIt.db.profile[leaf] = inp
if leaf == "iconpos" then
DotIt.sb:SetIcon(inp)
end
end,
 
args = {
locked = {
name = "Locked",
desc = "Locks or unlocks the bar (use ALT+Click to drag when unlocked!)",
type = "toggle",
get = function()
return DotIt.db.profile.locked
end,
set = function(self, lock)
DotIt.db.profile.locked = lock
DotIt.sb:SetLock(lock)
end,
order = 0,
},
owndots = {
name = "Only debuffs from Target",
desc = "Shows only the dots for your current target",
type = "toggle",
},
iconpos = {
name = "Icon out of the bar",
desc = "As soon as the icon reaches zero the bar will fade",
type = "toggle",
},
hidescale = {
name = "Hide the scale",
desc = "... if there is nothing to track",
type = "toggle",
},
removedots = {
name = "Remove debuffs on target change",
desc = "Removes all the debuff bars that do not belong to your current target",
type = "toggle",
get = function()
return DotIt.db.profile.removedots
end,
set = function(info, inp)
DotIt.db.profile.removedots = inp
if inp then
DotIt:RegisterEvent("UNIT_TARGET", "TargetChanged")
else
DotIt:UnregisterEvent("UNIT_TARGET")
end
 
end,
},
dots = {
name = "Enable dots",
type = "toggle",
},
cooldowns = {
name = "Enable cooldowns",
type = "toggle",
},
debuffs = {
name = "Enable debuffs",
type = "toggle",
},
ccs = {
name = "Enable ccs",
type = "toggle",
},
shortbuffs = {
name = "Enable short buffs",
type = "toggle",
},
internalcooldowns = {
name = "Enable internal cooldowns",
desc = "Mainly like the shortbuffs category but the bar will not be removed when the buff fades",
type = "toggle",
},
shareddebuffs = {
name = "Enable shared debuffs",
desc = "Shared debuffs are things that can be refreshed from other people (eg Sunder Armor)",
type = "toggle",
},
},
},
additionalscale = {
name = "Logarithmic scale",
type = "group",
args = {
segments = {
name = "Input segments",
desc = "Every segement is seperated by a comma",
type = "input",
multiline = true,
get = function(info)
if not DotIt.db.profile.amaxtimes then return "" end
local ret = ""
for k, v in pairs(DotIt.db.profile.amaxtimes) do
ret = ret .. v .. ", "
end
if ret then
ret = string.sub(ret, 1, string.len(ret) - 2)
end
return ret
end,
set = function(info, inp)
deepDel(DotIt.db.profile.amaxtimes)
DotIt.db.profile.amaxtimes = nil
DotIt.db.profile.amaxtimes = newList()
if inp and inp ~= "" then
for _, v in pairs({strsplit(",", inp)}) do
tinsert(DotIt.db.profile.amaxtimes, tonumber(strtrim(v)))
end
end
refreshScale()
end,
},
},
},
view = {
name = "View",
type = "group",
args = {
scaletext = {
name = "Scale text",
desc = "Hides or shows the text on the scale",
type = "toggle",
order = 0,
get = function() return DotIt.db.profile.scaletext end,
set = function(self, inp) DotIt.db.profile.scaletext = inp
refreshScale()
end,
},
textures = {
type = "group",
name = "Textures",
get = function(info)
for k, v in pairs(lsm:HashTable("statusbar")) do
if v == DotIt.db.profile[info[#info]] then
return k
end
end
end,
set = function(info, inp) DotIt.db.profile[info[#info]] = lsm:Fetch("statusbar",inp)
refreshScale()
end,
args = {
scaletexture = {
order = 1,
name = "Scaletexture",
desc = "The texture of the scale",
type = "select",
dialogControl = 'LSM30_Statusbar',
values = AceGUIWidgetLSMlists.statusbar ,
 
},
bartexture = {
order = 2,
name = "Bartexture",
desc = "The texture of the bar",
type = "select",
dialogControl = 'LSM30_Statusbar',
values = AceGUIWidgetLSMlists.statusbar,
},
},
},
position = {
type = "group",
name = "Position",
desc = "The Position on the screen (bottom left corner)",
args = {
x = {
name = "X",
type = "input",
validate = function(self, inp)
if tonumber(inp) then
return true
end
return "Only numbers are a valid input"
end,
get = function() return tostring(DotIt.db.profile.position.x) end,
set = function(self, inp) DotIt.db.profile.position.x = tonumber(inp)
DotIt.sb:SetPosition(DotIt.db.profile.position.x,
DotIt.db.profile.position.y)
end,
},
y = {
name = "Y",
type = "input",
validate = function(self, inp)
if tonumber(inp) then
return true
end
return "Only numbers are a valid input"
end,
get = function() return tostring(DotIt.db.profile.position.y) end,
set = function(self, inp) DotIt.db.profile.position.y = tonumber(inp)
DotIt.sb:SetPosition(DotIt.db.profile.position.x,
DotIt.db.profile.position.y)
end,
},
},
},
width = {
order = 3,
name = "Scalesize",
desc = "The size of the scale.",
type = "range",
min = 10,
max = 1000,
step = 1,
get = function() return DotIt.db.profile.width end,
set = function(self, inp) DotIt.db.profile.width = inp
refreshScale()
end,
},
height = {
order = 4,
name = "Barsize",
desc = "The size of the bars.",
type = "range",
min = 10,
max = 100,
step = 1,
get = function() return DotIt.db.profile.height end,
set = function(self, inp) DotIt.db.profile.height = inp
refreshScale()
end,
},
scale = {
order = 5,
name = "Scale",
desc = "Scales everything.",
type = "range",
min = 0.5,
max = 3.0,
step = 0.1,
isPercent = true,
get = function() return DotIt.db.profile.scale end,
set = function(self, inp) DotIt.db.profile.scale = inp
DotIt.sb:SetScale(inp)
end,
},
maxtime = {
order = 6,
name = "Maximum time",
type = "range",
min = 5,
max = 100,
step = 1,
get = function() return DotIt.db.profile.maxtime end,
set = function(self, inp) DotIt.db.profile.maxtime = inp
refreshScale()
end,
},
steps = {
order = 7,
name = "Steps",
desc = "In how many steps the bar should be devided (if you have a 10 second bar and want a mark every second then you should input 10 here",
type = "range",
min = 1,
max = 20,
step = 1,
get = function() return DotIt.db.profile.steps end,
set = function(self, inp) DotIt.db.profile.steps = inp
refreshScale()
end,
},
maxneg = {
order = 8,
name = "Maximum negative time",
desc = "Time limit where the bar should be truncated (If you want standard bars that do not show negative values use 0 here)",
type = "range",
min = -10,
max = 0,
step = 1,
get = function() return DotIt.db.profile.maxneg end,
set = function(self, inp) DotIt.db.profile.maxneg = inp
refreshScale()
end,
},
horizontal = {
order = 1,
name = "Horizontal",
desc = "If we use a horizontal (true) or vertical (false) scale and bars.",
type = "toggle",
get = function() return DotIt.db.profile.horizontal end,
set = function(self, inp) DotIt.db.profile.horizontal = inp
refreshScale()
end,
},
loflag = {
order = 2,
name = "Left/above Flag",
desc = "If this is true the scale will be above or on the left side of the bars.",
type = "toggle",
get = function() return DotIt.db.profile.loflag end,
set = function(self, inp) DotIt.db.profile.loflag = inp
refreshScale()
end,
},
barcolors = {
order = 7,
name = "Barcolors",
desc = "Sets the colors for the bars.",
type = "group",
get = function(info)
local l1, l2 = _, info[#info]
if info[#info-1] == "positive" then
l1 = "barcolor"
else
l1 = "barcolorzero"
end
return DotIt.db.profile[l1][l2].r,
DotIt.db.profile[l1][l2].g,
DotIt.db.profile[l1][l2].b,
DotIt.db.profile[l1][l2].a
end,
set = function(info, r, g, b, a)
local l1, l2 = _, info[#info]
if info[#info-1] == "positive" then
l1 = "barcolor"
else
l1 = "barcolorzero"
end
DotIt.db.profile[l1][l2].r = r
DotIt.db.profile[l1][l2].g = g
DotIt.db.profile[l1][l2].b = b
DotIt.db.profile[l1][l2].a = a
end,
args = {
positive = {
order = 120,
name = "Positive Barcolor",
desc = "The color of the positive area of the bar.",
type = "group",
args = {
arcane = {
name = "Arcane",
type = "color",
hasAlpha = true,
},
fire = {
name = "Fire",
type = "color",
hasAlpha = true,
},
nature = {
name = "Nature",
type = "color",
hasAlpha = true,
},
frost = {
name = "Frost",
type = "color",
hasAlpha = true,
},
shadow = {
name = "Shadow",
type = "color",
hasAlpha = true,
},
holy = {
name = "Holy",
type = "color",
hasAlpha = true,
},
physical = {
name = "Physical",
type = "color",
hasAlpha = true,
},
},
},
negative = {
order = 121,
name = "Negative Barcolor",
desc = "The color of the negative area of the bar.",
type = "group",
args = {
arcane = {
name = "Arcane",
type = "color",
hasAlpha = true,
},
fire = {
name = "Fire",
type = "color",
hasAlpha = true,
},
nature = {
name = "Nature",
type = "color",
hasAlpha = true,
},
frost = {
name = "Frost",
type = "color",
hasAlpha = true,
},
shadow = {
name = "Shadow",
type = "color",
hasAlpha = true,
},
holy = {
name = "Holy",
type = "color",
hasAlpha = true,
},
physical = {
name = "Physical",
type = "color",
hasAlpha = true,
},
},
},
},
},
 
 
fonts = {
order = 200,
name = "Fonts",
type = "group",
get = function(info)
local l1, l2 = info[#info-1], info[#info]
return DotIt.db.profile.fonts[l1][l2]
end,
set = function(info, inp)
local l1, l2 = info[#info-1], info[#info]
DotIt.db.profile.fonts[l1][l2] = inp
refreshScale()
end,
args = {
bar = {
name = "Font of the bar",
type = "group",
desc = "The font of the bar.",
 
args = {
font = {
order = 1,
name = "Font",
type = "select",
dialogControl = 'LSM30_Font',
values = AceGUIWidgetLSMlists.font,
get = function()
for k, v in pairs(lsm:HashTable("font")) do
if v == DotIt.db.profile.fonts.bar.font then
return k
end
end
end,
set = function(info, inp)
DotIt.db.profile.fonts.bar.font = lsm:Fetch("font",inp)
end,
},
size = {
order = 2,
name = "Size",
type = "range",
min = 10,
max = 30,
},
monochrome = {
order = 3,
name = "Monochrome",
type = "toggle",
},
outline = {
order = 4,
name = "Outline",
type = "toggle",
},
thickoutline = {
order = 5,
name = "Thick Outline",
type = "toggle",
},
},
},
 
scale = {
name = "Font of the scale",
type = "group",
desc = "The font of the scale.",
args = {
font = {
order = 1,
name = "Font",
type = "select",
dialogControl = 'LSM30_Font',
values = AceGUIWidgetLSMlists.font,
get = function()
for k, v in pairs(lsm:HashTable("font")) do
if v == DotIt.db.profile.fonts.scale.font then
return k
end
end
end,
set = function(info, inp)
DotIt.db.profile.fonts.scale.font = lsm:Fetch("font",inp)
end,
},
size = {
order = 2,
name = "Size",
type = "range",
min = 10,
max = 30,
},
monochrome = {
order = 3,
name = "Monochrome",
type = "toggle",
},
outline = {
order = 4,
name = "Outline",
type = "toggle",
},
thickoutline = {
order = 5,
name = "Thick Outline",
type = "toggle",
},
},
},
 
 
},
},
},
},
spells = {
order = 999,
name = "Spells",
type = "group",
args = {
Insert = {
order = 0,
name = "Insert new Spell",
type = "group",
args = {
spellid = {
name = "Spell Id",
type = "input",
get = function() return tostring(tmp.spellid or "") end,
set = function(self, inp)
if not tonumber(inp) then
-- inp is a link
local temp = string.match(inp, "Hspell:(%d+)")
if temp and GetSpellInfo(temp) then tmp.spellid = tonumber(temp) return end
temp = string.match(GetSpellLink(inp), "Hspell:(%d+)")
if temp and GetSpellInfo(temp) then tmp.spellid = tonumber(temp) return end
error("Input has to be a number, a spell link or a spell name (last two options are only possible for spells in your spellbook!)")
else tmp.spellid = tonumber(inp) end
end,
},
duration = {
name = "Duration",
desc = "This should return the time. For example if you want that this spell is 10 seconds then type: return 10 (you can use any lua code here).",
multiline = true,
type = "input",
get = function() return tostring(tmp.duration or "") end,
set = function(self, inp)
if tonumber(inp) then
tmp.duration = tonumber(inp)
else
tmp.duration = inp
end
end,
},
applications = {
name = "Applications",
desc = "The maximum number of applications that are possible for this spell. This leads to a changing alpha value. If you want that your spell always uses the alpha value (instead of actual_applications/maxapplications) from the color input then leave this at one.",
type = "range",
min = 1,
max = 10,
step = 1,
get = function() return tmp.applications or 1 end,
set = function(self, inp)
if inp == 0 then inp = 1 end
tmp.applications = inp end,
},
color = {
name = "Positive color",
desc = "This value overrides the default values for this spell. For the default values see the color dialogue.",
type = "color",
hasAlpha = true,
get = function() if tmp.color then
return tmp.color.r, tmp.color.g, tmp.color.b, tmp.color.a
end
end,
set = function(self, rc, gc, bc, ac)
tmp.color = {r = rc, g = gc, b = bc, a = ac} end,
 
},
colorzero = {
name = "Negative color",
desc = "This value overrides the default values for this spell. For the default values see the color dialogue.",
type = "color",
hasAlpha = true,
get = function() if tmp.colorzero then
return tmp.colorzero.r, tmp.colorzero.g, tmp.colorzero.b, tmp.colorzero.a
end
end,
set = function(self, rc, gc, bc, ac) tmp.colorzero = {r = rc, g = gc, b = bc, a = ac} end,
 
},
typ = {
name = "Type",
desc = "The type of the Spell",
type = "select",
values = {Dots = "Dots", Shortbuffs = "Short Buffs", SharedDebuffs = "Shared debuffs", InternalCooldowns = "Internal cooldowns", Debuffs = "Debuffs", CCs = "CCs", Cooldowns = "Spell cooldowns", ItemCooldowns = "Item cooldowns"},
get = function() return tmp.typ end,
set = function(self, inp) tmp.typ = inp end,
},
class = {
name = "Type",
desc = "The type of the Spell",
type = "select",
values = {["DEATHKNIGHT"] = "Death Knight", ["DRUID"] = "Druid", ["HUNTER"] = "Hunter", ["MAGE"] = "Mage", ["PALADIN"] = "Paladin", ["ROGUE"] = "Rogue", ["SHAMAN"] = "Shaman", ["WARLOCK"] = "Warlock", ["WARRIOR"] = "Warrior", ["GENERAL"] = "General"},
get = function()
if not tmp.class then tmp.class = select(2, UnitClass("player")) end
return tmp.class
end,
set = function(self, inp) tmp.class = inp end,
},
exec = {
order = -1,
name = "Insert",
desc = "Insert the details you entered.",
type = "execute",
func = function() config:insertConfigSpell() end,
},
},
},
["Dots"] = {
name = "Dots",
type = "group",
args = {},
},
["Shortbuffs"] = {
name = "Short buffs",
desc = "Important buffs",
type = "group",
args = {},
},
["Debuffs"] = {
name = "Debuffs",
desc = "Effects that don't belong to the other categories",
type = "group",
args = {},
},
["CCs"] = {
name = "CCs",
desc = "CCs and Silences",
type = "group",
args = {},
},
["Cooldowns"] = {
name = "Spell cooldowns",
type = "group",
args = {},
},
["ItemCooldowns"] = {
name = "Item cooldowns",
type = "group",
args = {},
},
["InternalCooldowns"] = {
name = "Internal cooldowns",
type = "group",
args = {},
},
["SharedDebuffs"] = {
name = "Shared Debuffs",
desc = "Debuffs which can be refreshed from other people",
type = "group",
args = {},
},
 
},
},
},
 
}
 
local function initSpells(db)
for id, info in pairs(db.profile.spells) do
if type(info) == "number" then info = nil else
config:insertSpell(info, db)
end
end
end
local function initDefaultSpells(data)
-- class
local db = DotIt.Spells[select(2, UnitClass("player"))]
local info = newList()
 
info.class = select(2, UnitClass("player"))
for k, tab in pairs(db) do
info.typ = k
for id, val in pairs(tab) do
info.spellid = id
if type(val) == "number" then
val = tab[tab[id]]
end
info.duration = val
-- duration, applications, color, colorzero
if not val then
insertDefaultSpell(deepCopy(info), data)
else
local func = loadstring(val)
if func then
_, info.applications, info.color, info.colorzero = func(sp)
if not info.applications then info.applications = 1 end
insertDefaultSpell(deepCopy(info), data)
end
end
end
end
-- important for everyone
del(info)
db = DotIt.Spells["GENERAL"]
info = newList()
info.class = "GENERAL"
for k, tab in pairs(db) do
info.typ = k
for id, val in pairs(tab) do
info.spellid = id
if type(val) == "number" then
val = tab[tab[id]]
end
info.duration = val
-- duration, applications, color, colorzero
if not val then
insertDefaultSpell(deepCopy(info), data)
else
local func = loadstring(val)
if func then
_, info.applications, info.color, info.colorzero = func()
if not info.applications then info.applications = 1 end
insertDefaultSpell(deepCopy(info), data)
end
end
end
end
end
-- duration, applications, color, colorzero
function DotIt:GetSpellInfo(typ, id)
if not DotIt.db.profile["e"..string.lower(typ)] then return false end
if DotIt.db.profile.spells[id..typ] and DotIt.db.profile.spells[id..typ].typ == typ and not DotIt.db.profile.spells[id..typ].disabled then
local dur
if DotIt.db.profile.spells[id..typ].duration == "" then DotIt.db.profile.spells[id..typ].duration = nil end
if DotIt.db.profile.spells[id..typ].duration then
if type(DotIt.db.profile.spells[id..typ].duration) == "number" then
dur = DotIt.db.profile.spells[DotIt.db.profile.spells[id..typ].duration].duration
else
dur = DotIt.db.profile.spells[id..typ].duration
end
else
dur = nil
end
if dur then
dur = loadstring(dur)
dur = dur()
else
dur = 0
end
return dur, DotIt.db.profile.spells[id..typ].applications, deepCopy(DotIt.db.profile.spells[id..typ].color), deepCopy(DotIt.db.profile.spells[id..typ].colorzero)
end
return false
end
function config:OnInitialize()
 
self = DotIt
local db = newList()
db.defaults = newList()
db.defaults.profile = {
amaxtimes = {}, eiconpos = false, ehidescale = false,
owndots = false, scaletext = true, edots = true, edebuffs = true,
eccs = true, eshortbuffs = true,
spells = {},
scale = 1.0,
height = 10,
fonts = {scale = {font = "Fonts\\FRIZQT__.TTF", size = 11, outline = true,
thickoutline = false, monochrome = true},
bar = {font = "Fonts\\FRIZQT__.TTF", size = 11, outline = true,
thickoutline = false, monochrome = true}
},
position = {x = 600, y = 400},
width = 200, maxtime = 30,
steps = 5, maxneg = -1, horizontal = true,
loflag = false,
barcolor = {
physical = {r = 0, g = 0, b = 0, a = 1.0},
nature = {r = 34/255, g = 139/255, b = 34/255, a = 1.0},
shadow = {r = 148/255, g = 0, b = 211/255, a = 1.0},
fire = {r = 1, g = 0, b = 0, a = 1.0},
frost = {r = 0, g = 0, b = 1, a = 1.0},
arcane = {r = 216/255, g = 191/255, b = 216/255, a = 1.0},
holy = {r = 1.0, g = 215/255, b = 0, a = 1.0}},
 
barcolorzero = {
physical = {r = 0, g = 0, b = 0, a = 0.2},
nature = {r = 34/255, g = 139/255, b = 34/255, a = 0.2},
shadow = {r = 148/255, g = 0, b = 211/255, a = 0.2},
fire = {r = 1, g = 0, b = 0, a = 0.2},
frost = {r = 0, g = 0, b = 1, a = 0.2},
arcane = {r = 216/255, g = 191/255, b = 216/255, a = 0.2},
holy = {r = 1.0, g = 215/255, b = 0, a = 0.2}},
scaletexture = nil,
bartexture = nil,
locked = false
}
 
 
lsm:Register("statusbar", "DotIt - Default", "Interface\\ChatFrame\\ChatFrameBackground") --]]
initDefaultSpells(db)
db = LibStub:GetLibrary("AceDB-3.0"):New("DotITDB", db.defaults)
DotIt.db = db
if DotIt.db.profile.removedots then
self:RegisterEvent("UNIT_TARGET", "TargetChanged")
end
initSpells(db)
 
 
 
 
DotItConfig.args.profile = acedboptions:GetOptionsTable(DotIt.db)
DotItConfig.args.profile.order = -1
aceconfig:RegisterOptionsTable("DotIt", DotItConfig)
acedialog:AddToBlizOptions("DotIt")
acedialog:SetDefaultSize("DotIt", 900, 600)
InterfaceOptionsFrame:SetWidth(900)
end
trunk/DotIt/DotIT.toc New file
0,0 → 1,16
## Interface: 30000
## Title: DotIT
## Notes: Tracks your debuffs on enemy targets.
## Author: Eggi
## Version: 1.0
## SavedVariables: DotITDB
## OptionalDeps: SharedMedia
 
 
libs.xml
 
core.lua
spells.lua
modules\modules.xml
config.lua
cooldowns.lua
trunk/DotIt/cooldowns.lua New file
0,0 → 1,121
if not DotIt then
error("DotIt has to be loaded first")
end
local newList, del, deepDel, deepCopy = DotIt.sb:GetRecyclingFunctions()
local cooldowns = DotIt:NewModule("cooldowns")
 
local oncd = newList()
local mincd = 3
local match = string.match
local GetSpellLink = GetSpellLink
local GetSpellName = GetSpellName
local GetSpellCooldown = GetSpellCooldown
 
local books = {
"BOOKTYPE_SPELL",
"BOOKTYPE_PET"
}
local function getSpellId(link)
return match(link, "Hspell:(%d+)")
end
local function getItemId(link)
return match(link, "Hitem:(%d+)")
end
local function spellNeeded(id)
return DotIt:GetSpellInfo("Cooldowns", id)
end
local function itemNeeded(id)
return DotIt:GetSpellInfo("ItemCooldowns", id)
end
 
local start, duration, enabled, id, dur
local function spellUpdate()
for _, book in pairs(books) do
local i = 1
local link = GetSpellLink(i, book)
local name = GetSpellName(i, book)
 
local prvname = ""
while link do
 
if prvname ~= name then
start, duration, enabled = GetSpellCooldown(i, book)
-- for example vanish uses this mechanic
if enabled == 0 then
if oncd[link] then
id = oncd[link]
oncd[link] = nil
DotIt:SpellCooldownEnd(id)
end
else
-- this spell is ready
if start == 0 then
if oncd[link] then
id = oncd[link]
oncd[link] = nil
DotIt:SpellCooldownEnd(id)
end
else
id = getSpellId(link)
if spellNeeded(id) then
dur = duration - (GetTime() - start)
if dur > mincd then
oncd[link] = id
DotIt:SpellCooldownStart(id, dur)
end
end
end
end
end
 
i = i + 1
prvname = name
name = GetSpellName(i, book)
link = GetSpellLink(i, book)
end
end
end
local function bagUpdate()
for i = 0, 4 do
for j = 1, GetContainerNumSlots(i) do
local start, duration, enable = GetContainerItemCooldown(i, j)
if start ~= 0 then
local link = GetContainerItemLink(i, j)
local id = getItemId(link)
if itemNeeded(id) then
local dur = duration - (GetTime() - start)
DotIt:StartItemCooldown(id, dur)
end
end
end
end
end
local function inventoryUpdate()
for i = 1, 23 do
local start, duration, enable = GetInventoryItemCooldown("player", i)
if start ~= 0 then
local link = GetInventoryItemLink("player", i)
local id = getItemId(link)
if itemNeeded(id) then
local dur = duration - (GetTime() - start)
DotIt:StartItemCooldown(id, dur)
end
end
end
end
 
function DotIt:SpellUpdate()
spellUpdate()
end
function cooldowns:OnInitialize()
-- spells
DotIt:RegisterEvent("SPELL_UPDATE_COOLDOWN", function() spellUpdate() end)
DotIt:RegisterEvent("SPELLS_CHANGED", function() spellUpdate() end)
DotIt:RegisterEvent("PET_BAR_UPDATE_COOLDOWN", function() spellUpdate() end)
DotIt:RegisterEvent("ZONE_CHANGED_NEW_AREA", function() spellUpdate() end)
 
-- items (do not need to call)
DotIt:RegisterEvent("BAG_UPDATE_COOLDOWN", function() bagUpdate() end)
DotIt:RegisterEvent("UNIT_INVENTORY_CHANGED", function() inventoryUpdate() end)
DotIt:RegisterEvent("ZONE_CHANGED_NEW_AREA", function() bagUpdate() inventoryUpdate() end)
end
\ No newline at end of file
trunk/DotIt/core.lua New file
0,0 → 1,486
DotIt = LibStub("AceAddon-3.0"):NewAddon("DotIT-0.1", "AceEvent-3.0")
 
local sb = LibStub:GetLibrary("SBar-0.1")
local cps = 0
DotIt.sb = sb
local newList, del, deepDel, deepCopy = sb:GetRecyclingFunctions()
DotIt.colorcache = {}
local expT = newList()
 
 
 
local function hideFixedText(uid, pos)
local bars = sb:GetBars()
if not bars then return end
for _, bar in pairs(bars) do
if bar.pos and bar.pos == pos then return end
end
sb:SetFixedText(nil, pos)
end
local function hideBar(info)
local bars = sb:GetBars()
if not bars then return end
for _, bar in pairs(bars) do
if bar.data and bar.data.dguid == info.dguid and bar.data.spellid == info.spellid and bar.data.typ == info.typ then
bar.frame:Hide()
bar.frame = nil
local pos = bar.pos
bar.pos = nil
bar.data = nil
bar.start = nil
bar.dur = nil
deepDel(bar)
bar = nil
hideFixedText(info.dguid, pos)
end
end
end
 
local function findFirstEmptyBar(init)
local bars = sb:GetBars()
if not bars then return init end
for i = init, 10 do
local flag = true
for _, bar in pairs(bars) do
if bar.pos and bar.pos == i then
flag = false
end
end
if flag then return i end
end
end
local function getBarPos(uid, typ)
if typ == "Shortbuffs" then
return 0
elseif typ == "Cooldowns" or typ == "ItemCooldowns" or typ == "InternalCooldowns" then
if DotIt.db.profile.ecooldowns then
return 1
elseif DotIt.db.profile.eitemcooldowns then
return 1
else
return 0
end
else
local init = 0
if DotIt.db.profile.eshortbuffs then
init = init + 1
end
if DotIt.db.profile.ecooldowns or DotIt.db.profile.ein then
init = init + 1
end
local bars = sb:GetBars()
if not bars then return init end
local maxpos = init
local prv = init
for _, bar in pairs(bars) do
if bar.data then
if bar.data.dguid == uid then
return bar.pos
end
end
end
return findFirstEmptyBar(init)
end
end
local function isBarActive(info)
local bars = sb:GetBars()
if not bars then return end
for _, bar in pairs(bars) do
if bar.data and bar.data.dguid == info.dguid and bar.data.spellid == info.spellid and bar.data.typ == info.typ then
return true
end
end
return false
end
local function setBarDur(info, dur)
local bars = sb:GetBars()
if bars then
for _, bar in pairs(bars) do
if bar.data and bar.data.dguid == info.dguid and bar.data.spellid == info.spellid then
bar.dur = dur
bar.start = 0
return
end
end
end
local dur, appl, color, colorzero = DotIt:GetSpellInfo(info.typ, info.spellid)
if not color then color = {r = 1, g = 1, b = 1, a = 1} end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
 
if not dur then return end
if info and info.typ and not isBarActive(info) then
sb:CreateBar(info, dur, 0, nil, select(3, GetSpellInfo(info.spellid)), getBarPos(info.dguid, info.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
end
end
 
local function setBarColor(info, color, colorzero)
local bars = sb:GetBars()
if not bars then return end
for _, bar in pairs(bars) do
if bar.data and bar.data.dguid == info.dguid and bar.data.spellid == info.spellid then
bar.color = deepCopy(color)
bar.colorzero = deepCopy(colorzero)
bar.tex:SetVertexColor(color.r, color.g, color.b, color.a)
bar.texg:SetVertexColor(colorzero.r, colorzero.g, colorzero.b, colorzero.a)
end
end
end
 
function DotIt:StartItemCooldown(itemid, duration)
if not DotIt:GetSpellInfo("ItemCooldowns", itemid) then return end
local infocd = newList()
infocd.typ = "ItemCooldowns"
infocd.spellid = itemid
infocd.dguid = UnitGUID("player")
 
local dur, appl, color, colorzero = DotIt:GetSpellInfo(infocd.typ, itemid)
if not color then color = {r = 1, g = 1, b = 1, a = 1} end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
 
 
if not isBarActive(infocd) and getBarPos(infocd.dguid, infocd.typ) then
if dur == 0 then
sb:CreateBar(deepCopy(infocd), duration, 0, nil, select(3, GetSpellInfo(itemid)), getBarPos(infocd.dguid, infocd.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
else
sb:CreateBar(deepCopy(infocd), dur, 0, nil, select(3, GetSpellInfo(itemid)), getBarPos(infocd.dguid, infocd.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
end
end
del(infocd)
end
local function schoolColor(spellschool)
if spellschool == 1 then
return deepCopy(DotIt.db.profile.barcolor.physical), deepCopy(DotIt.db.profile.barcolorzero.physical)
elseif spellschool == 2 then
return deepCopy(DotIt.db.profile.barcolor.holy), deepCopy(DotIt.db.profile.barcolorzero.holy)
elseif spellschool == 4 then
return deepCopy(DotIt.db.profile.barcolor.fire), deepCopy(DotIt.db.profile.barcolorzero.fire)
elseif spellschool == 8 then
return deepCopy(DotIt.db.profile.barcolor.nature), deepCopy(DotIt.db.profile.barcolorzero.nature)
elseif spellschool == 16 then
return deepCopy(DotIt.db.profile.barcolor.frost), deepCopy(DotIt.db.profile.barcolorzero.frost)
elseif spellschool == 32 then
return deepCopy(DotIt.db.profile.barcolor.shadow), deepCopy(DotIt.db.profile.barcolorzero.shadow)
elseif spellschool == 64 then
return deepCopy(DotIt.db.profile.barcolor.arcane), deepCopy(DotIt.db.profile.barcolorzero.arcane)
end
end
function DotIt:getTyp(spellid)
if DotIt:GetSpellInfo("Dots", spellid) then
return "Dots"
elseif DotIt:GetSpellInfo("Debuffs", spellid) then
return "Debuffs"
elseif DotIt:GetSpellInfo("CCs", spellid) then
return "CCs"
elseif DotIt:GetSpellInfo("Shortbuffs", spellid) then
return "Shortbuffs"
elseif DotIt:GetSpellInfo("InternalCooldowns", spellid) then
return "InternalCooldowns"
elseif DotIt:GetSpellInfo("SharedDebuffs", spellid) then
return "SharedDebuffs"
else return false end
end
local function createSpellInfo(dguid, spellid, typ)
if not typ then return false end
local infos = newList()
infos.dguid = dguid
infos.spellid = spellid
infos.typ = typ
return infos
end
 
 
function DotIt:SpellCooldownStart(spellid, duration)
if not DotIt:GetSpellInfo("Cooldowns", spellid) then return end
local infocd = newList()
infocd.typ = "Cooldowns"
infocd.spellid = spellid
infocd.dguid = UnitGUID("player")
 
local dur, appl, color, colorzero = DotIt:GetSpellInfo(infocd.typ, spellid)
if not color then color = {r = 1, g = 1, b = 1, a = 1} end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
 
 
if not isBarActive(infocd) and getBarPos(infocd.dguid, infocd.typ) then
if dur == 0 then
sb:CreateBar(deepCopy(infocd), duration, 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(infocd.dguid, infocd.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
else
sb:CreateBar(deepCopy(infocd), dur, 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(infocd.dguid, infocd.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
end
end
del(infocd)
end
function DotIt:SpellCooldownEnd(spellid)
if not DotIt:GetSpellInfo("Cooldowns", spellid) then return end
local info = newList()
info.typ = "Cooldowns"
info.spellid = spellid
info.dguid = UnitGUID("player")
 
hideBar(info)
end
function DotIt:PLAYER_LOGIN()
DotIt.sb:CreateScale(DotIt.db.profile.width, DotIt.db.profile.maxtime, DotIt.db.profile.steps,
DotIt.db.profile.maxneg, DotIt.db.profile.position,DotIt.db.profile.horizontal,
DotIt.db.profile.loflag, DotIt.db.profile.scaletexture, DotIt.db.profile.locked,
DotIt.db.profile.scale, DotIt.db.profile.height, DotIt.db.profile.fonts,
DotIt.db.profile.scaletext, DotIt.db.profile.amaxtimes, DotIt.db.profile.ehidescale,
DotIt.db.profile.eiconpos)
self:SpellUpdate()
end
function DotIt:OnInitialize()
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED", "CombatLogEvent")
self:RegisterEvent("UNIT_COMBO_POINTS", "SaveCombo")
self:RegisterEvent("PLAYER_LOGIN")
end
local function removeDots()
local init = 0
if DotIt.db.profile.eshortbuffs then
init = init + 1
end
if DotIt.db.profile.ecooldowns then
init = init + 1
end
local bars = sb:GetBars()
if not bars then return end
for _, bar in pairs(bars) do
if bar.pos and bar.pos >= init then
bar.frame:Hide()
bar.frame = nil
local pos = bar.pos
bar.pos = nil
bar.data = nil
deepDel(bar)
bar = nil
end
end
end
local function addDots()
 
for i = 1, 40 do
if select(8, UnitDebuff("target", i)) then
local name, rank, _, application, _, _, expTime, ismine = UnitDebuff("target", i)
if name then
if appl == 0 then appl = 1 end
local link = GetSpellLink(name, rank)
if link then
local spellid = string.match(link, "Hspell:(%d+)")
local info = createSpellInfo(UnitGUID("target"), spellid, DotIt:getTyp(spellid))
if info.typ == "SharedDebuffs" or ismine then
if info then
spellid = tonumber(spellid)
local dur, appl, color, colorzero = DotIt:GetSpellInfo("Shortbuffs", spellid)
dur = expTime - GetTime()
 
if not color then
color = deepCopy(DotIt.colorcache[spellid])
 
end
if not color then
color = {r = 1, g = 1, b = 1, a = 1}
end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
if not appl or appl == 0 then appl = 1 end
if not application or application == 0 then application = 1 end
color.a = (application / appl) * (color.a or 1)
 
if (not isBarActive(info)) and getBarPos(info.dguid, info.typ) then
sb:CreateBar(deepCopy(info), dur, 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(info.dguid, info.typ), color, colorzero, DotIt.db.profile.bartexture, DotIt.db.profile.scale, DotIt.db.profile.fonts)
end
end
end
end
end
end
end
end
function DotIt:TargetChanged(msg, changer)
if changer == "player" then
removeDots()
addDots()
end
end
local function debuffCheck(cname, id)
for i = 1, 40 do
local name, rank, icon, count, debuffType, duration, expirationTime, isMine, isStealable = UnitDebuff("target", i)
if isMine and cname == name then
return name, rank, icon, count, debuffType, duration, expirationTime, isMine, isStealable
end
if DotIt:getTyp(id) == "SharedDebuffs" and cname == name then
return name, rank, icon, count, debuffType, duration, expirationTime, isMine, isStealable
end
end
end
function DotIt:CombatLogEvent(msg, timestamp, event, sguid, sname, sflags, dguid, dname, dflags, spellid, spellname, spellschool, auraType, application )
-- buffs
 
local info, dur, appl, color, colorzero
if auraType == "BUFF" then
if event == "SPELL_AURA_APPLIED" and (dguid == UnitGUID("player") or dguid == UnitGUID("pet")) then
info = createSpellInfo(UnitGUID("player"), spellid, self:getTyp(spellid))
if not info then return end
dur, appl, color, colorzero = DotIt:GetSpellInfo("Shortbuffs", spellid)
if not dur then return end
if not tonumber(dur) then return end
if not color then
color, colorzero = schoolColor(spellschool)
end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
if appl then
color.a = (1/appl) * (color.a or 1)
end
 
if not isBarActive(info) and getBarPos(info.dguid, info.typ) then
sb:CreateBar(deepCopy(info), tonumber(dur), 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(info.dguid, info.typ), color, colorzero, self.db.profile.bartexture, self.db.profile.scale, self.db.profile.fonts)
end
deepDel(info)
info = nil
-- internal cooldowns
info = createSpellInfo(UnitGUID("player"), spellid, "InternalCooldowns")
dur, appl, color, colorzero = DotIt:GetSpellInfo("InternalCooldowns", spellid)
if not dur then return end
if not tonumber(dur) then return end
if not color then
color, colorzero = schoolColor(spellschool)
end
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
if appl then
color.a = (1/appl) * (color.a or 1)
end
if not isBarActive(info) and getBarPos(info.dguid, info.typ) then
sb:CreateBar(deepCopy(info), dur, 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(info.dguid, info.typ), color, colorzero, self.db.profile.bartexture, self.db.profile.scale, self.db.profile.fonts)
end
-- ic end
elseif event == "SPELL_AURA_REMOVED" and (dguid == UnitGUID("player") or dguid == UnitGUID("pet")) then
info = createSpellInfo(UnitGUID("player"), spellid, self:getTyp(spellid))
if not info then return end
if not (info.typ == "InternalCooldowns") then
hideBar(info)
end
elseif event == "SPELL_AURA_APPLIED_DOSE" and (dguid == UnitGUID("player") or dguid == UnitGUID("pet")) then
info = createSpellInfo(UnitGUID("player"), spellid, self:getTyp(spellid))
if not info then return end
dur, appl, color, colorzero = self:GetSpellInfo("Shortbuffs", spellid)
if not color then
color, colorzero = schoolColor(spellschool)
end
color.a = (application / appl) * (color.a or 1)
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
setBarDur(deepCopy(info), self:GetSpellInfo("Shortbuffs", spellid))
setBarColor(info, color, colorzero)
elseif event == "SPELL_AURA_REFRESH" and (dguid == UnitGUID("player") or dguid == UnitGUID("pet")) then
info = createSpellInfo(UnitGUID("player"), spellid, self:getTyp(spellid))
if not info then return end
dur, appl, color, colorzero = self:GetSpellInfo("Shortbuffs", spellid)
setBarDur(deepCopy(info), dur)
end
elseif auraType == "DEBUFF" then
-- debuffs
if event == "SPELL_AURA_APPLIED" then
if DotIt:GetSpellInfo("SharedDebuffs", spellid) or (sguid == UnitGUID("player")) then
if (self.db.profile.owndots and dguid == UnitGUID("target")) or (not self.db.profile.owndots) then
info = createSpellInfo(dguid, spellid, self:getTyp(spellid))
if not info then return end
expT[spellid..dguid] = select(7, debuffCheck(spellname, spellid))
dur, appl, color, colorzero = self:GetSpellInfo(info.typ, spellid)
if not color then
color, colorzero = schoolColor(spellschool)
end
 
if appl then
color.a = (1/appl) * (color.a or 1)
end
 
if not colorzero then colorzero = deepCopy(color); colorzero.a = 0.1 end
if not isBarActive(info) and getBarPos(info.dguid, info.typ) then
sb:CreateBar(deepCopy(info), dur, 0, nil, select(3, GetSpellInfo(spellid)), getBarPos(info.dguid, info.typ), color, colorzero, self.db.profile.bartexture, self.db.profile.scale, self.db.profile.fonts)
if not self.db.profile.owndots then
sb:SetFixedText(dname, getBarPos(info.dguid, info.typ))
end
DotIt.colorcache[spellid] = deepCopy(color)
end
end
end
-- this event does not provide sguid! returns 0
elseif event == "SPELL_AURA_REFRESH" and dguid == UnitGUID("target") then
------------------------------------------
--
-- temorary fix! (because sguid is alway 0)
--
------------------------------------------
local expirationTime = select(7, debuffCheck(spellname, spellid))
if not expirationTime then return end
if not expT[spellid..dguid] then return end
if expT[spellid..dguid] == expirationTime then return end
expT[spellid..dguid] = expirationTime
------------------------------------------
--
-- temorary fix end!
--
------------------------------------------
info = createSpellInfo(dguid, spellid, self:getTyp(spellid))
if not info then return end
setBarDur(deepCopy(info), self:GetSpellInfo(info.typ, spellid))
-- this event does not provide sguid! returns 0
elseif event == "SPELL_AURA_APPLIED_DOSE" and dguid == UnitGUID("target") then
------------------------------------------
--
-- temorary fix! (because sguid is alway 0)
--
------------------------------------------
local expirationTime = select(7, debuffCheck(spellname, spellid))
if not expirationTime then return end
if not expT[spellid..dguid] then return end
if expT[spellid..dguid] == expirationTime then return end
expT[spellid..dguid] = expirationTime
------------------------------------------
--
-- temorary fix end!
--
------------------------------------------
info = createSpellInfo(dguid, spellid, self:getTyp(spellid))
if not info then return end
dur, appl, color, colorzero = self:GetSpellInfo(info.typ, spellid)
if not color then
color, colorzero = schoolColor(spellschool)
end
if appl then
color.a = (application/appl) * (color.a or 1)
end
setBarDur(deepCopy(info), self:GetSpellInfo(info.typ, spellid))
setBarColor(info, color, colorzero)
elseif event == "SPELL_AURA_REMOVED" and (sguid == UnitGUID("player") or DotIt:getTyp(spellid) == "SharedDebuffs") then
info = createSpellInfo(dguid, spellid, self:getTyp(spellid))
if not info then return end
expT[spellid..dguid] = nil
hideBar(info)
end
end
if info then
deepDel(info)
end
end
function DotIt:SaveCombo(msg, unit)
if GetComboPoints("player") ~= 0 then
cps = GetComboPoints("player")
end
end
function DotIt:GetComboPoints()
return cps
end
function DotIt:checkGlyph(name)
for i = 1, 6 do
local glyph = select(3, GetGlyphSocketInfo(i))
if glyph == name then
return true
else
return false
end
end
end
function DotIt:scanItem(id)
for i = 0, 18 do
if string.find(GetInventoryItemLink("player", i), id) then return true end
end
return false
end
\ No newline at end of file
trunk/DotIt/libs.xml New file
0,0 → 1,16
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<script file="libs\LibStub\LibStub.lua"/>
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
<Include file="libs\CallbackHandler-1.0\CallbackHandler-1.0.xml"/>
<Include file="libs\AceEvent-3.0\AceEvent-3.0.xml"/>
<Include file="libs\AceDB-3.0\AceDB-3.0.xml"/>
<Include file="libs\AceDBOptions-3.0\AceDBOptions-3.0.xml"/>
<Include file="libs\AceGUI-3.0\AceGUI-3.0.xml"/>
<Include file="libs\AceConfig-3.0\AceConfig-3.0.xml"/>
<Include file="libs\AceLocale-3.0\AceLocale-3.0.xml"/>
<Include file="libs\LibSharedMedia-3.0\LibSharedMedia-3.0.lua"/>
<Include file="libs\AceHook-3.0\AceHook-3.0.xml"/>
<Include file="libs\AceGUI-3.0-SharedMediaWidgets\widget.xml"/>
<script file="libs\sbar.lua"/>
</Ui>
\ No newline at end of file
trunk/DotIt/modules/generalspells.lua New file
0,0 → 1,25
local sp = DotIt:GetModule("spells")
local generalspells = {
Shortbuffs = {
-- Casted by a Shaman but important for everyone
-- Heroism -- Bloodlust
[2825] = [[return DotIt.sp:GPB(2825), 1, {r = 0,g = 0, b = 1, a = 1}]],
[32182] = [[return DotIt.sp:GPB(32182), 1, {r = 0,g = 0, b = 1, a = 1}]],
-- power infusion
[10060] = [[return DotIt.sp:GPB(10060)]],
-- Tricks of the Trade
[57934] = [[local name = GetSpellInfo(57934) local dur, ismine = select(7, UnitBuff("player", name)) if not dur then dur = 0 else dur = dur-GetTime() end if ismine then dur = 0 end return dur, 1, {r = 1,g = 0, b = 0, a = 1}]],
-- Potion effects
-- Potion of speed
[53908] = [[return DotIt.sp:GPB(53908), 1, {r = 0,g = 1, b = 0, a = 1}]],
-- Potion of Wild Magic
[53909] = [[return DotIt.sp:GPB(53909), 1, {r = 0,g = 1, b = 0, a = 1}]],
-- ferocious inspiration
[34455] = [[return DotIt.sp:GPB(34455), 1, {r = 0,g = 1, b = 0, a = 1}]],
[34459] = 34455,
[34459] = 34460,
-- replenishment
[57669] = [[return DotIt.sp:GPB(57669), 1, {r = 0,g = 1, b = 0, a = 1}]],
},
}
sp:insertSpells(generalspells, "GENERAL")
\ No newline at end of file
trunk/DotIt/modules/rogue.lua New file
0,0 → 1,172
local sp = DotIt:GetModule("spells")
local rogue = {
Dots = {
-- Garrote
[8631] = 703,
[8632] = 703,
[8633] = 703,
[11289] = 703,
[11290] = 703,
[26839] = 703,
[26884] = 703,
[48676] = 703,
[48675] = 703,
[703] = [[if DotIt:checkGlyph(56812) then return 15 else return 18 end]],
-- Rupture
[8639] = 1943,
[8640] = 1943,
[11273] = 1943,
[11274] = 1943,
[11275] = 1943,
[26867] = 1943,
[48671] = 1943,
[48672] = 1943,
[1943] = [[return DotIt.sp:GMTD(1943)]],
-- Deadly Poison
[11353] = 2818,
[2819] = 2818,
[11354] = 2818,
[25349] = 2818,
[26968] = 2818,
[27187] = 2818,
[57969] = 2818,
[57970] = 2818,
[2818] = [[return 12, 5]],
},
Debuffs = {-- Wound Poison
[13222] = 13218,
[13223] = 13218,
[13224] = 13218,
[27189] = 13218,
[57974] = 13218,
[57975] = 13218,
[13218] = [[return 15]],
-- Crippling Poison
[3409] = [[return 12]],
-- Mind-numbing Poison
[5760] = [[return 10]],
 
-- dismantle
[51722] = [[return DotIt.sp:GMTD(51722)]],
-- deadly throw
[26679] = [[return DotIt.sp:GMTD(26679)]],
[48673] = 26679,
[48674] = 26679,
-- riposte
[14251] = [[return DotIt.sp:GMTD(14251)]],
 
},
SharedDebuffs = {
-- expose armor
-- 3.1
[8647] = [[return DotIt.sp:GTD(8647)]],
},
Shortbuffs = {
-- Slice and Dice
[6774] = 5171,
[5171] = [[return DotIt.sp:GPB(5171), nil, {r = 222/255, g = 184/255, b = 135/255, a = 1}]],
-- Blade flurry
[13877] = [[return DotIt.sp:GPB(13877), nil, {r = 219/255,g = 219/255, b = 112/255, a = 1}]],
-- Hunger for Blood
[51662] = [[return DotIt.sp:GPB(51662), 3, {r = 142/255,g = 35/255, b = 35/255, a = 1}]],
-- Adrenaline Rush
[13750] = [[return DotIt.sp:GPB(13750), 3, {r = 1,g = 1, b = 1, a = 1}]],
-- evsion
[5277] = [[return DotIt.sp:GPB(5277)]],
[26669] = [[return DotIt.sp:GPB(26669)]],
-- sprint
[2983] = [[return DotIt.sp:GPB(2983)]],
[8696] = [[return DotIt.sp:GPB(8696)]],
[11305] = [[return DotIt.sp:GPB(11305)]],
-- feint
[48659] = [[return DotIt.sp:GPB(48659)]],
-- vanish
[1856] = [[return DotIt.sp:GPB(1856)]],
[1857] = 1857,
[26889] = 1857,
-- cloak of shadows
[31224] = [[return DotIt.sp:GPB(31224)]],
-- envenom
[32684] = [[return DotIt.sp:GPB(32684), nil, {r = 0, g = 1, b = 0, a = 1}]],
[32645] = 32684,
[57992] = 32684,
[57993] = 32684,
-- shadow dance
[51713] = [[return DotIt.sp:GPB(51713)]],
-- shadowstep
[36554] = [[return DotIt.sp:GPB(36554)]],
 
},
Cooldowns = {
-- kidney shot
[8643] = 5277,
[408] = 5277,
-- shadowstep
[36554] = 5277,
-- shadow dance
[51713] = 5277,
-- cold blood
[14177] = 5277,
-- killing spree
[51690] = 5277,
-- premeditation
[14183] = 5277,
-- preperation
[14185] = 5277,
-- riposte
[14251] = 5277,
-- cloak of shadows
[31224] = 5277,
-- blind
[2094] = 5277,
-- vanish
[1856] = 5277,
[1857] = 5277,
[26889] = 5277,
-- stealth
[1785] = 5277,
[1784] = 5277,
[1786] = 5277,
[1787] = 5277,
-- distract
[1725] = 5277,
-- dismantle
[51722] = 5277,
-- feint
[1966] = 5277,
[6768] = 5277,
[8637] = 5277,
[11303] = 5277,
[25302] = 5277,
[27448] = 5277,
[48658] = 5277,
[48659] = 5277,
-- kick
[1766] = 5277,
-- evsion
[5277] = [[return 0]],
[26669] = 5277,
-- sprint
[2983] = 5277,
[8696] = 5277,
[11305] = 5277,
-- Tricks of the Trade
[57934] = [[return 0, 1, {r = 1, g = 0, b = 0, a = 1}]],
},
CCs = {
-- cheap shot
[1833] = [[return DotIt.sp:GMTD(1833)]],
-- sap
[6770] = [[return DotIt.sp:GMTD(6770)]],
[2070] = 6770,
[11297] = 6770,
[51724] = 6770,
-- blind
[2094] = [[return 10]],
-- kidney shot
[8643] = [[return DotIt.sp:GMTD(8643)]],
[408] = [[return DotIt.sp:GMTD(408)]],
},
}
 
sp:insertSpells(rogue, "ROGUE")
trunk/DotIt/modules/warlock.lua New file
0,0 → 1,260
local sp = DotIt:GetModule("spells")
local warlock = { Dots = {
-- Immolate
[707] = 348,
[1094] = 348,
[2941] = 348,
[11665] = 348,
[11667] = 348,
[11668] = 348,
[25309] = 348,
[27215] = 348,
[47810] = 348,
[47811] = 348,
[348] = [[return DotIt.sp:GMTD(348)]],
-- Corruption
[6222] = 172,
[6223] = 172,
[7648] = 172,
[11671] = 172,
[11672] = 172,
[25311] = 172,
[27216] = 172,
[47812] = 172,
[47813] = 172,
[172] = [[return DotIt.sp:GMTD(172)]],
-- Curse of Agony
[1014] = 980,
[6217] = 980,
[11711] = 980,
[11712] = 980,
[11713] = 980,
[27218] = 980,
[47863] = 980,
[47864] = 980,
[980] = [[return DotIt.sp:GMTD(980)]],
-- Siphon Life
[18879] = 18265,
[18880] = 18265,
[18881] = 18265,
[27264] = 18265,
[30911] = 18265,
[47861] = 18265,
[47862] = 18265,
[18265] = [[return DotIt.sp:GMTD(18265)]],
-- Seed of Corruption
[47835] = 27243,
[47836] = 27243,
[27243] = [[return DotIt.sp:GMTD(27243)]],
-- Unstable Affliction
[30404] = 30108,
[30405] = 30108,
[47841] = 30108,
[47843] = 30108,
[30108] = [[return DotIt.sp:GMTD(30108)]],
-- Haunt
[59161] = 48181,
[59163] = 48181,
[59164] = 48181,
[48181] = [[return 12]],
-- drain soul .. is channeled
--[1120] = [[return DotIt.sp:GMTD(1120)]],
--[8288] = 1120,
--[8289] = 1120,
--[11675] = 1120,
--[27217] = 1120,
--[47855] = 1120,
-- hellfire
[1949] = [[return 15]],
[11683] = 1949,
[11684] = 1949,
[27213] = 1949,
[47823] = 1949,
-- rain of fire
[5740] = [[return 8]],
[6219] = 5740,
[11677] = 5740,
[11678] = 5740,
[27212] = 5740,
[47819] = 5740,
[47820] = 5740,
-- shadowflame
[47897] = [[return 8]],
[61290] = 47897,
 
},
Debuffs = {
-- shadow embrace
[32386] = [[return DotIt.sp:GMTD(32386), 2]],
[32388] = 32386,
[32389] = 32386,
[32390] = 32386,
[32391] = 32386,
-- pyroclasm
[18093] = [[retur 3]],
-- imprved fear (nightmare)
[60946] = [[return 5]],
[60947] = [[return 5]],
-- aftermath
[18118] = [[return 5]],
-- curse of the elements
[1490] = [[return DotIt.sp:GMTD(1490)]],
[11721] = 1490,
[11722] = 1490,
[27228] = 1490,
[47865] = 1490,
-- curse of recklessness
[704] = [[return DotIt.sp:GMTD(59671)]],
[7658] = 704,
[7659] = 704,
[11717] = 704,
[27226] = 704,
[57595] = 704,
-- challenging howl
[59671] = [[return DotIt.sp:GMTD(59671)]],
-- curse of weakness
[702] = [[return DotIt.sp:GMTD(702)]],
[1108] = 702,
[6205] = 702,
[7646] = 702,
[11707] = 702,
[27224] = 702,
[11708] = 702,
[30909] = 702,
[50511] = 702,
-- curse of tongues
[1714] = [[return DotIt.sp:GMTD(1714)]],
[11719] = 1714,
 
-- curse of doom
[603] = [[return DotIt.sp:GMTD(603)]],
[30910] = 603,
[47867] = 603,
-- curse of exhaustion
[18223] = [[return DotIt.sp:GMTD(18223)]],
},
CCs = {
-- demon charge
[54785] = [[return DotIt.sp:GMTD(54785)]],
-- howl of terror
[5484] = [[return 6]],
[17928] = [[return 8]],
-- fear
[5782] = [[return DotIt.sp:GMTD(5782)]],
[6213] = 5782,
[6215] = 5782,
-- banish
[710] = [[return DotIt.sp:GMTD(710)]],
[18647] = 710,
-- death coil
[6789] = [[return DotIt.sp:GMTD(6789)]],
[17925] = 6789,
[17926] = 6789,
[27223] = 6789,
[47859] = 6789,
[47860] = 6789,
-- shadowfury
[30283] = [[return DotIt.sp:GMTD(30283)]],
[30413] = 30283,
[30414] = 30283,
[47846] = 30283,
[47847] = 30283,
 
},
InternalCooldowns = {
-- backlash
[54274] = [[return 8]],
[47274] = [[return 30]],
},
Shortbuffs = {
-- wrecking crew (enrage)
[57518] = [[return DotIt.sp:GPB(57518)]],
[57519] = 57518,
[57520] = 57518,
[57521] = 57518,
[57522] = 57518,
-- demonic pact
[48090] = [[return DotIt.sp:GPB(48090)]],
-- nightfall (shadow trance)
[17941] = [[return DotIt.sp:GPB(17941)]],
-- molten core
[47383] = [[return DotIt.sp:GPB(47383)]],
-- metamorphosis
[47241] = [[return DotIt.sp:GPB(47241)]],
-- eradicition
[47274] = [[return DotIt.sp:GPB(47274)]],
-- empowered imp
[47283] = [[return DotIt.sp:GPB(47283)]],
-- demonic empowerment (maybe this is a buff on the pet!)
[54436] = [[local name = GetSpellInfo(54436) local dur = select(7, UnitBuff("pet", name)) if not dur then dur = 0 else dur = dur-GetTime() end return dur]],
[54444] = [[local name = GetSpellInfo(54444) local dur = select(7, UnitBuff("pet", name)) if not dur then dur = 0 else dur = dur-GetTime() end return dur]],
[54509] = [[local name = GetSpellInfo(54509) local dur = select(7, UnitBuff("pet", name)) if not dur then dur = 0 else dur = dur-GetTime() end return dur]],
[54508] = [[local name = GetSpellInfo(54508) local dur = select(7, UnitBuff("pet", name)) if not dur then dur = 0 else dur = dur-GetTime() end return dur]],
[54443] = [[local name = GetSpellInfo(54443) local dur = select(7, UnitBuff("pet", name)) if not dur then dur = 0 else dur = dur-GetTime() end return dur]],
-- demonic empathy
[48069] = [[return DotIt.sp:GPB(48069)]],
[54388] = 48069,
[54389] = 48069,
-- backdraft
[54274] = [[return DotIt.sp:GPB(54274)]],
[54276] = 54274,
[54277] = 54274,
-- backlash
[54274] = [[return DotIt.sp:GPB(54274)]],
-- detect invisibility
[132] = [[return DotIt.sp:GPB(132)]],
-- shadow ward
[6229] = [[return DotIt.sp:GPB(6229)]],
[11739] = 6229,
[11740] = 6229,
[28610] = 6229,
[47890] = 6229,
[47891] = 6229,
-- unending breath
[5697] = [[return DotIt.sp:GPB(5697)]],
},
Cooldowns = {
-- shadow ward
[6229] = 698,
-- howl of terror
[5484] = 698,
-- conflagerate
[17962] = 698,
-- death coil
[6789] = 698,
-- inferno
[1122] = 698,
-- curse of doom
[603] = 698,
-- demon charge
[54785] = 698,
-- shadow cleave
[50581] = 698,
-- shadowfury
[30283] = 698,
-- soulshatter
[29858] = 698,
-- ritual of souls
[29893] = 698,
-- chaos bolt
[50796] = 698,
-- haunt
[48181] = 698,
-- shadowflame
[47897] = 698,
-- demonic circle: teleport
[48020] = 698,
-- demonic empowerment
[47193] = 698,
-- fel domination
[18708] = 698,
-- metamorphosis
[47241] = 698,
-- ritual of summoning
[698] = [[return 0]],
-- shadowburn
[17877] = 698,
},
 
}
sp:insertSpells(warlock, "WARLOCK")
\ No newline at end of file
trunk/DotIt/modules/hunter.lua New file
0,0 → 1,199
local sp = DotIt:GetModule("spells")
local hunter = { Dots = {
-- Hunter
-- volley
[42243] = [[return DotIt.sp:GMTD(42243)]],
[42244] = 42243,
[42245] = 42243,
[42234] = 42243,
[58432] = 42243,
[58433] = 42243,
-- explosive track
[13813] = [[return 20]],
[14316] = 13813,
[14317] = 13813,
[27025] = 13813,
[49066] = 13813,
[49067] = 13813,
 
-- Wyvern Sting
[24132] = 19386,
[24133] = 19386,
[27068] = 19386,
[49011] = 19386,
[49012] = 19386,
[19386] = [[return DotIt.sp:GMTD(19386)]],
-- Serpent Sting
[13549] = 1978,
[13550] = 1978,
[13551] = 1978,
[13552] = 1978,
[13553] = 1978,
[13554] = 1978,
[13555] = 1978,
[25295] = 1978,
[27016] = 1978,
[49000] = 1978,
[49001] = 1978,
[1978] = [[if DotIt:checkGlyph(56832) then return 15 + 6 end return 15]],
-- immolation trap
[13795] = [[return DotIt.sp:GMTD(13795)]],
[14302] = 13795,
[14303] = 13795,
[14304] = 13795,
[14305] = 13795,
[27023] = 13795,
[49055] = 13795,
[49056] = 13795,
-- explosive shot
[53301] = [[return 2]],
[60051] = 53301,
[60052] = 53301,
[60053] = 53301,
 
},
Cooldowns = {
-- bestial wrath
[19574] = 2973,
-- freezing arrow
[60192] = 2973,
-- master's call
[53271] = 2973,
-- kill shot
[53351] = 2973,
-- misdirection
[34477] = 2973,
-- disengage
[781] = 2973,
-- multi-shot
[2643] = 2973,
-- traps (tracked by immolation trap lvl 1)
[13795] = 2973,
-- arcane shot
[3044] = 2973,
-- concussive shot
[5116] = 2973,
-- raptor strike
[2973] = [[return 0]],
-- distracting shot
[20736] = 2973,
-- scare beast
[1513] = 2973,
-- Rapid Fire
[3045] = 2973,
-- aimed shot
[19434] = 2973,
-- flare
[1543] = 2973,
-- viper sting
[3034] = 2973,
-- wyvern sting
[19386] = 2973,
-- counterattack
[19306] = 2973,
-- deterence
[19263] = 2973,
-- tranquilizing shot
[19801] = 2973,
-- kill command
[34026] = 2973,
-- explosive shot
[53301] = 2973,
-- chimera shot
[53209] = 2973,
-- intimidation
[19577] = 2973,
-- silencing shot
[34490] = 2973,
},
Shortbuffs = {
-- cobra strikes
[53257] = [[return 10, 2]],
-- bestial wrath
[19574] = [[return DotIt.sp:GPB(19574)]],
-- master's call
[53271] = [[return DotIt.sp:GPB(53271)]],
-- misdirection
[34477] = [[return DotIt.sp:GPB(34477)]],
-- deterence
[19263] = [[return DotIt.sp:GPB(19263)]],
-- Rapid Fire
[3045] = [[return DotIt.sp:GPB(3045)]],
-- eagle eye
[6197] = [[return DotIt.sp:GPB(6197)]],
-- eyes of the beast
[1002] = [[return DotIt.sp:GPB(1002)]],
-- master tactician
[34833] = [[return DotIt.sp:GPB(34833)]],
[34834] = 34833,
[34835] = 34833,
[34836] = 34833,
[34837] = 34833,
},
Debuffs = {
-- silencing shot
[34490] = [[return DotIt.sp:GMTD(34490)]],
 
-- improved wing clip
[19229] = [[return DotIt.sp:GMTD(19229), 1, {r = 1, g = 0, b = 0, a = 1}]],
[35963] = 19229,
[47168] = 19229,
 
-- concussive shot
[5116] = [[return DotIt.sp:GMTD(5116)]],
-- entrapment
[19185] = [[return 4]],
-- counterattack
[19306] = [[return DotIt.sp:GMTD(19306)]],
[20909] = 19306,
[20910] = 19306,
[27067] = 19306,
[48998] = 19306,
[48999] = 19306,
-- viper sting
[3034] = [[return DotIt.sp:GMTD(3034)]],
 
-- flare
[1543] = [[return 20]],
-- aimed shot
[19434] = [[return DotIt.sp:GMTD(19434)]],
[20900] = 19434,
[20901] = 19434,
[20902] = 19434,
[20903] = 19434,
[20904] = 19434,
[27065] = 19434,
[49049] = 19434,
[49050] = 19434,
-- hunters mark
[1130] = [[return DotIt.sp:GMTD(1130)]],
[14323] = 1130,
[14324] = 1130,
[14325] = 1130,
[53338] = 1130,
-- distracting shot
[20736] = [[return DotIt.sp:GMTD(20736)]],
-- wing clip
[2974] = [[return DotIt.sp:GMTD(2974)]],
-- scare beast
[1513] = [[return DotIt.sp:GMTD(1513)]],
[14326] = [[return DotIt.sp:GMTD(14326)]],
[14327] = [[return DotIt.sp:GMTD(14327)]],
},
CCs = {
-- intimidation
[24394] = [[return DotIt.sp:GMTD(24394)]],
-- scatter shot
[19503] = [[return DotIt.sp:GMTD(19503)]],
-- t.n.t
[56338] = [[return 3]],
-- freezing trap
[1499] = [[return 10]],
[14310] = [[return 15]],
[14311] = [[return 20]],
},
InternalCooldowns = {
[56453] = [[return 30]],
}
}
sp:insertSpells(hunter, "HUNTER")
\ No newline at end of file
trunk/DotIt/modules/warrior.lua New file
0,0 → 1,232
local sp = DotIt:GetModule("spells")
local warrior = { Dots = {
 
-- Rend
[6546] = [[return DotIt.sp:GMTD(6546)]],
[6547] = [[return DotIt.sp:GMTD(6547)]],
[6548] = 6547,
[11572] = 6547,
[11573] = 6547,
[11574] = 6547,
[25208] = 6547,
[46845] = 6547,
[47465] = 6547,
[772] = [[return DotIt.sp:GMTD(772)]],
-- deep wounds
[12162] = [[return 6]],
[12850] = 12162,
[12868] = 12162,
},
SharedDebuffs = {
-- sunder armor
[7405] = 7386,
[8380] = 7386,
[11596] = 7386,
[11597] = 7386,
[25225] = 7386,
[47467] = 7386,
[7386] = [[return 15, 5]],
},
Debuffs = {
-- trauma
[46856] = [[return DotIt.sp:GMTD(46856)]],
[46857] = 46856,
-- piercing howl
[12323] = [[return 6]],
-- gag order (silenced - gag order)
[18498] = [[return DotIt.sp:GMTD(18498)]],
-- furious attacks
[56112] = [[return DotIt.sp:GMTD(56112), 2]],
-- mortal strike
[12294] = [[return DotIt.sp:GMTD(12294)]],
[21551] = 12294,
[21552] = 12294,
[21553] = 12294,
[25248] = 12294,
[30330] = 12294,
[47485] = 12294,
[47486] = 12294,
-- intercept stun
[20253] = [[return DotIt.sp:GMTD(20253)]],
-- challenging shout
[1161] = [[return 6]],
-- disarm
[676] = [[return DotIt.sp:GMTD(676)]],
-- mocking blow
[694] = [[return DotIt.sp:GMTD(694)]],
-- shield bash (dazed)
[29703] = [[return DotIt.sp:GMTD(29703)]],
-- taunt
[355] = [[return DotIt.sp:GMTD(355)]],
-- hamstring
[1715] = [[return DotIt.sp:GMTD(1715)]],
-- charge stun
[7922] = [[return DotIt.sp:GMTD(7922)]],
-- demoralizing shout
[6190] = 1160,
[11554] = 1160,
[11555] = 1160,
[11556] = 1160,
[25202] = 1160,
[25203] = 1160,
[47437] = 1160,
[1160] = [[return 30]],
-- thunder clap
[8198] = 6343,
[8204] = 6343,
[8205] = 6343,
[11580] = 6343,
[11581] = 6343,
[25264] = 6343,
[47501] = 6343,
[47502] = 6343,
[6343] = [[return 10]],
--
},
Shortbuffs = {
-- taste for blood
[60503] = [[return DotIt.sp:GPB(60503)]],
-- sword and board
[50227] = [[return DotIt.sp:GPB(50227)]],
-- second wind
[29834] = [[return DotIt.sp:GPB(29834)]],
[29838] = 29834,
-- rampage
[30029] = [[return DotIt.sp:GPB(30029)]],
-- last stand
[12975] = [[return DotIt.sp:GPB(12975)]],
-- improved defensive stance (enrage)
[57514] = [[return DotIt.sp:GPB(57514)]],
[57516] = 57514,
-- flurry
[12966] = [[return DotIt.sp:GPB(12966)]],
[12967] = 12966,
[12968] = 12966,
[12969] = 12966,
[12970] = 12966,
-- enrage
[12880] = [[return DotIt.sp:GPB(12880)]],
[14201] = 12880,
[14203] = 12880,
[14202] = 12880,
[14204] = 12880,
-- death whish
[12292] = [[return DotIt.sp:GPB(12292)]],
-- bloodsurge (slam!)
[46916] = [[return DotIt.sp:GPB(46916)]],
-- blood craze
[16488] = [[return DotIt.sp:GPB(16488)]],
[16490] = 16488,
[16491] = 16488,
-- bladestorm
[46924] = [[return DotIt.sp:GPB(46924)]],
-- enraged regeneration
[55694] = [[return DotIt.sp:GPB(55694)]],
-- intervene
[3411] = [[return DotIt.sp:GPB(3411)]],
-- commanding shout
[469] = [[return DotIt.sp:GPB(469)]],
[47439] = 469,
[47440] = 469,
-- spell reflect
[23920] = [[return DotIt.sp:GPB(23920)]],
-- recklessness
[1719] = [[return DotIt.sp:GPB(1719)]],
-- berserker rage
[18499] = [[return DotIt.sp:GPB(18499)]],
-- shield wall
[871] = [[return DotIt.sp:GPB(871)]],
-- retaliation
[20230] = [[return DotIt.sp:GPB(20230)]],
-- shield block
[2565] = [[return DotIt.sp:GPB(2565)]],
-- bloodrage
[29131] = [[return DotIt.sp:GPB(29131)]],
-- battle shout
[6673] = [[return DotIt.sp:GPB(6673)]],
[5242] = 6673,
[6192] = 6673,
[11549] = 6673,
[11550] = 6673,
[11551] = 6673,
[25289] = 6673,
[2048] = 6673,
[47436] = 6673,
},
Cooldowns = {
-- bloodrage
[2687] = 100,
-- taunt
[355] = 100,
-- overpower
[7384] = 100,
-- shield bash
[72] = 100,
-- revenge
[6572] = 100,
-- mocking blow
[694] = 100,
-- shield block
[2565] = 100,
-- disarm
[676] = 100,
-- retaliation
[20230] = 100,
-- intimidating shout
[5246] = 100,
-- challenging shout
[1161] = 100,
-- shield wall
[871] = 100,
-- intercept
[20252] = 100,
-- berserker rage
[18499] = 100,
-- whirlwind
[1680] = 100,
-- pummel
[6552] = 100,
-- shield slam
[23922] = 100,
-- recklessness
[1719] = 100,
-- mortal strike
[12294] = 100,
-- spell reflect
[23920] = 100,
-- intervene
[3411] = 100,
-- enraged regeneration
[55694] = 100,
-- heroic throw
[57755] = 100,
-- bladestorm
[46924] = 100,
-- bloodthirst
[23881] = 100,
-- concussion blow
[12809] = 100,
-- death wish
[12292] = 100,
-- heroic fury
[60970] = 100,
-- last stand
[12975] = 100,
-- shockwave
[46968] = 100,
-- sweeping strikes
[12328] = 100,
-- charge
[100] = [[return 0]],
 
},
CCs = {
-- shockwave
[46968] = [[return 4]],
-- improved hamstring
[23694] = [[return DotIt.sp:GMTD(23694)]],
-- intimidating shout
[20511] = [[return 8]],
}
}
sp:insertSpells(warrior, "WARRIOR")
\ No newline at end of file
trunk/DotIt/modules/priest.lua New file
0,0 → 1,165
local sp = DotIt:GetModule("spells")
local priest = { Dots = {
-- Priest
-- Devouring Plague
[19276] = 2944,
[19277] = 2944,
[19278] = 2944,
[19279] = 2944,
[19280] = 2944,
[25467] = 2944,
[48299] = 2944,
[48300] = 2944,
[2944] = [[return 24]],
-- Shadow Word: Pain
[594] = 589,
[992] = 589,
[970] = 589,
[2767] = 589,
[10892] = 589,
[10893] = 589,
[10894] = 589,
[25367] = 589,
[25368] = 589,
[48124] = 589,
[48125] = 589,
[589] = [[return DotIt.sp:GMTD(589)]],
-- Vampiric Touch
[34916] = 34914,
[34917] = 34914,
[48159] = 34914,
[48160] = 34914,
[34914] = [[return DotIt.sp:GMTD(34914)]],
-- mind sear
[49821] = [[return 10]],
[53022] = 49821,
 
},
Shortbuffs = {
-- pain suppression
[33206] = [[return DotIt.sp:GPB(33206)]],
-- grace
[47930] = [[return DotIt.sp:GPB(47930)]],
-- borrowed time
[59887] = [[return DotIt.sp:GPB(59887)]],
-- blessed resilience
[33143] = [[return DotIt.sp:GPB(33143)]],
-- levitate
[1706] = [[return DotIt.sp:GPB(1706)]],
-- fear ward
[6346] = [[return DotIt.sp:GPB(6346)]],
-- dispersion
[47585] = [[return DotIt.sp:GPB(47585)]],
-- power word: shield
[17] = [[return DotIt.sp:GPB(17)]],
[592] = 17,
[600] = 17,
[3747] = 17,
[6065] = 17,
[6066] = 17,
[10898] = 17,
[10899] = 17,
[10900] = 17,
[10901] = 17,
[25217] = 17,
[25218] = 17,
[48065] = 17,
[48066] = 17,
-- fade
[586] = [[return DotIt.sp:GPB(586)]],
-- holy concentration (clearcasting)
[34754] = [[return DotIt.sp:GPB(34754)]],
-- improved holy concentration
[47894] = [[return DotIt.sp:GPB(47894)]],
[47895] = 47894,
[47896] = 47894,
-- improved spirit tap
[49694] = [[return DotIt.sp:GPB(49694)]],
[59000] = 49694,
-- spirit tap
[15271] = [[return DotIt.sp:GPB(15271)]],
-- vampiric embrace
[15286] = [[return DotIt.sp:GPB(15286)]],
-- martyrdom (focused casting)
[14743] = [[return DotIt.sp:GPB(14743)]],
[27828] = 14743,
-- spirit of redemption
[20711] = [[return DotIt.sp:GPB(20711)]],
-- surge of light
[33151] = [[return DotIt.sp:GPB(33151)]],
},
Cooldowns = {
-- silence
[15487] = 17,
-- pain suppression
[33206] = 17,
-- inner focus
[14751] = 17,
-- vampiric embrace
[15286] = 17,
-- guardian spirit
[47788] = 17,
-- divine hymn
[47951] = 17,
-- penance
[47540] = 17,
-- prayer of mending
[33076] = 17,
-- shadowfiend
[34433] = 17,
-- shadow word: death
[32379] = 17,
-- hymn of hope
[60931] = 17,
-- circle of healing
[34861] = 17,
-- lightwell
[724] = 17,
-- holy nova
[15237] = 17,
-- holy fire
[14914] = 17,
-- dispersion
[47585] = 17,
-- fear ward
[6346] = 17,
-- psychic scream
[8122] = 17,
-- mind blast
[8092] = 17,
-- fade
[586] = 17,
-- power word: shield
[17] = [[return 0]],
-- desperate prayer
[19236] = 17,
},
Debuffs = {
-- blackout
[44415] = [[return 3]],
-- mind soothe
[453] = [[return DotIt.sp:GMTD(453)]],
-- silence
[15487] = [[return DotIt.sp:GMTD(15487)]],
-- misery
[33196] = [[return DotIt.sp:GMTD(33196)]],
[33197] = 33196,
[33198] = 33196,
},
CCs = {
 
-- psychic scream
[8122] = [[if DotIt:checkGlyph(55676) then return 8 + 1 else return 8 end]],
[8124] = 8122,
[10888] = 8122,
[10890] = 8122,
-- divine hmyn
[47951] = [[return 20]],
-- shackle undead
[9484] = [[return DotIt.sp:GMTD(9484)]],
[9485] = 9484,
[10955] = 9484,
 
},
}
sp:insertSpells(priest, "PRIEST")
\ No newline at end of file
trunk/DotIt/modules/druid.lua New file
0,0 → 1,239
local sp = DotIt:GetModule("spells")
local druid = { Dots = {
-- huricane
[16914] = [[return 10]],
[17401] = 16914,
[17402] = 16914,
[27012] = 16914,
[48467] = 16914,
 
 
-- infected wounds
[48483] = [[return 12]],
[48484] = 48483,
[48485] = 48483,
-- entangling roots
[339] = [[return 12]],
[1062] = 339,
[5195] = 339,
[5196] = 339,
[9852] = 339,
[9853] = 339,
[26989] = 339,
[53308] = 339,
-- Moonfire
[8921] = [[return 9+(3*select(5, GetTalentInfo(1,8)))]],
[8925] = 8924,
[8926] = 8924,
[8927] = 8924,
[8928] = 8924,
[8929] = 8924,
[9833] = 8924,
[9834] = 8924,
[9835] = 8924,
[26987] = 8924,
[26988] = 8924,
[48462] = 8924,
[48463] = 8924,
[8924] = [[return 12+(3*select(5, GetTalentInfo(1,8)))]],
 
-- Insect Swarm
[24974] = 5570,
[24975] = 5570,
[24976] = 5570,
[24977] = 5570,
[27013] = 5570,
[48468] = 5570,
[5570] = [[return 12+(2*select(5, GetTalentInfo(1,8)))]], -- check Nature's Spendor (2 second duration increase)
-- Lacerate
[48567] = 33745,
[48568] = 33745,
[33745] = [[return 15]],
-- Rip
[9492] = 1079,
[9493] = 1079,
[9752] = 1079,
[9894] = 1079,
[9896] = 1079,
[27008] = 1079,
[49799] = 1079,
[49800] = 1079,
[1079] = [[local count = 0 local tocheck = {d10 = {39553, 39554, 39555, 39556, 39557}, d25 = {40471, 40472, 40473, 40493, 40494}} for i = 1, 5 do if DotIt:scanItem(tocheck.d10[i]) or DotIt:scanItem(tocheck.d25[i]) then count = count + 1 end end if count >= 2 then return 12 + 4 return 12]],
-- Rake
[1823] = 1822,
[1824] = 1822,
[9904] = 1822,
[27003] = 1822,
[48574] = 1822,
[1822] = [[return DotIt.sp:GMTD(1822)]],
-- lacerate
[33745] = [[return DotIt.sp:GMTD(33745), 5]],
[48567] = 33745,
[48568] = 33745,
 
},
Debuffs = {
-- earth and moon
[60433] = [[return 12]],
[60431] = 60433,
[60432] = 60433,
-- demoralizing roar debuff
[99] = [[return 30]],
[1735] = 99,
[9490] = 99,
[9747] = 99,
[9898] = 99,
[26998] = 99,
[48559] = 99,
[48560] = 99,
-- feral charge cat debuff
[49376] = [[return 3]],
-- mangle bear
[33878] = [[return 12]],
[33986] = 33878,
[33987] = 33878,
[48563] = 33878,
[48564] = 33878,
},
InternalCooldowns = {
-- eclipse
[48518] = [[return 30, 1, {r = 198/255, g = 226/255, b = 1, a = 1}]],
-- eclipse #2
[48517] = [[return 30, 1, {r = 1, g = 165/255, b = 79/255, a = 1}]],
},
Shortbuffs = {
-- eclipse
[48517] = [[return DotIt.sp:GPB(48517)]],
-- eclipse
[48518] = [[return DotIt.sp:GPB(48518)]],
-- starfall
[48505] = [[return DotIt.sp:GPB(48505)]],
[53199] = 48505,
[53200] = 48505,
[53201] = 48505,
-- tiger's fury
[5217] = [[return DotIt.sp:GPB(5217)]],
[6793] = 5217,
[9845] = 5217,
[9846] = 5217,
[50212] = 5217,
[50213] = 5217,
-- owlkin frenzy buff
[48389] = 48393,
[48392] = 48393,
[48393] = [[return DotIt.sp:GPB(48393)]],
-- Savage Roar
[52610] = [[return DotIt.sp:GPB(52610)]],
[50334] = [[return DotIt.sp:GPB(50334)]],
[22842] = [[return DotIt.sp:GPB(22842)]],
-- nature's grasp shortbuff
[16689] = 53312,
[16810] = 53312,
[16811] = 53312,
[16812] = 53312,
[16813] = 53312,
[17329] = 53312,
[27009] = 53312,
[53312] = [[return DotIt.sp:GPB(53312)]],
-- enrage
[5229] = [[return DotIt.sp:GPB(5229)]],
-- innervate
[29166] = [[return DotIt.sp:GPB(29166)]],
-- frenzied regeneration
[22842] = [[return DotIt.sp:GPB(22842)]],
-- barkskin
[22812] = [[return DotIt.sp:GPB(22812)]],
-- savage roar
[52610] = [[return DotIt.sp:GPB(52610)]],
},
Cooldowns = {
-- force of nature
[33831] = 6795,
-- wild growth
[48438] = 6795,
-- starfall
[48505] = 6795,
-- maim
[22570] = 6795,
-- typhoon
[50516] = 6795,
-- mangle bear
[33878] = 6795,
-- barkskin
[22812] = 6795,
-- cower
[8998] = 6795,
-- omen of clarity buff
[16864] = 6795,
-- frenzied regeneration
[22842] = 6795,
-- innervate
[29166] = 6795,
-- prowl
[5215] = 6795,
-- rebirth
[20484] = 6795,
-- tranquility
[740] = 6795,
-- tiger's fury
[5217] = 6795,
-- bash
[5211] = 6795,
-- enrage
[5229] = 6795,
-- survival instincts
[61336] = [[return 0]],
-- growl
[6795] = [[return 0]],
-- nature's grasp
[16689] = 6795,
--[16810] = 6795,
--[16811] = 6795,
--[16812] = 6795,
--[16813] = 6795,
--[17329] = 6795,
--[27009] = 6795,
--[53312] = 6795,
-- feral charge
[16979] = [[return 0]],
},
CCs = {
-- cyclone
[33786] = [[return DotIt.sp:GMTD(33786)]],
-- maim
[22570] = [[return DotIt.sp:GMTD(22570)]],
[49802] = [[return DotIt.sp:GMTD(49802)]],
-- pounce
[9005] = [[return DotIt.sp:GMTD(9005)]],
[9823] = 9005,
[9827] = 9005,
[27006] = 9005,
[49803] = 9005,
-- soothe animal cc
[2908] = [[return DotIt.sp:GMTD(2908)]],
[8955] = 2908,
[9901] = 2908,
[26995] = 2908,
-- feral charge bear
[16979] = [[return 4]],
-- bash dur
[5211] = [[return DotIt.sp:GMTD(5211)]],
[6798] = [[return DotIt.sp:GMTD(6798)]],
[8983] = [[return DotIt.sp:GMTD(8983)]],
-- growl
[6795] = [[return 3]],
-- hibernate
[2637] = [[return 20]],
[18657] = 2637,
[18658] = 2637,
},
SharedDebuffs = {
-- fearie fire -- changes with 3.1
[770] = 48476,
[48476] = [[return 40]],
-- fearie fire feral -- changes with 3.1
[16857] = 48476,
[48475] = 48476,
},
}
sp:insertSpells(druid, "DRUID")
\ No newline at end of file
trunk/DotIt/modules/modules.xml New file
0,0 → 1,14
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<script file="deathknight.lua"/>
<script file="druid.lua"/>
<script file="generalspells.lua"/>
<script file="hunter.lua"/>
<script file="mage.lua"/>
<script file="paladin.lua"/>
<script file="priest.lua"/>
<script file="rogue.lua"/>
<script file="shaman.lua"/>
<script file="warlock.lua"/>
<script file="warrior.lua"/>
</Ui>
\ No newline at end of file
trunk/DotIt/modules/shaman.lua New file
0,0 → 1,141
local sp = DotIt:GetModule("spells")
local shaman = { Dots = {
-- Flame Shock
[8052] = 8050,
[8053] = 8050,
[10447] = 8050,
[10448] = 8050,
[29228] = 8050,
[25457] = 8050,
[49232] = 8050,
[49233] = 8050,
[8050] = [[return DotIt.sp:GMTD(8050)]],
},
Shortbuffs = {
-- water shield
[52127] = [[return DotIt.sp:GMTD(52127)]],
[52129] = 52127,
[52131] = 52127,
[52134] = 52127,
[52136] = 52127,
[52138] = 52127,
[24398] = 52127,
[33736] = 52127,
[57960] = 52127,
-- lightning shield
[324] = [[return DotIt.sp:GPB(324), 3 + 2 * select(5, GetTalentInfo(2,21))]],
[325] = 324,
[905] = 324,
[945] = 324,
[8134] = 324,
[10431] = 324,
[10432] = 324,
[25469] = 324,
[25472] = 324,
[49280] = 324,
[49281] = 324,
-- water breathing
[131] = [[return DotIt.sp:GPB(131)]],
-- far sight
[6196] = [[return DotIt.sp:GPB(6196)]],
-- water walking
[546] = [[return DotIt.sp:GPB(546)]],
-- earth shield
[974] = [[return DotIt.sp:GPB(974), 6 + select(5, GetTalentInfo(3,24))]],
[32593] = 974,
[32594] = 974,
[49283] = 974,
[49284] = 974,
-- riptide
[61295] = [[return DotIt.sp:GPB(61295)]],
[61299] = 61295,
[61300] = 61295,
[61301] = 61295,
-- elemental devestation
[30165] = [[return DotIt.sp:GPB(61295)]],
[29177] = 30165,
[29178] = 30165,
-- clearcasting
[16246] = [[return DotIt.sp:GPB(16246)]],
[16870] = 16246,
-- elemental mastery
[16166] = [[return DotIt.sp:GPB(16166)]],
-- elemental oath
[53410] = [[return DotIt.sp:GPB(53410)]],
[53414] = 53410,
-- flurry
[16257] = [[return DotIt.sp:GPB(16257)]],
[16277] = 16257,
[16278] = 16257,
[16279] = 16257,
[16280] = 16257,
-- maelstrom weapon
[53817] = [[return DotIt.sp:GPB(17364), 5]],
-- nature's swiftness
[16188] = [[return DotIt.sp:GPB(16188)]],
-- tidal focus
[55198] = [[return DotIt.sp:GPB(55198)]],
-- shamanistic rage
[30823] = [[return DotIt.sp:GPB(30823)]],
-- tidal waves
[53390] = [[return DotIt.sp:GPB(53390)]],
-- unleashed rage
[30803] = [[return DotIt.sp:GPB(53390)]],
[30804] = 30803,
[30805] = 30803,
[30806] = 30803,
[30807] = 30803,
},
Cooldowns = {
-- tidal focus
[55198] = 8042,
-- shamanistic rage
[30823] = 8042,
-- nature's swiftness
[16188] = 8042,
-- mana tide totem
[16190] = 8042,
-- lava lash
[60103] = 8042,
-- stormstrike
[17364] = 8042,
-- feral spirit
[51533] = 8042,
-- elemental mastery
[16166] = 8042,
-- hex
[51514] = 8042,
-- lava burst
[51505] = 8042,
-- thunderstorm
[51490] = 8042,
-- riptide
[61295] = 8042,
-- fire elemental
[2894] = 8042,
-- earth elemental
[2062] = 8042,
-- chain lightning
[421] = 8042,
-- reincarnation (a bit to long imo)
--[20608] = 8042,
-- grounding totem
[8177] = 8042,
-- stoneclaw totem
[5730] = 8042,
-- fire nova totem
[1535] = 8042,
-- shocks (tracked by flame shock r1)
[8042] = [[return 0]],
 
},
Debuffs = {
 
[17364] = [[return DotIt.sp:GMTD(17364), 2 + select(5, GetTalentInfo(2,23))]],
},
CCs = {
-- hex
[51514] = [[return DotIt.sp:GMTD(51514)]],
},
}
sp:insertSpells(shaman, "SHAMAN")
\ No newline at end of file
trunk/DotIt/modules/paladin.lua New file
0,0 → 1,176
local sp = DotIt:GetModule("spells")
local paladin = {
Dots = {
-- blood corruption
[53742] = [[return DotIt.sp:GMTD(53742), 5]],
-- holy vengeance
[31803] = [[return DotIt.sp:GMTD(31803), 5]],
--consecration
[48819] = [[if DotIt:checkGlyph(54928) then return 8 + 2 else return 8 end]],
[26573] = 26573,
[20116] = 26573,
[20922] = 26573,
[20923] = 26573,
[20924] = 26573,
[27173] = 26573,
[48818] = 26573,
 
},
Debuffs = {
-- judgement of justice
[53407] = [[return DotIt.sp:GMTD(53407)]],
-- judgement of light
[20271] = [[return DotIt.sp:GMTD(20271)]],
-- judgement of wisdom
[53408] = [[return DotIt.sp:GMTD(53408)]],
-- turn evil
[10326] = [[return DotIt.sp:GMTD(10326)]],
-- avenger's shield
[31935] = [[return 10]],
[32699] = 31935,
[32700] = 31935,
[48826] = 31935,
[48827] = 31935,
-- vindication
[67] = [[return 15]],
[26017] = [[return 15]],
},
Cooldowns = {
-- avenger's shield
[31935] = 498,
-- divine shield
[642] = 498,
-- hand of salvation
[1038] = 498,
-- turn evil
[10326] = 498,
-- exorcism
[879] = 498,
-- hand of freedom
[1044] = 498,
-- lay on hands
[633] = 498,
-- righteous defense
[31789] = 498,
-- hand of reckoning
[62124] = 498,
-- divine protection
[498] = [[return 0]],
-- hand of protection
[1022] = 498,
--shield of righteousness
[53600] = 498,
[61411] = 498,
--hammer of justice
[53595] = 498,
-- judgement of justice
[53407] = 498,
-- judgement of light
[20271] = 498,
-- judgement of wisdom
[53408] = 498,
 
--consecration
[26573] = 498,
--holy shield
[20925] = 498,
-- divine intervention
[19752] = 498,
-- hand of sacrifie
[6940] = 498,
-- holy shock
[20473] = 498,
-- holy wrath
[2812] = 498,
-- avanging wrath
[31884] = 498,
-- divine plea
[54428] = 498,
-- crusader strike
[35395] = 498,
-- divine favor
[20216] = 498,
-- divine illumination
[31842] = 498,
-- divine storm
[53385] = 498,
-- hammer of the righteous
[53595] = 498,
-- repentance
[20066] = 498,
},
Shortbuffs = {
-- the art of war
[53489] = [[return DotIt.sp:GPB(53489)]],
[59578] = 59578,
 
-- lights grace
[31834] = [[return DotIt.sp:GPB(31834)]],
-- judgement of the pur
[53655] = [[return DotIt.sp:GPB(53655)]],
[53656] = 53655,
[53657] = 53655,
[54152] = 53655,
[54153] = 53655,
-- infusion of light
[53672] = [[return DotIt.sp:GPB(53672)]],
[54149] = 53672,
-- divine illumination
[31842] = [[return DotIt.sp:GPB(31842)]],
-- sacred shield
[53601] = [[return DotIt.sp:GPB(53601)]],
-- divine plea
[54428] = [[return DotIt.sp:GPB(54428)]],
-- avanging wrath
[31884] = [[return DotIt.sp:GPB(31884)]],
-- seal of command
--[20375] = [[return DotIt.sp:GPB(20375)]],
-- seal of the martyr
--[53720] = [[return DotIt.sp:GPB(53720)]],
-- seal of corruption
--[53736] = [[return DotIt.sp:GPB(53736)]],
-- seal of blood
--[31892] = [[return DotIt.sp:GPB(31892)]],
-- seal of vengeance
--[31801] = [[return DotIt.sp:GPB(31801)]],
-- holy shield
[20925] = [[return DotIt.sp:GPB(20925)]],
[20927] = 20925,
[20928] = 20925,
[27179] = 20925,
[48951] = 20925,
[48952] = 20925,
-- hammer of wrath
[24275] = [[return DotIt.sp:GPB(24275)]],
-- seal of wisdom
[20166] = [[return DotIt.sp:GPB(20166)]],
-- seal of light
[20165] = [[return DotIt.sp:GPB(20165)]],
-- hand of salvation
[1038] = [[return DotIt.sp:GPB(1038)]],
-- seal of justice
[20164] = [[return DotIt.sp:GPB(20164)]],
-- hand of freedom
[1044] = [[return DotIt.sp:GPB(1044)]],
-- divine protection
[498] = [[return DotIt.sp:GPB(498)]],
-- hand of protection
[1022] = [[return DotIt.sp:GPB(1022)]],
},
CCs = {
-- repentance
[20066] = [[return DotIt.sp:GMTD(20066)]],
-- holy wrath
[2812] = [[return DotIt.sp:GMTD(2812)]],
[2812] = 2812,
[2812] = 2812,
[2812] = 2812,
[2812] = 2812,
--hammer of justice
[10308] = [[return DotIt.sp:GMTD(10308)]],
[5589] = [[return DotIt.sp:GMTD(5589)]],
[5588] = [[return DotIt.sp:GMTD(5588)]],
[853] = [[return DotIt.sp:GMTD(853)]],
},
}
sp:insertSpells(paladin, "PALADIN")
\ No newline at end of file
trunk/DotIt/modules/mage.lua New file
0,0 → 1,201
local sp = DotIt:GetModule("spells")
local mage = {
Dots = {
-- Living Bomb
[55359] = 44457,
[55360] = 44457,
[44457] = [[return 12]],
-- flamestrike
[2121] = [[return 8]],
[2120] = 2121,
[8422] = 2121,
[8423] = 2121,
[10215] = 2121,
[10216] = 2121,
[27086] = 2121,
[42925] = 2121,
[42926] = 2121,
-- ignite
[12654] = [[return 4]],
},
CCs = {
--impact
[12355] = [[return 2]],
-- polymorph
[118] = [[return DotIt.sp:GMTD(118)]],
[12824] = 118,
[12825] = 118,
[61305] = 118,
[28272] = 118,
[12826] = 118,
[61025] = 118,
[28271] = 118,
},
Debuffs = {
-- blizzard
[10] = [[return 8]],
[6141] = 120,
[8427] = 120,
[10185] = 120,
[10186] = 120,
[10187] = 120,
[27085] = 120,
[42939] = 120,
[42940] = 120,
-- cone of cold
[120] = [[return 8]],
[8492] = 120,
[10159] = 120,
[10160] = 120,
[10161] = 120,
[27087] = 120,
[42930] = 120,
[42931] = 120,
 
-- frost nova
[122] = [[return DotIt.sp:GMTD(122)]],
[865] = 122,
[6131] = 122,
[10230] = 122,
[27088] = 122,
[42917] = 122,
-- improved scorch
[22959] = [[return DotIt.sp:GMTD(22959),5]],
-- counterspell
[2139] = [[return DotIt.sp:GMTD(2139)]],
-- blast wave
[11113] = [[return 6]],
[13018] = 11113,
[13019] = 11113,
[13020] = 11113,
[13021] = 11113,
[27133] = 11113,
[33933] = 11113,
[42944] = 11113,
[42945] = 11113,
-- dragon's breath
[31661] = [[return 5]],
[33041] = 31661,
[33042] = 31661,
[33043] = 31661,
[42949] = 31661,
[42950] = 31661,
-- deep freeze
[44572] = [[return DotIt.sp:GMTD(44572)]],
-- fingers of frost
[44544] = [[return DotIt.sp:GMTD(44544)]],
-- winters chill
[12579] = [[return DotIt.sp:GMTD(12579), 5]],
},
Shortbuffs = {
-- presence of mind
[12043] = [[return DotIt.sp:GPB(12043)]],
-- missile barrage
[44401] = [[return DotIt.sp:GPB(44401)]],
-- hot streak
[48108] = [[return DotIt.sp:GPB(48108)]],
-- firestarter
[54741] = [[return DotIt.sp:GPB(54741)]],
-- burning determination
[54748] = [[return DotIt.sp:GPB(54748)]],
-- brain freeze (fireball!)
[57761] = [[return DotIt.sp:GPB(57761)]],
 
-- invisibility
[66] = [[return DotIt.sp:GPB(66)]],
-- ice barrier
[11426] = [[return DotIt.sp:GPB(11426)]],
[13031] = 11426,
[13032] = 11426,
[13033] = 11426,
[27134] = 11426,
[33405] = 11426,
[43038] = 11426,
[43039] = 11426,
-- ice block
[45438] = [[return DotIt.sp:GPB(45438)]],
-- slow fall
[130] = [[return DotIt.sp:GPB(130)]],
-- icy veins
[12472] = [[return DotIt.sp:GPB(12472), nil, {r = 0,g = 0, b = 1, a = 1}]],
-- arcane blast
[36032] = [[return 10, 3]],
-- arcane power
[12042] = [[return DotIt.sp:GPB(12042)]],
-- slow
[31589] = [[return DotIt.sp:GPB(31589)]],
-- fire ward
[543] = [[return DotIt.sp:GPB(543)]],
[8457] = 543,
[8458] = 543,
[10223] = 543,
[10225] = 543,
[27128] = 543,
[43010] = 543,
-- focus magic
[54648] = [[return DotIt.sp:GPB(54648)]],
-- mana shield
[1463] = [[return DotIt.sp:GPB(1463)]],
[8494] = 1463,
[8495] = 1463,
[10191] = 1463,
[10192] = 1463,
[10193] = 1463,
[27131] = 1463,
[43019] = 1463,
[43020] = 1463,
-- frost ward
[6143] = [[return DotIt.sp:GPB(6143)]],
[8461] = 6143,
[8462] = 6143,
[10177] = 6143,
[28609] = 6143,
[32796] = 6143,
[43012] = 6143,
-- clearcasting
[12536] = [[return DotIt.sp:GPB(12536)]],
-- combustion
[28682] = [[return DotIt.sp:GPB(12536), 10]],
},
Cooldowns = {
-- summon water elemental
[31687] = 2136,
-- presence of mind
[12043] = 2136,
-- blink
[1953] = 2136,
-- deep freeze
[44572] = 2136,
-- combustion
[11129] = 2136,
-- cold snap
[11958] = 2136,
-- ritual of refreshment
[43987] = 2136,
-- arcane barrage
[44425] = 2136,
-- invisibility
[66] = 2136,
-- dragon's breath
[31661] = 2136,
-- ice barrier
[11426] = 2136,
-- blast wave
[11113] = 2136,
-- ice block
[45438] = 2136,
-- cone of cold
[120] = 2136,
-- counterspell
[2139] = 2136,
-- wards (share cd)
[543] = 2136,
-- evocation
[12051] = 2136,
-- frost nova
[122] = 2136,
-- fire blast
[2136] = [[return 0]],
}
}
sp:insertSpells(mage, "MAGE")
\ No newline at end of file
trunk/DotIt/modules/deathknight.lua New file
0,0 → 1,149
local sp = DotIt:GetModule("spells")
local deathknight = {
Dots = {
-- Death Knight
-- Frost Fever
[55095] = [[return 12 + (3* select(5, GetTalentInfo(1,4)))]],
-- Blood Plague
[55078] = [[return 12 + (3* select(5, GetTalentInfo(1,4)))]],
},
Debuffs = {
-- chains of ice
[45524] = [[return 10]],
-- strangulate
[49916] = 49913,
[49915] = 49913,
[49914] = 49913,
[49913] = [[return 5]],
-- death and decay
[43265] = [[return 10]],
[49936] = 43265,
[49937] = 43265,
[49938] = 43265,
-- mark of blood
[49005] = [[return 20]],
},
Shortbuffs = {
-- icebound fort
[48792] = [[return DotIt.sp:GPB(48792)]],
-- raise dead
[46584] = [[if select(5, GetTalentInfo(3, 19)) == 0 then return 2*60 end]],
-- blood tap
[45529] = [[return DotIt.sp:GPB(45529)]],
-- anti magic shell
[48707] = [[return DotIt.sp:GPB(48707)]],
-- unholy blight
[49194] = [[return DotIt.sp:GPB(49194)]],
[51376] = 49194,
[51378] = 49194,
[51379] = 49194,
-- summon gargoyle
[49206] = [[return DotIt.sp:GPB(49206)]],
-- bone armor
[54467] = [[return DotIt.sp:GPB(54467)]],
-- horn of winter
[57330] = [[return DotIt.sp:GPB(57330)]],
[57623] = [[return DotIt.sp:GPB(57623)]],
-- unholy strength
[53365] = [[return DotIt.sp:GPB(53365)]],
-- killing machine
[51124] = [[return DotIt.sp:GPB(51124)]],
-- freezing fog
[59052] = [[return DotIt.sp:GPB(59052)]],
-- ebon plague
[51735] = [[return DotIt.sp:GPB(51735)]],
-- abominations might
[53137] = [[return DotIt.sp:GPB(53137)]],
-- blody vengenance
[50447] = 50449,
[50448] = 50449,
[50449] = [[return DotIt.sp:GPB(50449)]],
-- dancing runeblade
[49028] = [[return DotIt.sp:GPB(49028)]],
-- deathchill
[49796] = [[return DotIt.sp:GPB(49796)]],
-- hungering cold
[49203] = [[return DotIt.sp:GPB(49203)]],
-- hysteria
[49016] = [[return DotIt.sp:GPB(49016)]],
-- lichborne
[49039] = [[return DotIt.sp:GPB(49039)]],
-- death trance!
[50466] = [[return DotIt.sp:GPB(50466)]],
-- unbreakable armor
[51271] = [[return DotIt.sp:GPB(51271)]],
-- vampiric blood
[55233] = [[return DotIt.sp:GPB(55233)]],
-- glyph of blood boil
[58617] = [[return DotIt.sp:GPB(58617)]],
-- scent of blood
[50421] = [[return DotIt.sp:GPB(50421)]],
 
},
Cooldowns = {
-- vampiric blood
[55233] = 48792,
-- unbreakable armor
[51271] = 48792,
-- mark of blood
[49005] = 48792,
-- lichborne
[49039] = 48792,
-- hysteria
[49016] = 48792,
-- hungering cold
[49203] = 48792,
-- deathchill
[49796] = 48792,
-- dancing runeblade
[49028] = 48792,
-- corpse explosion
[49158] = 48792,
-- anti-magic zone
[51052] = 48792,
-- abominations might
[53137] = 48792,
-- horn of winter
[57330] = 48792,
[57623] = 48792,
-- summon gargoyle
[49206] = 48792,
-- bone armor
[54467] = 48792,
-- icebound fort
[48792] = [[return 0]],
-- howling blast
[51408] = [[return 0]],
[49184] = 51408,
[51409] = 51408,
[51410] = 51408,
[51411] = 51408,
-- death and decay
[43265] = [[return 0]],
[49936] = 43265,
[49937] = 43265,
[49938] = 43265,
-- death grip
[49576] = [[return 0]],
-- raise dead
[46584] = [[return 0]],
-- mind freeze
[47528] = [[return 0]],
-- strangulate
[49916] = 49913,
[49915] = 49913,
[49914] = 49913,
[49913] = [[return 0]],
-- blood tap
[45529] = [[return 0]],
-- death pact
[48743] = [[return 0]],
-- anti magic shell
[48707] = [[return 0]],
-- raise ally
[61999] = [[return 0]],
-- army of the dead
[42650] = [[return 0]],
},
}
sp:insertSpells(deathknight, "DEATHKNIGHT")
\ No newline at end of file
trunk/DotIt/bossmods.lua New file
0,0 → 1,24
if not DotIt then
error("DotIt has to be loaded first")
end
local newList, del, deepDel, deepCopy = DotIt.sb:GetRecyclingFunctions()
local bossmods = DotIt:NewModule("bossmods")
local function DotIt:BigWigs_StartBar(msg, self, text, length, icon)
 
end
local function dbmhook(timer, id, icon, huge, small, color)
DEFAULT_CHAT_FRAME:AddMessage(timer)
DEFAULT_CHAT_FRAME:AddMessage(id)
end
local function setupHooks()
-- dbm hook
if IsAddonLoaded("Deadly Bossmods") then
DotIt:Hook(DBT, "CreateBar", function(...) dbmHook(...) end)
elseif IsAddonLoaded("BigWigs") then
DotIt:RegisterEvent("BigWigs_StartBar")
end
end
 
function bossmods:OnInitialize()
setupHooks()
end
\ No newline at end of file
trunk/DotIt Property changes : Added: svn:externals + libs/AceAddon-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0 libs/AceConfig-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConfig-3.0 libs/AceDB-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0 libs/AceDBOptions-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDBOptions-3.0 libs/AceEvent-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0 libs/AceGUI-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0 libs/AceLocale-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0 libs/AceHook-3.0 svn://svn.wowace.com/wow/ace3/mainline/trunk/AceHook-3.0 libs/AceGUI-3.0-SharedMediaWidgets svn://svn.wowace.com/wow/ace-gui-3-0-shared-media-widgets/mainline/trunk libs/CallbackHandler-1.0 svn://svn.wowace.com/wow/callbackhandler/mainline/trunk/CallbackHandler-1.0 libs/LibSharedMedia-3.0 svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk/LibSharedMedia-3.0 libs/LibStub svn://svn.wowace.com/wow/libstub/mainline/trunk