Thread Tools Display Modes
10-02-14, 04:56 PM   #1
Danielps1
Guest
Posts: n/a
frame replacing

Hi,

There is a simple boolean variable which determines if some "all" debuffs are shown or only own debuffs(of the target).

So when = true then it will only show own debuffs
when = false it will show all debuffs

I want to make a modifier with the shift key to show all debuffs when the shiftkey is pressed and hide them again when shift is realeased.

Lua Code:
  1. if IsShiftKeyDown() then
  2.  cfg.aura.onlyShowPlayer = false
  3.  else
  4.  cfg.aura.onlyShowPlayer = true
  5.  end


This is my very simple solution for it which works. The problem here is though it only works on starting of the script. That is not very efficent because I would send my user into a loadingscreen.

OnUpdate should fix my problem here which will run this specific code everytime a frame gets rendered which is pretty handy and is what I want to accomplish.

So this is what I made

Lua Code:
  1. local function onUpdate(self,elapsed)
  2.  if IsShiftKeyDown() then
  3.  cfg.aura.onlyShowPlayer = false
  4.  else
  5.  cfg.aura.onlyShowPlayer = true
  6.  end
  7.  end
  8.  
  9.  local shiftdebuffs = CreateFrame("frame")
  10.  shiftdebuffs:SetScript("OnUpdate", onUpdate)


My problem is now that it doesn't work. I new to the onUpdate stuff and only copy pasted it from another addon I did which worked fine.
Right it goes straight to = false, which is only happening I think because it is the default.

thanks for the help

weird title, can't change it.

Last edited by Danielps1 : 10-05-14 at 09:55 AM.
  Reply With Quote
10-05-14, 09:56 AM   #2
Danielps1
Guest
Posts: n/a
bump

~ 10 characters ~
  Reply With Quote
10-05-14, 10:32 AM   #3
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
You OnUpdate code is ok and does work as expected.

There must be something wrong within other parts of your code.
  Reply With Quote
10-05-14, 11:04 AM   #4
Danielps1
Guest
Posts: n/a
Originally Posted by Duugu View Post
You OnUpdate code is ok and does work as expected.

There must be something wrong within other parts of your code.
Hm, thanks atleast I'm good there. Sadly the rest of the code is from ouF_Skaarj and I don't really understand all of that.
This is what I found in Skarj's code

Lua Code:
  1. if cfg.aura.target_debuffs then
  2.             local d = CreateFrame('Frame', nil, self)
  3.             d.size = 23
  4.             d.spacing = 5
  5.             d.num = cfg.aura.target_debuffs_num
  6.             d:SetPoint('BOTTOMLEFT', self, 'TOPLEFT', 0, 8)
  7.             d:SetSize(cfg.player.width, d.size)
  8.             d.initialAnchor = 'TOPLEFT'
  9.             d.onlyShowPlayer = cfg.aura.onlyShowPlayer
  10.             d.PostCreateIcon = auraIcon
  11.             d.PostUpdateIcon = PostUpdateIcon
  12.             d.CustomFilter = CustomFilter
  13.             self.Debuffs = d      
  14.         end
  Reply With Quote
10-05-14, 11:12 AM   #5
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
So you're using an unmodified version of ouF_Skaarj and just would like to add a way to show your own auras on shift key?
  Reply With Quote
10-05-14, 11:13 AM   #6
Danielps1
Guest
Posts: n/a
Originally Posted by Duugu View Post
So you're using an unmodified version of ouF_Skaarj and just would like to add a way to show your own auras on shift key?
Well I changed a lot ouf things in terms of style, but yeah basically I want to do that. Skarj is sadly not aroun d or so, not sure.
  Reply With Quote
10-05-14, 12:16 PM   #7
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
I'm not that motivated to dig into the code of ouF_Skaarj to be honest. But this you be a quick and dirty solution.

Try to replace

Lua Code:
  1. local customFilter = function(icons, unit, icon, name, rank, texture, count, dtype, duration, timeLeft, caster)
  2.     if((icons.onlyShowPlayer and icon.isPlayer) or (not icons.onlyShowPlayer and name)) then
  3.         return true
  4.     end
  5. end

in aura.lua with

Lua Code:
  1. local customFilter = function(icons, unit, icon, name, rank, texture, count, dtype, duration, timeLeft, caster)
  2.     if(((icons.onlyShowPlayer or IsShiftKeyDown()) and icon.isPlayer) or (not icons.onlyShowPlayer and name)) then
  3.         return true
  4.     end
  5. end

Didn't test this though.
  Reply With Quote
10-05-14, 12:30 PM   #8
Danielps1
Guest
Posts: n/a
Hmm, I know where you are going with this but it doesn't work. I'm not sure why
  Reply With Quote
10-05-14, 07:05 PM   #9
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
1. Never use an OnUpdate script if there's an event you can respond to instead. OnUpdate scripts run every time a new video output frame is drawn -- if you're running at 60 FPS, every OnUpdate script is getting run 60 times per second. In this case, there is an event that tells you when modifier keys are pressed or released -- MODIFIER_STATE_CHANGED.

2. Simply checking for the modifier state in the aura filter won't really work, because modifier state changes don't trigger an aura display update -- only aura changes do that.

3. I already do this in my layout; here's a standalone adaptation that will work with any oUF layout to show all auras while Shift is pressed, and restore whatever filter you normally have when it's released:

Code:
local f = CreateFrame("Frame")
f:RegisterEvent("MODIFIER_STATE_CHANGED")
f:SetScript("OnEvent", function(f, event, key, state)
	if key ~= "LSHIFT" and key ~= "RSHIFT" then
		return
	end
	local a, b
	if state == 1 then
		a, b = "CustomFilter", "__CustomFilter"
	else
		a, b = "__CustomFilter", "CustomFilter"
	end
	for i = 1, #oUF.objects do
		local object = oUF.objects[i]
		local buffs = object.Auras or object.Buffs
		if buffs and buffs[a] then
			buffs[b] = buffs[a]
			buffs[a] = nil
			buffs:ForceUpdate()
		end
		local debuffs = object.Debuffs
		if debuffs and debuffs[a] then
			debuffs[b] = debuffs[a]
			debuffs[a] = nil
			debuffs:ForceUpdate()
		end
	end
end)
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-05-14, 11:46 PM   #10
Danielps1
Guest
Posts: n/a
Okay, Thank you

But doesn't the filter from the ouF Layout apply after this one which would make the de/buffs visible/not visible again?

I just tried it and it doesn't seem to work. No Error code but as long as the debuffs are still turned on in skaarj config nothing changes.
  Reply With Quote
10-06-14, 01:42 AM   #11
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
What the code I posted does:

When you press the Shift key, it removes the CustomFilter from all Auras, Buffs, and Debuffs elements on all oUF frames, and forces them all to update. This will cause all buffs and debuffs to be displayed, since there is no filtering in place.

When you release the Shift key, it replaces whatever CustomFilter was on each Auras, Buffs, and Debuffs element on each oUF frame, and forces them all to update. This will cause buffs and debuffs to be filtered according to your CustomFilter function again.

If you use the code I posted, your CustomFilter function should apply normal (non-Shift key) filtering all the time, because it will never be run while the Shift key is pressed. If it has any checks to apply special filtering, get rid of them.

If you want something other than the functionality I just described, please be more specific about what you're looking for. Based on the description in your original post, it sounded like this is what you wanted -- show all auras on Shift, otherwise apply your filter.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-06-14, 04:12 AM   #12
Danielps1
Guest
Posts: n/a
No the functionality is exactly want I want.

But for I don't get it working. I there is no special filtering in place by Skarj as far as I have seen, so your Code should work, but it just doesn't.
  Reply With Quote
10-06-14, 04:17 AM   #13
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Yes, there is:
Code:
local CustomFilter = function(icons, ...)
    local _, icon, name, _, _, _, _, _, _, caster = ...
    local isPlayer
    if (caster == 'player' or caster == 'vechicle') then
        isPlayer = true
    end
    if((icons.onlyShowPlayer and isPlayer) or (not icons.onlyShowPlayer and name)) then
        icon.isPlayer = isPlayer
        icon.owner = caster
        return true
    end
end
Have you made any changes to that part of the code?
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-06-14, 04:53 AM   #14
Danielps1
Guest
Posts: n/a
Originally Posted by Phanx View Post
Yes, there is:
Have you made any changes to that part of the code?
I removed it earlier to try if your code works, but it doesn't forgot to mention, I tried. I just tried again without and with the code but it doesn't seem to do anything.

Also tried leaving the aurafilter in the cfg of ouf_skaarj on/off but that didn't make any change aswell, except that it still works so you can still Hide debuffs on the target with the cfg.aura.ShowOnlyPlayer
  Reply With Quote
10-06-14, 11:11 AM   #15
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Where did you put the code I gave you? Are you sure it's even running? Add some print statements to make sure:

Code:
	if state == 1 then
		print("Shift pressed, removing aura filters")
		a, b = "CustomFilter", "__CustomFilter"
	else
		print("Shift released, restoring aura filters")
		a, b = "__CustomFilter", "CustomFilter"
	end
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-06-14, 12:33 PM   #16
Danielps1
Guest
Posts: n/a
I tried aura.lua and layout.lua

both same result "Shift released, restoring aura filters"
  Reply With Quote
10-06-14, 12:51 PM   #17
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Are you on live or beta? If you're on beta, they may have changed the "state" argument passed into the event to a boolean or something else that isn't a numeric 1 for "the key is pressed".

Code:
	print("Shift changed:", type(state), state)
	if state == 1 then
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-06-14, 01:01 PM   #18
Danielps1
Guest
Posts: n/a
Originally Posted by Phanx View Post
Are you on live or beta? If you're on beta, they may have changed the "state" argument passed into the event to a boolean or something else that isn't a numeric 1 for "the key is pressed".

Code:
	print("Shift changed:", type(state), state)
	if state == 1 then
No, live servers
  Reply With Quote
10-06-14, 02:37 PM   #19
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Are you sure you don't have some third-party software messing with your keyboard? There's no way that releasing a key should indicate it's pressed. I just tested in-game and it's still passing 1/0, which I fully expected since the code was copied and pasted from my own oUF layout where it's working just fine.

Type "/etrace" in-game, press Shift, and release Shift. The mouseover the MODIFIER_STATE_CHANGED events in the window and look at arg2. It should be a numeric 1 on press, 0 on release. If it's something else please post what it is.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
10-06-14, 03:04 PM   #20
Danielps1
Guest
Posts: n/a
No works perfectly.

  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » frame replacing

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