WoWInterface

WoWInterface (http://www.wowinterface.com/forums/index.php)
-   MoP archived threads (http://www.wowinterface.com/forums/forumdisplay.php?f=162)
-   -   Killing the loss of control actionbutton cooldown (http://www.wowinterface.com/forums/showthread.php?t=45296)

zork 11-29-12 06:49 AM

Killing the loss of control actionbutton cooldown
 
Source: http://www.arenajunkies.com/topic/23...orking-method/

Lua Code:
  1. local disableLossOfControlCooldown = function()
  2.   for _, b in pairs(ActionBarActionEventsFrame.frames) do
  3.     b.cooldown:SetLossOfControlCooldown(0,0)
  4.   end
  5. end
  6.  
  7. local f = CreateFrame("Frame")
  8. f:RegisterEvent("LOSS_OF_CONTROL_ADDED")
  9. f:RegisterEvent("LOSS_OF_CONTROL_UPDATE")
  10. f:SetScript("OnEvent", disableLossOfControlCooldown)

Not sure if there is anything better. Maybe it even possible to just kill SetLossOfControlCooldown.

Vlad 11-29-12 09:04 AM

Is it triggered by an event or on the C-side? If event, just unregistered it would suffice. :P If not then you could override SetLossOfControlCooldown to simply do nothing on the action bar cooldown widgets. :)

Dridzt 11-29-12 09:26 AM

Wish I'd seen this before I uploaded a small addon.

It's not using this exact method but it's close.

@Vlad: unfortunately the red-out cooldown on the actionbars is triggered c-side, unregistering the events accomplishes nothing.

Vlad 11-29-12 09:27 AM

Why would they make this C-side when the API is lua side? ... makes no sense!

Phanx 11-29-12 04:46 PM

Couldn't you just securehook the actual SetLossOfControlCooldown method on the button metatable, like OmniCC does for SetCooldown, and turn it off every time it's turned on?

semlar 11-29-12 06:40 PM

Lua Code:
  1. local x = ActionButton1Cooldown.SetLossOfControlCooldown
  2. hooksecurefunc(getmetatable(ActionButton1Cooldown).__index, 'SetLossOfControlCooldown', function(s) x(s,0,0) end)

Still causes a cooldown shine, probably not the ideal solution.

I think replacing the function outright will end up causing taint though.

Phanx 11-29-12 08:56 PM

Wouldn't it work better to just hide the cooldown entirely:

Code:

hooksecurefunc(getmetatable(ActionButton1Cooldown).__index, 'SetLossOfControlCooldown', function(cd) cd:Hide() end)
?

semlar 11-29-12 10:04 PM

It's the same frame that handles the action button's regular cooldown, but it may be split into regions somehow. I don't know if it's possible to only hide the LoC part.

You could try just doing this, no idea if the taint will interfere with anything:
lua Code:
  1. getmetatable(ActionButton1Cooldown).__index.SetLossOfControlCooldown = function() end

Dridzt 11-30-12 03:55 AM

Just dropping it here that we do have 2-3 solutions to this already in case you didn't notice previous posts.

Not to take anything away from looking for a better solution, mostly for users coming upon the thread looking for a fix.

Among them my own little addon that's been linked further up this thread:
(it was waiting in the approval queue when I saw this post or I'd probably have used one of the existing solutions)
  • Lose Control Options Fix (only tested with default Blizz actionbars, only suppresses the red-out when you have the relevant game option unchecked)
  • Loss of Control Remover (unconditionally suppresses it, uses LibActionButton, tested with BT4, Dominos etc according to author)
  • NoRed (from ArenaJunkies, the one Zork posted about at the OP, also unconditionally removes it)

Vlad 11-30-12 06:52 AM

1. Using "Hide" would also break it if you actually have a cooldown on the button that is locked out from casting, so yeah you can't do that, but nice try Phanx.

2. Replacing it with a empty function is one possibility but the taint has to be evaluated, for now it's a possibility but not sure if it's a good one. In any case it's a good suggestion, Semlar.

3. The best one so far is simply to have the shine appear for a moment but hide the effect.

My suggestion is something like:
Code:

hooksecurefunc(getmetatable(ActionButton1.cooldown).__index, "SetLossOfControlCooldown", function(self, _, _, arg) if arg ~= true then self:SetLossOfControlCooldown(0, 0, true) end end)
The purpose is to still allow it to set a loss of control animation in specific cases, but still block out the default Blizzard once. :)

The current addons like Lose Control Options Fix and NoRed is that they use the default actionbar frames, i.e. if you have custom bars then they won't work for you. My only issue with Loss of Control Remover is that it uses a library that needs to be updated, so the more "solid" way to fix this is going for an approach like hooking the metatables or something, as it will affect all cooldown widgets. :)

Also, NoRed is front page mmochamp material, so all those using it will have a global "f" variable, hehe. :P

Dridzt 11-30-12 07:31 AM

I kinda explored those possibilities the last couple days before uploading. :o
Your suggestion alone will not work because that is not actually called nearly as often as you may think.
(that whole c-side thing we were talking about earlier)

I only tested it with default actionbars, in reality I don't know if it does or does not work with popular actionbar mods.
Are they reusing the default actionbuttons or making their own?
If they're making their own why would they replicate the red-out effect unless purposely (in which case their authors can put options for it)
If they are, my addon "should" work for them as well. (I think I'll actually install a couple to test)


All times are GMT -6. The time now is 10:13 AM.

vBulletin © 2014, Jelsoft Enterprises Ltd
©2012 ZAM Network LLC