иконки с кулдаунами не сдаются и взрывают мой моск, поэтому вернулся к тому с чего начал.
PHP код:
local AurasTable,bAurasTable = {},{
["WARLOCK"] = {[47813] = 18,[47811] = 24,[17800] = 30,[47865] = 300,[47864] = 24,[47867] = 60},
["HUNTER"] = {[49001] = 15},["SHAMAN"] = {[49233] = 18},["DEATHKNIGHT"] = {[55095] = 15,[55078] = 15},
["DRUID"] = {[770] = 300,[48468] = 12,[48463] = 12,[16857] = 300,[48566] = 60,[48574] = 9,[49800] = 12},
["PRIEST"] = {[48125] = 18,[48160] = 15,[48300] = 24,
["tier9shp"] = {48072,48073,48074,48075,48076,48097,48098,48099,48100,48101,48078,48077,48081,48079,48080,48085,
48086,48082,48084,48083,48095,48096,48092,48094,48093,48088,48087,48091,48089,48090}}}
local function GetDur(huid)
local _,huclass = UnitClass("player")
local hudur = bAurasTable[huclass][huid]
local function mbonusset(mset) local amount=0
for _,v in ipairs(mset) do if IsEquippedItem(v) then amount = amount + 1 end end return amount
end
local function addhaste() return hudur/(10000/(select(7,GetSpellInfo(18960)))) end
local function mglyph(gl) for i=1,6 do if select(3,GetGlyphSocketInfo(i)) == gl then return true end end end
if huclass == "WARLOCK" and huid == 47813 and mglyph(70947) then return addhaste()
elseif huclass == "DEATHKNIGHT" then return hudur + (select(5,GetTalentInfo(3,4))) * 3
elseif huclass == "SHAMAN" then return addhaste()
elseif huclass == "HUNTER" and mglyph(56832) then return hudur + 6
elseif huclass == "DRUID" then
if huid == 48468 then hudur = hudur + (select(5,GetTalentInfo(1,8))) * 2 end
if huid == 48463 then hudur = hudur + (select(5,GetTalentInfo(1,8))) * 3 end
if huid == 49800 and mglyph(54818) then return hudur + 4 end
elseif huid == "PRIEST" then
if huid == 48160 then if mbonusset(mbasetbl["PRIEST"]["tier9shp"]) > 1 then hudur = hudur + 6 end end
if (huid == 48160 or huid == 48300) and GetShapeshiftForm("player") == 1 then return addhaste() end
end
return hudur
end
function huUnitAura(unit,index)
local hutguid=UnitGUID(unit)
if hutguid and AurasTable[hutguid] and AurasTable[hutguid][index] then return
AurasTable[hutguid][index][1],
AurasTable[hutguid][index][2],
AurasTable[hutguid][index][3],
AurasTable[hutguid][index][4],
AurasTable[hutguid][index][5],
AurasTable[hutguid][index][6],
AurasTable[hutguid][index][7],
AurasTable[hutguid][index][8],
AurasTable[hutguid][index][9],
AurasTable[hutguid][index][10],
AurasTable[hutguid][index][11]
end
end
local function mfunc(self,event,...)
if select(3,...) == UnitGUID("player") and select(12,...) == "DEBUFF" then
local _,huevent,_,_,_,hutguid,_,_,huid=...
local huname,hurank,huicon=GetSpellInfo(huid)
local huduration=GetDur(huid)
local huexpires=huduration+GetTime()
if not AurasTable[hutguid] then AurasTable[hutguid] = {} end
if huevent == "SPELL_AURA_APPLIED" then
table.insert(AurasTable[hutguid],{huname,hurank,huicon,0,"",huduration,huexpires,"player","","",huid})
elseif huevent == "SPELL_AURA_REFRESH" then
for i=1,#AurasTable[hutguid] do
if AurasTable[hutguid][i][11] == huid then
AurasTable[hutguid][i][7]=huexpires
end
end
elseif huevent == "SPELL_AURA_REMOVED" then
for i=1,#AurasTable[hutguid] do
if AurasTable[hutguid][i] then
if AurasTable[hutguid][i][11] == huid then
table.remove(AurasTable[hutguid],i)
end
end
end
end
end
end
local mframe = CreateFrame("Frame", nil, UIParent)
mframe:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
mframe:SetScript("OnEvent", mfunc)
немного изменил TellMeWhen, и теперь при условии что фильтр "player|harmful" и UnitAura не нашла дебафф, он обращается уже к моей huUnitAura. работает, но пока без стаков, и база спеллов далеко не полная.
проблема с ними. как узнать какой спелл обновил дебафф?