Weakaura - Anzeige der noch verfügbaren cast


#1

Hallo zusammen,

ich versuche gerade in einer Weakaura als Text anzuzeigen wie oft ich den Zauber noch benutzen kann. Leider habe ich noch nicht so viel Ahnung davon und ich komme nicht so richtig weiter.

Hier mein bisheriger Versuch:

function()
local mana = UnitPower(“player”, 0)
local shadowbold_mana_cost = 315
local spell = UnitCastingInfo(“player”)
if spell == “11660” then
countremaining = mana / shadowbold_mana_cost
end
return countremaining
end

Hatte mir ein Ähnliches Problem von einem Arcane-Magier durchgelesen der das für Arcanblast gemacht hat und entsprechend etwas abgewandelt. Funktioniert aber nicht.

Läßt sich mein Problem/Wunsch überhaupt einfach lösen?

Bin für hilfreiche Antworten dankbar.

MfG
Bupu


(Chrisey) #2

Das Hauptproblem daran dürfte sein, dass die Funktion UnitCastingInfo zur Abfrage des aktuellen Zauber-Status in Vanilla nicht existierte und somit auch in Classic wieder entfernt wurde.
Wenn die Anzeige nur sichtbar sein soll, während du einen Zauber wirkst, dann kannst du aber einfach als Auslöser “Status” -> “Zauber” nutzen, was den gleichen Effekt hat.

Weiterhin kannst du die Manakosten auch einfach vom Client abfragen anstatt diese manuell anzugeben, wodurch die Anzeige von sich aus Kostenreduktionen durch Talente o.Ä. mit einberechnen sollte - allerdings muss man dann prüfen, ob der Zauber kostenlos ist, um eine Fehlermeldung zu verhindern.

function()
    local mana = UnitPower("player", 0)
    local cost = GetSpellPowerCost(25307)[1]["cost"]
    
    if cost and cost ~= 0 then
        return mana / cost
    end
end

#3

danke, das funktioniert soweit wunderbar.
falls Du mir noch sagen könntest wie ich den Rückgabewert ohne Nachkommastellen hinbekomme wäre es perfekt.


(Shinizu) #4

Die Funktion math.floor() rundet auf die nächst kleinere natürliche Zahl ℕ.

function()
    local mana = UnitPower("player", 0)
    local cost = GetSpellPowerCost(25307)[1]["cost"]
    
    if cost and cost ~= 0 then
        return math.floor(mana / cost)
    end
end

Alternativ ginge auch

string.format("%.0f", num)

aber das benötigt mehr CPU.
Hier bestimmst du über die erste Ziffer die Anzahl an Nachkommastellen.


Wenn du mit der Funktion math.floor() Nachkommastellen haben möchtest, geht dies via folgendem Code, wobei decimalsdie Anzahl an Nachkommastellen definiert.

local power = 10^decimals
return math.floor(number * power) / power

Wenn du auf die am nächsten gelegene Zahl runden möchtest (also z.B. bei 9,5 auf 10 statt auf 9), dann geht das wie folgt:

local power = 10^decimals
return math.floor(number * power + 0.5) / power