Referenz › Funktionsreferenz › Functions

Functions.trends.calculate

öffentlich

Aufruf als

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

Erfassen Sie sie als Abhängigkeit mit dem Namen Functions.trends.calculate (das Übernehmen der Vervollständigung erledigt das) und rufen Sie sie dann unter diesem Namen auf.

Was sie bewirkt

Vorzeichenbehaftete Gesundheitsänderung aus gewichtetem Schadens- und Heilungsverlauf schätzen. Schaden trägt eine negative Rate bei, Heilung eine positive. Ohne übergebenes Fenster das Live-Fenster des Profils lesen, die Live-Uhr und den alten Rundungsdienst verwenden und die bestehende Gewichtung und Berechnung des gerundeten Alters beibehalten. Diese Hilfsfunktion validiert oder bereinigt den Verlauf nicht, begrenzt keine Zeitstempel und garantiert keine endlichen Ergebnisse.

Argumente

NameTypWas sie bewirkt
historytable | false | nilVerlaufsdatensatz mit den Arrays damage und heals aus Zeit-/Wert-Einträgen, neueste zuerst. Ist der Verlauf nil oder false, wird nur null zurückgegeben, ohne die Uhr zu lesen.
windownumber | false | nilGewichtungsfenster in Sekunden; nil oder false verwendet die aktuelle Profileinstellung damage_history.
nohealsboolean | nilEin Wert ungleich nil/false überspringt den Heilungsdatenstrom, ohne dessen Array zu lesen.
nodmgboolean | nilEin Wert ungleich nil/false überspringt den Schadensdatenstrom, ohne dessen Array zu lesen.

Rückgabewerte

1numberKombinierte vorzeichenbehaftete gewichtete Rate aus der ursprünglichen Formel; fehlerhafte oder nicht endliche Eingaben behalten das alte Fehler- bzw. Zahlenverhalten.
2number | nilGrößeres gerundetes Alter des Datenstroms in Sekunden, weder eine Stichprobenzahl noch ein Beleg für lückenlose Beobachtung. Entfällt, wenn der Verlauf nil oder false ist.

Editionen

Integrierte Hilfsfunktionen werden auf jeder Edition registriert. Unterschiedlich ist die Spiel-API, die sie lesen; fehlt eine, weicht die Hilfsfunktion aus oder gibt nil mit einem Grund zurück.

  • Auf dieser Edition nicht verfügbar (den Grund nennt der Tooltip)
  • Nur, solange Blizzards Ersatz für veraltete Funktionen aktiv ist
Spiel-APIClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GetTimeClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Beispiel

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

Quelle

Functions/trends.lua, Zeile 75. Im Spiel schreibgeschützt; Duplizieren erstellt eine bearbeitbare Kopie.

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)

Zurück zu Funktionsreferenz