WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   AddOn Help/Support (https://www.wowinterface.com/forums/forumdisplay.php?f=3)
-   -   Stuf + Threat (https://www.wowinterface.com/forums/showthread.php?t=40448)

Lily.Petal 06-09-11 01:08 PM

Stuf + Threat + Power Text
 
I am currently wanting to make a small threat meter using Stuf's custom LUA text option.

All I want it to do is just show My current Threat% (without the % sign please) on my target, the color being Stuf's HP Red Color.

If someone could offer assistance, I would appreciate it greatly!

*~Lily.Petal~*

===============

For anyone who happens to search for similar effects for their own layouts, code will be listed below.

Link for other lua codes(provided by Cantises): Lua Stuf examples

This code makes your power into a percent(without the %); if you are using energy/mana, the text will only show if you are under 100% (otherwise hidden). If you use RunicPower or Rage, the text will not show up unless you are above 1%.
Code:

function(unit)
        local pCur, pMax = UnitPower(unit), UnitPowerMax(unit)
        if pMax > 0 then
                local _, pToken = UnitPowerType(unit)
                if pToken == "RAGE" or pToken == "RUNIC_POWER" then
                        -- Warrior / Teddy Bear Druid / DK
                        if pCur > 0 then
                                return "%d", pCur
                        end
                elseif pToken == "ENERGY" then
                        -- Rogue / Kitty Druid
                        if pCur < pMax then
                                return "%d", pCur
                        end
                else
                        -- Everything else
                        local pPer = ceil((pCur / pMax)*100)
                        if pPer < 100 then
                                return "%d", pPer
                        end
                end
        end
end

Colored by powertype:
Code:

function(unit)
        local pCur, pMax, mCur, mMax = UnitPower(unit), UnitPowerMax(unit), UnitPower(unit, 0), UnitPowerMax(unit, 0)
        if pMax > 0 then
                local pType, pToken = UnitPowerType(unit)
                local pColor = PowerBarColor[pType]
                if ( (pToken ~= "MANA") and (mMax > 0) ) then        -- Druid in Bear/Cat form
                        local mColor = PowerBarColor[0]
                        local mPer = ceil((mCur / mMax)*100)
                        local ShowPower, ShowMana
                        if ((pToken == "RAGE") and (pCur > 0)) or ((pToken == "ENERGY") and (pCur < pMax)) then
                                ShowPower = true
                        end
                        if mPer < 100 then
                                ShowMana = true
                        end
                        if ShowPower and ShowMana then
                                return "|cff%02x%02x%02x%s|r |cff%02x%02x%02x%s|r", pColor.r * 255, pColor.g * 255, pColor.b * 255, pCur, mColor.r * 255, mColor.g * 255, mColor.b * 255, mPer
                        elseif ShowPower then
                                return "|cff%02x%02x%02x%s|r", pColor.r * 255, pColor.g * 255, pColor.b * 255, pCur
                        elseif ShowMana then
                                return "|cff%02x%02x%02x%s|r", mColor.r * 255, mColor.g * 255, mColor.b * 255, mPer
                        end
                elseif pToken == "RAGE" or pToken == "RUNIC_POWER" then                -- Warrior / DK
                        if pCur > 0 then
                                return "|cff%02x%02x%02x%s|r", pColor.r * 255, pColor.g * 255, pColor.b * 255, pCur
                        end
                elseif pToken == "ENERGY" then        -- Rogue
                        if pCur < pMax then
                                return "|cff%02x%02x%02x%s|r", pColor.r * 255, pColor.g * 255, pColor.b * 255, pCur
                        end
                else        -- Everything else
                        local pPer = ceil((pCur / pMax)*100)
                        if pPer < 100 then
                                return "|cff%02x%02x%02x%s|r", pColor.r * 255, pColor.g * 255, pColor.b * 255, pPer
                        end
                end
        end
end


Nibelheim 06-09-11 03:57 PM

Quote:

Originally Posted by Lily.Petal (Post 239082)
I am currently wanting to make a small threat meter using Stuf's custom LUA text option.

All I want it to do is just show My current Threat% (without the % sign please) on my target, the color being Stuf's HP Red Color.

If someone could offer assistance, I would appreciate it greatly!

*~Lily.Petal~*

To get an accurate % reading may be out of the scope of Lua Text, as you'd want a timer to keep threat information updated. There's a few threat events you can watch out for, but they only fire on major threat changes making them somewhat useless for watching threat closely. It may be possible to utilize Stufs own Target frame from within the Lua Text itself. A crude example being:

Code:

self.ttelapsed = 0
self:SetScript("OnUpdate", function(self, elapsed)
  self.ttelapsed = self.ttelapsed + elapsed
  if self.ttelapsed >= 0.5 then
    local _, _, threatpct, _, threatvalue = UnitDetailedThreatSituation(unitid, mobunitid)
    if threatvalue then
      return "|cffff0000%d|r", floor(threatpct)
    else
      return ""
    end
    self.ttelapsed = 0
  end
end)


Lily.Petal 06-09-11 05:09 PM

Quote:

Originally Posted by Nibelheim (Post 239093)
To get an accurate % reading may be out of the scope of Lua Text, as you'd want a timer to keep threat information updated. There's a few threat events you can watch out for, but they only fire on major threat changes making them somewhat useless for watching threat closely. It may be possible to utilize Stufs own Target frame from within the Lua Text itself. A crude example being:

SNIP

Thank you nib, I will have to try it out soon ^^

Nibelheim 06-09-11 07:29 PM

Quote:

Originally Posted by Lily.Petal (Post 239096)
Thank you nib, I will have to try it out soon ^^

Well, it probably won't work, due to the way Lua Text functions operate. What may be best is to just make a kgPanel with appropriate events and OnUpdate routines, and set it's text to your threat %.

Seerah 06-09-11 07:46 PM

LuaTexts can be set to run (a slightly throttled, iirc) OnUpdate if you check the "frequent updates" box.

Nibelheim 06-09-11 07:47 PM

Quote:

Originally Posted by Seerah (Post 239100)
LuaTexts can be set to run (a slightly throttled, iirc) OnUpdate if you check the "frequent updates" box.

Ohh, nice. In that case, it's just a simple matter of:

Code:

local _, _, threatpct, _, threatvalue = UnitDetailedThreatSituation(unitid, mobunitid)
if threatvalue then
  return "|cffff0000%d|r", floor(threatpct)
else
  return ""
end


Lily.Petal 06-09-11 09:44 PM

Quote:

Originally Posted by Nibelheim (Post 239101)
Ohh, nice. In that case, it's just a simple matter of:

Code:

local _, _, threatpct, _, threatvalue = UnitDetailedThreatSituation(unitid, mobunitid)
if threatvalue then
  return "|cffff0000%d|r", floor(threatpct)
else
  return ""
end


hm.. I might need an explanation on how to put this in.

Do I need to change unitid to player?

Nibelheim 06-09-11 10:14 PM

Quote:

Originally Posted by Lily.Petal (Post 239105)
hm.. I might need an explanation on how to put this in.

Do I need to change unitid to player?

Yep.

unitid = "player"
mobunitid = "target"

Seerah 06-09-11 10:56 PM

If you put it in as a LuaText for your player frame, it will pass your "player" unitid to the function as the first(?) argument.

Lily.Petal 06-10-11 03:46 AM

Thank you Nib and Seerah, was great help!

Hm having a different problem now, with all my classes I use:
Quote:

[solid_if_mp99:Percmp]
For all my power bars; which isn't a problem, it works as intended for every class... But DK's & Warriors

Is there someway that I can have it show
Quote:

[solid_if_mp99:Percmp] -- For all Classes but DK&Warriors
Quote:

[solid_ifnot_mp99:Percmp] -- For only DK&Warriors

Nibelheim 06-10-11 04:05 AM

Quote:

Originally Posted by Lily.Petal (Post 239110)
Thank you Nib and Seerah, was great help!

Hm having a different problem now, with all my classes I use:

For all my power bars; which isn't a problem, it works as intended for every class... But DK's & Warriors

Is there someway that I can have it show

I've never used Stuf, so I'm unfamiliar with those particular clauses or where they're used, however a simple if-then-else usually works for segregating different functionality for different classes. In this case, though, it may be better to determine what power type the unit is using.

Code:

local _, power_token = UnitPowerType(unit)  -- Lua Texts usually pass the unit arg, so leaving unit as is should work
if power_token == "RAGE" or power_token == "RUNIC_POWER" then
  -- Warrior / Teddy Bear Druid / DK
else
  -- Everything else
end


Lily.Petal 06-10-11 04:20 AM

Quote:

Originally Posted by Nibelheim (Post 239114)
Code:

local _, power_token = UnitPowerType(unit)  -- Lua Texts usually pass the unit arg, so leaving unit as is should work
if power_token == "RAGE" or power_token == "RUNIC_POWER" then
  -- Warrior / Teddy Bear Druid / DK
else
  -- Everything else
end


I really need to learn LUA, time for me to use google to learn to put in the text :>

Quote:

return ceil(Percent(MP(unit)))
hm...

Lily.Petal 06-10-11 04:37 AM

Hm, using stuf it says when I switch to LUA:
Quote:

Lua Code must have this format:
function(unit, cache, textframe) <some text> return 'text', ... end where 'cache' may be used as cache.infotag (see pattern help or core.lua) and "..." are optional arguments to SetFormattedText.

Quote:

function(unit, cache, textframe) return 'text' end

Nibelheim 06-10-11 04:40 AM

What is it you're trying to achieve, exactly? Just showing the Power in standard format?

Lily.Petal 06-10-11 04:45 AM

Quote:

Originally Posted by Nibelheim (Post 239120)
What is it you're trying to achieve, exactly? Just showing the Power in standard format?

What I am trying to do is so that If I am any class that uses anything but Rage/RunicPower that it shows the MP value in CurMP% when it goes below 100%, but hides when greater than 99%(without the % sign).
And the opposite if they do use said powertypes, where if it's at 0% said text will hide.

Basically:
if power≤99% show if not DK/Bear/Warrior as CurMP%

and

if power≥1% show if DK/Bear/Warrior as CurMP%

Does this help? :<

EDIT: it's just REALLY annoying when I'm playing my DK/Warrior that I see a 0 in the middle of my power bar when I have no power at all.

Nibelheim 06-10-11 04:53 AM

Quote:

Originally Posted by Lily.Petal (Post 239121)
What I am trying to do is so that If I am any class that uses anything but Rage/RunicPower that when I am at 100% Mana/Energy, the text doesn't show, and I would like it to be a Percent(without the % sign).

Basically:
if power≤99% show if not DK/Bear/Warrior as CurMP%

And basically the opposite if I am a DK/Bear/Warrior
if power≥1% show if DK/Bear/Warrior as CurMP%

Does this help? :<

Ahh. :) I like doing my Lua Texts with pure Lua. Some of my UI users reported strange power display issues when using Lua Text abbreviations.

Barebones:
Code:

local _, pToken = UnitPowerType(unit)
local pCur, pMax = Power(unit), MaxPower(unit)
if pMax > 0 then
        if pToken == "RAGE" or pToken == "RUNIC_POWER" then
                -- Warrior / Teddy Bear Druid / DK
                if pCur > 0 then
                        return "%d", pCur
                end
        else
                -- Everything else
                local pPer = ceil(pCur / pMax)
                if pPer < 100 then
                        return "%d", pPer
                end
        end
end


Lily.Petal 06-10-11 04:57 AM

Do I still need to do something with:
Quote:

Lua Code must have this format:
function(unit, cache, textframe) <some text> return 'text', ... end where 'cache' may be used as cache.infotag (see pattern help or core.lua) and "..." are optional arguments to SetFormattedText.

Quote:

function(unit, cache, textframe) return 'text' end
By any chance? I entered it into the options and saved, put it on fast update and reloaded and is still not working. Gonna go insane :<

EDIT: let me try changing unit to "player"
EDIT2: ugh Dx darn you stuf... darn you... (didn't work)

Nibelheim 06-10-11 05:08 AM

Hmm, same error again? It must behave different to Pitbull's Lua Text. Maybe it needs an extra return.


Code:

local _, pToken = UnitPowerType(unit)
local pCur, pMax = Power(unit), MaxPower(unit)
if pMax > 0 then
        if pToken == "RAGE" or pToken == "RUNIC_POWER" then
                -- Warrior / Teddy Bear Druid / DK
                if pCur > 0 then
                        return "%d", pCur
                end
        else
                -- Everything else
                local pPer = ceil(pCur / pMax)
                if pPer < 100 then
                        return "%d", pPer
                end
        end
else
        return ""
end


Lily.Petal 06-10-11 05:18 AM

Well it's not giving me an error, it's just not showing up at all. I don't really understand it.

Nibelheim 06-10-11 05:22 AM

Quote:

Originally Posted by Lily.Petal (Post 239126)
Well it's not giving me an error, it's just not showing up at all. I don't really understand it.

Debug time! Hmm, I wonder if print works in Lua Text :p Is fast update ticked?

Code:

local _, pToken = UnitPowerType(unit)
local pCur, pMax = Power(unit), MaxPower(unit)

print(unit)
print(pCur)
print(pMax)

if pMax > 0 then
        if pToken == "RAGE" or pToken == "RUNIC_POWER" then
                -- Warrior / Teddy Bear Druid / DK
                if pCur > 0 then
                        return "%d", pCur
                end
        else
                -- Everything else
                local pPer = ceil(pCur / pMax)
                if pPer < 100 then
                        return "%d", pPer
                end
        end
else
        return ""
end



All times are GMT -6. The time now is 12:01 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI