WeakAura - %tooltip1 Wert Formatieren


#1

Hallo,

ich habe mir eine Aura-Gruppe gebastelt welche mir mittels Symbol anzeigt ob ein Schild aktiv ist und zusätzlich mit einem Text darunter anzeigt wie groß der restliche Absorbtionswert ist. Dieser wird allerdings voll ausgeschrieben und wenn der mal weng größer ist (Aschenwinds Gehärteter Panzer z.B.) ist das eine Ellenlange Zahl.

Nun zu meiner Frage:
Wie kann ich diese Zahl umformatieren das zum Beispiel aus 123.456.789 die Anzeige 123,5M oder wenn se kleiner wird und z.B. 46.789 der Rest Wert ist dann 46,8K da steht (also sich dynamisch an den Wert anpasst)?

In meinem Beispiel habe ich einen Buff von mir selber (Einheit: Spieler) anzeigen lassen. Geht das auch mit einem Buff der sich auf dem Ziel befindet (z.B. weil ichs oben schon genannt habe den Schild von Lady Aschenwind: Gehärtete Panzer (Spell ID:296650))

Hier ist noch meine Aura die ich gebastelt habe:

!nJv3YjoUs43Lu1u1KQ2KJHamjxCUasGDYUeGb5mzMPszqyjaTXiXkltc5cEAoVjNxSt3s2GdyNHT2ZfBrkIDB5wT(6)(AcQe4hqIdivpVs9ZRfqweqy4FG0j0WNyA1YRvrkniOxf7FvTFFH97Ab98oVEGbwSsZ46wPVsaPvK41xPA2MX(kvKraImQWvCDSqjd6DPxvV6beAIzUs3FPbegdBbOiQuSGI3BnmdvBWlmRxYdisLe(MLOTlyKtympujzX47UGkKh)QNkKI45h963EidMeqw3F60yUjOt9RQ1OsJkEx4v7QgvR3iy6z1QHNIq4GnqjKWRDD7E(ThM96eXRCeftVnp66zrxpl66zr3k42MiyO3437Qg0BOzn4IOHzi2wicwhCEsVA7rZA2gTy2ma5D7I)wb4Lm(KKPt9TN1p3U7Go33ndpOasaMz8sEu0TSu3tCYe(kU0qG3s8saz01nj(Ji(nhcklbnaYYi6Aq5Bx6an3UuYG2DbLBLbBgNgzMdOoDbpoZstK7mntEmpfUbiboLgUwsJ(AwSuvq4l78hvVSEJlVSwTA1RCznVu)rmpAAQ3OvFF)(31TDhWGrGTRc0VKX3mUfvRfCnC018zGQDOYmTkbIENQbdfqoQHIOyQhUdk1ToY1dB3UxabIxMkM5qlNXFR0A7vSqYqRQJZ)82Sz47)NjunyfDsII2m(H5cd3QmMix2rKIAZntI5JcJOXXyWi4HcrHlsGeTmO0909LgJbF7jefhsJ4PrBHBdtIxs1p9GGbUPEv8aKis9mUFfK1MLp0RUxjb)wLnuzC5298klioxOBwanHPgfMeBulcA5S3PkPPteDgu4Q)9(DVTxByXawnk8DRvzpFpX5lBIqMziAlwaCx0X2CvQ(W6EhKzY4XudwWGJQbXNR)5gGfjC413TarMtviDXA770OyQg)qNPbCAsZX65lnizevYgv4JzcyNdbjRp4rAAiVed6IdKVC1YsS1PUGGs0u1d3wve)ydQr3Hl1CsIXOK9HUpqPP0hmxe(KKdafMxcPtnz)beIXzC2DqtKjVTgagBbgf)fWzZZ3CBivWSfociVQG4t0DA9VzXdKSmlcnA5CxPdu(3Zsy8sRV3G(JV0v9D9xhCkc8Xyv0BTB7TybpaO4pI3h)OqUAu8CbpIncl9LlC6Bw1De5aUSjF48aUGeP1h8Xt38BBg7(iMUz89qYxlOk)hpbsoNXnN8lN8R85)3)J2Wb7zZ4bu5RC9jNUzSzoxU7DZ(ePGJ(MXJ(Ld)4APCtoj0jXk9KMluqhauWMX)7)cwWb7nA)PBcOjqvvVQrJ6ELzQzFYBfwl4Tc(xBgxXZZR83xZH4djS1qxm5SZNQ0avMpEYheFi8K3Ee)u9cSAUKTtO9g4l0FQIyQNLKNfqSyR9kLEh0(kG08E)(7wPTHYeBy9UAstkP1jUIVLlASycyLqlkp1PCeWoUvVJa2rTEZE9pDnPCTqhf)wwvJC9GS1XZud8YPe4Yw0rKPKUYvIyXKil6NkHxEt70vO2IPwBFoxmBoCBJumVRak)amHt9NTGcESuN5n3SFjj6lO)Rag0VKZZz1Zr0aklmbZ)VretHdgZXJaEF)SIC7k7Cnn2aXZqvUhV)2Z2D3zeBLoxN3ybA6oAv4KdyRmj79z3Mo7GDF)Ck8CrkrJUC5SmIh2YVTsPI2dyCbAYMq7wAhn)pt4YW1OgRcGYZoolnYQo(zbJXHkP9A)vS3EXS(GRGAn)fi69E0QHyT2fW9fsScNZJjZvp3hSNy7)BcLFxXlLVm2zwaTHV3sUUlLTEZ4MXGAKplWYd)Cg8izrx1hB8vl3dSGPGLA(KQxu)Ikx4iHNsr3iwabgKPCWOZMIR1wc8xpNc1eVdAHsNLBUPasLF2ucX82Va99jUbl26yVnZwYCUgNPNbaJSJxmz)XmYgGapef0EWMedMrXyoQFR6Av04hyF4)W2EexlvU2rADf33TmlC6YPaoXk8KanNHqcB138dcOGqmzk3xYN7p82F0VNFZUhsWpl3e1fgB3kBKtdM9aONkXejWbv3s8nFjGuIdUo7FW4CAvYXpVm657yeC)sgYNLKK(F8KHnecDtcqAIN0)pob6Bh289cCkjqmBsYYZFYn)67h5FyK5UXt3lSRO0UIcHkiG5SkEoWQGUXfmkYBhYa8WHapd(iD(zPWbIciD0Ix3m(ljugw9AZyF)dh5mRnuvppKoTbvBRDZG83Fws0us)noWFpjHw7iFKNpTXgFozxlVwDB37gmQ5folDItRbAoSButgdzb)aN(ut0z(4a1ZCT9Y74mb9rNu87l(N9pN0ZqU9dA6YaYdBVc74lMUEN3VGE(L1)6bU2ST5Nf(2nZrPDXSdF8AR26tV6t39RH63w3k8N8B)9jBd89BzUFrTc(bdYh9AbJvWBwRkwln4)b

Ich geh mal davon aus das dieses Problem mit einem custom Text machbar sein dürfte. Allerdings kenn ich mich in der Thematik leider nicht so gut aus als das ich da selber drauf kommen würde. Leider gibt es auch keinen Guide (zumindest hab ich noch keinen gefunden) der dieses Thema auf Deutsch behandelt.
Da ich in dieser Hinsicht aber auch gern was dazulernen würde wäre es nett wenn der helfende vielleicht kurz auf den Code eingehen würde gemäss dem Fall es lässt sich nur über Custom-Code lösen. :wink:

Mfg SWHH


#2

Dafür brauchst ein wenig Lua-Code. Beispiel:

function foo(n)
    if n >= 10^6 then
        return string.format("%.1fm", n / 10^6)
    elseif n >= 10^3 then
        return string.format("%.1fk", n / 10^3)
    else
        return tostring(n)
    end
end

local tSourceNumber = 123456789
local tTargetNumber = foo(tSourceNumber)

print(tTargetNumber)

#3

Danke für die Info,
vom Prinzip her versteh ich den Code und macht auch soweit sinn aber wenn ich den so wie er ist in meine Aura reinkopier steht unter dem Fenster folgender Fehler.

[string “return function foo(n)…”]:1: ‘(’ expected near ‘foo’

Wenn ich des richtig versteh ist die Zahlenfolge 123456789 der Eingangswert für die Funktion. Da muss ich dann wahrscheinlich %tooltip1 angeben damit die funktion weis woher sie die Daten hernehmen soll. Wenn ich die Zahl da stehen lasse wird sich der Text ja glaub ich nie ändern oder?

Mfg SWHH


#4

Die Fehlermeldung kann ich leider so nicht beurteilen, sorry. Da müsstest du bitte deinen vollständigen Lua-Code zeigen.

Am Code oben kann es eigentlich nicht liegen. Der funktioniert unter https://www.lua.org/cgi-bin/demo ohne Fehler. Da muss also noch was anderes sein.

Ja, das mit der Zahl ist korrekt. Ist nur ein Beispiel gewesen. Muss durch den echten Wert ersetzt werden.

%tooltip1 klingt für Lua-Code allerdings falsch. Auch das müsste ich mal im Kontext sehen.

Kann es mir im Spiel bzw. mit dem WA-Code zurzeit nicht angucken, sorry.


#5

Hi,

also wenn ich in WA auf Lua-Tabelle exportieren geh kommt folgender Text:

{
["outline"] = "OUTLINE",
["authorOptions"] = {
},
["displayText"] = "%c",
["customText"] = "function foo(n)\\n    if n >= 10^6 then\\n        return string.format(\\\"%.1fm\\\", n / 10^6)\\n    elseif n >= 10^3 then\\n        return string.format(\\\"%.1fk\\\", n / 10^3)\\n    else\\n        return tostring(n)\\n    end\\nend\\n\\nlocal tSourceNumber = 123456789\\nlocal tTargetNumber = foo(tSourceNumber)\\n\\nprint(tTargetNumber)",
["yOffset"] = 0,
["anchorPoint"] = "CENTER",
["customTextUpdate"] = "update",
["automaticWidth"] = "Auto",
["actions"] = {
    ["start"] = {
    },
    ["finish"] = {
    },
    ["init"] = {
    },
},
["triggers"] = {
    [1] = {
        ["trigger"] = {
            ["type"] = "aura2",
            ["auraspellids"] = {
                [1] = "235313",
            },
            ["fetchTooltip"] = true,
            ["event"] = "Health",
            ["subeventPrefix"] = "SPELL",
            ["spellIds"] = {
            },
            ["subeventSuffix"] = "_CAST_START",
            ["unit"] = "player",
            ["names"] = {
            },
            ["useExactSpellId"] = true,
            ["debuffType"] = "HELPFUL",
        },
        ["untrigger"] = {
        },
    },
    ["activeTriggerMode"] = -10,
},
["internalVersion"] = 24,
["selfPoint"] = "CENTER",
["desaturate"] = false,
["discrete_rotation"] = 0,
["font"] = "Friz Quadrata TT",
["subRegions"] = {
},
["height"] = 200,
["rotate"] = true,
["load"] = {
    ["spec"] = {
        ["multi"] = {
        },
    },
    ["class"] = {
        ["multi"] = {
        },
    },
    ["size"] = {
        ["multi"] = {
        },
    },
},
["fontSize"] = 24,
["mirror"] = false,
["regionType"] = "text",
["blendMode"] = "BLEND",
["color"] = {
    [1] = 1,
    [2] = 1,
    [3] = 1,
    [4] = 0.75,
},
["texture"] = "Interface\\\\Addons\\\\WeakAuras\\\\PowerAurasMedia\\\\Auras\\\\Aura3",
["animation"] = {
    ["start"] = {
        ["duration_type"] = "seconds",
        ["type"] = "none",
    },
    ["main"] = {
        ["duration_type"] = "seconds",
        ["type"] = "none",
    },
    ["finish"] = {
        ["duration_type"] = "seconds",
        ["type"] = "none",
    },
},
["wordWrap"] = "WordWrap",
["justify"] = "CENTER",
["conditions"] = {
},
["id"] = "Lodernde Barriere Wert",
["frameStrata"] = 1,
["alpha"] = 1,
["anchorFrameType"] = "SCREEN",
["uid"] = "zBEr)97MGcr",
["config"] = {
},
["parent"] = "Lodernde Barriere",
["width"] = 200,
["fixedWidth"] = 200,
["rotation"] = 0,
["xOffset"] = 0,
}

Ich hoffe das hilft dir weiter.

Mfg SWHH


#6

Das hilft in der Tat, danke. :slight_smile:

In dem Fall müsste die Zeile wohl grundlegend so aussehen:

["customText"] = "function() local n = 12345678 if n >= 10^6 then return string.format(\\\"%.1fm\\\", n / 10^6) elseif n >= 10^3 then return string.format(\\\"%.1fk\\\", n / 10^3) else return tostring(n) end end",

Jetzt musst du nur noch rausfinden, wie du an den aktuellen Wert aus der WA kommst (statt immer 12345678). Dazu gibt es von WA eine Lua-Tabelle namens aura_env. (https://github.com/WeakAuras/WeakAuras2/wiki/aura_env)

Vermutlich verwendest du aura_env.state.absorb. (Aber das ist teilweise geraten).

Ich denke, die finale Zeile müsste ungefähr so aussehen:
["customText"] = "function() if aura_env.state then local n = aura_env.state.absorb if n >= 10^6 then return string.format(\\\"%.1fm\\\", n / 10^6) elseif n >= 10^3 then return string.format(\\\"%.1fk\\\", n / 10^3) else return tostring(n) end else return 0 end end",

Bzw hier noch mal nur die Funktion mit Zeilenumbrüchen und ohne die ganzen Escapezeichen für die Anführungszeichen (weil lesbarer/übersichtlicher). Kannst du aber nicht einfach so wieder einfügen. Musst du dann erst wieder die Zeilenumbrüche wegmachen und die Anführungszeichen mit Escape (\\\) versorgen:

function() 
	if aura_env.state then 
		local n = aura_env.state.absorb 
		if n >= 10^6 then 
			return string.format("%.1fm", n / 10^6) 
		elseif n >= 10^3 then 
			return string.format("%.1fk", n / 10^3) 
		else 
			return tostring(n) 
		end 
	else 
		return 0 
	end 
end

#7

Hi,

Diese Zeile musst ich etwas anpassen. Und zwar musste ich absorb gegen tooltip1 austauschen. Dann hat es so funktioniert wie ich mir das gedacht habe!

Auf deiner verlinkten Seite (https://github.com/WeakAuras/WeakAuras2/wiki/aura_env) war weiter unten ein Absatz der mich darauf gebracht hat:

All text replacements are valid state values. These can be found in the tooltip when mousing over the Display Text box in the Display tab, as seen [here]. %percenthealth would equate to aura_env.state.percenthealth , for example.

Danke dir für deine Bemühungen.

Mfg SWHH