Referência › Referência de funções › Functions

Functions.trends.calculateOld

pública

Chame como

Functions.trends.calculateOld(health)

Registre-a como uma dependência chamada Functions.trends.calculateOld (aceitar o preenchimento automático faz isso) e depois chame-a por esse nome.

O que faz

Executa a fórmula histórica de tendência de instantâneos de vida usando a janela de histórico do perfil ao vivo, o relógio e o serviço de arredondamento antigo. Preserva as transições de vida máxima, a parada antecipada com vida cheia ou zerada, a ponderação, os erros e as quantidades de retornos. Um array vazio, ou instantâneos que não registram variação ponderada, retornam apenas zero em vez de um resultado 0/0; este é o algoritmo antigo, e não uma previsão validada.

Argumentos

NomeTipoO que faz
healthtable | false | nilInstantâneos de vida, do mais recente ao mais antigo, com tempo, valor e máximo. Uma entrada falsa retorna apenas zero sem ler o relógio.

Retornos

1numberVariação ponderada dos instantâneos de vida pela fórmula original total/contagem; zero para entrada falsa ou quando nenhuma variação ponderada foi registrada.
2number | nilContagem original de intervalos de idade arredondada, omitida quando o resultado é o zero sozinho.

Edições

As funções auxiliares integradas são registradas em todas as edições. O que muda é a API do jogo que elas leem; quando uma está ausente, a função auxiliar recorre a uma alternativa ou retorna nil com um motivo.

  • Indisponível nessa edição (o motivo está na dica)
  • Só enquanto as alternativas da Blizzard para APIs obsoletas estiverem ativas
API do jogoClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GetTimeClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Exemplo

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

Código-fonte

Functions/trends.lua, linha 21. Somente leitura no jogo; Duplicar cria uma cópia editável.

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

Voltar para Referência de funções