Riferimento › Riferimento delle funzioni › Functions

Functions.trends.calculate

pubblica

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

NomeTipoCosa fa
historytable | false | nilRecord della cronologia con array damage e heals di voci tempo/valore, dalla più recente. Una cronologia falsy restituisce solo zero senza leggere l'orologio.
windownumber | false | nilFinestra di ponderazione in secondi; nil o false usa l'impostazione damage_history del profilo attuale.
nohealsboolean | nilUn valore truthy salta il flusso delle cure senza leggerne l'array.
nodmgboolean | nilUn valore truthy salta il flusso dei danni senza leggerne l'array.

Valori restituiti

1numberTasso ponderato combinato con segno, dalla formula originale; gli input malformati o non finiti mantengono il comportamento precedente di errore/numerico.
2number | nilLa 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 giocoClassic EraTBC AnniversaryClassic progressionForeverRetail
GetTimeClassic EraTBC AnniversaryClassic progressionForeverRetail

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 < -1000

Sorgente

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)

Torna a Riferimento delle funzioni