Llamar como
Functions.trends.calculate(history, window, noheals, nodmg)
Regístrala como dependencia con el nombre Functions.trends.calculate (aceptar la sugerencia de autocompletado lo hace por ti) y luego llámala con ese nombre.
Qué hace
Estima el cambio de salud con signo a partir del historial ponderado de daño y sanación. El daño aporta un ritmo negativo y la sanación uno positivo. Lee la ventana del perfil en vivo cuando no se proporciona ninguna, usa el reloj en vivo y el servicio de redondeo antiguo, y conserva la ponderación existente y el cálculo de edad redondeada. Esta función auxiliar no valida ni depura el historial, no recorta las marcas de tiempo ni garantiza resultados finitos.
Argumentos
| Nombre | Tipo | Qué hace |
|---|---|---|
history | table | false | nil | Registro de historial con matrices de daño y sanación, de la más reciente a la más antigua, con entradas de tiempo/valor. Un historial falso devuelve solo cero sin leer el reloj. |
window | number | false | nil | Ventana de ponderación en segundos; nil o false usan el ajuste damage_history del perfil actual. |
noheals | boolean | nil | Un valor verdadero omite el flujo de sanación sin leer su matriz. |
nodmg | boolean | nil | Un valor verdadero omite el flujo de daño sin leer su matriz. |
Retornos
| 1 | number | Ritmo ponderado combinado con signo de la fórmula original; las entradas mal formadas o no finitas mantienen el comportamiento antiguo de error/numérico. |
|---|---|---|
| 2 | number | nil | Mayor edad redondeada del flujo en segundos; no es un número de muestras ni prueba de observación continua. Se omite cuando el historial es falso. |
Ediciones
Las funciones auxiliares integradas se registran en todas las ediciones. Lo que cambia es la API del juego que leen; donde falta alguna, la función auxiliar recurre a una alternativa o devuelve nil con un motivo.
- No disponible en esa edición (el motivo aparece en la información emergente)
- Solo mientras estén activas las alternativas de Blizzard para API obsoletas
| API del juego | |||||
|---|---|---|---|---|---|
GetTime |
Ejemplo
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 < -1000Código fuente
Functions/trends.lua, línea 75. Solo lectura en el juego; Duplicar crea una copia editable.
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)




