Как вызывать
Functions.trends.calculateOld(health)
Запишите его как зависимость с именем Functions.trends.calculateOld (принятие автодополнения делает это само) и вызывайте по этому имени.
Что делает
Выполнить историческую формулу тренда снимков здоровья с действующим окном истории профиля, часами и старой службой округления. Сохраняются переходы максимального здоровья, ранняя остановка при полном или нулевом здоровье, взвешивание, ошибки и число возвращаемых значений. Пустой массив или снимки без записанного взвешенного изменения возвращают только ноль вместо результата 0/0; это старый алгоритм, а не проверенный прогноз.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
health | table | false | nil | Снимки здоровья (новые первыми), содержащие time, value и max. При ложном входе возвращается только ноль без чтения часов. |
Возвращает
| 1 | number | Взвешенное изменение снимков здоровья по исходной формуле сумма/количество; ноль для ложного ввода или когда взвешенное изменение не записано. |
|---|---|---|
| 2 | number | nil | Исходное число интервалов округлённого возраста; опускается, когда результат — одиночный ноль. |
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
- Недоступно в этом издании (причина — во всплывающей подсказке)
- Только пока включены запасные реализации Blizzard для устаревших функций
| Игровой API | |||||
|---|---|---|---|---|---|
GetTime |
Пример
local now = GetTime()
local snapshots = { { time = now, value = 6000, max = 10000 },
{ time = now - 1, value = 7000, max = 10000 }, { time = now - 2, value = 8000, max = 10000 } }
local change = Functions.trends.calculateOld(snapshots)
return change < 0Исходный код
Functions/trends.lua, строка 21. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Functions.trends.calculateOld(health)
if not health then
return 0
end
local damage_history = addon.db.profile.damage_history
local now = GetTime()
local total, count, seconds = 0, 0, 0
local last_health, last_offs, last_max
local offs_total = 0
for _,v in ipairs(health) do
if v.value >= v.max or v.value == 0 then
break
end
if last_max ~= v.max then
last_health = nil
last_max = v.max
end
local offs = addon.round(now - v.time)
if last_health ~= nil then
offs_total = offs_total + (last_health - v.value)
if last_offs ~= offs then
local scale = damage_history - offs
count = count + scale
total = total + (offs_total * scale)
seconds = seconds + 1
offs_total = 0
end
end
last_health = v.value
last_offs = offs
end
-- seconds is a number, so test it: with no change recorded (or no weight)
-- total/count is 0/0, and the trend is zero, not NaN.
if seconds > 0 and count ~= 0 then
return total / count, seconds
end
return 0




