Code:
local values = {}
values[sbPos] = 0
values[sbCur] = 0
values[apCur] = 0
values[veCur] = 0
local foundVengeance = false
local foundShieldBarrier = false
local snVengeance = (GetSpellInfo(84839)) --vengeance spellid
local snShieldBarrier = (GetSpellInfo(112048)) --shield barrier spellid
local numFormat = function(v)
if v > 1E10 then
return (floor(v/1E9)).."b"
elseif v > 1E9 then
return (floor((v/1E9)*10)/10).."b"
elseif v > 1E7 then
return (floor(v/1E6)).."m"
elseif v > 1E6 then
return (floor((v/1E6)*10)/10).."m"
elseif v > 1E4 then
return (floor(v/1E3)).."k"
elseif v > 1E3 then
return (floor((v/1E3)*10)/10).."k"
else
return v
end
end
--update the text string
local function updateText(self,event)
print("~~start~~~~~~~~~~~~~~~~~~~")
print("Called by event: "..event)
print("Current AttackPower: "..values[apCur])
print("Possible ShieldBarrierValue: "..values[sbPos])
if foundShieldBarrier then
print("Current ShieldBarrierValue: "..values[sbCur])
end
if foundVengeance then
print("Current Vengeance: "..values[veCur])
end
print("~~end~~~~~~~~~~~~~~~~~~~~~")
self.text:SetText("AP: "..numFormat(values[apCur]).." | SBP: "..numFormat(values[sbPos]).." | SBC: "..numFormat(values[sbCur]).." | VE: "..numFormat(values[veCur]))
end
--check for active aura effects
local function checkAura(spellName)
local name,_,_,_,_,_,_,_,_,_,spellid,_,_,val1,val2,val3 = UnitAura("player", spellName, nil, "HELPFUL")
if name and val1 and val1 > 0 then
return val1, true
else
return 0, false
end
end
--update value table
local function updateValues(self,event,unit)
if unit and unit ~= "player" then return end
local _, stamina, _, _ = UnitStat("player", 3)
local _, strength, _, _ = UnitStat("player", 1)
local baseAP, posBuffAP, negBuffAP = UnitAttackPower("player")
local attackPower = baseAP + posBuffAP + negBuffAP
--calculate the possible shield barrier value
local attackPowerSide = (attackPower - strength * 2) * 2
local staminaSide = stamina * 2.5
local shieldBarrierValue = max(attackPowerSide, staminaSide)
local SPELL_POWER_RAGE = SPELL_POWER_RAGE
local power = max(min(60,UnitPower("player", SPELL_POWER_RAGE)),20) --keep power in the range of 20-60
values[sbPos] = shieldBarrierValue * power / 60
--get the current shield barrier value
local values[sbCur], foundShieldBarrier = checkAura(snShieldBarrier)
--get the attack power
values[apCur] = attackPower or 0
--get the vengeance value
local values[veCur], foundVengeance = checkAura(snVengeance)
updateText(self,event)
end
--create the frame
local frame = CreateFrame("Frame",nil,UIParent)
frame:SetPoint("CENTER",0,0)
frame:SetSize(200,40)
--create the fontstring
local text = frame:CreateFontString(nil, "BACKGROUND")
text:SetFont(STANDARD_TEXT_FONT, 12, "THINOUTLINE")
text:SetPoint("TOPLEFT", 0,0)
text:SetPoint("BOTTOMRIGHT", 0,0)
text:SetJustifyH("CENTER")
text:SetJustifyV("MIDDLE")
frame.text = text
--register events
frame:RegisterEvent("UNIT_ATTACK_POWER")
frame:RegisterEvent("UNIT_POWER")
frame:RegisterEvent("UNIT_AURA")
frame:RegisterEvent("PLAYER_LOGIN")
frame:SetScript("OnEvent",updateValues)