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.
436 lines
11 KiB
436 lines
11 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, -- 宁静
|
|
|
|
-- priest
|
|
596, -- 治疗祷言
|
|
|
|
-- shaman
|
|
1064, -- 治疗链
|
|
}
|
|
|
|
do
|
|
local temp = {}
|
|
for _, id in pairs(aoeHealings) do
|
|
temp[F:GetSpellInfo(id)] = true
|
|
end
|
|
aoeHealings = temp
|
|
end
|
|
|
|
function I.IsAoEHealing(name)
|
|
if not name then return false end
|
|
return aoeHealings[name]
|
|
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", "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,
|
|
["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
|
|
|
|
-------------------------------------------------
|
|
-- missing buffs, for indicator settings only
|
|
-------------------------------------------------
|
|
local buffsOrder = {"PWF", "AB", "DS", "MotW", "BoK", "BoM", "BoW", "BoS", "BS", "CS", "SP"}
|
|
local abbrToIndex = {}
|
|
|
|
local missingBuffs = {
|
|
["PWF"] = 1243,
|
|
["AB"] = 1459,
|
|
["DS"] = 14752,
|
|
["MotW"] = 1126,
|
|
["BoK"] = 20217,
|
|
["BoM"] = 19740,
|
|
["BoW"] = 19742,
|
|
["BoS"] = 20911,
|
|
["BS"] = 6673,
|
|
-- ["CS"] = 469,
|
|
["SP"] = 976,
|
|
}
|
|
|
|
do
|
|
local temp = {}
|
|
for _, k in pairs(buffsOrder) do
|
|
local id = missingBuffs[k]
|
|
local name, icon = F:GetSpellInfo(id)
|
|
if name then
|
|
tinsert(temp, {
|
|
["id"] = id,
|
|
["name"] = name,
|
|
["icon"] = icon,
|
|
["index"] = k,
|
|
})
|
|
abbrToIndex[k] = #temp
|
|
end
|
|
end
|
|
missingBuffs = temp
|
|
end
|
|
|
|
function I.GetDefaultMissingBuffs()
|
|
return missingBuffs
|
|
end
|
|
|
|
function I.GetMissingBuffsString()
|
|
local s = ""
|
|
for _, t in pairs(missingBuffs) do
|
|
s = s.."|T"..t["icon"]..":14:14:0:0:14:14:1:13:1:13|t".." "
|
|
end
|
|
return s
|
|
end
|
|
|
|
function I.GetMissingBuffsFilters()
|
|
local indicies = {
|
|
"PWF",
|
|
"DS",
|
|
"SP",
|
|
"AB",
|
|
"MotW",
|
|
"BS",
|
|
{"PALADIN", {"BoK", "BoM", "BoW", "BoS"}},
|
|
}
|
|
|
|
local ret = {}
|
|
for _, v in pairs(indicies) do
|
|
if type(v) == "string" then
|
|
local icon = missingBuffs[abbrToIndex[v]]["icon"]
|
|
local name = missingBuffs[abbrToIndex[v]]["name"]
|
|
local index = missingBuffs[abbrToIndex[v]]["index"]
|
|
tinsert(ret, {"|T"..icon..":14:14:0:0:14:14:1:13:1:13|t "..name, index})
|
|
else -- table
|
|
local icons = ""
|
|
for _, abbr in pairs(v[2]) do
|
|
local icon = missingBuffs[abbrToIndex[abbr]]["icon"]
|
|
icons = icons.."|T"..icon..":14:14:0:0:14:14:1:13:1:13|t "
|
|
end
|
|
tinsert(ret, {icons..F:GetLocalizedClassName(v[1]), v[1]})
|
|
end
|
|
end
|
|
return ret
|
|
end
|