You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
378 lines
9.9 KiB
378 lines
9.9 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local I = Cell.iFuncs
|
|
local F = Cell.funcs
|
|
|
|
-------------------------------------------------
|
|
-- dispelBlacklist
|
|
-------------------------------------------------
|
|
-- supress dispel highlight
|
|
local dispelBlacklist = {}
|
|
|
|
function I.GetDefaultDispelBlacklist()
|
|
return dispelBlacklist
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- debuffBlacklist
|
|
-------------------------------------------------
|
|
local debuffBlacklist = {
|
|
8326, -- 鬼魂
|
|
}
|
|
|
|
function I.GetDefaultDebuffBlacklist()
|
|
return debuffBlacklist
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- bigDebuffs
|
|
-------------------------------------------------
|
|
local bigDebuffs = {
|
|
}
|
|
|
|
function I.GetDefaultBigDebuffs()
|
|
return bigDebuffs
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- aoeHealings
|
|
-------------------------------------------------
|
|
local aoeHealings = {
|
|
["DRUID"] = {
|
|
[740] = true, -- 宁静
|
|
},
|
|
["PRIEST"] = {
|
|
[596] = true, -- 治疗祷言
|
|
},
|
|
["SHAMAN"] = {
|
|
[1064] = true, -- 治疗链
|
|
},
|
|
}
|
|
|
|
function I.GetAoEHealings()
|
|
return aoeHealings
|
|
end
|
|
|
|
local builtInAoEHealings = {}
|
|
local customAoEHealings = {}
|
|
|
|
function I.UpdateAoEHealings(t)
|
|
-- user disabled
|
|
wipe(builtInAoEHealings)
|
|
for class, spells in pairs(aoeHealings) do
|
|
for id, trackByName in pairs(spells) do
|
|
if not t["disabled"][id] then -- not disabled
|
|
if trackByName then
|
|
local name = F.GetSpellInfo(id)
|
|
if name then
|
|
builtInAoEHealings[name] = true
|
|
end
|
|
else
|
|
builtInAoEHealings[id] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- user created
|
|
wipe(customAoEHealings)
|
|
for _, id in pairs(t["custom"]) do
|
|
customAoEHealings[id] = true
|
|
end
|
|
end
|
|
|
|
function I.IsAoEHealing(name, id)
|
|
return builtInAoEHealings[name] or builtInAoEHealings[id] or customAoEHealings[id]
|
|
end
|
|
|
|
local summonDuration = {}
|
|
|
|
do
|
|
local temp = {}
|
|
for id, duration in pairs(summonDuration) do
|
|
temp[F.GetSpellInfo(id)] = duration
|
|
end
|
|
summonDuration = temp
|
|
end
|
|
|
|
function I.GetSummonDuration(spellName)
|
|
return summonDuration[spellName]
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- externalCooldowns
|
|
-------------------------------------------------
|
|
local externals = { -- true: track by name, false: track by id
|
|
["PALADIN"] = {
|
|
[1022] = true, -- 保护祝福
|
|
[6940] = true, -- 牺牲祝福
|
|
},
|
|
}
|
|
|
|
function I.GetExternals()
|
|
return externals
|
|
end
|
|
|
|
local builtInExternals = {}
|
|
local customExternals = {}
|
|
|
|
function I.UpdateExternals(t)
|
|
-- user disabled
|
|
wipe(builtInExternals)
|
|
for class, spells in pairs(externals) do
|
|
for id, trackByName in pairs(spells) do
|
|
if not t["disabled"][id] then -- not disabled
|
|
if trackByName then
|
|
local name = F.GetSpellInfo(id)
|
|
if name then
|
|
builtInExternals[name] = true
|
|
end
|
|
else
|
|
builtInExternals[id] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- user created
|
|
wipe(customExternals)
|
|
for _, id in pairs(t["custom"]) do
|
|
-- local name = F.GetSpellInfo(id)
|
|
-- if name then
|
|
-- customExternals[name] = true
|
|
-- end
|
|
customExternals[id] = true
|
|
end
|
|
end
|
|
|
|
function I.IsExternalCooldown(name, id, source, target)
|
|
return builtInExternals[name] or builtInExternals[id] or customExternals[id]
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- defensiveCooldowns
|
|
-------------------------------------------------
|
|
local defensives = { -- true: track by name, false: track by id
|
|
["DRUID"] = {
|
|
[22812] = true, -- 树皮术
|
|
[22842] = true, -- 狂暴回复
|
|
},
|
|
|
|
["HUNTER"] = {
|
|
[19263] = true, -- 威慑
|
|
},
|
|
|
|
["PALADIN"] = {
|
|
[498] = true, -- 圣佑术
|
|
[642] = true, -- 圣盾术
|
|
},
|
|
|
|
["PRIEST"] = {
|
|
[27827] = true, -- 救赎之魂
|
|
},
|
|
|
|
["ROGUE"] = {
|
|
[1966] = true, -- 佯攻
|
|
[5277] = true, -- 闪避
|
|
},
|
|
|
|
["WARRIOR"] = {
|
|
[871] = true, -- 盾墙
|
|
[12975] = true, -- 破釜沉舟
|
|
[23920] = true, -- 法术反射
|
|
},
|
|
}
|
|
|
|
function I.GetDefensives()
|
|
return defensives
|
|
end
|
|
|
|
local builtInDefensives = {}
|
|
local customDefensives = {}
|
|
|
|
function I.UpdateDefensives(t)
|
|
-- user disabled
|
|
wipe(builtInDefensives)
|
|
for class, spells in pairs(defensives) do
|
|
for id, trackByName in pairs(spells) do
|
|
if not t["disabled"][id] then -- not disabled
|
|
if trackByName then
|
|
local name = F.GetSpellInfo(id)
|
|
if name then
|
|
builtInDefensives[name] = true
|
|
end
|
|
else
|
|
builtInDefensives[id] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- user created
|
|
wipe(customDefensives)
|
|
for _, id in pairs(t["custom"]) do
|
|
-- local name = F.GetSpellInfo(id)
|
|
-- if name then
|
|
-- customDefensives[name] = true
|
|
-- end
|
|
customDefensives[id] = true
|
|
end
|
|
end
|
|
|
|
local defensiveBlacklist = {
|
|
}
|
|
|
|
function I.IsDefensiveCooldown(name, id)
|
|
if defensiveBlacklist[id] then return end
|
|
return builtInDefensives[name] or builtInDefensives[id] or customDefensives[id]
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- dispels
|
|
-------------------------------------------------
|
|
local dispellable = {
|
|
-- DRUID ----------------
|
|
[11] = {["Curse"] = true, ["Poison"] = true},
|
|
|
|
-- MAGE -----------------
|
|
[8] = {["Curse"] = true},
|
|
|
|
-- PALADIN --------------
|
|
[2] = {["Disease"] = true, ["Magic"] = true, ["Poison"] = true, ["Bleed"] = true},
|
|
|
|
-- PRIEST ---------------
|
|
[5] = {["Disease"] = true, ["Magic"] = true},
|
|
|
|
-- SHAMAN ---------------
|
|
[7] = {["Disease"] = true, ["Poison"] = true},
|
|
}
|
|
|
|
function I.CanDispel(dispelType)
|
|
if not dispelType then return end
|
|
|
|
if dispellable[Cell.vars.playerClassID] then
|
|
return dispellable[Cell.vars.playerClassID][dispelType]
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- drinking
|
|
-------------------------------------------------
|
|
local drinks = {
|
|
430, -- 喝水
|
|
}
|
|
|
|
do
|
|
local temp = {}
|
|
for _, id in pairs(drinks) do
|
|
temp[F.GetSpellInfo(id)] = true
|
|
end
|
|
drinks = temp
|
|
end
|
|
|
|
function I.IsDrinking(name)
|
|
return drinks[name]
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- healer
|
|
-------------------------------------------------
|
|
local spells = {
|
|
-- druid
|
|
774, -- 回春术
|
|
8936, -- 愈合
|
|
-- priest
|
|
139, -- 恢复
|
|
17, -- 真言术:盾
|
|
-- shaman
|
|
974, -- 大地之盾
|
|
}
|
|
|
|
function F.FirstRun()
|
|
local icons = "\n\n"
|
|
for i, id in pairs(spells) do
|
|
local icon = select(2, F.GetSpellInfo(id))
|
|
icons = icons .. "|T"..icon..":0|t"
|
|
if i % 11 == 0 then
|
|
icons = icons .. "\n"
|
|
end
|
|
end
|
|
|
|
local popup = Cell.CreateConfirmPopup(Cell.frames.anchorFrame, 200, L["Would you like Cell to create a \"Healers\" indicator (icons)?"]..icons, function(self)
|
|
local currentLayoutTable = Cell.vars.currentLayoutTable
|
|
|
|
local last = #currentLayoutTable["indicators"]
|
|
if currentLayoutTable["indicators"][last]["type"] == "built-in" then
|
|
indicatorName = "indicator1"
|
|
else
|
|
indicatorName = "indicator"..(tonumber(strmatch(currentLayoutTable["indicators"][last]["indicatorName"], "%d+"))+1)
|
|
end
|
|
|
|
tinsert(currentLayoutTable["indicators"], {
|
|
["name"] = "Healers",
|
|
["indicatorName"] = indicatorName,
|
|
["type"] = "icons",
|
|
["enabled"] = true,
|
|
["position"] = {"TOPRIGHT", "button", "TOPRIGHT", 0, 3},
|
|
["frameLevel"] = 5,
|
|
["size"] = {13, 13},
|
|
["num"] = 5,
|
|
["numPerLine"] = 5,
|
|
["orientation"] = "right-to-left",
|
|
["spacing"] = {0, 0},
|
|
["font"] = {
|
|
{"Cell ".._G.DEFAULT, 11, "Outline", false, "TOPRIGHT", 2, 1, {1, 1, 1}},
|
|
{"Cell ".._G.DEFAULT, 11, "Outline", false, "BOTTOMRIGHT", 2, -1, {1, 1, 1}},
|
|
},
|
|
["showStack"] = true,
|
|
["showDuration"] = false,
|
|
["showAnimation"] = true,
|
|
["glowOptions"] = {"None", {0.95, 0.95, 0.32, 1}},
|
|
["auraType"] = "buff",
|
|
["castBy"] = "me",
|
|
["trackByName"] = true,
|
|
["auras"] = spells,
|
|
})
|
|
Cell.Fire("UpdateIndicators", Cell.vars.currentLayout, indicatorName, "create", currentLayoutTable["indicators"][last+1])
|
|
CellDB["firstRun"] = false
|
|
F.ReloadIndicatorList()
|
|
end, function()
|
|
CellDB["firstRun"] = false
|
|
end)
|
|
popup:SetPoint("TOPLEFT")
|
|
popup:Show()
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- targetedSpells
|
|
-------------------------------------------------
|
|
local targetedSpells = {
|
|
|
|
}
|
|
|
|
function I.GetDefaultTargetedSpellsList()
|
|
return targetedSpells
|
|
end
|
|
|
|
function I.GetDefaultTargetedSpellsGlow()
|
|
return {"Pixel", {0.95,0.95,0.32,1}, 9, 0.25, 8, 2}
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- Actions: Healing Potion & Healthstone ...
|
|
-------------------------------------------------
|
|
local actions = {
|
|
|
|
}
|
|
|
|
function I.GetDefaultActions()
|
|
return actions
|
|
end
|
|
|
|
function I.ConvertActions(db)
|
|
local temp = {}
|
|
for _, t in pairs(db) do
|
|
temp[t[1]] = t[2]
|
|
end
|
|
return temp
|
|
end
|