Как вызывать
Functions.trends.calculate(history, window, noheals, nodmg)
Запишите его как зависимость с именем Functions.trends.calculate (принятие автодополнения делает это само) и вызывайте по этому имени.
Что делает
Оценить знаковое изменение здоровья по взвешенной истории урона и исцеления. Урон даёт отрицательную скорость, исцеление — положительную. Если окно не передано, читается действующее окно профиля; используются действующие часы и старая служба округления, сохраняются прежнее взвешивание и расчёт округлённого возраста. Этот помощник не проверяет и не очищает историю, не ограничивает метки времени и не гарантирует конечный результат.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
history | table | false | nil | Запись истории с массивами урона и исцеления из записей время/значение, новые первыми. При ложной истории возвращается только ноль без чтения часов. |
window | number | false | nil | Окно взвешивания в секундах; при nil или false используется текущая настройка профиля damage_history. |
noheals | boolean | nil | Истинное значение пропускает поток исцеления, не читая его массив. |
nodmg | boolean | nil | Истинное значение пропускает поток урона, не читая его массив. |
Возвращает
| 1 | number | Общая знаковая взвешенная скорость по исходной формуле; при некорректных или бесконечных входных данных сохраняется прежнее поведение ошибки/числа. |
|---|---|---|
| 2 | number | nil | Больший округлённый возраст потока в секундах — не число выборок и не доказательство непрерывного наблюдения. Опускается, если история ложна. |
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
- Недоступно в этом издании (причина — во всплывающей подсказке)
- Только пока включены запасные реализации Blizzard для устаревших функций
| Игровой API | |||||
|---|---|---|---|---|---|
GetTime |
Пример
local guid = UnitGUID("target")
local history = guid and addon.damageHistory[guid]
if not history then return false end
local rate = Functions.trends.calculate(history, 5, true)
return rate < -1000Исходный код
Functions/trends.lua, строка 75. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Functions.trends.calculate(history, window, noheals, nodmg)
if not history then
return 0
end
if not window then
window = addon.db.profile.damage_history
end
local now = GetTime()
local damage_total, damage_count, damage_seconds = 0, 0, 0
local heal_total, heal_count, heal_seconds = 0, 0, 0
local maxoffs, data = 0, {}
if not nodmg then
for _,v in ipairs(history.damage) do
local diff = now - v.time
local scale = window - diff
maxoffs = addon.round(diff)
if maxoffs > window then
break
end
if v.value then
data[maxoffs] = (data[maxoffs] or 0) + (v.value * scale)
end
end
damage_seconds = maxoffs
for i=0,maxoffs do
damage_total = damage_total + (data[i] or 0)
damage_count = damage_count + (window - i)
end
end
if not noheals then
maxoffs, data = 0, {}
for _,v in ipairs(history.heals) do
local diff = now - v.time
local scale = window - diff
maxoffs = addon.round(diff)
if maxoffs > window then
break
end
if v.value then
data[maxoffs] = (data[maxoffs] or 0) + (v.value * scale)
end
end
heal_seconds = maxoffs
for i=0,maxoffs do
heal_total = heal_total + (data[i] or 0)
heal_count = heal_count + (window - i)
end
end
return (((damage_count > 0) and (-damage_total / damage_count) or 0) +
((heal_count > 0) and (heal_total / heal_count) or 0)),
(damage_seconds > heal_seconds and damage_seconds or heal_seconds)




