Thread Tools Display Modes
12-19-10, 03:40 PM   #1
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
Stuf Unit LUA help

I have this for my target name but I was hoping someone could help me with adding level and class color to the string.

function(unit)
local name = UnitName(unit)
if (name and string.len(name) > 10) then
name = string.gsub(name, "([^%s]+) ", function(s) return string.sub(s,1,1) .. "." end)
end
return name
end


This code works fine as is but I can figure out how to add class color to the text or the level to it either.

thanks much!
  Reply With Quote
12-19-10, 04:09 PM   #2
Taryble
A Molten Giant
 
Taryble's Avatar
Join Date: Jan 2009
Posts: 811
Try this - it's based on portions of the "Target Name" text I use in my StUF uf's. This leaves the level uncolored, but colors the name by class.

Code:
function(unit)
  local name, level = UnitName(unit), UnitLevel(unit)
  local clcolor = RAID_CLASS_COLORS[select(2, UnitClass(unit))]
  if (name and string.len(name) > 10) then 
    name = string.gsub(name, "([^%s]+) ", function(s) return string.sub(s,1,1) .. "." end)
  end
  return "%s |cff%02x%02x%02x%s|r", level, clcolor.r*255, clcolor.g*255, clcolor.b*255, name
end
__________________
-- Taryble

Last edited by Taryble : 12-20-10 at 12:24 AM.
  Reply With Quote
12-19-10, 05:26 PM   #3
Xhelius
An Aku'mai Servant
Join Date: Jan 2010
Posts: 39
Just a quick question....Maybe i should start a new topic but it is directly related to what this post is about...What is the advantage of using LUA code to display name versus using the tags that exist in STUF already?
__________________
Don't you let regret take place
of the dreams you have to chase...


  Reply With Quote
12-19-10, 06:13 PM   #4
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
Originally Posted by Xhelius View Post
Just a quick question....Maybe i should start a new topic but it is directly related to what this post is about...What is the advantage of using LUA code to display name versus using the tags that exist in STUF already?
Well, I want to truncate the name and the STUF tags wont do that without the LUA code so yea...I need this code

BTW Worked fine but I have a weird thing with the name...between the level and the name I am getting an extra character - like on mob target its a "d" and on players it's an "5" and if I target myself, its a little 'o"(without quote marks).

c/p'd twice and still same results..any clue?

Last edited by Porsha : 12-19-10 at 06:18 PM.
  Reply With Quote
12-20-10, 12:23 AM   #5
Taryble
A Molten Giant
 
Taryble's Avatar
Join Date: Jan 2009
Posts: 811
Yeah, 3 tiny typo's in the "return" line.

Change all of the *256 to *255. My bad. I'm going to edit the original post as well.
__________________
-- Taryble
  Reply With Quote
12-20-10, 12:35 AM   #6
Taryble
A Molten Giant
 
Taryble's Avatar
Join Date: Jan 2009
Posts: 811
Originally Posted by Xhelius View Post
Just a quick question....Maybe i should start a new topic but it is directly related to what this post is about...What is the advantage of using LUA code to display name versus using the tags that exist in STUF already?
Well, it's mostly for doing things that StUF's (fairly limited) tag system won't handle.

For example, this is what I use for my text1
Code:
function(unit, cache, textframe)
  local cc = RAID_CLASS_COLORS[select(2, UnitClass("player"))]
  if UnitExists(unit) then
    cc = RAID_CLASS_COLORS[select(2, UnitClass(unit))]
  end
  local curhp, maxhp = UnitHealth(unit), UnitHealthMax(unit)
  if curhp ~= maxhp then
    local perchp, diffhp = 100 * curhp / maxhp, maxhp - curhp
    return "|cff%02x%02x%02x%.0f|r%% | |cffff0000-%s|r",cc.r*255,cc.g*255,cc.b*255,perchp,diffhp
  else
    local name = UnitName("player")
    if UnitExists(unit) then
      name = UnitName(unit)
    end
    return "|cff%02x%02x%02x%s|r",cc.r*255,cc.g*255,cc.b*255,string.gsub(name, '%s?(.)%S+%s', '%1. ')
  end
end
This text, for one, has some things in it to catch "stupid StUF errors" when you use custom lua in "Config Mode" (initializing the class color to the player's class before checking to see if there's an actual unit to get a class color for, same with the name - StUF throws lua errors in config mode otherwise, which can stop some frames from showing up in config).

What this mainly does, however, is it gives you a class-colored name. Multiple-word names ("Angry Guardsman") gives an abbreviated version ("A. Guardsman"). However, if you are not at full HP, it shows an HP Deficit text, a pipe, and then HP Percent.

The only part of that, really, that I needed to use custom Lua for was the abbreviation of the names. However, because of that, I had to write the rest in Lua as well.

Here's a more interesting text that I use (my "Power" text).
Code:
function(unit, cache, textframe)
  local powtype, maxmp, curmp = UnitPowerType(unit), UnitPowerMax(unit), UnitPower(unit)
  local cc = PowerBarColor[powtype]
  local permp = 100*curmp/maxmp 
  if (powtype == 1 or powtype == 3) then
    local _, class = UnitClass(unit)
    if (class == "DRUID" and unit == "player") then
      local maxdmp, curdmp, ccd = UnitPowerMax(unit,0), UnitPower(unit,0), PowerBarColor[0]
      if curdmp ~= maxdmp then
        return "|cff%02x%02x%02x%.0f|r%% | |cff%02x%02x%02x%s|r",ccd.r*255,ccd.g*255,ccd.b*255,100*curdmp/maxdmp,cc.r*255,cc.g*255,cc.b*255,curmp
      else
        return "|cff%02x%02x%02x%s|r",cc.r*255,cc.g*255,cc.b*255,curmp 
      end
    else        
      return "|cff%02x%02x%02x%s|r",cc.r*255,cc.g*255,cc.b*255,curmp
    end 
  elseif curmp ~= maxmp then 
    return "|cff%02x%02x%02x%.0f|r%%",cc.r*255,cc.g*255,cc.b*255,permp 
  elseif powtype == 0 then 
    return "|cff%02x%02x%02x%s|r",cc.r*255,cc.g*255,cc.b*255,maxmp 
  end
end
This one is rather fun. Basically, if you're a druid in shapeshift form, it shows your rage/energy - and if you're below full mana, it shows your mana as a percentage (separated by a pipe character). If you're a Warrior or Rogue, it just shows your rage/energy.

If you're anything else, it shows your percentage of power - but if you're at full power, it just shows your maximum power. (ie, 99% OR 78532, for example).

And, yes, all you Lua coders out there, please feel free to take a look at it and give me advice on how to make it better.

I haven't really done any programming since 1997, and Lua wasn't very common back then, so this is all sorta tossed together with half-remembered scraps of programming theory and style.
__________________
-- Taryble
  Reply With Quote
12-20-10, 06:37 PM   #7
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
You are a doll! I am totally hijacking those for mine as they are tons more effiecent space wise than mine now - I have my power/hp on mourseover cause I havent had the room to "fit it all in" so thank you so much for sharing!

Funny how I looked /goggle for some threads on STUF LUA I could jack but found none (even the one on EJ was locked/outdated cause all my old codes no longer work with STUF any more) and the thread on the old WoW forums is gone now since Cata.

So thanks again and I'll be sure if I find more to post them in hopes they help some out.

OH - These below were taken from maybe Fuji or (dang I cant remember the name but they did a Paladin UI with vertical coding) these are UNTESTED for the most part but someone may know how to get the to work again....I'm sure its simple wording or something but I dont use them any more so...I will separate them with ---------

BLOCK OF TEXT INC!!

Code:
    function(unit, cache) 
local str1 = '' 
local str2 = '' 
local str3 = '' 
local str4 = '' 
local str5 = '' 

local _, partyMaster, _ = GetLootMethod() 

if UnitAffectingCombat("player") == 1 then 
str1 = 'C' 
end 
if IsRaidLeader("player")==1 then 
str2 = 'L' 
end 
if UnitIsPVP("player") == 1 then 
str3 = 'P' 
end 
if partyMaster == 0 then 
str5 = '+' 
end 
if IsResting("player") == 1 then 
str4 = 'R' 
end 

return '|cffff4500%s|r |cffffff00%s|r |cffff9900%s|r |cff00ff00%s|r |cffffffff%s|r ', str1,str2,str3,str4,str5 
end
------------------------------

PET:
Code:
function(unit, cache, textframe) 
     local name = UnitName( unit )
     if name ~= nil then
          local strLen = strlen( name )
          local tmp = ''
          local outStr = ''
 
          if strLen > 14 then
               strLen = 14
          end
 
          for i = 1, strLen, 1 do
               tmp = strsub( name, i, i )
               if i == 1 then
                    outStr = outStr..tmp
               else
                    outStr = outStr..'\n'..tmp
               end
          end
 
          return '%s', outStr
     end
end
--------------------------------------------

PET HAPPY:

Code:
function(unit, cache, textframe) 
     local happiness,_ = GetPetHappiness(unit)
 
     if happiness == 1 then
          return "|cffff2400*|r"
     elseif happiness == 2 then
          return "|cffFFD700*|r"
     elseif happiness == 3 then
          return "|cff238E23*|r"
     end
end
----------------------------------

COMBO POINTS:

Code:
function(unit, cache, textframe) 
     local comboPoints = GetComboPoints(unit)
     local outStr = ''
     if comboPoints ~= 0 then
          for i = 1, comboPoints, 1 do
               outStr = outStr .. '*\n'
          end
          return '|cffFFFF00%s|r', outStr 
     end
end
 
function(unit, cache, textframe) 
     local comboPoints = GetComboPoints(unit)
     local outStr = ''
     if comboPoints ~= 0 then
          for i = 1, comboPoints, 1 do
               outStr = outStr .. '*'
          end
          return '|cffFFFF00%s|r', outStr 
     end
end
----------------------------------

STRING STATES:

Code:
function(unit, cache) 
     local str1 = ''
     local str2 = '' 
     local str3 = '' 
     local str4 = '' 
     local str5 = ''
     local cr1 = ''
     local cr2 = '' 
     local cr3 = '' 
     local cr4 = ''
     local cr5 = '' 
 
     local _, partyMaster, _ = GetLootMethod()
 
     if UnitAffectingCombat("player") == 1 then 
          str1 = 'C'
          cr1 = '\n'
     end
     if IsRaidLeader("player")==1 then
          str2 = 'L'
          cr2 = '\n' 
     end
     if UnitIsPVP("player") == 1 then
          str3 = 'P'
          cr3 = '\n'
     end
     if partyMaster == 0 then
          str5 = '+'
          cr5 = '\n'
     end
     if IsResting("player") == 1 then
          str4 = 'R'
          cr4 = '\n'
     end
 
     return '|cffff4500%s|r%s|cffffff00%s|r%s|cffff9900%s|r%s|cff00ff00%s|r%s|cffffffff%s|r%s', str1, cr1, str2, cr2, str3, cr3, str4, cr4, str5, cr5
end

--------------------------------


Code:
function(unit, cache, textframe) 
     local name = UnitName( unit )
     if name ~= nil then
          local strLen = strlen( name )
          local tmp = ''
          local outStr = ''
 
          if strLen > 14 then
               strLen = 14
          end
 
          for i = 1, strLen, 1 do
               tmp = strsub( name, i, i )
               if i == 1 then
                    outStr = outStr..tmp
               else
                    outStr = outStr..'\n'..tmp
               end
          end
 
          return '%s', outStr
     end
end
-------------------------------

HEALTH STRING:

Code:
function(unit, cache, textframe) 
     local curHealth = UnitHealth( unit )
     local maxHealth = UnitHealthMax( unit )
     local healthPercent = floor( ( curHealth / maxHealth ) * 100 )
     local healthStr = tostring( healthPercent )
     local strLen = strlen( healthStr )
     local isEnemy = UnitIsEnemy( "Paloladin", unit )
     local isDead = UnitIsDead(unit)
 
     local tmp = ''
     local outStr = ''
 
     if isDead == nil then
          for i = 1, strLen, 1 do
               tmp = strsub( healthStr, i, i ) 
               if i == 1 then
                    outStr = outStr..tmp
               else
                    outStr = outStr..'\n'..tmp
               end
          end
     else
          outStr = '*\nD\nE\nA\nD\n*'
     end
 
     if isEnemy == nil then
          return '%s', outStr
     else
          return '|cffFF4500%s|r', outStr
     end
 
end

-----------------------------

Vertical name:
Code:
function(unit, cache, textframe) 
     local name = UnitName( unit )
     if name ~= nil then
          local strLen = strlen( name )
          local tmp = ''
          local outStr = ''
 
          if strLen > 14 then
               strLen = 14
          end
 
          for i = 1, strLen, 1 do
               tmp = strsub( name, i, i )
               if i == 1 then
                    outStr = outStr..tmp
               else
                    outStr = outStr..'\n'..tmp
               end
          end
 
          return '%s', outStr
     end
end

----------------------------------

health vertical:
Code:
function(unit, cache, textframe) 
     local curHealth = UnitHealth( unit )
     local maxHealth = UnitHealthMax( unit )
     local healthPercent = floor( ( curHealth / maxHealth ) * 100 )
     local healthStr = tostring( healthPercent )
     local strLen = strlen( healthStr )
     local isEnemy = UnitIsEnemy( "Paloladin", unit )
     local isDead = UnitIsDead(unit)
 
     local tmp = ''
     local outStr = ''
 
     if isDead == nil then
          for i = 1, strLen, 1 do
               tmp = strsub( healthStr, i, i ) 
               if i == 1 then
                    outStr = outStr..tmp
               else
                    outStr = outStr..'\n'..tmp
               end
          end
     else
          outStr = '*\nD\nE\nA\nD\n*'
     end
 
     if isEnemy == nil then
          return '%s', outStr
     else
          return '|cffFF4500%s|r', outStr
     end
 
end

Last edited by Porsha : 12-21-10 at 10:50 PM. Reason: added whitespace back in -Seerah
  Reply With Quote
12-20-10, 08:54 PM   #8
Seerah
Fishing Trainer
 
Seerah's Avatar
WoWInterface Super Mod
Featured
Join Date: Oct 2006
Posts: 10,860
*ahem* code blocks are your friend

carry on.
__________________
"You'd be surprised how many people violate this simple principle every day of their lives and try to fit square pegs into round holes, ignoring the clear reality that Things Are As They Are." -Benjamin Hoff, The Tao of Pooh

  Reply With Quote
12-21-10, 10:18 AM   #9
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
hrm sorry but what are "code blocks"? I know it was a large wall of text >< sorry but if there was a better format then if someone can change it or tell me how
  Reply With Quote
12-21-10, 12:12 PM   #10
Seerah
Fishing Trainer
 
Seerah's Avatar
WoWInterface Super Mod
Featured
Join Date: Oct 2006
Posts: 10,860
The [code] tag is what we use to mark off sections of code. It keeps formatting and allows the code to be read easier. When writing a post, it is the button on the toolbar with the # sign.
__________________
"You'd be surprised how many people violate this simple principle every day of their lives and try to fit square pegs into round holes, ignoring the clear reality that Things Are As They Are." -Benjamin Hoff, The Tao of Pooh

  Reply With Quote
12-21-10, 01:41 PM   #11
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
Sweet thanks Seerah!
  Reply With Quote
12-21-10, 09:11 PM   #12
Seerah
Fishing Trainer
 
Seerah's Avatar
WoWInterface Super Mod
Featured
Join Date: Oct 2006
Posts: 10,860
You're welcome. I took the liberty of adding the whitespace back in to make it easier to read. It also made me realize that you're missing the first line to that first chunk of code.
__________________
"You'd be surprised how many people violate this simple principle every day of their lives and try to fit square pegs into round holes, ignoring the clear reality that Things Are As They Are." -Benjamin Hoff, The Tao of Pooh

  Reply With Quote
12-21-10, 10:51 PM   #13
Porsha
A Black Drake
Join Date: Apr 2008
Posts: 88
Fixed it I hope
  Reply With Quote
12-22-10, 12:55 AM   #14
Taryble
A Molten Giant
 
Taryble's Avatar
Join Date: Jan 2009
Posts: 811
The first chunk of code in her post is repeated later in her post, actually, with the missing line(s) - the "String States" section.
__________________
-- Taryble
  Reply With Quote

WoWInterface » AddOns, Compilations, Macros » AddOn Help/Support » Stuf Unit LUA help

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off