Référence › Référence des fonctions › Functions

Functions.trends.calculate

publique

Appel

Functions.trends.calculate(history, window, noheals, nodmg)

Enregistrez-la comme dépendance nommée Functions.trends.calculate (accepter la complétion le fait pour vous), puis appelez-la sous ce nom.

Ce qu'elle fait

Estime la variation signée des points de vie à partir de l'historique pondéré des dégâts et des soins. Les dégâts contribuent un taux négatif et les soins un taux positif. Lit la fenêtre du profil en direct si aucune fenêtre n'est fournie, utilise l'horloge en direct et l'ancien service d'arrondi, et conserve la pondération et le calcul d'âge arrondi existants. Cette fonction utilitaire ne valide ni n'assainit l'historique, ne borne pas les horodatages et ne garantit pas des résultats finis.

Arguments

NomTypeCe qu'elle fait
historytable | false | nilEnregistrement d'historique contenant les tableaux damage et heals d'entrées temps/valeur, du plus récent au plus ancien. Un historique faux renvoie uniquement zéro, sans lire l'horloge.
windownumber | false | nilFenêtre de pondération en secondes ; nil ou false utilise le paramètre damage_history du profil actuel.
nohealsboolean | nilUne valeur vraie ignore le flux de soins sans lire son tableau.
nodmgboolean | nilUne valeur vraie ignore le flux de dégâts sans lire son tableau.

Retours

1numberTaux pondéré signé combiné issu de la formule d'origine ; les entrées mal formées ou non finies conservent l'ancien comportement (erreur ou valeur numérique).
2number | nilPlus grand âge de flux arrondi, en secondes ; ce n'est ni un nombre d'échantillons ni la preuve d'une observation continue. Omis lorsque l'historique est faux.

Éditions

Les fonctions utilitaires intégrées sont enregistrées sur toutes les éditions. Ce qui diffère, c'est l'API du jeu qu'elles lisent ; quand l'une manque, la fonction utilitaire se rabat sur une alternative ou renvoie nil avec une raison.

  • Indisponible sur cette édition (la raison figure dans l'infobulle)
  • Uniquement tant que les solutions de repli de Blizzard pour les fonctions obsolètes sont actives
API du jeuClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GetTimeClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Exemple

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

Source

Functions/trends.lua, ligne 75. En lecture seule dans le jeu ; Dupliquer crée une copie modifiable.

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)

Retour à Référence des fonctions