local _ , Cell = ...
local L = Cell.L
local I = Cell.iFuncs
local F = Cell.funcs
-------------------------------------------------
-- dispelBlacklist
-------------------------------------------------
-- suppress dispel highlight
local dispelBlacklist = { }
function I . GetDefaultDispelBlacklist ( )
return dispelBlacklist
end
-------------------------------------------------
-- debuffBlacklist
-------------------------------------------------
local debuffBlacklist = {
8326 , -- 鬼魂
160029 , -- 正在复活
255234 , -- 图腾复生
225080 , -- 复生
57723 , -- 筋疲力尽
57724 , -- 心满意足
80354 , -- 时空错位
264689 , -- 疲倦
390435 , -- 筋疲力尽
206151 , -- 挑战者的负担
195776 , -- 月羽疫病
352562 , -- 起伏机动
356419 , -- 审判灵魂
387847 , -- 邪甲术
213213 , -- 伪装
}
function I . GetDefaultDebuffBlacklist ( )
-- local temp = {}
-- for i, id in pairs(debuffBlacklist) do
-- temp[i] = F:GetSpellInfo(id)
-- end
-- return temp
return debuffBlacklist
end
-------------------------------------------------
-- bigDebuffs
-------------------------------------------------
local bigDebuffs = {
46392 , -- 专注打击
-----------------------------------------------
240443 , -- 爆裂
209858 , -- 死疽溃烂
240559 , -- 重伤
-- 226512, -- 鲜血脓液(血池)
-----------------------------------------------
-- NOTE: Thundering Affix - Dragonflight Season 1
-- 396369, -- 闪电标记
-- 396364, -- 狂风标记
-----------------------------------------------
-- NOTE: Shrouded Affix - Shadowlands Season 4
-- 373391, -- 梦魇
-- 373429, -- 腐臭虫群
-----------------------------------------------
-- NOTE: Encrypted Affix - Shadowlands Season 3
-- 尤型拆卸者
-- 366297, -- 解构
-- 366288, -- 猛力砸击
-----------------------------------------------
-- NOTE: Tormented Affix - Shadowlands Season 2
-- 焚化者阿寇拉斯
-- 355732, -- 融化灵魂
-- 355738, -- 灼热爆破
-- 凇心之欧罗斯
-- 356667, -- 刺骨之寒
-- 刽子手瓦卢斯
-- 356925, -- 屠戮
-- 356923, -- 撕裂
-- 358973, -- 恐惧浪潮
-- 粉碎者索苟冬
-- 355806, -- 重压
-- 358777, -- 痛苦之链
}
function I . GetDefaultBigDebuffs ( )
return bigDebuffs
end
-------------------------------------------------
-- aoeHealings
-------------------------------------------------
local aoeHealings = {
-- druid
740 , -- 宁静
145205 , -- 百花齐放
-- evoker
355916 , -- 翡翠之花
361361 , -- 婆娑幼苗
363534 , -- 回溯
367230 , -- 精神之花
370984 , -- 翡翠交融
371441 , -- 赐命者之焰
371879 , -- 生生不息
-- monk
115098 , -- 真气波
123986 , -- 真气爆裂
115310 , -- 还魂术
-- 191837, -- 精华之泉
322118 , -- 青龙下凡 (SUMMON)
-- paladin
85222 , -- 黎明之光
119952 , -- 弧形圣光
114165 , -- 神圣棱镜
200654 , -- 提尔的拯救
216371 , -- 复仇十字军
-- priest
120517 , -- 光晕
34861 , -- 圣言术:灵
596 , -- 治疗祷言
64843 , -- 神圣赞美诗
110744 , -- 神圣之星
204883 , -- 治疗之环
281265 , -- 神圣新星
314867 , -- 暗影盟约
15290 , -- 吸血鬼的拥抱
372787 , -- 神言术:佑
-- shaman
1064 , -- 治疗链
73920 , -- 治疗之雨
108280 , -- 治疗之潮图腾 (SUMMON)
52042 , -- 治疗之泉图腾 (SUMMON)
197995 , -- 奔涌之流
157503 , -- 暴雨图腾
114911 , -- 先祖指引
382311 , -- 先祖复苏
207778 , -- 倾盆大雨
114083 , -- 恢复迷雾 (升腾)
}
local aoeHealingIDs = {
[ 343819 ] = true , -- 朱鹤下凡,朱鹤产生的“迷雾之风”的施法者是玩家
[ 377509 ] = true , -- 梦境投影(pvp)
}
do
local temp = { }
for _ , id in pairs ( aoeHealings ) do
temp [ F : GetSpellInfo ( id ) ] = true
end
aoeHealings = temp
end
function I . IsAoEHealing ( nameOrID )
if not nameOrID then return false end
return aoeHealings [ nameOrID ] or aoeHealingIDs [ nameOrID ]
end
local summonDuration = {
-- evoker
[ 377509 ] = 6 , -- 梦境投影(pvp)
-- monk
[ 322118 ] = 25 , -- 青龙下凡
-- shaman
[ 108280 ] = 12 , -- 治疗之潮图腾
[ 52042 ] = 15 , -- 治疗之泉图腾
}
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
[ " DEATHKNIGHT " ] = {
[ 51052 ] = true , -- 反魔法领域
} ,
[ " DEMONHUNTER " ] = {
[ 196718 ] = true , -- 黑暗
} ,
[ " DRUID " ] = {
[ 102342 ] = true , -- 铁木树皮
} ,
[ " EVOKER " ] = {
[ 374227 ] = true , -- 微风
[ 357170 ] = true , -- 时间膨胀
[ 378441 ] = true , -- 时间停止
} ,
[ " MAGE " ] = {
[ 198158 ] = true , -- 群体隐形
[ 414660 ] = { -- 群体屏障
[ 414661 ] = false , -- 寒冰护体
[ 414662 ] = false , -- 烈焰护体
[ 414663 ] = false , -- 棱光护体
-- [11426] = false, -- 寒冰护体 (self)
-- [235313] = false, -- 烈焰护体 (self)
-- [235450] = false, -- 棱光护体 (self)
} ,
} ,
[ " MONK " ] = {
[ 116849 ] = true , -- 作茧缚命
[ 202248 ] = false , -- 偏转冥想
} ,
[ " PALADIN " ] = {
[ 1022 ] = true , -- 保护祝福
[ 6940 ] = true , -- 牺牲祝福
[ 204018 ] = true , -- 破咒祝福
[ 31821 ] = true , -- 光环掌握
[ 210256 ] = true , -- 庇护祝福
[ 228050 ] = false , -- 圣盾术 (被遗忘的女王护卫)
-- [211210] = true, -- 提尔的保护
-- [216328] = true, -- 光之优雅
} ,
[ " PRIEST " ] = {
[ 33206 ] = true , -- 痛苦压制
[ 47788 ] = true , -- 守护之魂
[ 62618 ] = true , -- 真言术:障
[ 213610 ] = true , -- 神圣守卫
[ 197268 ] = true , -- 希望之光
} ,
[ " ROGUE " ] = {
[ 114018 ] = true , -- 潜伏帷幕
} ,
[ " SHAMAN " ] = {
[ 98008 ] = true , -- 灵魂链接图腾
[ 201633 ] = true , -- 大地之墙图腾
[ 8178 ] = true , -- 根基图腾
[ 383018 ] = true , -- 石肤图腾
} ,
[ " WARRIOR " ] = {
[ 97462 ] = true , -- 集结呐喊
[ 3411 ] = true , -- 援护
[ 213871 ] = true , -- 护卫
} ,
}
function I . GetExternals ( )
return externals
end
local builtInExternals = { }
local customExternals = { }
local function UpdateExternals ( id , trackByName )
if trackByName then
local name = F : GetSpellInfo ( id )
if name then
builtInExternals [ name ] = true
end
else
builtInExternals [ id ] = true
end
end
function I . UpdateExternals ( t )
-- user disabled
wipe ( builtInExternals )
for class , spells in pairs ( externals ) do
for id , v in pairs ( spells ) do
if not t [ " disabled " ] [ id ] then -- not disabled
if type ( v ) == " table " then
builtInExternals [ id ] = true -- for I.IsExternalCooldown()
for subId , subTrackByName in pairs ( v ) do
UpdateExternals ( subId , subTrackByName )
end
else
UpdateExternals ( id , v )
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
local UnitIsUnit = UnitIsUnit
local bos = F : GetSpellInfo ( 6940 ) -- 牺牲祝福
function I . IsExternalCooldown ( name , id , source , target )
if name == bos then
if source and target then
-- NOTE: hide bos on caster
return not UnitIsUnit ( source , target )
else
return true
end
else
return builtInExternals [ name ] or builtInExternals [ id ] or customExternals [ id ]
end
end
-------------------------------------------------
-- defensiveCooldowns
-------------------------------------------------
local defensives = { -- true: track by name, false: track by id
[ " DEATHKNIGHT " ] = {
[ 48707 ] = true , -- 反魔法护罩
[ 48792 ] = true , -- 冰封之韧
[ 49028 ] = true , -- 符文刃舞
[ 55233 ] = true , -- 吸血鬼之血
[ 49039 ] = true , -- 巫妖之躯
[ 194679 ] = true , -- 符文分流
} ,
[ " DEMONHUNTER " ] = {
[ 196555 ] = true , -- 虚空行走
[ 198589 ] = true , -- 疾影
[ 187827 ] = false , -- 恶魔变形 162264(DPS)
} ,
[ " DRUID " ] = {
[ 22812 ] = true , -- 树皮术
[ 61336 ] = true , -- 生存本能
[ 200851 ] = true , -- 沉睡者之怒
[ 102558 ] = true , -- 化身:乌索克的守护者
[ 22842 ] = true , -- 狂暴回复
} ,
[ " EVOKER " ] = {
[ 363916 ] = true , -- 黑曜鳞片
[ 374348 ] = true , -- 新生光焰
[ 370960 ] = true , -- 翡翠交融
} ,
[ " HUNTER " ] = {
[ 186265 ] = true , -- 灵龟守护
[ 264735 ] = true , -- 优胜劣汰
} ,
[ " MAGE " ] = {
[ 45438 ] = true , -- 寒冰屏障
[ 414658 ] = true , -- 深寒凝冰
[ 113862 ] = false , -- Greater Invisibility - 强化隐形术
[ 55342 ] = false , -- 镜像,使用 CLEU 而非 UNIT_AURA
[ 342246 ] = true , -- 操控时间
} ,
[ " MONK " ] = {
[ 115176 ] = false , -- 禅悟冥想
[ 115203 ] = true , -- 壮胆酒
[ 122278 ] = true , -- 躯不坏
[ 122783 ] = true , -- 散魔功
[ 125174 ] = true , -- 业报之触
} ,
[ " PALADIN " ] = {
[ 498 ] = true , -- 圣佑术
[ 642 ] = true , -- 圣盾术
[ 31850 ] = true , -- 炽热防御者
[ 212641 ] = true , -- 远古列王守卫
[ 205191 ] = true , -- 以眼还眼
[ 389539 ] = true , -- 戒卫
[ 184662 ] = true , -- 复仇之盾
} ,
[ " PRIEST " ] = {
[ 47585 ] = true , -- 消散
[ 19236 ] = true , -- 绝望祷言
[ 586 ] = true , -- 渐隐术 -- TODO: 373446 通透影像
[ 193065 ] = true , -- 防护圣光
[ 27827 ] = true , -- 救赎之魂
} ,
[ " ROGUE " ] = {
[ 1966 ] = true , -- 佯攻
[ 5277 ] = true , -- 闪避
[ 31224 ] = false , -- 暗影斗篷
} ,
[ " SHAMAN " ] = {
[ 108271 ] = true , -- 星界转移
[ 409293 ] = true , -- 掘地三尺
} ,
[ " WARLOCK " ] = {
[ 104773 ] = true , -- 不灭决心
[ 212295 ] = true , -- 虚空守卫
[ 108416 ] = true , -- 黑暗契约
} ,
[ " WARRIOR " ] = {
[ 871 ] = true , -- 盾墙
[ 12975 ] = true , -- 破釜沉舟
[ 23920 ] = true , -- 法术反射
[ 118038 ] = true , -- 剑在人在
[ 184364 ] = 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
function I . IsDefensiveCooldown ( name , id )
return builtInDefensives [ name ] or builtInDefensives [ id ] or customDefensives [ id ]
end
-------------------------------------------------
-- tankActiveMitigation
-------------------------------------------------
local tankActiveMitigations = {
-- death knight
-- 77535, -- 鲜血护盾
195181 , -- 白骨之盾
-- demon hunter
203720 , -- 恶魔尖刺
-- druid
192081 , -- 铁鬃
-- monk
215479 , -- 酒醒入定
-- paladin
132403 , -- 正义盾击
-- warrior
2565 , -- 盾牌格挡
}
local tankActiveMitigationNames = {
-- death knight
-- F:GetClassColorStr("DEATHKNIGHT")..F:GetSpellInfo(77535).."|r", -- 鲜血护盾
F : GetClassColorStr ( " DEATHKNIGHT " ) .. F : GetSpellInfo ( 195181 ) .. " |r " , -- 白骨之盾
-- demon hunter
F : GetClassColorStr ( " DEMONHUNTER " ) .. F : GetSpellInfo ( 203720 ) .. " |r " , -- 恶魔尖刺
-- druid
F : GetClassColorStr ( " DRUID " ) .. F : GetSpellInfo ( 192081 ) .. " |r " , -- 铁鬃
-- monk
F : GetClassColorStr ( " MONK " ) .. F : GetSpellInfo ( 215479 ) .. " |r " , -- 铁骨酒
-- paladin
F : GetClassColorStr ( " PALADIN " ) .. F : GetSpellInfo ( 132403 ) .. " |r " , -- 正义盾击
-- warrior
F : GetClassColorStr ( " WARRIOR " ) .. F : GetSpellInfo ( 2565 ) .. " |r " , -- 盾牌格挡
}
do
local temp = { }
for _ , id in pairs ( tankActiveMitigations ) do
temp [ F : GetSpellInfo ( id ) ] = true
end
tankActiveMitigations = temp
end
function I . IsTankActiveMitigation ( name )
return tankActiveMitigations [ name ]
end
function I . GetTankActiveMitigationString ( )
return table.concat ( tankActiveMitigationNames , " , " ) .. " . "
end
-------------------------------------------------
-- dispels
-------------------------------------------------
local dispellable = { }
function I . CanDispel ( dispelType )
if not dispelType then return end
return dispellable [ dispelType ]
end
local dispelNodeIDs = {
-- DRUID ----------------
-- 102 - Balance
[ 102 ] = { [ " Curse " ] = 82205 , [ " Poison " ] = 82205 } ,
-- 103 - Feral
[ 103 ] = { [ " Curse " ] = 82204 , [ " Poison " ] = 82204 } ,
-- 104 - Guardian
[ 104 ] = { [ " Curse " ] = 82215 , [ " Poison " ] = 82215 } ,
-- Restoration
[ 105 ] = { [ " Curse " ] = 82203 , [ " Magic " ] = true , [ " Poison " ] = 82203 } ,
-------------------------
-- EVOKER ---------------
-- 1467 - Devastation
[ 1467 ] = { [ " Curse " ] = 93294 , [ " Disease " ] = 93294 , [ " Poison " ] = { 93306 , 93294 } , [ " Bleed " ] = 93294 } ,
-- 1468 - Preservation
[ 1468 ] = { [ " Curse " ] = 93294 , [ " Disease " ] = 93294 , [ " Magic " ] = true , [ " Poison " ] = true , [ " Bleed " ] = 93294 } ,
-- 1473 - Augmentation
[ 1473 ] = { [ " Curse " ] = 93294 , [ " Disease " ] = 93294 , [ " Poison " ] = { 93306 , 93294 } , [ " Bleed " ] = 93294 } ,
-------------------------
-- MAGE -----------------
-- 62 - Arcane
[ 62 ] = { [ " Curse " ] = 62116 } ,
-- 63 - Fire
[ 63 ] = { [ " Curse " ] = 62116 } ,
-- 64 - Frost
[ 64 ] = { [ " Curse " ] = 62116 } ,
-------------------------
-- MONK -----------------
-- 268 - Brewmaster
[ 268 ] = { [ " Disease " ] = 81633 , [ " Poison " ] = 81633 } ,
-- 269 - Windwalker
[ 269 ] = { [ " Disease " ] = 80606 , [ " Poison " ] = 80606 } ,
-- 270 - Mistweaver
[ 270 ] = { [ " Disease " ] = 81634 , [ " Magic " ] = true , [ " Poison " ] = 81634 } ,
-------------------------
-- PALADIN --------------
-- 65 - Holy
[ 65 ] = { [ " Disease " ] = 81508 , [ " Magic " ] = true , [ " Poison " ] = 81508 , [ " Bleed " ] = 81616 } ,
-- 66 - Protection
[ 66 ] = { [ " Disease " ] = 81507 , [ " Poison " ] = 81507 , [ " Bleed " ] = 81616 } ,
-- 70 - Retribution
[ 70 ] = { [ " Disease " ] = 81507 , [ " Poison " ] = 81507 , [ " Bleed " ] = 81616 } ,
-------------------------
-- PRIEST ---------------
-- 256 - Discipline
[ 256 ] = { [ " Disease " ] = 82705 , [ " Magic " ] = true } ,
-- 257 - Holy
[ 257 ] = { [ " Disease " ] = 82705 , [ " Magic " ] = true } ,
-- 258 - Shadow
[ 258 ] = { [ " Disease " ] = 82704 , [ " Magic " ] = 82699 } ,
-------------------------
-- SHAMAN ---------------
-- 262 - Elemental
[ 262 ] = { [ " Curse " ] = 81075 , [ " Poison " ] = 81093 } ,
-- 263 - Enhancement
[ 263 ] = { [ " Curse " ] = 81077 , [ " Poison " ] = 81093 } ,
-- 264 - Restoration
[ 264 ] = { [ " Curse " ] = 81073 , [ " Magic " ] = true , [ " Poison " ] = 81093 } ,
-------------------------
-- WARLOCK --------------
-- 265 - Affliction
-- [265] = {["Magic"] = function() return IsSpellKnown(89808, true) end},
-- 266 - Demonology
-- [266] = {["Magic"] = function() return IsSpellKnown(89808, true) end},
-- 267 - Destruction
-- [267] = {["Magic"] = function() return IsSpellKnown(89808, true) end},
-------------------------
}
local eventFrame = CreateFrame ( " Frame " )
--Whenever anything is committed to the configID, e.g. when saving talents, switching talent loadouts, spending profession points, etc
if UnitClassBase ( " player " ) == " WARLOCK " then
eventFrame : RegisterEvent ( " UNIT_PET " )
local timer
eventFrame : SetScript ( " OnEvent " , function ( self , event , unit )
if unit ~= " player " then return end
if timer then
timer : Cancel ( )
end
timer = C_Timer.NewTimer ( 1 , function ( )
-- update dispellable
dispellable [ " Magic " ] = IsSpellKnown ( 89808 , true )
-- texplore(dispellable)
end )
end )
else
eventFrame : RegisterEvent ( " PLAYER_ENTERING_WORLD " )
eventFrame : RegisterEvent ( " TRAIT_CONFIG_UPDATED " )
-- eventFrame:RegisterEvent("ACTIVE_PLAYER_SPECIALIZATION_CHANGED")
local function UpdateDispellable ( )
-- update dispellable
wipe ( dispellable )
local activeConfigID = C_ClassTalents.GetActiveConfigID ( )
if activeConfigID and dispelNodeIDs [ Cell.vars . playerSpecID ] then
for dispelType , value in pairs ( dispelNodeIDs [ Cell.vars . playerSpecID ] ) do
if type ( value ) == " boolean " then
dispellable [ dispelType ] = value
elseif type ( value ) == " table " then -- more than one trait
for _ , v in pairs ( value ) do
local nodeInfo = C_Traits.GetNodeInfo ( activeConfigID , v )
if nodeInfo and nodeInfo.ranksPurchased ~= 0 then
dispellable [ dispelType ] = true
break
end
end
else -- number: check node info
local nodeInfo = C_Traits.GetNodeInfo ( activeConfigID , value )
if nodeInfo and nodeInfo.ranksPurchased ~= 0 then
dispellable [ dispelType ] = true
end
end
end
end
-- texplore(dispellable)
end
local timer
eventFrame : SetScript ( " OnEvent " , function ( self , event )
if event == " PLAYER_ENTERING_WORLD " then
eventFrame : UnregisterEvent ( " PLAYER_ENTERING_WORLD " )
end
if timer then timer : Cancel ( ) end
timer = C_Timer.NewTimer ( 1 , UpdateDispellable )
end )
Cell : RegisterCallback ( " SpecChanged " , " Dispellable_SpecChanged " , function ( )
if timer then timer : Cancel ( ) end
timer = C_Timer.NewTimer ( 1 , UpdateDispellable )
end )
end
-------------------------------------------------
-- drinking
-------------------------------------------------
local drinks = {
170906 , -- 食物和饮水
167152 , -- 进食饮水
430 , -- 喝水
43182 , -- 饮水
172786 , -- 饮料
308433 , -- 食物和饮料
369162 , -- 饮用
}
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
8936 , -- 愈合
774 , -- 回春术
155777 , -- 回春术(萌芽)
33763 , -- 生命绽放
188550 , -- 生命绽放
48438 , -- 野性成长
102351 , -- 塞纳里奥结界
102352 , -- 塞纳里奥结界
391891 , -- 激变蜂群
-- evoker
363502 , -- 梦境飞行
370889 , -- 双生护卫
364343 , -- 回响
355941 , -- 梦境吐息
376788 , -- 梦境吐息(回响)
366155 , -- 逆转
367364 , -- 逆转(回响)
373862 , -- 时空畸体
378001 , -- 梦境投影(pvp)
373267 , -- 缚誓生命
395296 , -- 黑檀之力 (self)
395152 , -- 黑檀之力
360827 , -- 炽火龙鳞
410089 , -- 先知先觉
406732 , -- 空间悖论 (self)
406789 , -- 空间悖论
-- monk
119611 , -- 复苏之雾
124682 , -- 氤氲之雾
191840 , -- 精华之泉
325209 , -- 氤氲之息
-- 386276, -- 骨尘酒
-- 343737, -- 抚慰之息
-- 387766, -- 滋养真气
-- paladin
53563 , -- 圣光道标
223306 , -- 赋予信仰
148039 , -- 信仰屏障
156910 , -- 信仰道标
200025 , -- 美德道标
287280 , -- 圣光闪烁
388013 , -- 阳春祝福
388007 , -- 仲夏祝福
388010 , -- 暮秋祝福
388011 , -- 凛冬祝福
200654 , -- 提尔的拯救
-- priest
139 , -- 恢复
41635 , -- 愈合祷言
17 , -- 真言术:盾
194384 , -- 救赎
77489 , -- 圣光回响
372847 , -- 光明之泉恢复
-- shaman
974 , -- 大地之盾
383648 , -- 大地之盾(天赋)
61295 , -- 激流
382024 , -- 大地生命武器
375986 , -- 始源之潮
}
function F : FirstRun ( )
local icons = " \n \n "
for i , id in pairs ( spells ) do
local icon = select ( 2 , F : GetSpellInfo ( id ) )
if icon then
icons = icons .. " |T " .. icon .. " :0|t "
if i % 11 == 0 then
icons = icons .. " \n "
end
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 " ,
[ " 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
-------------------------------------------------
-- cleuAuras
-------------------------------------------------
-- local cleuAuras = {}
-- function I.UpdateCleuAuras(t)
-- -- reset
-- wipe(cleuAuras)
-- -- insert
-- for _, c in pairs(t) do
-- local icon = select(2, F:GetSpellInfo(c[1]))
-- cleuAuras[c[1]] = {c[2], icon}
-- end
-- end
-- function I.CheckCleuAura(id)
-- return cleuAuras[id]
-- end
-------------------------------------------------
-- targetedSpells
-------------------------------------------------
local targetedSpells = {
-- Mists of Pandaria -----------
-- 青龙寺
106823 , -- 翔龙猛袭
106841 , -- 青龙猛袭
-- Legion ----------------------
-- 群星庭院
211473 , -- 暗影鞭笞
-- 英灵殿
193092 , -- 放血扫击
193659 , -- 邪炽冲刺
192018 , -- 光明之盾
196838 , -- 血之气息
-- Shadowlands -----------------
320788 , -- 冻结之缚
344496 , -- 震荡爆发
319941 , -- 碎石之跃
322614 , -- 心灵连接
320132 , -- 暗影之怒
334053 , -- 净化冲击波
320596 , -- 深重呕吐
356924 , -- 屠戮
356666 , -- 刺骨之寒
319713 , -- 巨兽奔袭
338606 , -- 病态凝视
343556 , -- 病态凝视
324079 , -- 收割之镰
317963 , -- 知识烦扰
333861 , -- 回旋利刃
332234 , -- 挥发精油
-- 328429, -- 窒息勒压
-- Dragonflight ----------------
-- 化身巨龙牢窟
375870 , -- 致死石爪
395906 , -- 电化之颌
372158 , -- 破甲一击
372056 , -- 碾压
375580 , -- 西风猛击
376276 , -- 震荡猛击
-- 亚贝鲁斯,焰影熔炉
401022 , -- 灾祸掠击
407790 , -- 身影碎离
-- 阿梅达希尔,梦境之愿
418637 , -- 狂怒冲锋
-- 红玉新生法池
372858 , -- 灼热打击
381512 , -- 风暴猛击
-- 奈萨鲁斯
374533 , -- 炽热挥舞
377018 , -- 熔火真金
-- 蕨皮山谷
381444 , -- 野蛮冲撞
373912 , -- 腐朽打击
-- 碧蓝魔馆
374789 , -- 注能打击
372222 , -- 奥术顺劈
384978 , -- 巨龙打击
391136 , -- 肩部猛击
-- 诺库德阻击战
376827 , -- 传导打击
376829 , -- 雷霆打击
375937 , -- 撕裂猛击
375929 , -- 野蛮打击
376644 , -- 钢铁之矛
376865 , -- 静电之矛
382836 , -- 残杀
}
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 = {
{
6262 , -- 治疗石
{ " A " , { 0.4 , 1 , 0 } } ,
} ,
{
370511 , -- 振奋治疗药水
{ " A " , { 1 , 0.1 , 0.1 } } ,
} ,
{
371024 , -- 元素强能药水
{ " C3 " , { 1 , 1 , 0 } } ,
} ,
-- {
-- 359867, -- 宇宙治疗药水
-- {"A", {1, 0.1, 0.1}},
-- },
-- {
-- 307192, -- 灵魂治疗药水
-- {"A", {1, 0.1, 0.1}},
-- },
}
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 " , " MotW " , " AB " , " BS " , " BotB " }
local missingBuffs = {
[ " PWF " ] = 21562 ,
[ " MotW " ] = 1126 ,
[ " AB " ] = 1459 ,
[ " BS " ] = 6673 ,
[ " BotB " ] = 364342 ,
}
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 ,
} )
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 ret = { }
for _ , t in pairs ( missingBuffs ) do
tinsert ( ret , { " |T " .. t [ " icon " ] .. " :14:14:0:0:14:14:1:13:1:13|t " .. t [ " name " ] , t [ " index " ] } )
end
return ret
end
-------------------------------------------------
-- crowdControls
-------------------------------------------------
local crowdControls = { -- true: track by name, false: track by id
[ " DEATHKNIGHT " ] = {
[ 47476 ] = true , -- 绞袭
[ 91800 ] = true , -- 撕扯
[ 207167 ] = true , -- 致盲冰雨
[ 210128 ] = true , -- 复苏
[ 221562 ] = true , -- 窒息
[ 287254 ] = false , -- 寒冬死神
[ 377048 ] = true , -- 绝对零度
} ,
[ " DEMONHUNTER " ] = {
[ 179057 ] = true , -- 混乱新星
[ 205630 ] = true , -- 伊利丹之握
[ 204490 ] = true , -- 沉默咒符
[ 207684 ] = true , -- 悲苦咒符
[ 211881 ] = true , -- 邪能爆发
[ 217832 ] = true , -- 禁锢
-- [213491] = true, -- 恶魔践踏
} ,
[ " DRUID " ] = {
[ 99 ] = true , -- 夺魂咆哮
[ 2637 ] = true , -- 休眠
[ 5211 ] = true , -- 蛮力猛击
[ 22570 ] = true , -- 割碎
[ 33786 ] = true , -- 旋风
[ 81261 ] = true , -- 日光术
[ 127797 ] = true , -- 乌索尔旋风
[ 163505 ] = false , -- 斜掠
[ 209749 ] = true , -- 精灵虫群
[ 202244 ] = true , -- 蛮力冲锋
[ 410065 ] = false , -- 活性树脂
} ,
[ " EVOKER " ] = {
[ 360806 ] = true , -- 梦游
[ 372245 ] = true , -- 天空霸主
[ 408544 ] = true , -- 震地猛击
} ,
[ " HUNTER " ] = {
[ 1513 ] = true , -- 恐吓野兽
[ 3355 ] = true , -- 冰冻陷阱
[ 24394 ] = true , -- 胁迫
[ 117526 ] = true , -- 束缚射击
[ 213691 ] = true , -- 驱散射击
[ 357021 ] = false , -- 连续震荡
[ 407032 ] = true , -- 粘稠焦油炸弹
} ,
[ " MAGE " ] = {
[ 118 ] = true , -- 变形术
[ 31661 ] = true , -- 龙息术
[ 82691 ] = true , -- 冰霜之环
[ 383121 ] = true , -- 群体变形
[ 389831 ] = false , -- 积雪
} ,
[ " MONK " ] = {
[ 115078 ] = true , -- 分筋错骨
[ 119381 ] = true , -- 扫堂腿
[ 198909 ] = true , -- 赤精之歌
[ 202274 ] = true , -- 热酿
[ 202346 ] = true , -- 醉上加醉
[ 233759 ] = true , -- 抓钩武器
} ,
[ " PALADIN " ] = {
[ 853 ] = true , -- 制裁之锤
[ 10326 ] = true , -- 超度邪恶
[ 20066 ] = true , -- 忏悔
[ 105421 ] = true , -- 盲目之光
[ 234299 ] = true , -- 制裁之拳
[ 255941 ] = false , -- 灰烬觉醒
} ,
[ " PRIEST " ] = {
[ 605 ] = true , -- 精神控制
[ 8122 ] = true , -- 心灵尖啸
[ 9484 ] = true , -- 束缚亡灵
[ 15487 ] = true , -- 沉默
[ 64044 ] = true , -- 心灵惊骇
[ 88625 ] = true , -- 圣言术-罚
-- [226943] = true, -- 心灵炸弹
} ,
[ " ROGUE " ] = {
[ 408 ] = true , -- 肾击
[ 1776 ] = true , -- 凿击
[ 1833 ] = true , -- 偷袭
[ 2094 ] = true , -- 致盲
[ 6770 ] = true , -- 闷棍
[ 207777 ] = true , -- 卸除武装
[ 212183 ] = true , -- 烟雾弹
[ 305485 ] = true , -- 闪电磁索
} ,
[ " SHAMAN " ] = {
[ 51514 ] = true , -- 妖术
[ 77505 ] = true , -- 地震术
[ 118345 ] = true , -- 粉碎
[ 118905 ] = true , -- 静电充能
[ 197214 ] = true , -- 裂地术
} ,
[ " WARLOCK " ] = {
[ 710 ] = true , -- 放逐术
[ 5484 ] = true , -- 恐惧嚎叫
[ 5782 ] = true , -- 恐惧
[ 6358 ] = true , -- 诱惑
[ 6789 ] = true , -- 死亡缠绕
[ 22703 ] = true , -- 地狱火觉醒
[ 30283 ] = true , -- 暗影之怒
[ 89766 ] = true , -- 巨斧投掷
[ 196364 ] = false , -- 痛苦无常
[ 213688 ] = true , -- 邪能顺劈
} ,
[ " WARRIOR " ] = {
[ 5246 ] = true , -- 破胆怒吼
[ 132168 ] = true , -- 震荡波
[ 132169 ] = true , -- 风暴之锤
[ 236077 ] = true , -- 缴械
} ,
[ " UNCATEGORIZED " ] = {
[ 20549 ] = true , -- 战争践踏
[ 107079 ] = true , -- 震山掌
[ 255723 ] = true , -- 蛮牛冲撞
[ 287712 ] = true , -- 强力一击
}
}
function I . GetCrowdControls ( )
return crowdControls
end
local builtInCrowdControls = { }
local customCrowdControls = { }
function I . UpdateCrowdControls ( t )
-- user disabled
wipe ( builtInCrowdControls )
for class , spells in pairs ( crowdControls ) 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
builtInCrowdControls [ name ] = true
end
else
builtInCrowdControls [ id ] = true
end
end
end
end
-- user created
wipe ( customCrowdControls )
for _ , id in pairs ( t [ " custom " ] ) do
local name = F : GetSpellInfo ( id )
if name then
customCrowdControls [ name ] = true
end
end
end
function I . IsCrowdControls ( name , id )
return builtInCrowdControls [ name ] or builtInCrowdControls [ id ] or customCrowdControls [ name ]
end