WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   Making frame appear in combat. Hide out of combat. (https://www.wowinterface.com/forums/showthread.php?t=43607)

SRCarebear 06-30-12 02:11 PM

Making frame appear in combat. Hide out of combat.
 
I'm working on an edit of sFilter to track all general debuffs on the target. I renamed it to aFilter as I still use sFilter for personal buffs. I'm a little stuck though in trying to make the frame appear when I am only in combat.

Screenshots in combat:

http://i.imgur.com/LG565.jpg
http://i.imgur.com/Cljyl.jpg

Screenshot out of combat:

http://i.imgur.com/3UBP3.jpg

I have attempted to add some code to hide the frame out of combat and pop up for when I'm in combat but it only pops up for a second and then disappears again instantly.

I added
Code:

frame:RegisterEvent("PLAYER_REGEN_ENABLED")
frame:RegisterEvent("PLAYER_REGEN_DISABLED")

to the function, and also added

Code:

                       
if event == "PLAYER_REGEN_DISABLED" then
self:Show()
else
self:Hide()
end
end)

How do I make it appear for the whole duration of combat, and not just when I get into combat?

Phanx 07-01-12 01:52 AM

Your code is currently saying "if this event is PLAYER_REGEN_DISABLED, show this frame, but if it's any other event, hide this frame". If you have any other events registered to the frame, the frame will be hidden whenever any event that is not PLAYER_REGEN_DISABLED occurs.

There are many ways to solve this problem. With no idea what the rest of your code looks like, I can't tell you which way is "best", though, so here are several:

(1) Unregister all other events on the same frame.

(2) Modify your event handler code to explicitly check whether the fired event is PLAYER_REGEN_ENABLED before hiding the frame:

Code:

if event == "PLAYER_REGEN_DISABLED" then
        self:Show()
elseif event == "PLAYER_REGEN_ENABLED" then
        self:Hide()
end

(3) Modify your event handler code to show/hide the frame based on whether the player is currently engaged in combat, instead of based on which event fired:

Code:

if UnitAffectingCombat("player") then
        self:Show()
else
        self:Hide()
end

Finally, when posting code and asking for help with it, please:

(1) Use indentation. It's not that bad when it's only 5 lines of code, but when you're posting 100+ lines of code with no indentation, it's basically unreadable, and nobody is going to bother trying to read it.

(2) Post all of your code, or at least all of the function you're having trouble with. If you really believe your code is so precious and secret that you can't let us see anything other than the 5 lines of code you think are relevant, at least make sure you're not including random snippets like the extra "end)" at the end of yours.

SDPhantom 07-01-12 02:05 AM

Quote:

Originally Posted by Phanx (Post 257410)
(2) Modify your event handler code to explicitly check whether the fired event is PLAYER_REGEN_ENABLED before hiding the frame:

Code:

if event == "PLAYER_REGEN_DISABLED" then
        self:Show()
else
        self:Hide()
end


Should be: :rolleyes:
Code:

if event == "PLAYER_REGEN_DISABLED" then
        self:Show()
elseif event == "PLAYER_REGEN_ENABLED" then
        self:Hide()
end


SRCarebear 07-01-12 04:35 AM

Thanks for the help both of you. I actually managed to figure it out late last night with a little bit of help, just as I went to bed. It works flawlessly now, thanks a lot.


All times are GMT -6. The time now is 05:11 AM.

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