WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   Create Text Frame with Player's Health (https://www.wowinterface.com/forums/showthread.php?t=58753)

nibsrs 05-21-21 04:51 PM

Create Text Frame with Player's Health
 
Hey guys, I have zero knowledge in LUA scripting, however I am trying to know a bit more about it. I want to create a simple text on screen which will show the current player's health.
This is what I've done so far, but got stuck:

Code:

local f = CreateFrame("Frame", nil, UIParent)
        f:SetWidth(1)
        f:SetHeight(1)
        f:SetAlpha(1)
        f:SetPoint("CENTER", 0, 0)
        f.text = f:CreateFontString(nil,"ARTWORK")
        f.text:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE")
        f.text:SetPoint("CENTER", 0, 0);

From here I don't know where to go, can someone help?

Fizzlemizz 05-21-21 05:56 PM

Something simple:

Lua Code:
  1. local function UpdateHealth(self) -- Update the health text
  2.     local health = UnitHealth("player")
  3.     self.Text:SetText(health .. '/' .. self.healthMax)
  4. end
  5. local function UpdateHealthMax(self) -- Update max. health value
  6.     self.healthMax = UnitHealthMax("player")
  7.     UpdateHealth(self)
  8. end
  9.  
  10. local f = CreateFrame("Frame", "nibsrsHealthText", UIParent)
  11. f:SetSize(5, 4)
  12. f:SetPoint("CENTER")
  13. f.Text = f:CreateFontString()
  14. f.Text:SetFontObject(GameFontNormal)
  15. f.Text:SetPoint("CENTER")
  16. f.Text:SetJustifyH("CENTER")
  17. f.Text:SetJustifyV("CENTER")
  18.  
  19. f:SetScript("OnEvent", function(self, event, ...) -- when registered events fire.
  20.     if event == "UNIT_HEALTH" then -- Fired when health changes
  21.         UpdateHealth(self)
  22.     elseif event == "UNIT_MAXHEALTH" then -- Fired when max. health changes
  23.         UpdateHealthMax(self)
  24.     end
  25. end)
  26. f:RegisterEvent("UNIT_HEALTH") -- register the events to be used (when health changes happen)
  27. f:RegisterEvent("UNIT_MAXHEALTH")
  28. UpdateHealthMax(f) -- initialise the health text

nibsrs 05-21-21 06:07 PM

Quote:

Originally Posted by Fizzlemizz (Post 339218)
Something simple:

Lua Code:
  1. local function UpdateHealth(self) -- Update the health text
  2.     local health = UnitHealth("player")
  3.     self.Text:SetText(health .. '/' .. self.healthMax)
  4. end
  5. local function UpdateHealthMax(self) -- Update max. health value
  6.     self.healthMax = UnitHealthMax("player")
  7.     UpdateHealth(self)
  8. end
  9.  
  10. local f = CreateFrame("Frame", "nibsrsHealthText", UIParent)
  11. f:SetSize(5, 4)
  12. f:SetPoint("CENTER")
  13. f.Text = f:CreateFontString()
  14. f.Text:SetFontObject(GameFontNormal)
  15. f.Text:SetPoint("CENTER")
  16. f.Text:SetJustifyH("CENTER")
  17. f.Text:SetJustifyV("CENTER")
  18.  
  19. f:SetScript("OnEvent", function(self, event, ...) -- when registered events fire.
  20.     if event == "UNIT_HEALTH" then -- Fired when health changes
  21.         UpdateHealth(self)
  22.     elseif event == "UNIT_MAXHEALTH" then -- Fired when max. health changes
  23.         UpdateHealthMax(self)
  24.     end
  25. end)
  26. f:RegisterEvent("UNIT_HEALTH") -- register the events to be used (when health changes happen)
  27. f:RegisterEvent("UNIT_MAXHEALTH")
  28. UpdateHealthMax(f) -- initialise the health text

Hey, thank you so much! However, the text isn't showing up :( Any clue why?

Fizzlemizz 05-21-21 06:29 PM

Quote:

Originally Posted by nibsrs (Post 339219)
Hey, thank you so much! However, the text isn't showing up :( Any clue why?

You're dead? :D

It should be gold text in the middle of your screen even if it's just 0/0.

If you're comming from an initial login rather than a /reload you can change the inital text setting to the PLAYER_LOGIN event.

You can change the "UNIT_HEALTH" to "UNIT_HEALTH_FREQUENT" if your doing this in Classic (leave it as is for BCC).
Lua Code:
  1. local function UpdateHealth(self) -- Update the health text
  2.     local health = UnitHealth("player")
  3.     self.Text:SetText(health .. '/' .. self.healthMax)
  4. end
  5. local function UpdateHealthMax(self) -- Update min./max. health values
  6.     self.healthMax = UnitHealthMax("player")
  7.     UpdateHealth(self)
  8. end
  9.  
  10. local f = CreateFrame("Frame", "nibsrsHealthText", UIParent)
  11. f:SetSize(5, 4)
  12. f:SetPoint("CENTER")
  13. f.Text = f:CreateFontString()
  14. f.Text:SetFontObject(GameFontNormal)
  15. f.Text:SetPoint("CENTER")
  16. f.Text:SetJustifyH("CENTER")
  17. f.Text:SetJustifyV("CENTER")
  18.  
  19. f:SetScript("OnEvent", function(self, event, ...)
  20.     if event == "UNIT_HEALTH" then -- Fired when health changes
  21.         UpdateHealth(self)
  22.     elseif event == "PLAYER_LOGIN" or event == "UNIT_MAXHEALTH" then -- Fired when max. health changes
  23.         UpdateHealthMax(self)
  24.     end
  25. end)
  26. f:RegisterEvent("UNIT_HEALTH") -- register the events to be used
  27. f:RegisterEvent("UNIT_MAXHEALTH")
  28. f:RegisterEvent("PLAYER_LOGIN") -- Fires only once before the "PLAYER_ENTERING_WORLD" event.

nibsrs 05-21-21 06:48 PM

Quote:

Originally Posted by Fizzlemizz (Post 339220)
You're dead? :D

It should be gold text in the middle of your screen even if it's just 0/0.

If you're comming from an initial login rather than a /reload you can change the inital text setting to the PLAYER_LOGIN event.

You can change the "UNIT_HEALTH" to "UNIT_HEALTH_FREQUENT" if your doing this in Classic (leave it as is for BCC).
Lua Code:
  1. local function UpdateHealth(self) -- Update the health text
  2.     local health = UnitHealth("player")
  3.     self.Text:SetText(health .. '/' .. self.healthMax)
  4. end
  5. local function UpdateHealthMax(self) -- Update min./max. health values
  6.     self.healthMax = UnitHealthMax("player")
  7.     UpdateHealth(self)
  8. end
  9.  
  10. local f = CreateFrame("Frame", "nibsrsHealthText", UIParent)
  11. f:SetSize(5, 4)
  12. f:SetPoint("CENTER")
  13. f.Text = f:CreateFontString()
  14. f.Text:SetFontObject(GameFontNormal)
  15. f.Text:SetPoint("CENTER")
  16. f.Text:SetJustifyH("CENTER")
  17. f.Text:SetJustifyV("CENTER")
  18.  
  19. f:SetScript("OnEvent", function(self, event, ...)
  20.     if event == "UNIT_HEALTH" then -- Fired when health changes
  21.         UpdateHealth(self)
  22.     elseif event == "PLAYER_LOGIN" or event == "UNIT_MAXHEALTH" then -- Fired when max. health changes
  23.         UpdateHealthMax(self)
  24.     end
  25. end)
  26. f:RegisterEvent("UNIT_HEALTH") -- register the events to be used
  27. f:RegisterEvent("UNIT_MAXHEALTH")
  28. f:RegisterEvent("PLAYER_LOGIN") -- Fires only once before the "PLAYER_ENTERING_WORLD" event.

Sorry, it was my mistake lol Thank you so much!


All times are GMT -6. The time now is 02:23 PM.

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