Chiamala come
Functions.trends.calculate(history, window, noheals, nodmg)
Registrala come dipendenza chiamata Functions.trends.calculate (accettare il completamento lo fa per te), poi chiamala con quel nome.
Cosa fa
Stima la variazione di salute con segno dalla cronologia ponderata di danni e cure. I danni contribuiscono con un tasso negativo e le cure con un tasso positivo. Legge la finestra attuale del profilo quando non viene fornita una finestra, usa l'orologio attuale e il servizio di arrotondamento precedente, e preserva la ponderazione esistente e il calcolo dell'età arrotondata. Questa funzione di supporto non convalida né pulisce la cronologia, non limita i timestamp e non garantisce risultati finiti.
Argomenti
| Nome | Tipo | Cosa fa |
|---|---|---|
history | table | false | nil | Record della cronologia con array damage e heals di voci tempo/valore, dalla più recente. Una cronologia falsy restituisce solo zero senza leggere l'orologio. |
window | number | false | nil | Finestra di ponderazione in secondi; nil o false usa l'impostazione damage_history del profilo attuale. |
noheals | boolean | nil | Un valore truthy salta il flusso delle cure senza leggerne l'array. |
nodmg | boolean | nil | Un valore truthy salta il flusso dei danni senza leggerne l'array. |
Valori restituiti
| 1 | number | Tasso ponderato combinato con segno, dalla formula originale; gli input malformati o non finiti mantengono il comportamento precedente di errore/numerico. |
|---|---|---|
| 2 | number | nil | La maggiore età arrotondata dei flussi, in secondi; non è un numero di campioni né una prova di osservazione continua. Omessa quando la cronologia è falsy. |
Edizioni
Le funzioni di supporto integrate sono registrate su ogni edizione. Ciò che cambia è l'API di gioco che leggono; dove ne manca una, la funzione di supporto ripiega su un'alternativa o restituisce nil con un motivo.
- Non disponibile su quell'edizione (il motivo è nel suggerimento)
- Solo mentre sono attivi i ripieghi di Blizzard per le API deprecate
| API di gioco | |||||
|---|---|---|---|---|---|
GetTime |
Esempio
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 < -1000Sorgente
Functions/trends.lua, riga 75. Nel gioco è in sola lettura; Duplica crea una copia modificabile.
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)




