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

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