Вариантов использования довольно прилично. Для более грамотного прожатия сейва заранее (не когда уже лицо на полу будет), определения сколько стакать меха у друида чтобы можно было начать сливать рагу на дамаг, определения сколько дополнительно хильнёт DS у блад дк (про DS у блад дк чуть позже выложу у бладов в сборках).
Покажу на примере блада как это будет выглядеть.
Вставляем в пользовательский код в боте внизу.
Код: Выделить всё
frame = CreateFrame("FRAME")
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
local damageTable = {}
local updatedamageInterval = 0.1
local eventIndex = 0
frame:SetScript("OnEvent", function(self, event, ...)
if event == "COMBAT_LOG_EVENT_UNFILTERED" then
local timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20;
eventIndex = eventIndex + 1
local t = time()
if checkVersionOld(1,3) then
timestamp, cleuEvent, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = ...;
elseif checkVersionOld(4,7) then
timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = ...;
else
timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = CombatLogGetCurrentEventInfo();
end
if cleuEvent == "SWING_DAMAGE" and isPlayer(destGUID) then
local _, _, _, _, _, _, _, _, _, _, _, amount = CombatLogGetCurrentEventInfo()
damageTable[eventIndex] = {t, amount}
elseif (cleuEvent == "SPELL_DAMAGE" or cleuEvent == "SPELL_PERIODIC_DAMAGE" or cleuEvent == "RANGE_DAMAGE") and isPlayer(destGUID) then
local _, _, _, _, _, _, _, _, _, _, _, _, _, _, amount = CombatLogGetCurrentEventInfo()
damageTable[eventIndex] = {t, amount}
end
end
end)
local totalTime = 0
local totalDamage = 0
local damageInLast5Seconds = 0
frame:SetScript("OnUpdate", function(self, elapsed)
totalTime = totalTime + elapsed
if totalTime >= updatedamageInterval then
local t = time() - 5
for k, v in pairs(damageTable) do
if v[1] < t then
damageTable[k] = nil
else
totalDamage = totalDamage + v[2]
end
end
damageInLast5Seconds = totalDamage
totalDamage = 0
totalTime = 0
end
end)
Если планируется использовать полученные данные для своевременного прожатия сейва, то нужно будет это значение сравнить с конкретным процентом вашего максимального количества хп. Сделать это можно также через пользовательский код. Например если нужно получить число равное 50% от вашего максимального значения хп, то в пользовательском коде это будет выглядеть как
Код: Выделить всё
MyUnitHealthMax("player")*0.5