Хочу написать аддон который смог бы сканировать рейд и если обнаруживает на ком-то дебаф (по ID скила) то проигрывает звуковой файл.
Воспроизвести звук не проблема:
Код:
PlaySoundFile("Interface\\AddOns\\Название аддона\\Sounds\\Countdown.mp3")
Но как реализовать проверку на рейде так и не понял. Пытался копировать куски кода из DBM но не смог разобраться. Буду благодарен за любую помощь.
Сообщение от
DreamlØlz
PHP код:
local checkIDs = { -- по аналогии добавить нужные ауры
['Священный щит'] = true,
[22222] = true,
}
local f = CreateFrame"frame"
f:Hide()
local dTypeFilter = {"HARMFUL", "HELPFUL"} -- бафы и дебафы HARMFUL = дебафы HELPFUL = бафы
local playCache = {} -- это нужно что бы звук не воспроизводился кучу раз при обновлении любой из аур, если на цили висит нужная
f:SetScript("OnEvent", function(self, event, unit)
if unit:match'raid%d' then -- нам нужен только рейд, не плохо бы кэшировать через слабые таблицы но и так сойдет
local foundAuras = 0 -- найденные ауры из кэша
for i = 1, #dTypeFilter do
local filter = dTypeFilter[i]
if filter then
local index = 1
while true do
local name, rank, texture, count, dtype, duration, timeLeft, caster, isStealable, shouldConsolidate, spellID = UnitAura(unit, index, filter)
if not name then break end -- цикл то бесконечный, нужно выходить если аур больше нет бля дальнейшего перебора
local curaura = checkIDs[name] or checkIDs[spellID] -- нашли ауру из списка?
if curaura then
foundAuras = foundAuras + 1 -- отлично сумируем
end
index = index + 1
end
end
end
if foundAuras > 0 and not playCache[unit] then
PlaySoundFile("Interface\\AddOns\\Название аддона\\Sounds\\Countdown.mp3")
playCache[unit] = true -- записываем юнита, для предотвращения множества вызовов при появлении всего 1 ауры
else
if playCache[unit] then -- ауры нет? снимаем флаг и можно поновой воспроизводить звук, в случае дальнейшего ее появления
playCache[unit] = nil
end
end
end
end)
f:RegisterEvent("UNIT_AURA")